diff --git a/csventry.py b/csventry.py index c6cba52..53562f0 100644 --- a/csventry.py +++ b/csventry.py @@ -1,10 +1,31 @@ import csv +class CSVFieldUnknown(Exception): + def __init__(self, cls, field): + super(CSVFieldUnknown, self).__init__( + "Unknown field %s for class %s" % ( + field, + cls.__name__ + ) + ) + class CSVEntry: + _contents = {} def __init__(self, **kvargs): - assert ( set(kvargs.keys()) - set(self.__class__.fields) ) == set() for field in self.__class__.fields: - setattr(self, field, kvargs[field] or "") + setattr(self, field, "") + for field, val in kvargs.items(): + setattr(self, field, val) + + def __getattr__(self, key): + if key not in self.__class__.fields: + raise CSVFieldUnknown(self.__class__, key) + return self._contents[key] + + def __setattr__(self, key, value): + if key not in self.__class__.fields: + raise CSVFieldUnknown(self.__class__, key) + self._contents[key] = value @classmethod def fromRow(cls, row):