Spaces:
Runtime error
Runtime error
Download test_server.py from KassimYassin/palate: direct link, hf CLI and curl.
- Browser
- Download file 8.32 kB
-
https://huggingface.co/spaces/KassimYassin/palate/resolve/main/test_server.py
- Command line
-
hf download hf://spaces/KassimYassin/palate/test_server.py
-
curl -L -o test_server.py https://huggingface.co/spaces/KassimYassin/palate/resolve/main/test_server.py
8.32 kB
| import json | |
| import urllib.request | |
| import sys | |
| if sys.platform == "win32" and hasattr(sys.stdout, "reconfigure"): | |
| sys.stdout.reconfigure(encoding="utf-8") | |
| def test_endpoints(): | |
| print("==================================================") | |
| print(" PALATE GLOBAL MULTI-CITY PILOT VERIFICATION") | |
| print("==================================================") | |
| # 1. Test /api/cities | |
| print("\n1. Testing /api/cities...") | |
| with urllib.request.urlopen("http://localhost:3050/api/cities") as resp: | |
| cities = json.loads(resp.read().decode()) | |
| print(f" Indexed Global Cities: {len(cities)}") | |
| for c in cities: | |
| print(f" - {c['flag']} {c['name']} ({c['country']}): {c['total_eateries']} total, {c['authentic_eateries']} authentic, {c['craft_artisans_detected']} craft artisans") | |
| assert 'dining_guide' in c, f"Missing dining_guide in city {c['name']}" | |
| assert 'water_norm' in c['dining_guide'], f"Missing water_norm in {c['name']}" | |
| city_ids = [c["id"] for c in cities] | |
| assert "amsterdam" in city_ids | |
| assert "dubai" in city_ids | |
| assert "istanbul" in city_ids | |
| # 2. Test Amsterdam | |
| print("\n2. Testing Amsterdam (/api/stats?city=amsterdam & search)...") | |
| with urllib.request.urlopen("http://localhost:3050/api/stats?city=amsterdam") as resp: | |
| stats = json.loads(resp.read().decode()) | |
| print(f" Amsterdam Total: {stats['total_eateries_indexed']}") | |
| print(f" Independent: {stats['independent_artisans']}") | |
| print(f" Celiac Safe: {stats['celiac_safe_kitchens']}") | |
| print(f" Scratch Kitchens: {stats['scratch_kitchens']}") | |
| print(f" Tap Water: {stats['tap_water_welcoming']}") | |
| assert stats["total_eateries_indexed"] > 4500 | |
| assert stats["google_api_cost"] == "$0.00" | |
| with urllib.request.urlopen("http://localhost:3050/api/taxonomy?city=amsterdam") as resp: | |
| tax_ams = json.loads(resp.read().decode()) | |
| assert 'dining_guide' in tax_ams | |
| print(f" Amsterdam Dining Guide verified: {tax_ams['dining_guide']['water_norm'][:60]}...") | |
| with urllib.request.urlopen("http://localhost:3050/api/search?city=amsterdam&q=shawarma&diet=halal") as resp: | |
| results = json.loads(resp.read().decode()) | |
| print(f" Found {len(results)} Halal shawarma results in Amsterdam.") | |
| top = results[0] | |
| print(f" Top Pick: {top['name']} ({top['quality_score']} pts)") | |
| assert any("Halal" in d for d in top.get("dietary_badges", [])) | |
| # 3. Test Dubai Pilot (Calibrated Data) | |
| print("\n3. Testing Dubai Pilot (/api/stats?city=dubai & search)...") | |
| with urllib.request.urlopen("http://localhost:3050/api/stats?city=dubai") as resp: | |
| stats_dxb = json.loads(resp.read().decode()) | |
| print(f" Dubai Total Eateries: {stats_dxb['total_eateries_indexed']}") | |
| print(f" Craft Artisans: {stats_dxb['craft_artisans_detected']}") | |
| print(f" Independent Artisans: {stats_dxb['independent_artisans']}") | |
| print(f" Celiac Safe Kitchens: {stats_dxb['celiac_safe_kitchens']} (Dedicated Verified Facilities)") | |
| print(f" Scratch Kitchens: {stats_dxb['scratch_kitchens']} (Stone Ovens & Roasters)") | |
| print(f" Tap Water Welcoming: {stats_dxb['tap_water_welcoming']}") | |
| assert stats_dxb["total_eateries_indexed"] >= 800 | |
| assert stats_dxb["independent_artisans"] >= 400 | |
| assert stats_dxb["celiac_safe_kitchens"] == 1, "Only verified dedicated GF facilities should qualify" | |
| with urllib.request.urlopen("http://localhost:3050/api/taxonomy?city=dubai") as resp: | |
| tax_dxb = json.loads(resp.read().decode()) | |
| assert 'dining_guide' in tax_dxb | |
| print(f" Dubai Dining Guide verified: {tax_dxb['dining_guide']['water_norm'][:60]}...") | |
| facet_ids = [f['id'] for f in tax_dxb['row2_facets']] | |
| assert 'water' not in facet_ids or stats_dxb['tap_water_welcoming'] > 0 | |
| with urllib.request.urlopen("http://localhost:3050/api/search?city=dubai&q=mandi&limit=5") as resp: | |
| results_mandi = json.loads(resp.read().decode()) | |
| print(f" Dubai Mandi Search: Found {len(results_mandi)} spots.") | |
| for r in results_mandi[:3]: | |
| print(f" - [{r['quality_score']} pts] {r['name']} ({r.get('neighborhood', '')}): {r.get('craft_badges', [])}") | |
| assert len(results_mandi) > 0 | |
| # 4. Test Istanbul Pilot (Calibrated Data) | |
| print("\n4. Testing Istanbul Pilot (/api/stats?city=istanbul & search)...") | |
| with urllib.request.urlopen("http://localhost:3050/api/stats?city=istanbul") as resp: | |
| stats_ist = json.loads(resp.read().decode()) | |
| print(f" Istanbul Total Eateries: {stats_ist['total_eateries_indexed']}") | |
| print(f" Craft Artisans: {stats_ist['craft_artisans_detected']}") | |
| print(f" Independent Artisans: {stats_ist['independent_artisans']}") | |
| print(f" Celiac Safe Kitchens: {stats_ist['celiac_safe_kitchens']} (Verified Certified Dedicated Facility)") | |
| print(f" Scratch Kitchens: {stats_ist['scratch_kitchens']} (Stone Ovens, Mangals, Esnaf)") | |
| print(f" Tap Water Welcoming: {stats_ist['tap_water_welcoming']} (Honest 0 - Bottled Spring Water Norm)") | |
| assert stats_ist["total_eateries_indexed"] >= 900 | |
| assert stats_ist["independent_artisans"] >= 200 | |
| assert stats_ist["celiac_safe_kitchens"] == 1, "Glutensiz Ada verified celiac facility" | |
| assert stats_ist["tap_water_welcoming"] == 0, "Istanbul uses bottled spring water norm" | |
| with urllib.request.urlopen("http://localhost:3050/api/taxonomy?city=istanbul") as resp: | |
| tax_ist = json.loads(resp.read().decode()) | |
| assert 'dining_guide' in tax_ist | |
| facet_ids_ist = [f['id'] for f in tax_ist['row2_facets']] | |
| assert 'water' not in facet_ids_ist, "Tap water with 0 count should be omitted" | |
| assert 'celiac' in facet_ids_ist, "Celiac with 1 count should be included" | |
| with urllib.request.urlopen("http://localhost:3050/api/search?city=istanbul&q=doner&limit=5") as resp: | |
| results_doner = json.loads(resp.read().decode()) | |
| print(f" Istanbul Döner Search: Found {len(results_doner)} spots.") | |
| for r in results_doner[:3]: | |
| print(f" - [{r['quality_score']} pts] {r['name']} ({r.get('neighborhood', '')}): {r.get('craft_badges', [])}") | |
| assert len(results_doner) > 0 | |
| # 5. Test 5 New Scalable Global Signals | |
| print("\n5. Testing 5 Scalable Global Signals...") | |
| with urllib.request.urlopen("http://localhost:3050/api/search?city=istanbul&q=kebab&limit=20") as resp: | |
| results = json.loads(resp.read().decode()) | |
| result_ids = [r['id'] for r in results] | |
| assert 'ist_ghost_dark_kitchen_1' not in result_ids, "Ghost dark kitchen should be excluded from discovery" | |
| print(" ✓ Signal 1 (Ghost Kitchen Exclusion): Cloud dark kitchens successfully filtered from discovery") | |
| has_habitat = any("Resident Food Habitat" in b for r in results for b in r.get('craft_badges', [])) | |
| print(f" ✓ Signal 2 (Urban Food Habitat Matrix): Verified neighbor density detection ({has_habitat})") | |
| has_rhythm = any("Artisan Shift Rhythm" in b or "Daily Batch" in b for r in results for b in r.get('craft_badges', [])) | |
| print(f" ✓ Signal 3 (Operational Shift Rhythm): Verified shift discipline detection ({has_rhythm})") | |
| with urllib.request.urlopen("http://localhost:3050/api/search?city=dubai&q=burger&limit=20") as resp: | |
| results_dxb = json.loads(resp.read().decode()) | |
| dxb_ids = [r['id'] for r in results_dxb] | |
| assert 'dxb_ghost_cloud_1' not in dxb_ids, "Dubai ghost kitchen should be excluded from discovery" | |
| print(" ✓ Signal 4 (Virtual Brand Filter): Dubai Kitopi dark kitchen excluded") | |
| has_digital = any((r.get('website') or '').endswith('.ae') for r in results_dxb) | |
| print(f" ✓ Signal 5 (Digital Independence Score): Custom country-level domains verified ({has_digital})") | |
| print("\n=======================================================") | |
| print("ALL MULTI-CITY TESTS & 5 GLOBAL SIGNALS PASSED!") | |
| print("=======================================================") | |
| if __name__ == "__main__": | |
| test_endpoints() | |