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.