import re def normalise_url(url: str) -> str: url = url.strip().strip('"').rstrip("/").lower() url = re.sub(r"^https?://", "", url) url = re.sub(r"^www\.", "", url) return url def _abbreviate_owner(value: str | None) -> str: if not value: return "" value = value.strip() if not value or value.startswith("#"): return "" if value == "Ceremony of Roses": return "COR" if value == "The Orchard": return "ORCHARD" if value in ("Kings Road", "Kings Road Merch EU", "Kings Road Merch US"): return "KRM" return re.sub(r"[^A-Z0-9]+", "_", value.upper()).strip("_") def derive_schema_name(url: str, selling_country: str | None, rep_owner: str | None, merch_company: str | None) -> str: slug = normalise_url(url) if slug.endswith(".myshopify.com"): slug = slug[: -len(".myshopify.com")] slug = re.sub(r"[-.]", "_", slug).upper() owner = _abbreviate_owner(rep_owner) or _abbreviate_owner(merch_company) raw_country = (selling_country or "").strip() country = "" if raw_country.startswith("#") else raw_country.upper() parts = ["SHOPIFY"] if owner: parts.append(owner) if country: parts.append(country) parts.append(slug) return "_".join(parts).lower()