commit dcf03b27080d1df8f627fe2372353cdde586162b
parent 96e0a97c3b51f4237973611ff46116664224d5f9
Author: nolash <dev@holbrook.no>
Date: Mon, 23 Aug 2021 08:47:01 +0200
Add docstrings to cli rpc util
Diffstat:
1 file changed, 55 insertions(+), 6 deletions(-)
diff --git a/chainlib/cli/rpc.py b/chainlib/cli/rpc.py
@@ -9,7 +9,7 @@ from chainlib.eth.nonce import (
RPCNonceOracle,
OverrideNonceOracle,
)
-from chainlib.eth.gas import (
+from chainlib.eth.fee import (
RPCGasOracle,
OverrideGasOracle,
)
@@ -19,6 +19,13 @@ logg = logging.getLogger(__name__)
class Rpc:
+ """Convenience wrapper to build rpc connection from processed configuration values.
+
+ :param cls: RPC connection class to instantiate
+ :type cls: chainlib.connection.RPCConnection implementation
+ :param wallet: Add wallet backend to instance
+ :type wallet: chainlib.cli.wallet.Wallet
+ """
def __init__(self, cls, wallet=None):
self.constructor = cls
@@ -27,10 +34,25 @@ class Rpc:
self.chain_spec = None
self.wallet = wallet
self.nonce_oracle = None
- self.gas_oracle = None
+ self.fee_oracle = None
def connect_by_config(self, config):
+ """Create a connection using the provided configuration, as rendered by chainlib.cli.config.Config.
+
+ The connection url string is fetched from the "RPC_HTTP_PROVIDER" configuration key. Currently only HTTP connection is supported. Basic HTTP auth is supported using the "RPC_HTTP_USERNAME" and "RPC_HTTP_PASSWORD" keys together with "RPC_HTTP_AUTHENTICATION" set to "basic".
+
+ The "CHAIN_SPEC" value is used for the chain context of the connection.
+
+ If the sequence flag was set in the confiruation (which generates the configuration key "_SEQ"), a sequential integer generator will be used for rpc ids. Otherwise uuids will be used.
+
+ If the standard arguments for nonce and fee price/price have been defined (which generate the configuration keys "_NONCE", "_FEE_PRICE" and "_FEE_LIMIT" respectively) , the corresponding overrides for fee and nonce generators will be defined.
+
+ :param config: Processed configuration
+ :type config: confini.Config
+ :rtype: chainlib.connection.RPCConnection
+ :returns: An established rpc connection
+ """
auth = None
if config.get('RPC_HTTP_AUTHENTICATION') == 'basic':
from chainlib.auth import BasicAuth
@@ -53,30 +75,57 @@ class Rpc:
fee_price = config.get('_FEE_PRICE')
fee_limit = config.get('_FEE_LIMIT')
if fee_price != None or fee_limit != None:
- self.gas_oracle = OverrideGasOracle(price=fee_price, limit=fee_limit, conn=self.conn, id_generator=self.id_generator)
+ self.fee_oracle = OverrideGasOracle(price=fee_price, limit=fee_limit, conn=self.conn, id_generator=self.id_generator)
else:
- self.gas_oracle = RPCGasOracle(self.conn, id_generator=self.id_generator)
+ self.fee_oracle = RPCGasOracle(self.conn, id_generator=self.id_generator)
return self.conn
def get_nonce_oracle(self):
+ """Nonce oracle getter.
+
+ :rtype: chainlib.nonce.NonceOracle
+ :returns: Nonce oracle
+ """
return self.nonce_oracle
- def get_gas_oracle(self):
- return self.gas_oracle
+ def get_fee_oracle(self):
+ """Fee oracle getter.
+
+ :rtype: chainlib.fee.FeeOracle
+ :returns: Fee oracle
+ """
+ return self.fee_oracle
def can_sign(self):
+ """Check if instance has signer capability.
+
+ :rtype: bool
+ :returns: True if signing is possible
+ """
return self.wallet != None and self.wallet.signer != None
def get_signer(self):
+ """Signer getter.
+
+ :raises chainlib.error.SignerMissingException: Instance has no signer defined
+ :rtype: Signer implementation (todo: define base interface class)
+ :returns: Signer
+ """
if self.wallet.signer == None:
raise SignerMissingException()
return self.wallet.signer
def get_sender_address(self):
+ """Wallet address getter.
+
+ :raises AttributeError: Instance has no signed defined
+ :rtype: str
+ :returns: Wallet address in canonical string representation
+ """
return self.wallet.signer_address