Обзор SplendidMoons на GitHub
Репозиторий splendidmoons/splendidmoons на GitHub — это специализированная библиотека на языке Python, предназначенная для вычисления дат буддийского лунного календаря Упосатхи (дней интенсивной практики и очищения) в соответствии со строгими правилами тайской традиции Маханикая (Mahanikaya).
Проект является официальным расчетным ядром для веб-сервиса splendidmoons.github.io. Исторически это более современный порт и замена старого пакета suriya-go, который изначально разрабатывался на языке Go (Golang).
🏛 Назначение и каноническая база
Главная задача библиотеки — автоматизация расчетов тайского лунно-солнечного календаря. Из-за разницы между лунными сутками и солнечным годом буддийский календарь регулярно вставляет добавочные дни или месяцы.
Пакет умеет математически точно определять тип буддийского года, от которого зависят даты всех праздников:
1) YearType.Normal: Обычный год.
2) YearType.Adhikamasa: Год с добавочным 8-м лунным месяцем (високосный месяц).
3) YearType.Adhikavara: Год с добавочным днем (високосный день).
Благодаря этому библиотека позволяет безошибочно рассчитывать главные буддийские праздники Тхеравады, такие как Асалха Пуджа (Asalha Puja), Магха Пуджа и Висакха Пуджа, которые жестко привязаны к этой динамической системе сдвигов.
💻 Технический стек и структура
1) Язык программирования: 100% чистый Python.
2) Менеджмент зависимостей: Проект использует современный инструмент Poetry (в репозитории присутствуют конфигурационные файлы pyproject.toml, poetry.lock и poetry.toml).
3) Качество кода: Включает в себя директорию tests/ с юнит-тестами для проверки корректности математических расчетов календаря на исторических периодах.
🌜Некоторые особенности
1) Чистая математика без внешних API: Библиотека полностью автономна. Она не делает запросов к сторонним серверам для проверки фаз Луны, а рассчитывает типы лет и смещения локально, что гарантирует высокую скорость работы API бэкенда.
2) Идеальное моделирование интеркаляций: В тайском буддийском календаре есть три типа лет: обычный (Normal), с добавочным месяцем (Adhikamasa) и с добавочным днем (Adhikavara). splendidmoons безупречно определяет эти типы на годы вперед, избавляя от необходимости хардкодить таблицы исключений.
3) Пакетный экспорт (CLI): Библиотека имеет готовый консольный интерфейс (CLI), позволяющий одной командой сгенерировать CSV-сетку всех праздников на десятилетие вперед (например, 2020 2030 moondays.csv). Это позволяет не считать данные «на лету» в рантайме, а один залить их в базу данных (PostgreSQL/MySQL) как статичный справочник.
4) Свободная лицензия MIT: Полная юридическая чистота для использования в закрытом коммерческом коде без обязательств открывать исходники вашего приложения.
5) Современный тулинг: Проект собран с использованием Poetry (пакетный менеджер), содержит pyproject.toml и написан на чистом Python 3 без легаси-костылей.
6) Экстремальная узкоспециализированность (Mahanikaya): Это главный архитектурный риск. Библиотека считает дни Упосатхи строго по правилам ордена Маханикая. Если вашему приложению потребуется поддерживать другие буддийские традиции (например, тайский орден Дхаммаюттика, шри-ланкийскую или бирманскую системы), эта библиотека не подойдет, так как в високосные годы даты Упосатхи у них расходятся на один день.