katana_public_api_client.domain.converters¶
katana_public_api_client.domain.converters
¶
Converters from attrs API models to Pydantic domain models.
This module provides conversion utilities to transform the generated attrs models (from the OpenAPI client) into clean Pydantic domain models optimized for ETL and data processing.
Classes¶
Functions¶
material_to_katana(material)
¶
Convert attrs Material model to Pydantic KatanaMaterial.
This function delegates to KatanaMaterial.from_attrs(), which uses the auto-generated Pydantic model's from_attrs() for UNSET conversion.
Parameters:
-
material(Material) –attrs Material model from API response
Returns:
-
KatanaMaterial–KatanaMaterial with all fields populated
Example
from katana_public_api_client.api.material import get_material
from katana_public_api_client.utils import unwrap
response = await get_material.asyncio_detailed(client=client, id=123)
material_attrs = unwrap(response)
material_domain = material_to_katana(material_attrs)
# Now use domain model features
print(material_domain.get_display_name())
print(material_domain.to_csv_row())
Source code in katana_public_api_client/domain/converters.py
materials_to_katana(materials)
¶
Convert list of attrs Material models to list of KatanaMaterial.
Parameters:
Returns:
-
list[KatanaMaterial]–List of KatanaMaterial models
Example
from katana_public_api_client.api.material import get_all_materials
from katana_public_api_client.utils import unwrap_data
response = await get_all_materials.asyncio_detailed(client=client)
materials_attrs = unwrap_data(response)
materials_domain = materials_to_katana(materials_attrs)
# Now use domain model features
batch_tracked = [m for m in materials_domain if m.batch_tracked]
Source code in katana_public_api_client/domain/converters.py
product_to_katana(product)
¶
Convert attrs Product model to Pydantic KatanaProduct.
This function delegates to KatanaProduct.from_attrs(), which uses the auto-generated Pydantic model's from_attrs() for UNSET conversion.
Parameters:
-
product(Product) –attrs Product model from API response
Returns:
-
KatanaProduct–KatanaProduct with all fields populated
Example
from katana_public_api_client.api.product import get_product
from katana_public_api_client.utils import unwrap
response = await get_product.asyncio_detailed(client=client, id=123)
product_attrs = unwrap(response)
product_domain = product_to_katana(product_attrs)
# Now use domain model features
print(product_domain.get_display_name())
print(product_domain.to_csv_row())
Source code in katana_public_api_client/domain/converters.py
products_to_katana(products)
¶
Convert list of attrs Product models to list of KatanaProduct.
Parameters:
Returns:
-
list[KatanaProduct]–List of KatanaProduct models
Example
from katana_public_api_client.api.product import get_all_products
from katana_public_api_client.utils import unwrap_data
response = await get_all_products.asyncio_detailed(client=client)
products_attrs = unwrap_data(response)
products_domain = products_to_katana(products_attrs)
# Now use domain model features
sellable = [p for p in products_domain if p.is_sellable]
Source code in katana_public_api_client/domain/converters.py
service_to_katana(service)
¶
Convert attrs Service model to Pydantic KatanaService.
This function delegates to KatanaService.from_attrs(), which uses the auto-generated Pydantic model's from_attrs() for UNSET conversion.
Parameters:
-
service(Service) –attrs Service model from API response
Returns:
-
KatanaService–KatanaService with all fields populated
Example
from katana_public_api_client.api.service import get_service
from katana_public_api_client.utils import unwrap
response = await get_service.asyncio_detailed(client=client, id=123)
service_attrs = unwrap(response)
service_domain = service_to_katana(service_attrs)
# Now use domain model features
print(service_domain.get_display_name())
print(service_domain.to_csv_row())
Source code in katana_public_api_client/domain/converters.py
services_to_katana(services)
¶
Convert list of attrs Service models to list of KatanaService.
Parameters:
Returns:
-
list[KatanaService]–List of KatanaService models
Example
from katana_public_api_client.api.service import get_all_services
from katana_public_api_client.utils import unwrap_data
response = await get_all_services.asyncio_detailed(client=client)
services_attrs = unwrap_data(response)
services_domain = services_to_katana(services_attrs)
# Now use domain model features
sellable = [s for s in services_domain if s.is_sellable]
Source code in katana_public_api_client/domain/converters.py
unwrap_unset(value, default=None)
¶
Unwrap an Unset sentinel value.
Parameters:
-
value(T | Unset) –Value that might be Unset
-
default(T | None, default:None) –Default value to return if Unset
Returns:
-
T | None–The unwrapped value, or default if value is Unset
Example
Source code in katana_public_api_client/domain/converters.py
variant_to_katana(variant)
¶
Convert attrs Variant model to Pydantic KatanaVariant.
This function delegates to KatanaVariant.from_attrs(), which uses the auto-generated Pydantic model's from_attrs() for UNSET conversion.
Parameters:
-
variant(Variant) –attrs Variant model from API response
Returns:
-
KatanaVariant–KatanaVariant with all fields populated
Example
from katana_public_api_client.api.variant import get_variant
from katana_public_api_client.utils import unwrap
response = await get_variant.asyncio_detailed(client=client, id=123)
variant_attrs = unwrap(response)
variant_domain = variant_to_katana(variant_attrs)
# Now use domain model features
print(variant_domain.get_display_name())
Source code in katana_public_api_client/domain/converters.py
variants_to_katana(variants)
¶
Convert list of attrs Variant models to list of KatanaVariant.
Parameters:
Returns:
-
list[KatanaVariant]–List of KatanaVariant models
Example
from katana_public_api_client.api.variant import get_all_variants
from katana_public_api_client.utils import unwrap_data
response = await get_all_variants.asyncio_detailed(client=client)
variants_attrs = unwrap_data(response)
variants_domain = variants_to_katana(variants_attrs)
# Now use domain model features
high_margin = [v for v in variants_domain if v.is_high_margin]