def participates(self, ID): activities = self.__repository._getAll() return filterBy( activities, lambda activity: self.__repositoryDTO._upcoming(activity.date) and any(ID == str(personID) for personID in activity.personIDs))
def search(self, string): activities = self.__repository._getAll() return filterBy( activities, lambda activity: any(string in data for data in [ activity.date, activity.time, activity.date + " " + activity. time, activity.description ]))
def day(self, date): activities = self.__repository._getAll() matching = filterBy(activities, lambda activity: activity.date == date) shellSort( matching, lambda activity1, activity2: datetime.strptime( activity1.time, '%H:%M') <= datetime.strptime( activity2.time, '%H:%M')) return matching
def personActivities(self): upcoming = filterBy(self._activityRepository._getAll(), lambda activity: self._upcoming(activity.date)) persons = self._personRepository._getAll() count = {} for person in persons: count[person.ID] = 0 for activity in upcoming: for ID in activity.personIDs: count[ID] += 1 shellSort( persons, lambda person1, person2: count[person1.ID] >= count[person2.ID]) return persons
def busiest(self): activities = self.__repository._getAll() upcoming = filterBy( activities, lambda activity: self.__repositoryDTO._upcoming(activity.date)) days = {} for activity in upcoming: if activity.date not in days.keys(): days[activity.date] = 0 days[activity.date] += 1 shellSort( upcoming, lambda activity1, activity2: days[activity1.date] > days[ activity2.date]) return upcoming
def week(self, date): try: date = datetime.strptime(date, "%d.%m.%Y") year = date.year week = date.isocalendar()[1] except ValueError: return [] activities = self.__repository._getAll() matching = filterBy( activities, lambda activity: year == datetime.strptime( activity.date, "%d.%m.%Y").year and week == datetime.strptime( activity.date, "%d.%m.%Y").isocalendar()[1]) shellSort( matching, lambda activity1, activity2: (datetime.strptime(activity1.date, "%d.%m.%Y") < datetime.strptime( activity2.date, "%d.%m.%Y")) or (activity1.date == activity2.date and datetime.strptime( activity1.time, '%H:%M') <= datetime.strptime( activity2.time, '%H:%M'))) return matching