Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok
This commit is contained in:
90
archive/2026.02.18 Archive_old_mapps/brand_seeder.py.old
Executable file
90
archive/2026.02.18 Archive_old_mapps/brand_seeder.py.old
Executable file
@@ -0,0 +1,90 @@
|
||||
# /opt/docker/dev/service_finder/backend/app/workers/brand_seeder.py
|
||||
import asyncio
|
||||
import httpx
|
||||
import logging
|
||||
from sqlalchemy import text
|
||||
from app.db.session import AsyncSessionLocal
|
||||
|
||||
# Logolás beállítása a Sentinel monitorozáshoz
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s')
|
||||
logger = logging.getLogger("Smart-Seeder-v1.0.2")
|
||||
|
||||
async def seed_with_priority():
|
||||
"""
|
||||
Feltölti a catalog_discovery táblát az RDW alapján.
|
||||
Logika: Csak azokat a márkákat keressük, amikből legalább 10 db fut az utakon,
|
||||
hogy ne szemeteljük tele a katalógust egyedi barkács-járművekkel.
|
||||
"""
|
||||
|
||||
# RDW SoQL lekérdezés: Márka (merk), Típus (voertuigsoort) és Darabszám (total)
|
||||
# A szerveroldali csoportosítás és szűrés (having total >= 10) miatt villámgyors.
|
||||
RDW_URL = (
|
||||
"https://opendata.rdw.nl/resource/m9d7-ebf2.json?"
|
||||
"$select=merk,voertuigsoort,count(*)%20as%20total"
|
||||
"&$group=merk,voertuigsoort"
|
||||
"&$having=total%20>=%2010"
|
||||
)
|
||||
|
||||
logger.info("📥 Adatok lekérése az RDW-től prioritásos besoroláshoz...")
|
||||
|
||||
async with httpx.AsyncClient(timeout=120) as client:
|
||||
try:
|
||||
resp = await client.get(RDW_URL)
|
||||
if resp.status_code != 200:
|
||||
logger.error(f"❌ RDW API hiba: {resp.status_code}")
|
||||
return
|
||||
|
||||
raw_data = resp.json()
|
||||
logger.info(f"📊 {len(raw_data)} potenciális márka-kategória páros érkezett.")
|
||||
|
||||
async with AsyncSessionLocal() as db:
|
||||
for entry in raw_data:
|
||||
make = str(entry.get("merk", "")).upper().strip()
|
||||
v_kind = entry.get("voertuigsoort", "")
|
||||
|
||||
if not make:
|
||||
continue
|
||||
|
||||
# --- PRIORITÁS LOGIKA (Master Book 2.0 szerint) ---
|
||||
# 1. Személyautó (Personenauto) -> 'pending' (Azonnal feldolgozandó)
|
||||
# 2. Motor (Motorfiets) -> 'queued_motor'
|
||||
# 3. Minden más (Teher, Busz, Mezőgazdasági) -> 'queued_heavy'
|
||||
|
||||
if "Personenauto" in v_kind:
|
||||
status = 'pending'
|
||||
v_class = 'car'
|
||||
elif "Motorfiets" in v_kind:
|
||||
status = 'queued_motor'
|
||||
v_class = 'motorcycle'
|
||||
else:
|
||||
status = 'queued_heavy'
|
||||
v_class = 'truck'
|
||||
|
||||
# UPSERT Logika: Ha már létezik, de még 'pending', akkor frissítjük a státuszt,
|
||||
# de nem írjuk felül a már feldolgozott (processed) rekordokat.
|
||||
query = text("""
|
||||
INSERT INTO data.catalog_discovery (make, model, vehicle_class, source, status)
|
||||
VALUES (:make, 'ALL_VARIANTS', :v_class, 'smart_seeder_v1_0_2', :status)
|
||||
ON CONFLICT (make, model, vehicle_class)
|
||||
DO UPDATE SET
|
||||
status = CASE
|
||||
WHEN data.catalog_discovery.status = 'pending' THEN EXCLUDED.status
|
||||
ELSE data.catalog_discovery.status
|
||||
END
|
||||
WHERE data.catalog_discovery.make = EXCLUDED.make;
|
||||
""")
|
||||
|
||||
await db.execute(query, {
|
||||
"make": make,
|
||||
"v_class": v_class,
|
||||
"status": status
|
||||
})
|
||||
|
||||
await db.commit()
|
||||
logger.info("✅ Discovery lista sikeresen feltöltve és prioritizálva.")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Kritikus hiba a seeder futása közben: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(seed_with_priority())
|
||||
Reference in New Issue
Block a user