ebay_client/examples/inventory_publish_flow.py

100 lines
No EOL
3.1 KiB
Python

from __future__ import annotations
import os
from ebay_client import EbayClient
from ebay_client.core.auth.models import EbayOAuthConfig
from ebay_client.generated.inventory.models import (
Amount,
Availability,
EbayOfferDetailsWithKeys,
InventoryItem,
ListingPolicies,
PricingSummary,
Product,
ShipToLocationAvailability,
)
def require_env(name: str) -> str:
value = os.environ.get(name)
if not value:
raise RuntimeError(f"Environment variable {name} is required")
return value
def build_client() -> EbayClient:
oauth_config = EbayOAuthConfig(
client_id=require_env("EBAY_CLIENT_ID"),
client_secret=require_env("EBAY_CLIENT_SECRET"),
default_scopes=["https://api.ebay.com/oauth/api_scope/sell.inventory"],
)
return EbayClient(oauth_config)
def build_inventory_item() -> InventoryItem:
return InventoryItem(
condition="NEW",
availability=Availability(
shipToLocationAvailability=ShipToLocationAvailability(quantity=int(os.environ.get("EBAY_AVAILABLE_QUANTITY", "1")))
),
product=Product(
title=require_env("EBAY_ITEM_TITLE"),
description=require_env("EBAY_ITEM_DESCRIPTION"),
imageUrls=[require_env("EBAY_ITEM_IMAGE_URL")],
aspects='{"Brand":["Demo Brand"],"Type":["Demo Item"]}',
),
)
def build_offer_payload(sku: str) -> EbayOfferDetailsWithKeys:
return EbayOfferDetailsWithKeys(
sku=sku,
marketplaceId=os.environ.get("EBAY_MARKETPLACE_ID", "EBAY_US"),
format="FIXED_PRICE",
availableQuantity=int(os.environ.get("EBAY_AVAILABLE_QUANTITY", "1")),
categoryId=require_env("EBAY_CATEGORY_ID"),
merchantLocationKey=require_env("EBAY_MERCHANT_LOCATION_KEY"),
listingDescription=os.environ.get("EBAY_LISTING_DESCRIPTION") or require_env("EBAY_ITEM_DESCRIPTION"),
listingDuration="GTC",
listingPolicies=ListingPolicies(
fulfillmentPolicyId=require_env("EBAY_FULFILLMENT_POLICY_ID"),
paymentPolicyId=require_env("EBAY_PAYMENT_POLICY_ID"),
returnPolicyId=require_env("EBAY_RETURN_POLICY_ID"),
),
pricingSummary=PricingSummary(
price=Amount(
currency=os.environ.get("EBAY_CURRENCY", "USD"),
value=require_env("EBAY_PRICE"),
)
),
)
def main() -> None:
client = build_client()
sku = require_env("EBAY_SKU")
content_language = os.environ.get("EBAY_CONTENT_LANGUAGE", "en-US")
item_result = client.inventory.create_or_replace_inventory_item(
sku,
build_inventory_item(),
content_language=content_language,
)
print("inventory_item_warnings:", item_result.warnings)
offer = client.inventory.create_offer(
build_offer_payload(sku),
content_language=content_language,
)
print("offer_id:", offer.offerId)
if not offer.offerId:
raise RuntimeError("create_offer did not return an offerId")
published = client.inventory.publish_offer(offer.offerId)
print("listing_id:", published.listingId)
if __name__ == "__main__":
main()