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)