Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import uuid
- import datetime as dt
- from functools import reduce
- class Datagram(object):
- def __init__(self, val=0):
- self.val = val
- def op(self, other):
- return Datagram(self.val+other.val)
- class PrimitiveItem(object):
- def __init__(self, logical_id, datagram, date_created, logical_date):
- self.uuid = uuid.UUID()
- self.logical_id = logical_id
- self.datagram = datagram
- self.logical_date = logical_date
- self.date_created = date_created
- class RollupItem(object):
- def __init__(self, logical_id, uuid_of_previous_rollup_item, datagram, date_created):
- self.uuid = uuid.UUID()
- self.logical_id = logical_id
- self.uuid_of_previous_rollup_item = uuid_of_previous_rollup_item
- self.datagram = datagram
- self.created = date_created
- def get_rollup_item_head_for(logical_id):
- # query data souce for roll up item by logical_id for most recent date,
- # there should be only one snapshot by date
- # or
- # return identity, RollUpItem(uuid.UUID(), None, datagram.identity, dt.today())
- pass
- def get_primitive_items_for(logical_id, date_created):
- # query data source for records by (logical_id, date) -> [items]
- pass
- def combine_rollup_items_for(logical_id, date_created):
- primitive_items = get_primitive_items_for(logical_id, date_created-1)
- head_of_previous_rollup = get_rollup_item_head_for(logical_id)
- acc = reduce(lambda x, y: x.op(y), \
- [primitive_item.datagram for primitive_item in primitive_items])
- # write rollupitem to datasource with date_created
- return RollupItem(logical_id, head_of_previous_rollup, \
- acc.val+head_of_previous_rollup.datagram.val, dt.today())
- if __name__ == '__main__':
- acc = reduce(lambda x, y: x.op(y), \
- [datagram for datagram in [Datagram(1), Datagram(2)]])
- acc = reduce(lambda x, y: x.op(y), \
- [datagram for datagram in [Datagram(1), Datagram(2), Datagram(3)]])
- print(acc.val)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement