Skip to content

Feature/gamesreleasedtoday #334

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 21 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions app/internal/game_releases_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
from __future__ import annotations

from typing import List, TYPE_CHECKING

if TYPE_CHECKING:
from app.routers.calendar_grid import Week, Day

from datetime import datetime

from collections import defaultdict

from loguru import logger

import requests

# from app.routers.calendar_grid import Week


def add_game_events_to_weeks(weeks: List["Week"], is_active: bool = True):
if not is_active:
return weeks
first_week: Week = weeks[0]
last_week: Week = weeks[-1]
first_day: Day = first_week.days[0]
last_day: Day = last_week.days[-1]
first_day_str = datetime.strptime(first_day.set_id(), "%d-%B-%Y")
last_day_str = datetime.strptime(last_day.set_id(), "%d-%B-%Y")
games_released = get_games_data_separated_by_days(
start_date=first_day_str.strftime("%Y-%m-%d"),
end_date=last_day_str.strftime("%Y-%m-%d"),
)
for week in weeks:
for day in week.days:
if day.set_id() in games_released.keys():
day.dailyevents.append(
(
f"GR!- {(games_released[day.set_id()][0])[:10]}",
(games_released[day.set_id()][0]),
),
)


def get_games_data_separated_by_days(start_date, end_date):
logger.debug((start_date, end_date))
current_day_games = requests.get(
f"https://api.rawg.io/api/games?dates={start_date},{end_date}",
)

current_day_games = current_day_games.json()["results"]
games_data = defaultdict(list)
for result in current_day_games:
current = {}
current["name"] = result["name"]
current["platforms"] = []
for platform in result["platforms"]:
current["platforms"].append(platform["platform"]["name"])
ybd_release_date = translate_ymd_date_to_dby(result["released"])
games_data[ybd_release_date].append(current)
return get_formatted_games_in_days(games_data)


def get_formatted_games_in_days(
separated_games_dict: dict,
with_platforms: bool = False,
):
formatted_games = defaultdict(list)

for date, game_data in separated_games_dict.items():
for game in game_data:
formatted_game_str = ""
formatted_game_str += game["name"]
if with_platforms:
formatted_game_str += "-Platforms-<br>"
for platform in game["platforms"]:
formatted_game_str += f"{platform},"
formatted_games[date].append(formatted_game_str)
return formatted_games


def translate_ymd_date_to_dby(ymd_str: str):
ymd_time = datetime.strptime(ymd_str, "%Y-%m-%d")
return ymd_time.strftime("%d-%B-%Y")


def translate_dby_date_to_ymd(dby_str: str):
dby_time = datetime.strptime(dby_str, "%d-%B-%Y")
return dby_time.strftime("%Y-%m-%d")
2 changes: 2 additions & 0 deletions app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def create_tables(engine, psql_environment):
export,
four_o_four,
friendview,
game_release_dates_service,
google_connect,
invitation,
joke,
Expand Down Expand Up @@ -127,6 +128,7 @@ async def swagger_ui_redirect():
weekview.router,
weight.router,
whatsapp.router,
game_release_dates_service.router,
]

for router in routers_to_include:
Expand Down
131 changes: 55 additions & 76 deletions app/routers/calendar_grid.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import pytz

from app.internal.game_releases_utils import add_game_events_to_weeks

MONTH_BLOCK: int = 6

locale.setlocale(locale.LC_ALL, "en_US.UTF-8")
Expand All @@ -32,21 +34,16 @@ def __init__(self, date: datetime):
self.dailyevents: List[Tuple] = []
self.events: List[Tuple] = []
self.css: Dict[str, str] = {
'day_container': 'day',
'date': 'day-number',
'daily_event': 'month-event',
'daily_event_front': ' '.join([
'daily',
'front',
'background-warmyellow'
]),
'daily_event_back': ' '.join([
'daily',
'back',
'text-darkblue',
'background-lightgray'
]),
'event': 'event',
"day_container": "day",
"date": "day-number",
"daily_event": "month-event",
"daily_event_front": " ".join(
["daily", "front", "background-warmyellow"],
),
"daily_event_back": " ".join(
["daily", "back", "text-darkblue", "background-lightgray"],
),
"event": "event",
}

