manaviel85370
refactor rendering of event information
ce70327
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 # Falls item kein Schedule-Objekt ist, direkt 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 = [] # Liste von Schedule-Objekten
self._address = None # Address-Objekt
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):
# Format Schedule entries, if any
schedule_str = "\n".join(indent(str(entry), " ") for entry in self._schedule) if self._schedule else ""
# Prepare individual parts of the string, only if they are not empty or None
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)