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 {}
Exemplo n.º 2
0
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
Exemplo n.º 3
0
def create_entity_payload(faker, uninitialized_entity):
    payload = SCPayload(
        action=SCPayload.CREATE_ENTITY,
        timestamp=faker.random_int(min=1_500_000_000, max=1_545_000_000),
        create_entity=CreateEntityAction(entity=uninitialized_entity),
    )
    return payload
Exemplo n.º 4
0
def create_agent_payload(faker, agent):
    payload = SCPayload(
        action=SCPayload.CREATE_AGENT,
        timestamp=faker.random_int(min=1_500_000_000, max=1_545_000_000),
        create_agent=CreateAgentAction(agent=agent),
    )
    return payload
Exemplo n.º 5
0
def create_entity_batch_payload(faker, uninitialized_entity):
    payload = SCPayload(
        action=SCPayload.CREATE_ENTITY_BATCH,
        timestamp=faker.random_int(min=1_500_000_000, max=1_545_000_000),
        create_entity_batch=CreateEntityBatchAction(
            entities=[uninitialized_entity]),
    )
    return payload
Exemplo n.º 6
0
def move_entity_batch_payload_exporter_arrived(faker,
                                               entity_batch_exporter_arrived):
    payload = SCPayload(
        action=SCPayload.MOVE_ENTITY_BATCH,
        timestamp=faker.random_int(min=1_500_000_000, max=1_545_000_000),
        move_entity_batch=MoveEntityBatchAction(
            entity_batch_id=entity_batch_exporter_arrived.id,
            status=EntityBatch.DEPARTED,
        ),
    )
    return payload
Exemplo n.º 7
0
def move_entity_batch_payload_producer_departed(
        faker, entity_batch_producer_departed):
    payload = SCPayload(
        action=SCPayload.MOVE_ENTITY_BATCH,
        timestamp=faker.random_int(min=1_500_000_000, max=1_545_000_000),
        move_entity_batch=MoveEntityBatchAction(
            entity_batch_id=entity_batch_producer_departed.id,
            status=EntityBatch.ARRIVED,
        ),
    )
    return payload
Exemplo n.º 8
0
def move_entity_batch_payload(faker, entity_batch):
    payload = SCPayload(
        action=SCPayload.MOVE_ENTITY_BATCH,
        timestamp=faker.random_int(min=1_500_000_000, max=1_545_000_000),
        move_entity_batch=MoveEntityBatchAction(
            entity_batch_id=entity_batch.id,
            status=faker.random_element(elements=(EntityBatch.ARRIVED,
                                                  EntityBatch.DEPARTED)),
        ),
    )
    return payload
Exemplo n.º 9
0
 def __init__(self, payload):
     self._payload = SCPayload()
     self._payload.ParseFromString(payload)
Exemplo n.º 10
0
 def _create_payload() -> SCPayload:
     return SCPayload(timestamp=int(time.time()))