diff --git a/agenda/markets.py b/agenda/markets.py index d6901d4..e8e48a7 100644 --- a/agenda/markets.py +++ b/agenda/markets.py @@ -10,22 +10,28 @@ from .types import Event uk_tz = pytz.timezone("Europe/London") -def windmill_hill(start_date: date, months: int = 24) -> list[Event]: - """Windmill Hill Market days for the next 24 months from a given date.""" +def event(title: str, d: date, start: time, end: time, url: str) -> Event: + """Build Event object for market.""" + return Event( + name="market", + title=title, + date=uk_tz.localize(datetime.combine(d, start)), + end_date=uk_tz.localize(datetime.combine(d, end)), + url=url, + ) + + +def windmill_hill(start_date: date, end_date: date) -> list[Event]: + """Windmill Hill Market days betwen start and end dates.""" events: list[Event] = [] current_date = start_date url = ( "https://www.windmillhillcityfarm.org.uk" + "/visit-us/shops-more/windmill-hill-market-bristol-market/" ) + start, end = time(10, 0), time(15, 0) - # To keep count of how many market days have been calculated - count = 0 - - start = time(10, 0) - end = time(15, 0) - - while count < months: + while current_date < end_date: # Skip months outside of April to December if current_date.month < 4 or current_date.month > 12: current_date += relativedelta(months=1) @@ -38,15 +44,8 @@ def windmill_hill(start_date: date, months: int = 24) -> list[Event]: # Include it in the list only if it's on or after the start_date if first_saturday >= start_date: events.append( - Event( - name="market", - title="Windmill Hill Market", - date=uk_tz.localize(datetime.combine(first_saturday, start)), - end_date=uk_tz.localize(datetime.combine(first_saturday, end)), - url=url, - ) + event("Windmill Hill Market", first_saturday, start, end, url) ) - count += 1 # Move to the next month current_date += relativedelta(months=1) @@ -55,33 +54,22 @@ def windmill_hill(start_date: date, months: int = 24) -> list[Event]: return events -def tobacco_factory(start_date: date, weeks: int = 52 * 2) -> list[Event]: +def tobacco_factory(start_date: date, end_date: date) -> list[Event]: """Tobacco Factory Market days for the next 12 months from a given date.""" events: list[Event] = [] current_date = start_date - count = 0 - url = "https://tobaccofactory.com/whats-on/sunday-market/" + start, end = time(10, 0), time(14, 30) - start = time(10, 0) - end = time(14, 30) - - while count < weeks: # 52 weeks in a year + while current_date <= end_date: # Calculate the next Sunday from the current date next_sunday = current_date + relativedelta(weekday=6) # Sunday is 6 # Include it in the list only if it's on or after the start_date if next_sunday >= start_date: events.append( - Event( - name="market", - title="Tobacco Factory Sunday Market", - date=uk_tz.localize(datetime.combine(next_sunday, start)), - end_date=uk_tz.localize(datetime.combine(next_sunday, end)), - url=url, - ) + event("Tobacco Factory Sunday Market", next_sunday, start, end, url) ) - count += 1 # Move to the next week current_date += timedelta(weeks=1) @@ -89,27 +77,21 @@ def tobacco_factory(start_date: date, weeks: int = 52 * 2) -> list[Event]: return events -def nailsea_farmers(start_date: date, months: int = 24) -> list[Event]: - """Nailsea Farmers Market days for the next 12 months from a given date.""" +def nailsea_farmers(start_date: date, end_date: date) -> list[Event]: + """Nailsea Farmers Market days between start and end dates.""" events: list[Event] = [] current_date = start_date - count = 0 + start, end = time(9, 0), time(13, 0) # Times: 9am-1pm + url = "https://www.somersetfarmersmarkets.co.uk/markets/nailsea/" - t = time(9, 0) # The market starts at 9am - - while count < months: + while current_date < end_date: # Calculate the 3rd Saturday of the current month third_saturday = current_date + relativedelta(day=1, weekday=SA(+3)) - count += 1 # Include it in the list only if it's on or after the start_date if third_saturday >= start_date: events.append( - Event( - name="market", - title="Nailsea Farmers Market", - date=uk_tz.localize(datetime.combine(third_saturday, t)), - ) + event("Nailsea Farmers Market", third_saturday, start, end, url) ) # Move to the next month