Catalog Models

Catalog API models.

Field shapes ported against ab/api/schemas/catalog.json (swagger, Tier 3) with ABConnectTools/ABConnect/api/models/catalog.py as secondary reference (Tier 4). The prior placeholder implementation had invented field names for AddCatalogRequest, UpdateCatalogRequest, and BulkInsertRequest that did not match either source — see specs/036-lotsdb-migration-prep/gap-recommendations.md.

SellerDto is a TYPE_CHECKING-only import to break the catalogsellers circular reference; _rebuild_catalog_models() at the bottom of the module does the runtime import and calls model_rebuild() on any class whose annotations need it.

class ab.api.models.catalog.CatalogDto(*, id, customerCatalogId=None, agent=None, title=None, startDate, endDate, isCompleted, **extra_data)[source]

Bases: ResponseModel

Core catalog information — parent of CatalogWithSellersDto and CatalogExpandedDto.

Parameters:
id: int
customer_catalog_id: str | None
agent: str | None
title: str | None
start_date: datetime
end_date: datetime
is_completed: bool
model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.CatalogWithSellersDto(*, id, customerCatalogId=None, agent=None, title=None, startDate, endDate, isCompleted, sellers=None, **extra_data)[source]

Bases: CatalogDto

Catalog with embedded sellers — returned by POST /Catalog and PUT /Catalog/{id}.

Parameters:
sellers: List['SellerDto'] | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.CatalogExpandedDto(*, id, customerCatalogId=None, agent=None, title=None, startDate, endDate, isCompleted, sellers=None, lots=None, **extra_data)[source]

Bases: CatalogDto

Catalog with sellers and lot summaries — returned by GET /Catalog/{id}.

Parameters:
sellers: List['SellerDto'] | None
lots: List[LotCatalogInformationDto] | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.AddCatalogRequest(*, customerCatalogId=None, agent=None, title=None, startDate, endDate, sellerIds=None)[source]

Bases: RequestModel

Body for POST /Catalog.

start_date and end_date are required per swagger (no nullable: true). All other fields are optional.

Parameters:
customer_catalog_id: str | None
agent: str | None
title: str | None
start_date: datetime
end_date: datetime
seller_ids: List[int] | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.UpdateCatalogRequest(*, customerCatalogId=None, agent=None, title=None, startDate, endDate, sellerIds=None)[source]

Bases: AddCatalogRequest

Body for PUT /Catalog/{id}. Same shape as AddCatalogRequest per swagger.

Parameters:
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.CatalogListParams(*, Id=None, CustomerCatalogId=None, Agent=None, Title=None, StartDate=None, EndDate=None, IsCompleted=None, SellerIds=None, PageSize=None, PageNumber=None)[source]

Bases: RequestModel

Query parameters for GET /Catalog.

Parameters:
  • Id (int | None)

  • CustomerCatalogId (str | None)

  • Agent (str | None)

  • Title (str | None)

  • StartDate (str | None)

  • EndDate (str | None)

  • IsCompleted (bool | None)

  • SellerIds (List[int] | None)

  • PageSize (int | None)

  • PageNumber (int | None)

id: int | None
customer_catalog_id: str | None
agent: str | None
title: str | None
start_date: str | None
end_date: str | None
is_completed: bool | None
seller_ids: List[int] | None
page_size: int | None
page_number: int | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.BulkInsertSellerRequest(*, name=None, customerDisplayId, isActive)[source]

Bases: RequestModel

Seller entry inside a bulk insert payload.

Parameters:
  • name (str | None)

  • customerDisplayId (int)

  • isActive (bool)

name: str | None
customer_display_id: int
is_active: bool
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.BulkInsertLotRequest(*, customerItemId=None, lotNumber=None, imageLinks=None, initialData=None, overridenData=None)[source]

Bases: RequestModel

Lot entry inside a bulk insert payload.

Parameters:
customer_item_id: str | None
lot_number: str | None
initial_data: LotDataDto | None
overriden_data: List[LotDataDto] | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.BulkInsertCatalogRequest(*, customerCatalogId=None, agent=None, title=None, startDate, endDate, lots=None, sellers=None)[source]

Bases: RequestModel

Catalog entry inside a bulk insert payload. Nests lots and sellers.

Parameters:
customer_catalog_id: str | None
agent: str | None
title: str | None
start_date: datetime
end_date: datetime
lots: List[BulkInsertLotRequest] | None
sellers: List[BulkInsertSellerRequest] | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.catalog.BulkInsertRequest(*, catalogs=None)[source]

Bases: RequestModel

Body for POST /Bulk/insert.

Per swagger, the top-level payload contains exactly one key — catalogs — a list of BulkInsertCatalogRequest. Each nested catalog carries its own lots and sellers. This is a nested bulk shape, not a flat list of rows.

Parameters:

catalogs (List[BulkInsertCatalogRequest] | None)

catalogs: List[BulkInsertCatalogRequest] | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].