#!/usr/bin/env python3
from datetime import date
from dataclasses import dataclass
import calendar
@dataclass
class Location:
name: str
url: str
neighborhood: str
time: str = None
info: str = None
@dataclass
class Event:
location: Location
when: date
time: str = None
info: str = None
special: bool = False
cancelled: bool = False
changed: bool = False
def render_schedule(events):
s = ''
week = None
for event in events:
weekday = calendar.day_name[event.when.weekday()]
month = calendar.month_name[event.when.month]
day = event.when.day
time = event.time or event.location.time
assert time, 'no time given either in location or event'
info = event.info or event.location.info
infotxt = f'
{info}
' if info else ''
week_change = False
new_week = event.when.isocalendar()[1]
if week is not None and week != new_week:
week_change = True
week = new_week
if week_change:
s += '
\n'
s += f'''
{weekday}, {month} {day} · {time}
'''
return s
summermccarren = Location(
"McCarren Park",
"https://maps.app.goo.gl/7YQBG3XVHNLWkyAM9",
"Williamsburg",
"6:30p",
info='North corner, west side. Rain or above 90°: at Spritzenhaus33.'
)
mccarren = Location(
"Spritzenhaus33",
"https://maps.app.goo.gl/4jKTTTJ3h61dGPyz6",
"Williamsburg",
"6:30p",
)
jefferson = Location(
"Jefferson Market Library",
"https://maps.app.goo.gl/UTNUqUdEjYCssiMx5",
"Greenwich Village",
"6p",
info="Willa Cather Room; left at door, through children’s room"
)
nook = Location(
"Nook",
"https://maps.app.goo.gl/X2fYE3EpeHhQhgYD8",
"Bushwick",
"9a",
)
liz = Location(
"Liz’s Book Bar",
"https://maps.app.goo.gl/6hgstJRcd2TKa96x5",
"Carroll Gardens",
"7p",
)
abraco = Location(
"Abraço",
"https://maps.app.goo.gl/6w6GzymLNy9vdgqG9",
"East Village",
"6p",
)
bookclub = Location(
"Book Club Bar",
"https://maps.app.goo.gl/ewGbWuEjp7cedMrb7",
"East Village",
"9p",
)
dekalblibrary = Location(
"Dekalb Library",
"https://maps.app.goo.gl/G3D2hQ6og5DkBQH86",
"Bushwick",
)
wyckoffbondgarden = Location(
"Wyckoff-Bond Community Garden",
"https://maps.app.goo.gl/qWKXJhrvvpvLeFLy7",
"Boerum Hill",
info="Hosted by Carroll Gardens Library"
)
bkcentrallibrary = Location(
"Brooklyn Central Library",
"https://maps.app.goo.gl/fPijDbTN47TbFpFf6",
"Prospect Heights",
info="Trustees Room"
)
bkcentral_info_commons = Location(
"Brooklyn Central Library",
"https://maps.app.goo.gl/fPijDbTN47TbFpFf6",
"Prospect Heights",
info="Info Commons Lab"
)
bushwicklibrary = Location(
"Bushwick Library",
"https://maps.app.goo.gl/2mnX1sDSrBv1jKQ3A",
"Bushwick",
)
sunsetpark = Location(
"Sunset Park Library",
"https://maps.app.goo.gl/ck5NMcK7nC189KCZ6",
"Sunset Park",
)
canarsielibrary = Location(
"Canarsie Library",
"https://maps.app.goo.gl/G7ek4jPEWDVSMevB9",
"Canarsie",
)
kingsbay = Location(
"Kings Bay Library",
"https://maps.app.goo.gl/1KKf7SqMbwXirKe29",
"Kings Bay",
)
easternparkway = Location(
"Eastern Parkway Library",
"https://maps.app.goo.gl/D5STnQQNC3XxKSiV8",
"Crown Heights",
)
windsorterrace = Location(
"Windsor Terrace Library",
"https://maps.app.goo.gl/My7eCEy91dF6mWSY7",
"Windsor Terrace",
)
greenpoint = Location(
"Greenpoint Library",
"https://maps.app.goo.gl/8y4hGLWHkKHd7KWRA",
"Greenpoint",
)
williamsburgh = Location(
"Williamsburgh Library",
"https://maps.app.goo.gl/hdy88ytUfUKpH9WY6",
"Williamsburg",
)
ridgewoodlibrary = Location(
"Ridgewood Library",
"https://maps.app.goo.gl/mE51fsx1HrSqFCvb9",
"Ridgewood",
)
artsculture = Location(
"Library for Arts & Culture",
"https://maps.app.goo.gl/GssCUr9QF2aFxgiQA",
"Fort Greene",
)
schedule = [
Event(nook, date(2025, 5, 17)),
Event(summermccarren, date(2025, 5, 19)),
Event(jefferson, date(2025, 5, 21)),
Event(nook, date(2025, 5, 24)),
Event(summermccarren, date(2025, 5, 26), special=True, info='Picnic. Bring food and drinks!'),
Event(jefferson, date(2025, 5, 28)),
Event(nook, date(2025, 5, 31)),
Event(summermccarren, date(2025, 6, 2)),
Event(jefferson, date(2025, 6, 4)),
Event(nook, date(2025, 6, 7)),
Event(summermccarren, date(2025, 6, 9)),
Event(windsorterrace, date(2025, 6, 10), time='6p'),
Event(jefferson, date(2025, 6, 11)),
Event(greenpoint, date(2025, 6, 12), time='6p'),
Event(dekalblibrary, date(2025, 6, 12), time='6p'),
Event(ridgewoodlibrary, date(2025, 6, 12), time='6p', info='Library garden. Inclement weather: in auditorium.', special=True),
Event(nook, date(2025, 6, 14)),
Event(summermccarren, date(2025, 6, 16)),
Event(jefferson, date(2025, 6, 18)),
Event(nook, date(2025, 6, 21)),
Event(summermccarren, date(2025, 6, 23)),
Event(jefferson, date(2025, 6, 25)),
Event(nook, date(2025, 6, 28)),
Event(summermccarren, date(2025, 6, 30)),
] # maybe autosort it and sort code by event?
with open('index.base') as base:
txt = base.read()
html = render_schedule(schedule)
txt = txt.replace('{SCHEDULE}', html)
with open('index.html', 'w') as index:
index.write(txt)