64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
import sys
|
|
from sqlalchemy import types
|
|
from sqlalchemy.dialects.postgresql import BIT
|
|
import six
|
|
|
|
try:
|
|
from functools import total_ordering
|
|
except ImportError:
|
|
# Python 2.6 port
|
|
from total_ordering import total_ordering
|
|
from sqlalchemy_utils import i18n
|
|
from .utils import str_coercible
|
|
|
|
|
|
@str_coercible
|
|
@total_ordering
|
|
class WeekDay(object):
|
|
NUM_WEEK_DAYS = 7
|
|
|
|
def __init__(self, index):
|
|
if not (0 <= index < self.NUM_WEEK_DAYS):
|
|
raise ValueError(
|
|
"index must be between 0 and %d" % self.NUM_WEEK_DAYS
|
|
)
|
|
self.index = index
|
|
|
|
def __eq__(self, other):
|
|
if isinstance(other, WeekDay):
|
|
return self.index == other.index
|
|
else:
|
|
return NotImplemented
|
|
|
|
def __hash__(self):
|
|
return hash(self.index)
|
|
|
|
def __lt__(self, other):
|
|
return self.position < other.position
|
|
|
|
def __repr__(self):
|
|
return '%s(%r)' % (self.__class__.__name__, self.index)
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
def get_name(self, width='wide', context='format'):
|
|
names = i18n.get_day_names(
|
|
width,
|
|
context,
|
|
i18n.get_locale()
|
|
)
|
|
return names[self.index]
|
|
|
|
@property
|
|
def name(self):
|
|
return self.get_name()
|
|
|
|
@property
|
|
def position(self):
|
|
return (
|
|
self.index -
|
|
i18n.get_locale().first_week_day
|
|
) % self.NUM_WEEK_DAYS
|