|
from textwrap import indent |
|
|
|
from sympy import false |
|
|
|
|
|
class Schedule: |
|
def __init__(self, start_date, end_date, start_time, end_time, admittance_time): |
|
self.start_date = start_date |
|
self.end_date = end_date |
|
self.start_time = start_time |
|
self.end_time = end_time |
|
self.admittance_time = admittance_time |
|
|
|
def __repr__(self): |
|
date_format = "%d.%m.%Y" |
|
time_format = "%H:%M" |
|
start_date = self.start_date.strftime(date_format) if self.start_date else "" |
|
end_date = (" - " + self.end_date.strftime(date_format)) if self.end_date else "" |
|
start_time = self.start_time.strftime(time_format) if self.start_time else "" |
|
end_time = (" - " + self.end_time.strftime(time_format) + " ") if self.end_time else "" |
|
admittance_time = (" Einlass: " + self.admittance_time.strftime(time_format)) if self.admittance_time else "" |
|
return f"๐
{start_date}{end_date}\nโฐ {start_time}{end_time}{admittance_time}" |
|
|
|
def __str__(self): |
|
date_format = "%d.%m.%Y" |
|
time_format = "%H:%M" |
|
start_date = self.start_date.strftime(date_format) if self.start_date else "" |
|
end_date = (" - " + self.end_date.strftime(date_format)) if self.end_date else "" |
|
start_time = self.start_time.strftime(time_format) if self.start_time else "" |
|
end_time = (" - " + self.end_time.strftime(time_format) + " ") if self.end_time else "" |
|
admittance_time = (" Einlass: " + self.admittance_time.strftime(time_format)) if self.admittance_time else "" |
|
return f"{start_date}{end_date} {start_time}{end_time}{admittance_time}" |
|
|
|
def __eq__(self, other): |
|
|
|
if isinstance(other, Schedule): |
|
print("Equals?", str(self),str(other), str(self) == str(other)) |
|
return str(self).strip() == str(other).strip() |
|
else: |
|
return False |
|
|
|
def __hash__(self): |
|
return hash((self.start_date, self.end_date, self.start_time, self.end_time, self.admittance_time)) |
|
|
|
def __len__(self): |
|
return len([element for element in [self.start_date, self.end_date, self.start_time, self.end_time, self.admittance_time] if element]) |
|
|
|
def __contains__(self, item): |
|
if not isinstance(item, Schedule): |
|
return False |
|
|
|
print(f"SELF: {self}") |
|
print(f"ITEM: {item}") |
|
|
|
return all([ |
|
item.start_date in {self.start_date, self.end_date, None}, |
|
item.end_date in {self.end_date, self.start_date, None}, |
|
item.start_time in {self.start_time, self.end_time, None}, |
|
item.end_time in {self.end_time, self.start_time, None}, |
|
item.admittance_time in {self.admittance_time, None} |
|
]) |
|
|
|
|
|
class Event: |
|
def __init__(self): |
|
self._title = None |
|
self._organizers = None |
|
self._locations = [] |
|
self._schedule = [] |
|
self._address = None |
|
self._categories = [] |
|
self._description = None |
|
self._prices = [] |
|
self._url = None |
|
|
|
@property |
|
def title(self): |
|
return self._title |
|
|
|
@title.setter |
|
def title(self, value): |
|
self._title = value |
|
|
|
@property |
|
def organizers(self): |
|
return self._organizers |
|
|
|
@organizers.setter |
|
def organizers(self, value): |
|
self._organizers = value |
|
|
|
@property |
|
def locations(self): |
|
return self._locations |
|
|
|
@locations.setter |
|
def locations(self, value): |
|
self._locations = value |
|
|
|
@property |
|
def schedule(self): |
|
return self._schedule |
|
|
|
@schedule.setter |
|
def schedule(self, value): |
|
if isinstance(value, list) and all(isinstance(entry, Schedule) for entry in value): |
|
self._schedule = value |
|
else: |
|
raise ValueError("Schedule must be a list of Schedule objects") |
|
|
|
def add_schedule_entry(self, start_date, end_date, start_time, end_time, admittance_time): |
|
self._schedule.append(Schedule(start_date, end_date, start_time, end_time, admittance_time)) |
|
|
|
@property |
|
def address(self): |
|
return self._address |
|
|
|
@address.setter |
|
def address(self, value): |
|
self._address = value |
|
|
|
@property |
|
def categories(self): |
|
return self._categories |
|
|
|
@categories.setter |
|
def categories(self, value): |
|
self._categories = value |
|
|
|
@property |
|
def description(self): |
|
return self._description |
|
|
|
@description.setter |
|
def description(self, value): |
|
self._description = value |
|
|
|
@property |
|
def prices(self): |
|
return self._prices |
|
|
|
@prices.setter |
|
def prices(self, value): |
|
self._prices = sorted(value) |
|
|
|
@property |
|
def url(self): |
|
return self._url |
|
|
|
@url.setter |
|
def url(self, value): |
|
self._url = value |
|
|
|
def __str__(self): |
|
|
|
schedule_str = "\n".join(indent(str(entry), " ") for entry in self._schedule) if self._schedule else "" |
|
|
|
|
|
event_str = "" |
|
if self._url: |
|
event_str += f"๐ URL: {self._url}" |
|
if self._title: |
|
event_str += f"๐ Event: {self._title}\n" |
|
if self._organizers: |
|
event_str += f"๐ฅ Organizers: {self._organizers}\n" |
|
if self._locations: |
|
event_str += f"๐ Locations: {', '.join(self._locations)}\n" |
|
if schedule_str: |
|
event_str += f"๐
Schedule:\n{schedule_str}\n" |
|
if self._address: |
|
event_str += f"๐ Address: {self._address}\n" |
|
if self._categories: |
|
event_str += f"๐ท Categories: {', '.join(self._categories)}\n" |
|
if self._prices: |
|
event_str += f"๐ฐ Prices: {', '.join(map(str, self._prices))}\n" |
|
if self._description: |
|
event_str += f"๐ Description: \n {self._description}\n" |
|
|
|
return event_str |
|
|
|
def print_event(self): |
|
print(self) |
|
|