- Expand from 418 to 3817 lines with detailed item definitions across grocery, pharmacy, hardware, technology, clothing, home, pets, auto, leisure, cleaning, gifts, and office domains - Add extensive French item names with English aliases for bilingual search support - Include emoji icons, color codes, sort orders, and tags for all domains, categories, and items - Add specialized
210 lines
8.1 KiB
Python
210 lines
8.1 KiB
Python
import json, re, unicodedata
|
|
|
|
def slugify(name):
|
|
s = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode('ascii').lower()
|
|
s = re.sub(r'[^a-z0-9\s]', '', s)
|
|
s = s.strip().replace(' ', '_')
|
|
return s
|
|
|
|
# Items à ajouter
|
|
bakery_items = [
|
|
("Bagel briana", "bagel", "🥯"),
|
|
("Bagels", "bagel", "🥯"),
|
|
("Baguette", "pain", "🥖"),
|
|
("Biscuits breton sans gluten", "biscuit", "🍪"),
|
|
("Biscuits Feuille D'Érable", "biscuit", "🍁"),
|
|
("Biscuits sans gluten", "biscuit", "🍪"),
|
|
("Biscuits swiss", "biscuit", "🍪"),
|
|
("Bread", "pain", "🍞"),
|
|
("Buns", "pain", "🍞"),
|
|
("Crispbread", "biscuit", "🍘"),
|
|
("Croissant", "viennoiserie", "🥐"),
|
|
("Croûte à tarte", "patisserie", "🥧"),
|
|
("Dinner Rolls", "pain", "🍞"),
|
|
("Donuts", "patisserie", "🍩"),
|
|
("Fond de tarte", "patisserie", "🥧"),
|
|
("Galette tortilla", "pain", "🌯"),
|
|
("Gâteau mille feuilles", "patisserie", "🍰"),
|
|
("Gaufres", "patisserie", "🧇"),
|
|
("Muffins", "patisserie", "🧁"),
|
|
("Muffins Anglais", "pain", "🥯"),
|
|
("Pain Baguette", "pain", "🥖"),
|
|
("Pain Blanc", "pain", "🍞"),
|
|
("Pain Blanc Sans Lactose", "pain", "🍞"),
|
|
("Pain Bon Matin", "pain", "🍞"),
|
|
("Pain Briana", "pain", "🍞"),
|
|
("Pain brun", "pain", "🍞"),
|
|
("Pain burgers", "pain", "🍔"),
|
|
("Pain burgers sans gluten", "pain", "🍔"),
|
|
("Pain Croûte", "pain", "🍞"),
|
|
("Pain croûté sans gluten", "pain", "🍞"),
|
|
("Pain hamburger", "pain", "🍔"),
|
|
("Pain hamburger sans gluten", "pain", "🍔"),
|
|
("Pain Hot Dog", "pain", "🌭"),
|
|
("Pain Italien", "pain", "🥖"),
|
|
("Pain Sans Gluten", "pain", "🍞"),
|
|
("Pain Sans Lactose", "pain", "🍞"),
|
|
("Pain Sous Marin", "pain", "🥖"),
|
|
("Pains Grand Mère", "pain", "🍞"),
|
|
("Pancakes mix", "patisserie", "🥞"),
|
|
("Petit Pain Sandwich", "pain", "🥪"),
|
|
("Petit Pain Sous Marin", "pain", "🥖"),
|
|
("Pie", "patisserie", "🥧"),
|
|
("Pizza dough", "patisserie", "🍕"),
|
|
("Pizza sans gluten", "patisserie", "🍕"),
|
|
("Puff pastry", "patisserie", "🥐"),
|
|
("Pumpkin Pie", "patisserie", "🥧"),
|
|
("Rolls", "pain", "🍞"),
|
|
("Scones", "patisserie", "🧁"),
|
|
("Sliced bread", "pain", "🍞"),
|
|
("Toast", "pain", "🍞"),
|
|
("Toast melba", "pain", "🍞"),
|
|
("Tortilla", "pain", "🌯"),
|
|
("Tortillas", "pain", "🌯"),
|
|
("Vol au vent", "patisserie", "🥐"),
|
|
("Waffles", "patisserie", "🧇"),
|
|
]
|
|
|
|
dairy_items = [
|
|
# Beurres, margarines, crèmes
|
|
("Beurre Sans Lactose", "beurre", "🧈"),
|
|
("Butter", "beurre", "🧈"),
|
|
("Margarine", "beurre", "🧈"),
|
|
("Cream", "creme", "🥛"),
|
|
("Cream cheese", "fromage", "🧀"),
|
|
("Crème 10%", "creme", "🥛"),
|
|
("Crème à café", "creme", "🥛"),
|
|
("Creme fraiche", "creme", "🥛"),
|
|
("Crème Glacée", "creme", "🍨"),
|
|
("Crème glacée Sans Lactose", "creme", "🍨"),
|
|
("Crème Glacée Sans Lactose Au Chocolat", "creme", "🍨"),
|
|
("Crème Sans Lactose", "creme", "🥛"),
|
|
("Crème Sure", "creme", "🥛"),
|
|
("Sour cream", "creme", "🥛"),
|
|
# Fromages
|
|
("Blue cheese", "fromage", "🧀"),
|
|
("Brie", "fromage", "🧀"),
|
|
("Cheddar", "fromage", "🧀"),
|
|
("Cheese", "fromage", "🧀"),
|
|
("Cottage cheese", "fromage", "🧀"),
|
|
("Crotte De Fromage", "fromage", "🧀"),
|
|
("Demi Lune", "fromage", "🧀"),
|
|
("Feta", "fromage", "🧀"),
|
|
("Fondue Fromage", "fromage", "🧀"),
|
|
("Frite du petit Québec", "fromage", "🧀"),
|
|
("Fromage", "fromage", "🧀"),
|
|
("Fromage à tartiner", "fromage", "🧀"),
|
|
("Fromage Briana", "fromage", "🧀"),
|
|
("Fromage chèvre", "fromage", "🧀"),
|
|
("Fromage Chèvre Confiture", "fromage", "🧀"),
|
|
("Fromage Cottage", "fromage", "🧀"),
|
|
("fromage cottage sans lactose", "fromage", "🧀"),
|
|
("Fromage de chèvre", "fromage", "🧀"),
|
|
("Fromage Déjà Rappé", "fromage", "🧀"),
|
|
("Fromage en grains", "fromage", "🧀"),
|
|
("fromage en tranches", "fromage", "🧀"),
|
|
("Fromage Mozzarella", "fromage", "🧀"),
|
|
("Fromage Philadelphia", "fromage", "🧀"),
|
|
("Fromage Philadelphia sans lactose", "fromage", "🧀"),
|
|
("Fromage Quick Quick", "fromage", "🧀"),
|
|
("Fromage Rapé Briana", "fromage", "🧀"),
|
|
("Fromage rapé sans lactose", "fromage", "🧀"),
|
|
("Fromage Riviera", "fromage", "🧀"),
|
|
("Fromage Sans Lactose", "fromage", "🧀"),
|
|
("Fromage suisse", "fromage", "🧀"),
|
|
("Fromage tex mex", "fromage", "🧀"),
|
|
("Fromage Vache Qui Rit", "fromage", "🧀"),
|
|
("Gorgonzola", "fromage", "🧀"),
|
|
("Grated cheese", "fromage", "🧀"),
|
|
("Grilled cheese", "fromage", "🧀"),
|
|
("Mascarpone", "fromage", "🧀"),
|
|
("Mozzarella", "fromage", "🧀"),
|
|
("Parmesan", "fromage", "🧀"),
|
|
("Parmesan sans lactose", "fromage", "🧀"),
|
|
("Quark", "fromage", "🧀"),
|
|
("Ricotta", "fromage", "🧀"),
|
|
# Laits et laits végétaux
|
|
("lait", "laitier", "🥛"),
|
|
("Lait avoine", "laitier", "🥛"),
|
|
("Lait avoine lunch", "laitier", "🥛"),
|
|
("Lait avoine lunch chocolat", "laitier", "🥛"),
|
|
("Lait Chocolat", "laitier", "🥛"),
|
|
("Lait Chocolat Lunch", "laitier", "🥛"),
|
|
("Lait Chocolat Sans Lactose", "laitier", "🥛"),
|
|
("Lait condensé coco", "laitier", "🥛"),
|
|
("Lait D'amande", "laitier", "🥛"),
|
|
("Lait Sans Lactose", "laitier", "🥛"),
|
|
("Lait Soya Lunch", "laitier", "🥛"),
|
|
("Lait Soya Sensationnel Nature", "laitier", "🥛"),
|
|
("Milk", "laitier", "🥛"),
|
|
("Soy Milk", "laitier", "🥛"),
|
|
# Yogourts
|
|
("Soy yogurt", "yogourt", "🥣"),
|
|
("Yogourt iogo Vanille", "yogourt", "🥣"),
|
|
("Yogourt logo vanille sans lactose", "yogourt", "🥣"),
|
|
("Yogourt Sans Lactose", "yogourt", "🥣"),
|
|
("Yogurt", "yogourt", "🥣"),
|
|
]
|
|
|
|
with open('app/src/main/assets/catalog_seed.json', 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
data['version'] = 3
|
|
|
|
for domain in data['domains']:
|
|
if domain.get('domainId') != 'grocery':
|
|
continue
|
|
for cat in domain.get('categories', []):
|
|
cat_id = cat.get('categoryId')
|
|
existing_names = {i['name'].lower() for i in cat.get('items', [])}
|
|
existing_ids = {i['itemId'] for i in cat.get('items', [])}
|
|
|
|
if cat_id == 'bakery':
|
|
new_items = []
|
|
for name, tag, emoji in bakery_items:
|
|
if name.lower() in existing_names:
|
|
continue
|
|
item_id = slugify(name)
|
|
# éviter doublons d'itemId
|
|
base_id = item_id
|
|
suffix = 1
|
|
while item_id in existing_ids:
|
|
item_id = f"{base_id}_{suffix}"
|
|
suffix += 1
|
|
existing_ids.add(item_id)
|
|
new_items.append({
|
|
"itemId": item_id,
|
|
"name": name,
|
|
"emoji": emoji,
|
|
"tags": tag
|
|
})
|
|
cat['items'] = cat.get('items', []) + new_items
|
|
print(f"Bakery: added {len(new_items)} items, total {len(cat['items'])}")
|
|
|
|
elif cat_id == 'dairy':
|
|
new_items = []
|
|
for name, tag, emoji in dairy_items:
|
|
if name.lower() in existing_names:
|
|
continue
|
|
item_id = slugify(name)
|
|
base_id = item_id
|
|
suffix = 1
|
|
while item_id in existing_ids:
|
|
item_id = f"{base_id}_{suffix}"
|
|
suffix += 1
|
|
existing_ids.add(item_id)
|
|
new_items.append({
|
|
"itemId": item_id,
|
|
"name": name,
|
|
"emoji": emoji,
|
|
"tags": tag
|
|
})
|
|
cat['items'] = cat.get('items', []) + new_items
|
|
print(f"Dairy: added {len(new_items)} items, total {len(cat['items'])}")
|
|
|
|
with open('app/src/main/assets/catalog_seed.json', 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, ensure_ascii=False, indent=0, separators=(',', ':'))
|
|
f.write('\n')
|
|
|
|
print(f"Done, version={data['version']}")
|