Skip to content

commerce

konigle.models.commerce

Commerce models for the Konigle SDK.

This module provides Pydantic models for e-commerce resources including products, product variants, and product images.

Product

Bases: ProductBase, TimestampedResource, IDMixin, BaseResource

Complete product resource model.

Represents a product from the API with all fields including computed values, relationships, and Active Record capabilities.

currency = Field(default=None, max_length=3, title='Currency', description='Currency code for price fields.') class-attribute instance-attribute

Currency code for price fields.

djcom_tags = Field(default_factory=list, title='Parsed Tags', description='List of tags parsed from tags field.') class-attribute instance-attribute

List of tags parsed from tags field.

handle = Field(..., title='Handle', description='URL-friendly product identifier.') class-attribute instance-attribute

URL-friendly product identifier.

has_variants = Field(..., title='Has Variants', description='Whether product has multiple variants.') class-attribute instance-attribute

Whether product has multiple variants.

image = Field(default=None, title='Image ID', description='ID of the main product image.') class-attribute instance-attribute

ID of the main product image.

original_price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Original Price', description='Original price before discount.') class-attribute instance-attribute

Original price before discount.

pathname = Field(default=None, title='Pathname', description='Full pathname of the product page') class-attribute instance-attribute

Full pathname of the product page

preview_url = Field(default=None, title='Preview URL', description='Preview URL of the product page') class-attribute instance-attribute

Preview URL of the product page

price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Price', description='Product price for single variant products.') class-attribute instance-attribute

Product price for single variant products.

product_type = Field(..., title='Product Type', description='Product category or type.') class-attribute instance-attribute

Product category or type.

published_at = Field(default=None, title='Published At', description='Product publication timestamp.') class-attribute instance-attribute

Product publication timestamp.

seo_meta = Field(default=None, title='SEO Meta', description='SEO metadata including title, description, keywords.') class-attribute instance-attribute

SEO metadata including title, description, keywords.

status = Field(..., title='Status', description='Product publication status.') class-attribute instance-attribute

Product publication status.

tags = Field(..., title='Tags', description='Comma-separated list of product tags.') class-attribute instance-attribute

Comma-separated list of product tags.

url = Field(default=None, title='URL', description='Public URL of the produc page') class-attribute instance-attribute

Public URL of the product page. Results in 404 if the product is not published.

vendor = Field(..., title='Vendor', description='Product vendor or manufacturer.') class-attribute instance-attribute

Product vendor or manufacturer.

ProductCreate

Bases: ProductBase, CreateModel

Model for creating a new product.

Includes all fields required for product creation plus optional file upload for the main product image.

currency = Field(default=None, max_length=3, title='Currency', description='Currency code for price fields.') class-attribute instance-attribute

Currency code for price fields.

handle = Field(default=None, max_length=255, title='Handle', description='URL-friendly product identifier.') class-attribute instance-attribute

URL-friendly product identifier. Will be auto-generated from title if not provided.

original_price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Original Price', description='Original price before discount.') class-attribute instance-attribute

Original price before discount.

price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Price', description='Product price for single variant products.') class-attribute instance-attribute

Product price for single variant products.

product_type = Field(default='', max_length=255, title='Product Type', description='Product category or type.') class-attribute instance-attribute

Product category or type.

seo_meta = Field(default_factory=(lambda: SEOMeta()), title='SEO Meta', description='SEO metadata including title, description, keywords.') class-attribute instance-attribute

SEO metadata including title, description, keywords.

status = Field(default=(ProductStatus.DRAFT), title='Status', description='Product publication status.') class-attribute instance-attribute

Product publication status.

tags = Field(default='', title='Tags', description='Comma-separated list of product tags.') class-attribute instance-attribute

Comma-separated list of product tags.

variants = Field(default_factory=list, title='Variants', description='List of product variants to create with the product.') class-attribute instance-attribute

List of product variants to create with the product. The options must match the product options defined above.

vendor = Field(default='', max_length=255, title='Vendor', description='Product vendor or manufacturer.') class-attribute instance-attribute

Product vendor or manufacturer.

ProductImage

Bases: ProductImageBase, TimestampedResource, IDMixin, BaseResource

Complete product image resource model.

Represents a product image from the API with all fields including computed values, file metadata, and Active Record capabilities.

height = Field(None, ge=1, title='Height', description='Image height in pixels.') class-attribute instance-attribute

Image height in pixels.

position = Field(..., ge=1, title='Position', description='Display position of the image.') class-attribute instance-attribute

Display position of the image.

url = Field(default=None, title='URL', description='The URL of the image.') class-attribute instance-attribute

URL of the image after upload.

