-
Notifications
You must be signed in to change notification settings - Fork 52
/
Copy pathon_this_day_events.py
49 lines (41 loc) · 1.4 KB
/
on_this_day_events.py
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
45
46
47
48
49
from datetime import date, datetime
import json
from typing import Any, Dict
from fastapi import Depends
from loguru import logger
import requests
from sqlalchemy import func
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session
from sqlalchemy.orm.exc import NoResultFound
from app.database.models import WikipediaEvents
from app.dependencies import get_db
def insert_on_this_day_data(
db: Session = Depends(get_db)
) -> Dict[str, Any]:
now = datetime.now()
day, month = now.day, now.month
res = requests.get(
f'https://byabbe.se/on-this-day/{month}/{day}/events.json')
text = json.loads(res.text)
res_events = text.get('events')
res_date = text.get('date')
res_wiki = text.get('wikipedia')
db.add(WikipediaEvents(events=res_events,
date_=res_date, wikipedia=res_wiki))
db.commit()
return text
def get_on_this_day_events(
db: Session = Depends(get_db)
) -> Dict[str, Any]:
try:
data = (db.query(WikipediaEvents).
filter(
func.date(WikipediaEvents.date_inserted) == date.today()).
one())
except NoResultFound:
data = insert_on_this_day_data(db)
except (SQLAlchemyError, AttributeError) as e:
logger.error(f'on this day failed with error: {e}')
data = {'events': [], 'wikipedia': 'https://en.wikipedia.org/'}
return data