**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
```
```python
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
# SSO
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
# SSO
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# ...
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# ...
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
# Tecton
First, we add a new wedge config to the extension:
```python
WEDGE_ADDRESS_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a custom WedgeAddressConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
First, we create our custom step:
```python
import json
from q2_sdk.core.install_steps.base import InstallStep, InstallStepAttribute
from q2_sdk.hq.db.wedge_address import WedgeAddress
class WedgeAddressConfig(InstallStep):
def __init__(self, short_name: str, config_name: str, config_value: str, **kwargs):
super().__init__(**kwargs)
self.short_name = InstallStepAttribute(short_name)
self.config_name = InstallStepAttribute(config_name)
self.config_value = InstallStepAttribute(config_value)
async def install(self) -> None:
wedge_address_dbo = WedgeAddress(self.logger)
wedge_address = await wedge_address_dbo.get_by_name(
name=self.short_name.value
)
config = json.loads(
wedge_address.Config.pyval
)
config[self.config_name.value] = self.config_value.value
await wedge_address_dbo.update(
wedge_address_type_name=self.short_name.value,
config=config
)
```
Then, we wire it up in the DBPlan:
```python
# db_plan.py
from q2_sdk.core.configuration import settings
# [...]
self.wedge_address_configs = [
WedgeAddressConfig(
short_name='foodbard',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba
)
]
```
We can now access the ABA in our extension code like any other wedge config:
```python
# extension.py
async def default(self):
return self.get_tecton_form(
f'Configured ABA: {self.db_config["aba"]}',
)
```
# SSO
First, we add a new vendor config to the extension:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
# Tecton
First, we add a new wedge config to the extension:
```python
WEDGE_ADDRESS_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a custom WedgeAddressConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
First, we create our custom step:
```python
import json
from q2_sdk.core.install_steps.base import InstallStep, InstallStepAttribute
from q2_sdk.hq.db.wedge_address import WedgeAddress
class WedgeAddressConfig(InstallStep):
def __init__(self, short_name: str, config_name: str, config_value: str, **kwargs):
super().__init__(**kwargs)
self.short_name = InstallStepAttribute(short_name)
self.config_name = InstallStepAttribute(config_name)
self.config_value = InstallStepAttribute(config_value)
async def install(self) -> None:
wedge_address_dbo = WedgeAddress(self.logger)
wedge_address = await wedge_address_dbo.get_by_name(
name=self.short_name.value
)
config = json.loads(
wedge_address.Config.pyval
)
config[self.config_name.value] = self.config_value.value
await wedge_address_dbo.update(
wedge_address_type_name=self.short_name.value,
config=config
)
```
Then, we wire it up in the DBPlan:
```python
# db_plan.py
from q2_sdk.core.configuration import settings
# [...]
self.wedge_address_configs = [
WedgeAddressConfig(
short_name='foodbard',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba
)
]
```
We can now access the ABA in our extension code like any other wedge config:
```python
# extension.py
async def default(self):
return self.get_tecton_form(
f'Configured ABA: {self.db_config["aba"]}',
)
```
# SSO
First, we add a new vendor config to the extension:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
```
```python
# db_plan.py
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
```
```python
# db_plan.py
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
First, we add a new vendor config to the extension:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
First, we add a new vendor config to the extension:
```python
# extension.py
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
# db_plan.py
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
# [...]
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
# extension.py
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```python
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```python
from q2_sdk.core.configuration import settings
from q2_sdk.core.install_steps import db_plan
from q2_sdk.core.install_steps.vendor_config import ConfigDataType
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```python
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
**SSO**
First, we add a new vendor config to the SSO:
```
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```
How do I identify the FI in a multitenant extension?
**SSO**
First, we add a new vendor config to the SSO:
```
VENDOR_CONFIGS = {
'aba': 'AUTO_POPULATED'
}
```
Next, we need to set the value. While the ABA isn't populated at runtime, it is populated at install time. This allows us to automatically populate it using a VendorConfig step of the DBPlan so it doesn't have to be manually populated. (This is why we defaulted the value to `AUTO_POPULATED`; we don't want to cause confusion at install time)
```
self.vendor_config = [
db_plan.VendorConfig(
vendor_name='your_sso_name',
config_name='aba',
config_value=settings.HQ_CREDENTIALS.aba,
data_type=ConfigDataType.String
)
]
```
We can now access the ABA in our extension code like any other vendor config:
```
async def default(self):
return Q2SSOResponse(
ResponseType.HTML,
response=f'Configured ABA: {self.vendor_configs["aba"]}'
)
```