setup debug printing
This commit is contained in:
parent
037981040a
commit
a77019638d
172
3q
Normal file
172
3q
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
"""
|
||||||
|
CHURCH CALENDAR CSV GENERATOR
|
||||||
|
"""
|
||||||
|
|
||||||
|
import calendar
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime
|
||||||
|
from pprint import pprint
|
||||||
|
import sys
|
||||||
|
import click
|
||||||
|
from dataclass_csv import DataclassWriter
|
||||||
|
from events import EVENT_LIST, YEAR, DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
def debug_print(data, condition=True):
|
||||||
|
"""Conditionally print data using pprint.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data: The data to be printed.
|
||||||
|
condition: A boolean value. If True, the data will be printed.
|
||||||
|
"""
|
||||||
|
if condition:
|
||||||
|
pprint.pprint(data)
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
build a list of months / weeks / day of the month in those weeks
|
||||||
|
months 1-12, weeks 0-5 days of week 5 6 are the 1st and 2nd of month
|
||||||
|
MONTHS[1] [0] [ 0 0 0 0 0 1 2 ]
|
||||||
|
|
||||||
|
due to how months work
|
||||||
|
week 0 can have null days (represented by 0's)
|
||||||
|
weeks 1 - 4 will have all 7 days present
|
||||||
|
week 5 may have 7 days or nulls
|
||||||
|
week 6 can have a monday and/or tuesday in them if the 1st falls on a
|
||||||
|
saturday or sunday in week 0
|
||||||
|
|
||||||
|
EVENT_LIST has weeks as 1-6 while MONTHS has weeks as 0-5, offsetting will
|
||||||
|
be necessary
|
||||||
|
"""
|
||||||
|
MONTHS: dict[int, list[list[int]]]
|
||||||
|
MONTHS = dict(enumerate([calendar.monthcalendar(YEAR, month) for month in
|
||||||
|
range(1, 13)], start=1))
|
||||||
|
|
||||||
|
""" convert EVENT_LIST into monthly_events """
|
||||||
|
monthly_events = [[] for _ in range(7)]
|
||||||
|
for event in EVENT_LIST:
|
||||||
|
monthly_events[event[0]].append(event[1:])
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Event():
|
||||||
|
"""Event for CSV export"""
|
||||||
|
# pylint: disable=too-many-instance-attributes
|
||||||
|
event_name: str
|
||||||
|
venue_name: str
|
||||||
|
organizer_name: str
|
||||||
|
start_date: str
|
||||||
|
start_time: str
|
||||||
|
end_date: str
|
||||||
|
end_time: str
|
||||||
|
all_day_event: str
|
||||||
|
categories: str
|
||||||
|
event_cost: str
|
||||||
|
event_phone: str
|
||||||
|
event_website: str
|
||||||
|
show_map_link: str
|
||||||
|
show_map: str
|
||||||
|
event_description: str
|
||||||
|
|
||||||
|
def suffix(day: int) -> str:
|
||||||
|
"""convert day to suffix"""
|
||||||
|
result: str = 'th'
|
||||||
|
if day in [1, 21, 31]:
|
||||||
|
result = 'st'
|
||||||
|
elif day in [2, 22]:
|
||||||
|
result = 'nd'
|
||||||
|
elif day in [3, 23]:
|
||||||
|
result = 'rd'
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def sort_events(events: list[Event]) -> list[Event]:
|
||||||
|
"""sort events"""
|
||||||
|
events = sorted(events, key=lambda k: (k.start_date, k.start_time))
|
||||||
|
return events
|
||||||
|
|
||||||
|
def add_event(events: list[Event],
|
||||||
|
name: str,
|
||||||
|
categories: str,
|
||||||
|
description: str,
|
||||||
|
start,
|
||||||
|
finish) -> None:
|
||||||
|
"""create event"""
|
||||||
|
# pylint: disable=too-many-arguments
|
||||||
|
event = Event(name,
|
||||||
|
"Main Campus",
|
||||||
|
"",
|
||||||
|
start.strftime("%Y-%m-%d"),
|
||||||
|
start.strftime("%I:%M %p"),
|
||||||
|
finish.strftime("%Y-%m-%d"),
|
||||||
|
finish.strftime("%I:%M %p"),
|
||||||
|
"FALSE",
|
||||||
|
categories,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
description)
|
||||||
|
events.append(event)
|
||||||
|
|
||||||
|
|
||||||
|
def write_calendar(events: list[Event]) -> None:
|
||||||
|
"""write calendar to csv file"""
|
||||||
|
with open("calendar.csv", "w", encoding="utf-8") as handle:
|
||||||
|
writer =DataclassWriter(handle, events, Event)
|
||||||
|
writer.map("event_name").to("EVENT NAME")
|
||||||
|
writer.map("venue_name").to("VENUE NAME")
|
||||||
|
writer.map("organizer_name").to("ORGANIZER NAME")
|
||||||
|
writer.map("start_date").to("START DATE")
|
||||||
|
writer.map("start_time").to("START TIME")
|
||||||
|
writer.map("end_date").to("END DATE")
|
||||||
|
writer.map("end_time").to("END TIME")
|
||||||
|
writer.map("all_day_event").to("ALL DAY EVENT")
|
||||||
|
writer.map("categories").to("CATEGORIES")
|
||||||
|
writer.map("event_cost").to("EVENT COST")
|
||||||
|
writer.map("event_phone").to("EVENT PHONE")
|
||||||
|
writer.map("event_website").to("EVENT_WEBSITE")
|
||||||
|
writer.map("show_map_link").to("SHOW MAP LINK?")
|
||||||
|
writer.map("show_map").to("SHOW MAP?")
|
||||||
|
writer.map("event_description").to("EVENT DESCRIPTION")
|
||||||
|
writer.write()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def process_month(MONTHS, monthly_events, week_of_month, week, events):
|
||||||
|
"""process one MONTHS of events"""
|
||||||
|
for day_of_week, day in enumerate(week):
|
||||||
|
if day > 0:
|
||||||
|
"""
|
||||||
|
month, week_of_month, day_of_week, day
|
||||||
|
use monthly_events[day_of_week]
|
||||||
|
"""
|
||||||
|
debug_print(f" {day_of_week}-{day:02d}", DEBUG)
|
||||||
|
day_events = [x[1:] for x in monthly_events[day_of_week] if week_of_month + 1 in x[0]]
|
||||||
|
debug_print(day_events, DEBUG)
|
||||||
|
debug_print("", DEBUG)
|
||||||
|
return events
|
||||||
|
|
||||||
|
|
||||||
|
def process_months(MONTHS, monthly_events):
|
||||||
|
"""process full year of MONTHS and return list of events"""
|
||||||
|
events = []
|
||||||
|
for month in range(1, 13):
|
||||||
|
debug_print(f"MONTH: {month}", DEBUG)
|
||||||
|
for week_of_month, week in enumerate(MONTHS[month]):
|
||||||
|
debug_print(f"{week_of_month} {week}", DEBUG)
|
||||||
|
events = process_month(MONTHS, monthly_events, week_of_month, week, events)
|
||||||
|
return events
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def main():
|
||||||
|
"""create csv file"""
|
||||||
|
events = process_months(MONTHS, monthly_events)
|
||||||
|
events = sort_events(events)
|
||||||
|
write_calendar(events)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main() # pylint: disable=E1120
|
@ -10,7 +10,6 @@ from calendar import SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATUR
|
|||||||
|
|
||||||
YEAR: int = 2025
|
YEAR: int = 2025
|
||||||
|
|
||||||
|
|
||||||
EVENT_LIST = ( # ------------- ----------------
|
EVENT_LIST = ( # ------------- ----------------
|
||||||
# day weeks start end venue category name description
|
# day weeks start end venue category name description
|
||||||
(SUNDAY, [1 ], 10, 00, 12, 00, "Main Campus", "Sunday Service", "Sunday Service 10:00am", "Prayer Room open from 8:30 AM to 9:30 AM. Worship Service starts at 10:00 AM. First Sunday of the month is Missions Sunday"),
|
(SUNDAY, [1 ], 10, 00, 12, 00, "Main Campus", "Sunday Service", "Sunday Service 10:00am", "Prayer Room open from 8:30 AM to 9:30 AM. Worship Service starts at 10:00 AM. First Sunday of the month is Missions Sunday"),
|
||||||
@ -30,3 +29,5 @@ EVENT_LIST = ( # ------------- --------
|
|||||||
(SATURDAY, [2 ], 8, 00, 10, 00, "Main Campus", "Men's Meeting", "Men's Breakfast 8:00am", ""),
|
(SATURDAY, [2 ], 8, 00, 10, 00, "Main Campus", "Men's Meeting", "Men's Breakfast 8:00am", ""),
|
||||||
# (--------, [- ], 18, 00, 20, 00, "Main Campus", "Youth Group", "South County Youth Group 6:00pm", ""),
|
# (--------, [- ], 18, 00, 20, 00, "Main Campus", "Youth Group", "South County Youth Group 6:00pm", ""),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
24
main.py
24
main.py
@ -10,7 +10,19 @@ from pprint import pprint
|
|||||||
import sys
|
import sys
|
||||||
import click
|
import click
|
||||||
from dataclass_csv import DataclassWriter
|
from dataclass_csv import DataclassWriter
|
||||||
from events import EVENT_LIST, YEAR
|
from events import EVENT_LIST, YEAR, DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
def debug_print(data, condition=True):
|
||||||
|
"""Conditionally print data using pprint.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data: The data to be printed.
|
||||||
|
condition: A boolean value. If True, the data will be printed.
|
||||||
|
"""
|
||||||
|
if condition:
|
||||||
|
pprint(data)
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
build a list of months / weeks / day of the month in those weeks
|
build a list of months / weeks / day of the month in those weeks
|
||||||
@ -130,10 +142,10 @@ def process_month(MONTHS, monthly_events, week_of_month, week, events):
|
|||||||
month, week_of_month, day_of_week, day
|
month, week_of_month, day_of_week, day
|
||||||
use monthly_events[day_of_week]
|
use monthly_events[day_of_week]
|
||||||
"""
|
"""
|
||||||
print(f" {day_of_week}-{day:02d}", end=" ")
|
debug_print(f" {day_of_week}-{day:02d}", DEBUG)
|
||||||
day_events = [x[1:] for x in monthly_events[day_of_week] if week_of_month + 1 in x[0]]
|
day_events = [x[1:] for x in monthly_events[day_of_week] if week_of_month + 1 in x[0]]
|
||||||
print(day_events)
|
debug_print(day_events, DEBUG)
|
||||||
print()
|
debug_print("", DEBUG)
|
||||||
return events
|
return events
|
||||||
|
|
||||||
|
|
||||||
@ -141,9 +153,9 @@ def process_months(MONTHS, monthly_events):
|
|||||||
"""process full year of MONTHS and return list of events"""
|
"""process full year of MONTHS and return list of events"""
|
||||||
events = []
|
events = []
|
||||||
for month in range(1, 13):
|
for month in range(1, 13):
|
||||||
print(f"MONTH: {month}")
|
debug_print(f"MONTH: {month}", DEBUG)
|
||||||
for week_of_month, week in enumerate(MONTHS[month]):
|
for week_of_month, week in enumerate(MONTHS[month]):
|
||||||
print(week_of_month, week)
|
debug_print(f"{week_of_month} {week}", DEBUG)
|
||||||
events = process_month(MONTHS, monthly_events, week_of_month, week, events)
|
events = process_month(MONTHS, monthly_events, week_of_month, week, events)
|
||||||
return events
|
return events
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user