Skip to content

Instantly share code, notes, and snippets.

@0ex-d
Last active August 24, 2020 06:40
Show Gist options
  • Save 0ex-d/0f5f6472ebc800b666d44d8e4caf49fa to your computer and use it in GitHub Desktop.
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 ;(
__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