Last active
August 24, 2020 06:40
-
-
Save 0ex-d/0f5f6472ebc800b666d44d8e4caf49fa to your computer and use it in GitHub Desktop.
Event and Date manager used by @classboard for reminding folks to attend online classes ;(
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
__doc__ = ''' | |
~TimeDogg~ | |
Used by @Classboard for reminding folks to attend online classes ;( | |
- Use of `private` modifiers to prevent aliens from invading | |
- typechecking following Python 3.x standards | |
- This is not @facts or @uberfacts... | |
don't ever ever try to call private class members from the outside world | |
or I would .ssh ya! | |
Author: Precious Akin | |
''' | |
from datetime import datetime as dtt, timedelta as td | |
class Event: | |
__date=None | |
__time=None | |
__datetime=None | |
__reminder=None | |
__is_due = False | |
__is_time = False | |
__is_past = False | |
def __init__(self, date, time, title): | |
''' set the full time on initialing the class. | |
attr `date` for event date in string E.g `25-08-2020` | |
attr `time` for event time in string E.g `05:30` | |
''' | |
self._set_event(date, time) | |
print("Event: %s"%(title)) | |
print("Day: %s"%(self.get_event_date)) | |
print("Time: %s"%(self.get_event_time)) | |
print("Due date: %s"%(self.get_due_date)) | |
print("====\n") | |
def _set_event(self, date, time): | |
''' sets the date and time for the event | |
by extracting from datetime module''' | |
self.__date = dtt.strptime(date, "%d-%m-%Y") | |
self.__time = dtt.strptime(time, "%H:%M").time() | |
self.__datetime = dtt.combine(self.__date, self.__time) | |
self.set_due_date | |
@property | |
def __get_today_date(self)->str: | |
return dtt.now().strftime("%d-%m-%Y") | |
@property | |
def __get_today_time(self)->str: | |
return dtt.now().strftime("%H:%M%p") | |
@property | |
def get_event_date(self)->str: | |
''' get the date for event E.g DD/MM/YYYY''' | |
return self.__date.strftime("%d-%m-%Y") | |
@property | |
def get_event_time(self)->str: | |
'''get the event time in Hours and minute except seconds''' | |
return self.__time.strftime("%H:%M%p") | |
@property | |
def set_due_date(self)->bool: | |
if self.__get_today_date > self.get_event_date: | |
self.__is_past = True | |
if self.__get_today_date == self.get_event_date: | |
self.__is_due = True | |
if self.__get_today_time == self.get_event_time: | |
self.__is_time = True | |
@property | |
def get_due_date(self)->str: | |
if self.__is_past: | |
return "That day too old. For old thangs have passed away and new thangs thereof!" | |
if self.__is_due and self.__is_time: | |
return "Today got some event right now!" | |
elif self.__is_due: | |
return "Today got some event at %s."%(self.get_event_time) | |
else: | |
return "Next event is due in %s day(s)."%(self.get_time_diff().days) | |
def get_reminder_eta(self, **kwargs): | |
'''gets time to reminder for an event | |
could be used for your cron job e.g Celery | |
remind days or minutes before or remind exactly on time. | |
''' | |
if "days" and "minutes" in kwargs: | |
days = kwargs['days'] | |
minutes = kwargs["minutes"] | |
return self.__datetime - td(days, minutes) | |
elif "days" in kwargs: | |
days = kwargs['days'] | |
return self.__datetime - td(days=days) | |
elif "minutes" in kwargs: | |
minutes = kwargs["minutes"] | |
return self.__datetime - td(minutes=minutes) | |
else: | |
return self.__datetime | |
def get_time_diff(self, **kwargs): | |
'''gets day difference between two days | |
returns a timedelta obj | |
''' | |
return self.__datetime - dtt.now() | |
''' | |
Event sample data | |
Dict for sample events in the past or future, | |
you can also pass datetime object in the dict. | |
#TO-DO: | |
# Generate list of events | |
# Cron job for reminder | |
''' | |
if __name__ == "__main__": | |
events = [ | |
{"title":"All international Flights open worldwide.", "date":"22-09-2020", "time":"07:00"}, | |
{"title":"School meeting", "date":"24-08-2020", "time":"15:30"}, | |
{"title":"Bed time", "date":"22-08-2020", "time":"00:15"}, | |
{"title":"Presently!", "date":dtt.now().strftime("%d-%m-%Y"), "time":dtt.now().strftime("%H:%M")}, | |
] | |
for ev in events: | |
Event(ev["date"],ev["time"],ev["title"]) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment