from datetime import datetime from tortoise.transactions import in_transaction from App.routers.tasks.models import ImportTask from .models import UTTFund, UTTFundData from .service import fetch_all_utt_data, parse_utt_api_row async def run_utt_import_task(task_id: int): try: await ImportTask.filter(id=task_id).update(status="running") raw_data = await fetch_all_utt_data() if not raw_data: await ImportTask.filter(id=task_id).update(status="failed", details={"error": "No data"}) return for row in raw_data: symbol = row["internal_name"] name = row["scheme_name"] fund, _ = await UTTFund.get_or_create(symbol=symbol, defaults={"name": name}) parsed = parse_utt_api_row(row) exists = await UTTFundData.exists(fund=fund, date=parsed["date"]) if not exists: await UTTFundData.create(fund=fund, **parsed) await ImportTask.filter(id=task_id).update(status="completed") except Exception as e: await ImportTask.filter(id=task_id).update(status="failed", details={"error": str(e)})