width = Field(None, ge=1, title='Width', description='Image width in pixels.') class-attribute instance-attribute

Image width in pixels.

ProductImageCreate

Bases: ProductImageBase, CreateModel

Model for creating a new product image.

Requires either a file upload or a source URL. Must specify the parent product ID.

file = Field(..., title='Image File', description='Image file to upload.') class-attribute instance-attribute

Image file to upload.

position = Field(default=1, ge=1, title='Position', description='Display position of the image.') class-attribute instance-attribute

Display position of the image.

src = Field(default=None, title='Source URL', description='If the image is copied from URL, specify it here.') class-attribute instance-attribute

If the image is copied from URL, specify it here.

normalize_file()

Convert file paths or bytes to FileInput.

validate_image_file(v) classmethod

Ensure we're uploading an image file.

ProductImageUpdate

Bases: UpdateModel

Model for updating an existing product image.

All fields are optional for partial updates. Supports updating position, alt text, variant associations, and the image file.

alt = Field(default=None, title='Alt Text', description='Alternative text for accessibility.') class-attribute instance-attribute

Alternative text for accessibility.

position = Field(default=None, ge=1, title='Position', description='Display position of the image.') class-attribute instance-attribute

Display position of the image.

variant_ids = Field(default=None, title='Variant IDs', description='List of variant IDs this image is associated with.') class-attribute instance-attribute

List of variant IDs this image is associated with.

ProductOption

Bases: BaseModel

Model representing a product option.

Each option can have multiple values, such as size or color.

name = Field(..., max_length=255, title='Option Name', description='Name of the product option (e.g., Size, Color).') class-attribute instance-attribute

Name of the product option (e.g., Size, Color).

values = Field(..., title='Option Values', description='List of possible values for this option.') class-attribute instance-attribute

List of possible values for this option.

ProductStatus

Bases: str, Enum

Product publication status.

ProductUpdate

Bases: UpdateModel

Model for updating an existing product.

All fields are optional for partial updates. Supports updating any product field including status and image.

content = Field(default=None, title='Content', description='Body content blocks in EditrJS JSON format.') class-attribute instance-attribute

Body content blocks in EditorJS JSON format.

currency = Field(default=None, max_length=3, title='Currency', description='Currency code for price fields.') class-attribute instance-attribute

Currency code for price fields.

handle = Field(default=None, max_length=255, title='Handle', description='URL-friendly product identifier.') class-attribute instance-attribute

URL-friendly product identifier.

image = Field(default=None, title='Image ID', description='ID of the product image to set as the main image.') class-attribute instance-attribute

ID of the product image to set as the main image.

options = Field(default=None, title='Options', description='List of product option names.') class-attribute instance-attribute

List of product option names.

original_price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Original Price', description='Original price before discount.') class-attribute instance-attribute

Original price before discount.

price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Price', description='Product price for single variant products.') class-attribute instance-attribute

Product price for single variant products.

product_type = Field(default=None, max_length=255, title='Product Type', description='Product category or type.') class-attribute instance-attribute

Product category or type.

seo_meta = Field(default=None, title='SEO Meta', description='SEO metadata including title, description, keywords.') class-attribute instance-attribute

SEO metadata including title, description, keywords.

status = Field(default=None, title='Status', description='Product publication status.') class-attribute instance-attribute

Product publication status.

tags = Field(default=None, title='Tags', description='Comma-separated list of product tags.') class-attribute instance-attribute

Comma-separated list of product tags.

title = Field(default=None, min_length=1, max_length=255, title='Title', description='Product title or name.') class-attribute instance-attribute

Product title or name.

variants = Field(default=None, title='Variants', description='List of product variants to update.') class-attribute instance-attribute

List of product variants to update. Specify the right options to match existing variants.

vendor = Field(default=None, max_length=255, title='Vendor', description='Product vendor or manufacturer.') class-attribute instance-attribute

Product vendor or manufacturer.

ProductVariant

Bases: ProductVariantBase, TimestampedResource, IDMixin, BaseResource

Complete product variant resource model.

Represents a product variant from the API with all fields including computed values, pricing, inventory, and Active Record capabilities.

barcode = Field(default=None, title='Barcode', description='Product barcode or UPC.') class-attribute instance-attribute

Product barcode or UPC.

compare_at_price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Original Price', description='Original price before discount.') class-attribute instance-attribute

Original price before discount.

cost = Field(default=None, ge=0, max_digits=19, decimal_places=2, title='Cost', description='Cost of goods sold for this variant.') class-attribute instance-attribute

Cost of goods sold for this variant.

