ich tu' mir mal wieder bei der Namensgebung schwer... Folgende Klasse verwende ich, um Argumente zum Erstellen und eventuell Berechnen eines datetime-objects zu sammeln, fehlende Argumente durch defaults zu ersetzen und schließlich ein datetime-object zurückzugeben.
Code: Alles auswählen
class DefaultDatetimeArgs(dict):
DATETIME_ARG_NAMES = ('year', 'month', 'day', 'hour', 'minute')
DELTA_ARG_NAMES = ('years', 'months', 'days', 'hours', 'minutes')
def __init__(self, default_datetime=None):
dict.__init__(self)
default_datetime = default_datetime or datetime.datetime.now()
self.datetime_args = dict(zip(self.DATETIME_ARG_NAMES,
default_datetime.timetuple()))
self.delta_args = dict(zip(self.DELTA_ARG_NAMES,
(0, 0, 0, 0, 0)))
def __missing__(self, key):
if key.endswith('s'):
return self.delta_args[key]
elif not key.endswith('s'):
return self.datetime_args[key]
def _datetime_args(self):
return dict((key, self[key]) for key in self.DATETIME_ARG_NAMES)
def _delta_args(self):
return dict((key, self[key]) for key in self.DELTA_ARG_NAMES)
def create(self):
try:
return (datetime.datetime(**self._datetime_args()) +
relativedelta.relativedelta(**self._delta_args()))
#relativedelta raises several error-types... :-(
except (ValueError, TypeError, OverflowError):
raise ValueError(ERR_NO_VALID_DATETIME_ARGS.format(
self['year'] + self['years'],
self['month'] + self['months'],
self['day'] + self['days'],
self['hour'] + self['hours'],
self['minute'] + self['minutes']))
mutetella