File size: 1,455 Bytes
2700879
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from CrawDag.models import TaskHandle, DataExchange, News
from CrawDag.saving import SavingTask
from CrawDag.saving.SavingMethod import MongoDataLake
import time
import requests
from dotenv import load_dotenv
import os

load_dotenv()

class SendingTask(TaskHandle):
    task_ids = None
    key = 'send_news'

    def __init__(self, task_ids: str) -> None:
        super().__init__()
        SendingTask.task_ids = task_ids
        self.__maxRetry = 4
        self.__delay = 15

    def execute(self, **context: any):
        dataExchange = DataExchange(context['ti'])
        listNewsId = dataExchange.pull(SavingTask.task_ids, SavingTask.key)

        for attempt in range(self.__maxRetry):
            try:
                response = requests.post(
                    url=os.getenv("SERVER_URL") + '/api/news/summarize',
                    json=listNewsId
                )
                if response.status_code == 202:
                    return
                else:
                    print(f"Attempt {attempt + 1} failed: {response.status_code}")
                    time.sleep(self.__delay)

            except requests.RequestException as e: 
                print(f"Attempt {attempt + 1} failed: {e}")
            time.sleep(self.__delay)
        
        dataLake = SavingTask(SavingTask.task_ids).dataLake
        dataLake.delete(listNewsId)
        print('Failed to send data to API')
        raise Exception('Failed to send data to API')