diff --git a/oxrlib/rate.py b/oxrlib/rate.py new file mode 100644 index 0000000000000000000000000000000000000000..fbbc9cbae1615245537b422c93465e88d8cd694f --- /dev/null +++ b/oxrlib/rate.py @@ -0,0 +1,47 @@ +import datetime +import functools +import json + +class Rate: + FIELDS = [ + 'base', + 'disclaimer', + 'license', + 'rates', + 'timestamp', + ] + + @classmethod + def walk_fields(cls, get_field, transform_prefix): + for fieldname in cls.FIELDS: + value = get_field(fieldname) + if value is not None: + try: + transformer = getattr(cls, '{}_{}'.format(transform_prefix, fieldname)) + except AttributeError: + pass + else: + value = transformer(value) + yield (fieldname, value) + + def __init__(self, base, rates, **kwargs): + for key, value in self.walk_fields(kwargs.get, 'deserialize'): + setattr(self, key, value) + self.base = base + self.rates = rates + + @classmethod + def deserialize_timestamp(cls, value): + return datetime.datetime.fromtimestamp(value) + + @classmethod + def serialize_timestamp(cls, value): + return int(value.timestamp()) + + @classmethod + def from_json_file(cls, json_file): + response = json.load(json_file) + return cls(**response) + + def serialize(self): + return dict(self.walk_fields(functools.partial(getattr, self), 'serialize'))