currency = Field(default=None, max_length=3, title='Currency', description='Currency code for price fields.') class-attribute instance-attribute

Currency code for price fields.

grams = Field(default=None, ge=0, title='Grams', description='Weight in grams.') class-attribute instance-attribute

Weight in grams.

handle = Field(..., title='Handle', description='URL-friendly variant identifier.') class-attribute instance-attribute

URL-friendly variant identifier.

image = Field(default=None, title='Image ID', description='ID of the variant-specific image.') class-attribute instance-attribute

ID of the variant-specific image.

inventory_policy = Field(default=None, title='Inventory Policy', description='Policy for handling out-of-stock variants.') class-attribute instance-attribute

Policy for handling out-of-stock variants.

inventory_quantity = Field(..., ge=0, title='Inventory Quantity', description='Available stock quantity.') class-attribute instance-attribute

Available stock quantity.

option1 = Field(default=None, max_length=500, title='Option 1', description='First product option value (e.g., Size).') class-attribute instance-attribute

First product option value (e.g., Size).

option2 = Field(default=None, max_length=500, title='Option 2', description='Second product option value (e.g., Color).') class-attribute instance-attribute

Second product option value (e.g., Color).

option3 = Field(default=None, max_length=500, title='Option 3', description='Third product option value (e.g., Material).') class-attribute instance-attribute

Third product option value (e.g., Material).

pathname = Field(default=None, title='Pathname', description='Full pathname of the product variant page') class-attribute instance-attribute

Full pathname of the product variant page

position = Field(..., ge=1, title='Position', description='Display position in product variant list.') class-attribute instance-attribute

Display position in product variant list.

preview_url = Field(default=None, title='Preview URL', description='Preview URL of the product variant page') class-attribute instance-attribute

Preview URL of the product variant page

product = Field(..., title='Product ID', description='ID of the parent product.') class-attribute instance-attribute

ID of the parent product.

seo_meta = Field(default=None, title='SEO Meta', description='SEO metadata for this variant.') class-attribute instance-attribute

SEO metadata for this variant.

sku = Field(default=None, title='SKU', description='Stock Keeping Unit identifier.') class-attribute instance-attribute

Stock Keeping Unit identifier.

taxable = Field(..., title='Taxable', description='Whether this variant is subject to taxes.') class-attribute instance-attribute

Whether this variant is subject to taxes.

title = Field(..., title='Title', description='Variant title or name.') class-attribute instance-attribute

Variant title or name.

url = Field(default=None, title='URL', description='Public URL of the produc variant page') class-attribute instance-attribute

Public URL of the product variant page. Results in 404 if the product is not published.

weight = Field(default=None, ge=0, title='Weight', description='Variant weight for shipping calculations.') class-attribute instance-attribute

Variant weight for shipping calculations.

weight_unit = Field(default=None, max_length=31, title='Weight Unit', description='Unit of measurement for weight.') class-attribute instance-attribute

Unit of measurement for weight.

ProductVariantCreate

Bases: CreateModel, ProductVariantBase

Model for creating a new product variant.

All fields required for creation are included. Supports setting all variant fields including pricing, inventory, and images.

barcode = Field(default=None, title='Barcode', description='Product barcode or UPC.') class-attribute instance-attribute

Product barcode or UPC.

compare_at_price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Original Price', description='Original price before discount.') class-attribute instance-attribute

Original price before discount.

cost = Field(default=None, ge=0, max_digits=19, decimal_places=2, title='Cost', description='Cost of goods sold for this variant.') class-attribute instance-attribute

Cost of goods sold for this variant.

currency = Field(default=None, max_length=3, title='Currency', description='Currency code for price fields.') class-attribute instance-attribute

Currency code for price fields.

grams = Field(default=None, ge=0, title='Grams', description='Weight in grams.') class-attribute instance-attribute

Weight in grams.

image = Field(default=None, title='Image ID', description='ID of the main cover image of the variant.') class-attribute instance-attribute

ID of the variant-specific image.

inventory_policy = Field(default='deny', title='Inventory Policy', description='Policy for handling out-of-stock variants.') class-attribute instance-attribute

Policy for handling out-of-stock variants.

inventory_quantity = Field(default=1, ge=0, title='Inventory Quantity', description='Available stock quantity.') class-attribute instance-attribute

Available stock quantity.

option1 = Field(default=None, max_length=500, title='Option 1', description='First product option value (e.g., Size).') class-attribute instance-attribute

First product option value (e.g., Size).

option2 = Field(default=None, max_length=500, title='Option 2', description='Second product option value (e.g., Color).') class-attribute instance-attribute

Second product option value (e.g., Color).

