mystic_cal:mystic_cal_code
This is an old revision of the document!
Mystic Calendar Code
#!/usr/bin/env python3
import os
import sys
import datetime
import calendar
DATA_PATH = "../calendar_data"
MAX_EVENTS = 14
# ANSI Colors (Retro BBS Style)
C_RESET = "\033[0m"
C_RED = "\033[1;31m"
C_GREEN = "\033[1;32m"
C_YELLOW = "\033[1;33m"
C_CYAN = "\033[1;36m"
C_WHITE = "\033[1;37m"
C_HIGHLIGHT = "\033[1;33;40m"
def load_events(filename):
events = {}
if not os.path.exists(filename):
return events
with open(filename, "r", encoding="utf-8", errors="ignore") as f:
for line in f:
if len(line) < 4 or not line[:4].isdigit():
continue
month = int(line[:2])
day = int(line[2:4])
text = line[5:].strip()
events.setdefault((month, day), []).append(text)
return events
def draw_calendar(events, year, month):
today = datetime.date.today()
cal = calendar.monthcalendar(year, month)
print(C_GREEN + f"\n╔══════════════════════════════════════╗")
print(f"║ Calendar - {calendar.month_name[month]} {year} ║")
print("╚══════════════════════════════════════╝" + C_RESET)
print(" SU MO TU WE TH FR SA")
for week in cal:
row = ""
for day in week:
if day == 0:
row += " "
continue
marker = " "
if (month, day) in events:
marker = "-"
if today.year == year and today.month == month and today.day == day:
row += C_HIGHLIGHT + f"{marker}{day:02}{marker}" + C_RESET + " "
else:
row += f"{marker}{day:02}{marker} "
print(row)
print("\nUpcoming:\n")
count = 0
for (m, d) in sorted(events.keys()):
if m < month:
continue
for event in events[(m, d)]:
print(f"{m:02}/{d:02} - {event}")
count += 1
if count >= MAX_EVENTS:
return
def main():
today = datetime.date.today()
year = today.year
month = today.month
mode = "events"
if len(sys.argv) > 1 and sys.argv[1].lower() == "bd":
mode = "bdays"
filename = os.path.join(DATA_PATH,
f"cal.bdays.{year}" if mode == "bd"
else f"cal.{year}"
)
events = load_events(filename)
draw_calendar(events, year, month)
input("\nPress Enter to continue...")
if __name__ == "__main__":
main()
mystic_cal/mystic_cal_code.1771259575.txt.gz · Last modified: by freedomotter
