def _get_transaction(self, hash_bytes: bytes) -> BaseTransaction: if hash_bytes in self.transactions: tx = self._clone(self.transactions[hash_bytes]) if hash_bytes in self.metadata: tx._metadata = self._clone(self.metadata[hash_bytes]) return tx else: raise TransactionDoesNotExist(hash_bytes.hex())
def _get_transaction(self, hash_bytes: bytes) -> 'BaseTransaction': tx = self.get_transaction_from_weakref(hash_bytes) if tx is not None: return tx tx = self._get_transaction_from_db(hash_bytes) if not tx: raise TransactionDoesNotExist(hash_bytes.hex()) assert tx.hash == hash_bytes self._save_to_weakref(tx) return tx
def _get_transaction(self, hash_bytes: bytes) -> 'BaseTransaction': tx = self.get_transaction_from_weakref(hash_bytes) if tx is not None: return tx filepath = self.generate_filepath(hash_bytes) data = self.load_from_json(filepath, TransactionDoesNotExist(hash_bytes.hex())) tx = self.load(data['tx']) if 'meta' in data.keys(): meta = TransactionMetadata.create_from_json(data['meta']) tx._metadata = meta self._save_to_weakref(tx) return tx
def get_all_transactions(self) -> Iterator['BaseTransaction']: tx: Optional['BaseTransaction'] for tx in self.get_all_genesis(): yield tx for f in glob.iglob(os.path.join(self.path, '*/*')): match = self.re_pattern.match(os.path.basename(f)) if match: hash_bytes = bytes.fromhex(match.groups()[0]) tx = self.get_transaction_from_weakref(hash_bytes) if tx is not None: yield tx else: # TODO Return a proxy that will load the transaction only when it is used. data = self.load_from_json(f, TransactionDoesNotExist()) tx = self.load(data['tx']) if 'meta' in data.keys(): meta = TransactionMetadata.create_from_json( data['meta']) tx._metadata = meta self._save_to_weakref(tx) yield tx