option3 = Field(default=None, max_length=500, title='Option 3', description='Third product option value (e.g., Material).') class-attribute instance-attribute

Third product option value (e.g., Material).

position = Field(default=1, ge=1, title='Position', description='Display position in product variant list.') class-attribute instance-attribute

Display position in product variant list.

seo_meta = Field(default_factory=(lambda: SEOMeta()), title='SEO Meta', description='SEO metadata for this variant.') class-attribute instance-attribute

SEO metadata for this variant.

sku = Field(default=None, title='SKU', description='Stock Keeping Unit identifier.') class-attribute instance-attribute

Stock Keeping Unit identifier.

taxable = Field(default=True, title='Taxable', description='Whether this variant is subject to taxes.') class-attribute instance-attribute

Whether this variant is subject to taxes.

title = Field(default=None, title='Title', description='Variant title or name.') class-attribute instance-attribute

Variant title or name.

weight = Field(default=None, ge=0, title='Weight', description='Variant weight for shipping calculations.') class-attribute instance-attribute

Variant weight for shipping calculations.

weight_unit = Field(default=None, max_length=31, title='Weight Unit', description='Unit of measurement for weight.') class-attribute instance-attribute

Unit of measurement for weight.

ProductVariantUpdate

Bases: UpdateModel

Model for updating an existing product variant.

All fields are optional for partial updates.

barcode = Field(default=None, title='Barcode', description='Product barcode or UPC.') class-attribute instance-attribute

Product barcode or UPC.

compare_at_price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Compare At Price', description='Compare at price for displaying discounts.') class-attribute instance-attribute

Compare at price for displaying discounts.

content = Field(default=None, title='Content', description='Variant-specific content blocks in JSON format.') class-attribute instance-attribute

Variant-specific content blocks in JSON format.

cost = Field(default=None, ge=0, max_digits=19, decimal_places=2, title='Cost', description='Cost of goods sold for this variant.') class-attribute instance-attribute

Cost of goods sold for this variant.

currency = Field(default=None, max_length=3, title='Currency', description='Currency code for price fields.') class-attribute instance-attribute

Currency code for price fields.

grams = Field(default=None, ge=0, title='Grams', description='Weight in grams.') class-attribute instance-attribute

Weight in grams.

handle = Field(default=None, max_length=255, title='Handle', description='URL-friendly variant identifier.') class-attribute instance-attribute

URL-friendly variant identifier.

image = Field(default=None, title='Image ID', description='ID of the main image of the variant.') class-attribute instance-attribute

ID of the main image of the variant.

inventory_policy = Field(default=None, max_length=255, title='Inventory Policy', description='Policy for handling out-of-stock variants.') class-attribute instance-attribute

Policy for handling out-of-stock variants.

inventory_quantity = Field(default=None, ge=0, title='Inventory Quantity', description='Available stock quantity.') class-attribute instance-attribute

Available stock quantity.

position = Field(default=None, ge=1, title='Position', description='Display position in product variant list.') class-attribute instance-attribute

Display position in product variant list.

price = Field(default=None, gt=0, max_digits=19, decimal_places=2, title='Price', description='Variant selling price.') class-attribute instance-attribute

Variant selling price.

seo_meta = Field(default=None, title='SEO Meta', description='SEO metadata for this variant.') class-attribute instance-attribute

SEO metadata for this variant.

sku = Field(default=None, title='SKU', description='Stock Keeping Unit identifier.') class-attribute instance-attribute

Stock Keeping Unit identifier.

tax_code = Field(default=None, title='Tax Code', description='Tax classification code.') class-attribute instance-attribute

Tax classification code.

taxable = Field(default=None, title='Taxable', description='Whether this variant is subject to taxes.') class-attribute instance-attribute

Whether this variant is subject to taxes.

title = Field(default=None, max_length=255, title='Title', description='Variant title or name.') class-attribute instance-attribute

Variant title or name.

weight = Field(default=None, ge=0, title='Weight', description='Variant weight for shipping calculations.') class-attribute instance-attribute

Variant weight for shipping calculations.

weight_unit = Field(default=None, max_length=31, title='Weight Unit', description='Unit of measurement for weight.') class-attribute instance-attribute

Unit of measurement for weight.

TimestampedResource

Bases: BaseModel

Timestamped resource model for commerce resources.

Provides the djshopify timestamp fields that are common across products, variants, and images.

created_at = Field(default=None, title='Created At', description='Timestamp when the resource was created.') class-attribute instance-attribute

Created timestamp of the resource.

updated_at = Field(default=None, title='Updated At', description='Timestamp when the resource was last updated in the source system.') class-attribute instance-attribute

Last updated timestamp of the resource.