''' Created on 2 déc. 2014 @author: inso ''' import re from . import Document class Status(Document): ''' Version: VERSION Type: Status Currency: CURRENCY_NAME Status: STATUS Block: BLOCK From: SENDER To: RECIPIENT ''' re_type = re.compile("Type: (Status)") re_status = re.compile("Status: (NEW|NEW_BACK|UP|UP_BACK|DOWN)") re_block = re.compile("Block: ([0-9]+-[0-9a-fA-F]{5,40})\n") re_from = re.compile("From: ([1-9A-Za-z][^OIl]{42,45})\n") re_to = re.compile("To: ([1-9A-Za-z][^OIl]{42,45})\n") def __init__(self, version, currency, status, blockid, sender, recipient, signature): ''' Constructor ''' if signature: super().__init__(version, currency, [signature]) else: super().__init__(version, currency, []) self.status = status self.blockid = blockid self.sender = sender self.recipient = recipient @classmethod def from_signed_raw(cls, raw): lines = raw.splitlines(True) n = 0 version = int(Status.re_version.match(lines[n]).group(1)) n = n + 1 Status.re_type.match(lines[n]).group(1) n = n + 1 currency = Status.re_currency.match(lines[n]).group(1) n = n + 1 status = Status.re_status.match(lines[n]).group(1) n = n + 1 blockid = Status.re_block.match(lines[n]).group(1) n = n + 1 sender = Status.re_from.match(lines[n]).group(1) n = n + 1 recipient = Status.re_to.match(lines[n]).group(1) n = n + 1 signature = Status.re_signature.match(lines[n]).group(1) n = n + 1 return cls(version, currency, status, blockid, sender, recipient, signature) def raw(self): return '''Version: {0} Type: Status Currency: {1} Status: {2} Block: {3} From: {4} To: {5} '''.format(self.version, self.currency, self.status, self.blockid, self.sender, self.recipient)