Source code for graphenecommon.aio.proposal

# -*- coding: utf-8 -*-
import logging

from .blockchainobject import BlockchainObject, BlockchainObjects
from ..exceptions import ProposalDoesNotExistException
from ..proposal import Proposal as SyncProposal, Proposals as SyncProposals


log = logging.getLogger(__name__)


class Proposal(BlockchainObject, SyncProposal):
    """ Read data about a Proposal Balance in the chain

        :param str id: Id of the proposal
        :param instance blockchain_instance: instance to use when accesing a RPC

    """

    async def __init__(self, data, *args, **kwargs):
        self.define_classes()
        assert self.account_class
        await BlockchainObject.__init__(self, data, *args, **kwargs)

[docs] async def refresh(self): proposal = await self.blockchain.rpc.get_objects([self.identifier]) if not any(proposal): raise ProposalDoesNotExistException await super(Proposal, self).__init__( proposal[0], blockchain_instance=self.blockchain )
@property async def proposer(self): """ Return the proposer of the proposal if available in the backend, else returns None """ if "proposer" in self: return await self.account_class( self["proposer"], blockchain_instance=self.blockchain ) class Proposals(BlockchainObjects, SyncProposals): """ Obtain a list of pending proposals for an account :param str account: Account name :param instance blockchain_instance: instance to use when accesing a RPC """ async def __init__(self, account, *args, **kwargs): self.define_classes() assert self.account_class assert self.proposal_class assert isinstance(account, str) self.identifier = account await BlockchainObjects.__init__(self, account, *args, **kwargs)
[docs] async def refresh(self, *args, **kwargs): account = await self.account_class(self.identifier) proposals = await self.blockchain.rpc.get_proposed_transactions(account["id"]) data = [ await self.proposal_class(x, blockchain_instance=self.blockchain) for x in proposals ] self.store(data, account["id"]) self.store(data, account["name"])