예제 #1
0
 def to_bytes(cls, txo_rows, extra_txo_rows, offset=0, total=None) -> bytes:
     page = OutputsMessage()
     page.offset = offset
     page.total = total or len(txo_rows)
     for row in txo_rows:
         cls.row_to_message(row, page.txos.add())
     for row in extra_txo_rows:
         cls.row_to_message(row, page.extra_txos.add())
     return page.SerializeToString()
예제 #2
0
파일: result.py 프로젝트: y1027/lbry-sdk
 def from_bytes(cls, data: bytes) -> 'Outputs':
     outputs = OutputsMessage()
     outputs.ParseFromString(data)
     txs = set()
     for txo_message in chain(outputs.txos, outputs.extra_txos):
         if txo_message.WhichOneof('meta') == 'error':
             continue
         txs.add((hexlify(txo_message.tx_hash[::-1]).decode(), txo_message.height))
     return cls(outputs.txos, outputs.extra_txos, txs, outputs.offset, outputs.total)
예제 #3
0
 def to_bytes(cls, txo_rows, extra_txo_rows, offset=0, total=None, blocked: Censor = None) -> bytes:
     page = OutputsMessage()
     page.offset = offset
     if total is not None:
         page.total = total
     if blocked is not None:
         blocked.to_message(page)
     for row in txo_rows:
         cls.row_to_message(row, page.txos.add(), extra_txo_rows)
     for row in extra_txo_rows:
         cls.row_to_message(row, page.extra_txos.add(), extra_txo_rows)
     return page.SerializeToString()
예제 #4
0
 def to_message(self, outputs: OutputsMessage, extra_txo_rows):
     outputs.blocked_total = self.total
     for censoring_channel_hash, count in self.censored.items():
         blocked = outputs.blocked.add()
         blocked.count = count
         set_reference(blocked.channel, censoring_channel_hash,
                       extra_txo_rows)
예제 #5
0
    def to_bytes(cls,
                 txo_rows,
                 extra_txo_rows,
                 offset=0,
                 total=None,
                 blocked: Censor = None) -> bytes:
        page = OutputsMessage()
        page.offset = offset
        if total is not None:
            page.total = total
        if blocked is not None:
            blocked.to_message(page, extra_txo_rows)
        for row in extra_txo_rows:
            txo_message: 'OutputsMessage' = page.extra_txos.add()
            if not isinstance(row, Exception):
                if row.channel_hash:
                    set_reference(txo_message.claim.channel, row.channel_hash,
                                  extra_txo_rows)
                if row.reposted_claim_hash:
                    set_reference(txo_message.claim.repost,
                                  row.reposted_claim_hash, extra_txo_rows)
            cls.encode_txo(txo_message, row)

        for row in txo_rows:
            # cls.row_to_message(row, page.txos.add(), extra_txo_rows)
            txo_message: 'OutputsMessage' = page.txos.add()
            cls.encode_txo(txo_message, row)
            if not isinstance(row, Exception):
                if row.channel_hash:
                    set_reference(txo_message.claim.channel, row.channel_hash,
                                  extra_txo_rows)
                if row.reposted_claim_hash:
                    set_reference(txo_message.claim.repost,
                                  row.reposted_claim_hash, extra_txo_rows)
            elif isinstance(row, ResolveCensoredError):
                set_reference(txo_message.error.blocked.channel, row.censor_id,
                              extra_txo_rows)
        return page.SerializeToString()
예제 #6
0
 def to_message(self, outputs: OutputsMessage):
     outputs.blocked_total = self.total
     for censoring_channel_hash, count in self.censored.items():
         block = outputs.blocked.add()
         block.count = count
         block.channel_hash = censoring_channel_hash