File size: 1,148 Bytes
9d4bd7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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)})