Spaces:
Running
Running
| 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)}) |