def __str__(self) -> str:
Expand All @@ -62,12 +59,12 @@ def set_id(self) -> str:

@classmethod
def get_user_local_time(cls) -> datetime:
greenwich = pytz.timezone('GB')
greenwich = pytz.timezone("GB")
return greenwich.localize(datetime.now())

@classmethod
def convert_str_to_date(cls, date_string: str) -> datetime:
return datetime.strptime(date_string, '%d-%B-%Y')
return datetime.strptime(date_string, "%d-%B-%Y")

@classmethod
def is_weekend(cls, date: date) -> bool:
Expand All @@ -79,74 +76,54 @@ class DayWeekend(Day):
def __init__(self, date: datetime):
super().__init__(date)
self.css = {
'day_container': 'day ',
'date': ' '.join(['day-number', 'text-gray']),
'daily_event': 'month-event',
'daily_event_front': ' '.join([
'daily',
'front',
'background-warmyellow'
]),
'daily_event_back': ' '.join([
'daily',
'back',
'text-darkblue',
'background-lightgray'
]),
'event': 'event',
"day_container": "day ",
"date": " ".join(["day-number", "text-gray"]),
"daily_event": "month-event",
"daily_event_front": " ".join(
["daily", "front", "background-warmyellow"],
),
"daily_event_back": " ".join(
["daily", "back", "text-darkblue", "background-lightgray"],
),
"event": "event",
}


class Today(Day):
def __init__(self, date: datetime):
super().__init__(date)
self.css = {
'day_container': ' '.join([
'day',
'text-darkblue',
'background-yellow'
]),
'date': 'day-number',
'daily_event': 'month-event',
'daily_event_front': ' '.join([
'daily',
'front',
'text-lightgray',
'background-darkblue'
]),
'daily_event_back': ' '.join([
'daily',
'back',
'text-darkblue',
'background-lightgray'
]),
'event': 'event',
"day_container": " ".join(
["day", "text-darkblue", "background-yellow"],
),
"date": "day-number",
"daily_event": "month-event",
"daily_event_front": " ".join(
["daily", "front", "text-lightgray", "background-darkblue"],
),
"daily_event_back": " ".join(
["daily", "back", "text-darkblue", "background-lightgray"],
),
"event": "event",
}


class FirstDayMonth(Day):
def __init__(self, date: datetime):
super().__init__(date)
self.css = {
'day_container': ' '.join([
'day',
'text-darkblue',
'background-lightgray'
]),
'date': 'day-number',
'daily_event': 'month-event',
'daily_event_front': ' '.join([
'daily front',
'text-lightgray',
'background-red'
]),
'daily_event_back': ' '.join([
'daily',
'back',
'text-darkblue',
'background-lightgray'
]),
'event': 'event',
"day_container": " ".join(
["day", "text-darkblue", "background-lightgray"],
),
"date": "day-number",
"daily_event": "month-event",
"daily_event_front": " ".join(
["daily front", "text-lightgray", "background-red"],
),
"daily_event_back": " ".join(
["daily", "back", "text-darkblue", "background-lightgray"],
),
"event": "event",
}

def __str__(self) -> str:
Expand Down Expand Up @@ -175,8 +152,7 @@ def create_day(day: datetime) -> Day:
def get_next_date(date: datetime) -> Iterator[Day]:
"""Generate date objects from a starting given date."""
yield from (
create_day(date + timedelta(days=i))
for i in itertools.count(start=1)
create_day(date + timedelta(days=i)) for i in itertools.count(start=1)
)


Expand All @@ -197,13 +173,16 @@ def get_n_days(date: datetime, n: int) -> Iterator[Day]:


def create_weeks(
days: Iterator[Day],
length: int = Week.WEEK_DAYS
days: Iterator[Day],
length: int = Week.WEEK_DAYS,
) -> List[Week]:
"""Return lists of Weeks objects."""
ndays: List[Day] = list(days)
num_days: int = len(ndays)
return [Week(ndays[i:i + length]) for i in range(0, num_days, length)]
weeks = [Week(ndays[i : i + length]) for i in range(0, num_days, length)]

add_game_events_to_weeks(weeks, is_active=True)
return weeks


def get_month_block(day: Day, n: int = MONTH_BLOCK) -> List[Week]:
Expand Down
Loading