SafeBite/update_bakery_dairy.py
Bruno Charest 173f9a6d0b feat: expand catalog seed data with comprehensive multi-domain item library covering 11 domains and 1000+ items with French/English aliases
- 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
2026-04-29 13:25:05 -04:00

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']}")