Amiga-Z Wiki

“Modern tools for old-school communities.”

User Tools

Site Tools


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki