Files
dnd-db-site/faerun_calendar/models.py
T

80 lines
2.4 KiB
Python

from django.db import models
class FaerunDate:
LAST_MONTH = 18
LEAP_MONTH = 11
ONE_DAY_MONTHS = (2, 6, 10, 11, 14, 17)
LAST_DAY = 30
def __init__(self, year: int, month: int, day: int):
self.year = year
self.month = month
self.day = day
self.is_leap_year = self._is_leap_year()
self.is_valid = self._is_valid()
def __repr__(self):
return f'{type(self).__name__}({self.year}, {self.month}, {self.day})'
def _is_leap_year(self) -> bool:
if self.year == 0:
return False
elif self.year % 400 == 0:
return True
elif self.year % 100 == 0:
return False
elif self.year % 4 == 0:
return True
return False
def _is_valid(self) -> bool:
if self.year == 0:
return False
if not 0 < self.month <= FaerunDate.LAST_MONTH:
return False
if not self.is_leap_year and self.month == self.__class__.LEAP_MONTH:
return False
if not 0 < self.day <= FaerunDate.LAST_DAY:
return False
if self.day > 1 and self.month in FaerunDate.ONE_DAY_MONTHS:
return False
return True
class CalendarData(models.Model):
current_year = models.SmallIntegerField('CurrentYear')
current_month = models.SmallIntegerField('CurrentMonth')
current_day = models.SmallIntegerField('CurrentDay')
leap_month = models.SmallIntegerField('LeapMonth')
def __str__(self):
return f'({self.current_year}, {self.current_month}, {self.current_day}, {self.leap_month})'
class MonthData(models.Model):
number = models.SmallIntegerField('Number', unique=True)
name = models.CharField('Name', max_length=64, unique=True)
folkname = models.CharField('Folkname', max_length=64, blank=True)
is_oneday = models.BooleanField('IsOneday')
def __str__(self):
return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday})'
class Event(models.Model):
year = models.SmallIntegerField('Year')
month = models.SmallIntegerField('Month')
day = models.SmallIntegerField('Day')
time = models.TimeField('Time')
title = models.CharField('Title', max_length=250)
description = models.TextField('Description', max_length=2500)
def __str__(self):
return f'({self.year}, {self.month}, {self.day}, {self.time}, {self.title})'