2
0

contract.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import json
  2. import uuid
  3. from lib.address import Address
  4. class Contract(object):
  5. class Term:
  6. def __init__(self):
  7. self.id = None
  8. self.title = None
  9. self.description = None
  10. self.deadline = None
  11. self.modified_by = None
  12. self.last_comment = None
  13. self.state = None
  14. def create(self, title: str, desc: str, deadline: int):
  15. self.id = str(uuid.uuid1())
  16. self.title = title
  17. self.description = desc
  18. self.deadline = deadline
  19. self.log(f'Created: {self.title}')
  20. def update(self, key: str, value, by: Address, comment: str):
  21. if hasattr(self, key):
  22. setattr(self, key, value)
  23. self.modified_by = by
  24. self.last_comment = comment
  25. return True
  26. return False
  27. def serialize(self):
  28. obj = {
  29. '@type': 'term',
  30. 'id': self.id,
  31. 'title': self.title,
  32. 'description': self.description,
  33. 'deadline': self.deadline
  34. }
  35. self.log('Serialized')
  36. return obj
  37. def log(self, text):
  38. print(f'[ TERM ] {text}')
  39. def __init__(self):
  40. self.id = None
  41. self.client = None
  42. self.contractor = None
  43. self.deadline = None
  44. self.description = None
  45. self.title = None
  46. self.price = None
  47. self.people = None
  48. self.initiator = None
  49. self.terms = []
  50. self.initial_block = None
  51. self.modified_by = None
  52. self.comment = None
  53. def add_term(self, term: Term):
  54. self.log(f'Term added: {term.id} | {term.title}')
  55. self.terms.append(term)
  56. def update(self, key: str, value, by: Address, comment: str):
  57. if self.has_attribute(key):
  58. self.log(f'Updating {key}. {getattr(self, key)} => {value}')
  59. setattr(self, key, value)
  60. self.modified_by = by
  61. self.comment = comment
  62. return True
  63. return False
  64. def create(self, title: str, desc: str, deadline: int, price: float, **kwargs):
  65. if self.id is None:
  66. self.id = str(uuid.uuid1())
  67. self.title = title
  68. self.description = desc
  69. self.deadline = deadline
  70. self.price = price
  71. self.log(f'Contract created: {self.id}')
  72. return True
  73. return False
  74. def serialize(self):
  75. # TODO: Add all properties
  76. term_serialize = []
  77. for term in self.terms:
  78. term_serialize.append(term.serialize())
  79. obj = {
  80. 'id': self.id,
  81. 'terms': term_serialize
  82. }
  83. self.log(f'Serialized: {len(term_serialize)} terms')
  84. return obj
  85. def log(self, text):
  86. print(f'[ CONTR ] {text}')
  87. def has_attribute(self, key):
  88. return hasattr(self, key)