Source code for bigchaindb_driver.utils

"""Set of utilities to support various functionalities of the driver.

Attributes:
    ops_map (dict): Mapping between operation strings and classes.
        E.g.: The string ``'CREATE'`` is mapped to
        :class:`~.CreateOperation`.

"""
from bigchaindb.common.transaction import Asset


[docs]class CreateOperation: """Class representing the ``'CREATE'`` transaction operation."""
[docs]class TransferOperation: """Class representing the ``'TRANSFER'`` transaction operation."""
ops_map = { 'CREATE': CreateOperation, 'TRANSFER': TransferOperation, }
[docs]def _normalize_operation(operation): """ Normalizes the given operation string. For now, this simply means converting the given string to uppercase, looking it up in :attr:`~.ops_map`, and returning the corresponding class if present. Args: operation (str): The operation string to convert. Returns: The class corresponding to the given string, :class:`~.CreateOperation` or :class:`~TransferOperation`. .. important:: If the :meth:`str.upper` step, or the :attr:`~.ops_map` lookup fails, the given ``operation`` argument is returned. .. danger:: For specific internal usage only. The behavior is tricky, and is subject to change. """ try: operation = operation.upper() except AttributeError: pass try: operation = ops_map[operation]() except KeyError: pass return operation
[docs]def _normalize_asset(asset, is_transfer=False): """ Normalizes the given asset dictionary. For now, this means converting the given asset dictionary to a :class:`~.bigchaindb.common.transaction.Asset` class. Args: asset (dict): The asset to normalize. is_transfer (boal, optional): Flag used to indicate whether the asset is to be used as part of a `'TRANSFER'` operation or not. Defaults to ``False``. Returns: The :class:`~.bigchaindb.common.transaction.Asset` class, instantiated from the given asset dictionary. .. important:: If the instantiation step fails, ``None`` may be returned. .. danger:: For specific internal usage only. The behavior is tricky, and is subject to change. """ if is_transfer: asset = Asset.from_dict(asset) else: try: asset = Asset(**asset) except (AttributeError, TypeError): if not asset: asset = None return asset