diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/DayOfTheWeek.py b/DayOfTheWeek.py new file mode 100644 index 0000000..fbf4fd7 --- /dev/null +++ b/DayOfTheWeek.py @@ -0,0 +1,105 @@ +import json +import random +from datetime import datetime +from dataclasses import dataclass +import os + + +DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] + +@dataclass +class Meme: + image_path: str + name: str + day: str + meta: dict[str, any] + + + def get_random_attachment(self) -> str or None: + attachments = self.meta.get('attachments') + if len(attachments) < 1: + return None + + return random.choice(self.flatten_meta(attachments)) + + def get_random_audio(self) -> str or None: + attachments = self.meta.get('attachments') + if len(attachments) < 1 or attachments.get('audio') is None: + return None + + return random.choice(attachments.get('audio')) + + def get_random_video(self) -> str or None: + attachments = self.meta.get('attachments') + if len(attachments) < 1 or attachments.get('video') is None: + return None + + return random.choice(attachments.get('video')) + + @staticmethod + def flatten_meta(meta: dict[str, any]) -> list[str]: + return [a for k in [i for i in meta] for a in k] + + +class Day: + def __init__(self, **kwargs) -> None: + self.memes = kwargs.get('memes') or [] + + def __str__(self) -> str: + return str(len(self.memes)) + + def randompic(self): + return random.choice(self.memes) + + +class DayOfTheWeek: + def __init__(self) -> None: + self.days = self.get_data() + + def today(self) -> Day: + return self.days[datetime.today().weekday()] + + def get_day(self, day: str or int) -> Day: + if type(day) is str: + return self.days[DAYS.index(day)] + else: + return self.days[day] + + + + @staticmethod + def get_data() -> list[Day]: + folder = os.path.dirname(os.path.abspath(__file__)) + week = [] + for day_str in DayOfTheWeek.get_day_of_the_week(-1): + day = Day() + for file in os.listdir(folder + '\\' + day_str): + file = folder + '\\' + day_str + '\\' + file + day.memes.append(DayOfTheWeek.create_meme(file)) + + week.append(day) + + return week + + @staticmethod + def get_day_of_the_week(day_number: int) -> str or list[str]: + return DAYS[day_number] if 0 <= day_number < len(DAYS) else DAYS + + @staticmethod + def create_meme(filename: str) -> Meme: + meta = DayOfTheWeek.get_meta(filename) + return Meme( + filename, + os.path.basename(filename), + meta.get('day'), + meta + ) + + @staticmethod + def get_meta(filename: str) -> dict[str, any]: + folder = os.path.dirname(os.path.abspath(__file__)) + if not '.metadata' in filename: + filename = filename.replace(folder, folder + "\\.metadata") + + with open(filename + '.json', 'r', encoding='utf8') as f: + return json.loads(f.read())