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.
Handles: - Unwrapping Unset sentinel values - Extracting enum values - Converting nested variants/configs to counts
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.
Handles: - Unwrapping Unset sentinel values - Extracting enum values - Converting nested variants/configs to counts
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.
Handles: - Unwrapping Unset sentinel values - Extracting enum values - Converting nested variants to count
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.
Handles: - Unwrapping Unset sentinel values - Extracting nested product_or_material name - Converting config_attributes to dicts - Converting custom_fields to dicts
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.profit_margin)
print(variant_domain.get_display_name())
Source code in katana_public_api_client/domain/converters.py
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | |
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]