Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. import uuid
  2. import datetime as dt
  3. from functools import reduce
  4.  
  5. class Datagram(object):
  6. def __init__(self, val=0):
  7. self.val = val
  8.  
  9. def op(self, other):
  10. return Datagram(self.val+other.val)
  11.  
  12. class PrimitiveItem(object):
  13. def __init__(self, logical_id, datagram, date_created, logical_date):
  14. self.uuid = uuid.UUID()
  15.  
  16. self.logical_id = logical_id
  17.  
  18. self.datagram = datagram
  19. self.logical_date = logical_date
  20. self.date_created = date_created
  21.  
  22. class RollupItem(object):
  23. def __init__(self, logical_id, uuid_of_previous_rollup_item, datagram, date_created):
  24. self.uuid = uuid.UUID()
  25.  
  26. self.logical_id = logical_id
  27. self.uuid_of_previous_rollup_item = uuid_of_previous_rollup_item
  28.  
  29. self.datagram = datagram
  30. self.created = date_created
  31.  
  32. def get_rollup_item_head_for(logical_id):
  33. # query data souce for roll up item by logical_id for most recent date,
  34. # there should be only one snapshot by date
  35. # or
  36. # return identity, RollUpItem(uuid.UUID(), None, datagram.identity, dt.today())
  37. pass
  38.  
  39. def get_primitive_items_for(logical_id, date_created):
  40. # query data source for records by (logical_id, date) -> [items]
  41. pass
  42.  
  43. def combine_rollup_items_for(logical_id, date_created):
  44. primitive_items = get_primitive_items_for(logical_id, date_created-1)
  45. head_of_previous_rollup = get_rollup_item_head_for(logical_id)
  46. acc = reduce(lambda x, y: x.op(y), \
  47. [primitive_item.datagram for primitive_item in primitive_items])
  48. # write rollupitem to datasource with date_created
  49. return RollupItem(logical_id, head_of_previous_rollup, \
  50. acc.val+head_of_previous_rollup.datagram.val, dt.today())
  51.  
  52. if __name__ == '__main__':
  53. acc = reduce(lambda x, y: x.op(y), \
  54. [datagram for datagram in [Datagram(1), Datagram(2)]])
  55. acc = reduce(lambda x, y: x.op(y), \
  56. [datagram for datagram in [Datagram(1), Datagram(2), Datagram(3)]])
  57. print(acc.val)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement