Seite 1 von 1

"Schatz, wie sollen wir es nennen?" Suche passenden Namen...

Verfasst: Dienstag 11. Dezember 2012, 09:22
von mutetella
Guten morgen,

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']))
'DefaultDatetimeArgs' ist eben nur die halbe Wahrheit. Es wird ja letztlich auch ein datetime-object berechnet und zurückgegeben. '...Factory' ist doch eigentlich was anderes, oder? '...Creator' klingt doof, hab' ich auch so noch nicht gesehen. Passt '...Generator'? Oder deutet mein Namensproblem darauf hin, dass die Klasse zu viel macht?

mutetella

Re: "Schatz, wie sollen wir es nennen?" Suche passenden Name

Verfasst: Dienstag 11. Dezember 2012, 09:30
von BlackJack
@mutetella: Ich fänd ja erst einmal interessant zu wissen was das überhaupt machen soll. :-)

Re: "Schatz, wie sollen wir es nennen?" Suche passenden Name

Verfasst: Dienstag 11. Dezember 2012, 09:49
von /me
BlackJack hat geschrieben:@mutetella: Ich fänd ja erst einmal interessant zu wissen was das überhaupt machen soll. :-)
Das löst Probleme die man ohne es nicht hätte. :mrgreen:

Re: "Schatz, wie sollen wir es nennen?" Suche passenden Name

Verfasst: Dienstag 11. Dezember 2012, 09:57
von mutetella
@BlackJack
Ich verwende die Klasse in einer Funktion, die aus einer Argumentenliste datetime- und relativedelta-Argumente ermittelt und daraus ein datetime-object macht:

Code: Alles auswählen

def generate_datetime(datetime_args, date_args_order=None):
    ...
    ...
    datetime_values = DefaultDatetimeArgs()
    while datetime_args:
        arg = datetime_args.pop(0)
        ...
        ...
        arg_name = datetime_arg_names[directive]
        if arg_name not in datetime_values:
            datetime_values[arg_name], datetime_values[arg_name + 's'] = (
                translaters[arg_name](arg, datetime_values[arg_name]))
        elif arg_name in datetime_values:
            #see ticket 33
            raise ValueError(ERR_REPEATED_DATETIME_ARG.format(arg_name))
        else:
            raise ValueError(ERR_NO_VALID_DIRECTIVE.format(directive))
    return datetime_values.create()
Während dem Parsen werden also ermittelte Argumente in die 'DefaultDatetimeArgs'-Instanz gelegt bzw. damit geprüft, ob ein Argument bereits ermittelt wurde, was dann einen Fehler wirft.

mutetella

Re: "Schatz, wie sollen wir es nennen?" Suche passenden Name

Verfasst: Dienstag 11. Dezember 2012, 10:02
von EyDu
Mir ergibt sich der Sinn auch nicht so ganz. Die create-Methode sieht sehr seltsam aus und dann gibt es nebem delta_args noch _delta_args. Ich vermute mal, dass keine Tests nicht alles abdecken?

Aber: Gratulation zu dem gelungenen Threadtitel :-)

Re: "Schatz, wie sollen wir es nennen?" Suche passenden Name

Verfasst: Donnerstag 13. Dezember 2012, 12:13
von mutetella
Ihr hattet Recht... *rtlgrmpf*