def from_db()

in service/sdk_validator/resdb_validator/transaction.py [0:0]


    def from_db(cls, resdb, tx_dict_list):
        """Helper method that reconstructs a transaction dict that was returned
        from the database. It checks what asset_id to retrieve, retrieves the
        asset from the asset table and reconstructs the transaction.

        Args:
            resdb (:class:`~resdb_validator.tendermint.ResDB`): An instance
                of ResDB used to perform database queries.
            tx_dict_list (:list:`dict` or :obj:`dict`): The transaction dict or
                list of transaction dict as returned from the database.

        Returns:
            :class:`~Transaction`

        """
        return_list = True
        if isinstance(tx_dict_list, dict):
            tx_dict_list = [tx_dict_list]
            return_list = False

        tx_map = {}
        tx_ids = []
        for tx in tx_dict_list:
            tx.update({'metadata': None})
            tx_map[tx['id']] = tx
            tx_ids.append(tx['id'])

        assets = list(resdb.get_assets(tx_ids))
        for asset in assets:
            if asset is not None:
                tx = tx_map[asset['id']]
                del asset['id']
                tx['asset'] = asset

        tx_ids = list(tx_map.keys())
        metadata_list = list(resdb.get_metadata(tx_ids))
        for metadata in metadata_list:
            tx = tx_map[metadata['id']]
            tx.update({'metadata': metadata.get('metadata')})

        if return_list:
            tx_list = []
            for tx_id, tx in tx_map.items():
                tx_list.append(cls.from_dict(tx))
            return tx_list
        else:
            tx = list(tx_map.values())[0]
            return cls.from_dict(tx)