class Payload: def __init__(self, payload): self._payload = SCPayload() self._payload.ParseFromString(payload) @staticmethod def from_bytes(payload): return Payload(payload=payload) @property def action(self): return self._payload.action @property def timestamp(self): return self._payload.timestamp @property def data(self): if self.action == SCPayload.CREATE_AGENT: return self._payload.create_agent if self.action == SCPayload.CREATE_PACKAGE: return self._payload.create_package if self.action == SCPayload.UPDATE_PACKAGE: return self._payload.update_package if self.action == SCPayload.CREATE_REPLANTATION: return self._payload.create_replantation
def get_blockchain_details(self, obj): if obj.blockchain_batch_id: request = self.context['request'] http = 'https' if request.is_secure() else 'http' r = requests.get( f"{http}://{os.environ.get('API_HOST')}:{os.environ.get('API_PORT')}/batches/{obj.blockchain_batch_id}" ) try: transaction = r.json()['data']['transactions'][0] payload = base64.b64decode(transaction['payload']) try: t = SCPayload() t.ParseFromString(payload) payload = str(t).replace('\n', '</br>') if t.timestamp: readable_timestamp = self.parse_timestamp_to_str_datetime( t.timestamp) payload = payload.replace(str(t.timestamp), readable_timestamp) transaction['payload'] = payload except DecodeError: transaction['payload'] = 'System transaction' except (KeyError, IndexError): transaction = {} return transaction return {}