|
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)}) |