"""Fetcher: pull one or more products from kikocosmetics.com product URLs. Config JSON in admin Fetch panel: { "urls": [ "https://www.kikocosmetics.com/en-gb/p/love-fusion-24h-moisture-radiant-foundation-1-52012/" ], "market": "en-gb" } Or a single "url" / "query" for one product. """ from __future__ import annotations from kiko_enrich import fetch_kiko_product NAME = "KIKO Cosmetics (official site)" DESCRIPTION = ( "Fetch product description, details table and color variants from kikocosmetics.com. " "Upserts by sku/name — does not invent duplicate families." ) def fetch_products(config: dict): config = config or {} market = config.get("market") or "en-gb" urls = config.get("urls") rows = [] if isinstance(urls, list) and urls: for url in urls: if not url: continue rows.append(fetch_kiko_product(url=str(url), market=market)) return rows product = fetch_kiko_product( url=config.get("url"), query=config.get("query") or config.get("name"), market=market, ) return [product] def sync_stocks(config: dict, products: list): """Refresh sellable flags from KIKO for products that already have sourceUrl/sku.""" config = config or {} market = config.get("market") or "en-gb" out = [] for p in products or []: url = p.get("sourceUrl") sku = p.get("sku") if not url and not sku: continue try: fetched = fetch_kiko_product( url=url, query=p.get("name") if not url else None, market=market, ) except Exception: continue out.append( { "id": p.get("id"), "sku": fetched.get("sku") or sku, "external_id": fetched.get("externalId") or p.get("externalId"), "slug": p.get("slug"), "stock": int(fetched.get("stock") or 0), } ) return out