66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
![]() |
"""
|
|||
|
A Telisaran calendaring tool.
|
|||
|
"""
|
|||
|
from . import telisaran
|
|||
|
|
|||
|
from rich.table import Table
|
|||
|
|
|||
|
|
|||
|
class TelisaranCalendar:
|
|||
|
"""
|
|||
|
The Telisaran Calendar
|
|||
|
|
|||
|
Syfdag kindle fate’s first light
|
|||
|
Mimdag have a secret might
|
|||
|
Wodag have the strength to fight
|
|||
|
Thordag curse the wrong, avenge the right
|
|||
|
Freydag love fair beauty’s sight
|
|||
|
|
|||
|
– Dwarven nursery rhyme
|
|||
|
"""
|
|||
|
|
|||
|
def __init__(self, today=None, start=None, end=None):
|
|||
|
|
|||
|
self.today = today
|
|||
|
if not self.today:
|
|||
|
self.today = telisaran.today
|
|||
|
|
|||
|
self._end = end or self.today
|
|||
|
|
|||
|
if start:
|
|||
|
self._start = start
|
|||
|
else:
|
|||
|
self._start = telisaran.datetime(
|
|||
|
year=self._end.year.year,
|
|||
|
season=self._end.season.season_of_year,
|
|||
|
day=1
|
|||
|
)
|
|||
|
|
|||
|
@property
|
|||
|
def season(self):
|
|||
|
table = Table(
|
|||
|
*[n[0:2] for n in telisaran.Day.names],
|
|||
|
title=self._start.season.name.upper()
|
|||
|
)
|
|||
|
row = []
|
|||
|
for day in self._start.season.days:
|
|||
|
row.append("{:02d}".format(day.day_of_season))
|
|||
|
if day.day_of_span == telisaran.Span.length_in_days:
|
|||
|
table.add_row(*row)
|
|||
|
row = []
|
|||
|
return table
|
|||
|
|
|||
|
@property
|
|||
|
def yesterday(self):
|
|||
|
try:
|
|||
|
return self.today - telisaran.Day.length_in_seconds
|
|||
|
except telisaran.InvalidDayError:
|
|||
|
return "Mortals cannot go back before the beginning of time."
|
|||
|
|
|||
|
@property
|
|||
|
def tomorrow(self):
|
|||
|
return self.today + telisaran.Day.length_in_seconds
|
|||
|
|
|||
|
def __repr__(self):
|
|||
|
return "The Telisaran Calendar"
|