bug: Fix documentation compile and config dumps #2

Merged
lash merged 21 commits from lash/docs-and-dumps into master 2021-12-21 16:00:02 +01:00
10 changed files with 59 additions and 28 deletions
Showing only changes of commit a71ec59fb2 - Show all commits

View File

@ -16,12 +16,12 @@ class ChainSpec:
:param tag: Descriptive tag :param tag: Descriptive tag
:type tag: str :type tag: str
""" """
def __init__(self, engine, common_name, network_id, tag=None): def __init__(self, arch, fork, network_id, common_name=None):
self.o = { self.o = {
'engine': engine, 'arch': arch,
'common_name': common_name, 'fork': fork,
'network_id': network_id, 'network_id': network_id,
'tag': tag, 'common_name': common_name,
} }
def network_id(self): def network_id(self):
@ -48,7 +48,7 @@ class ChainSpec:
:rtype: str :rtype: str
:returns: engine :returns: engine
""" """
return self.o['engine'] return self.o['arch']
def common_name(self): def common_name(self):
@ -78,10 +78,10 @@ class ChainSpec:
o = chain_str.split(':') o = chain_str.split(':')
if len(o) < 3: if len(o) < 3:
raise ValueError('Chain string must have three sections, got {}'.format(len(o))) raise ValueError('Chain string must have three sections, got {}'.format(len(o)))
tag = None common_name = None
if len(o) == 4: if len(o) == 4:
tag = o[3] common_name = o[3]
return ChainSpec(o[0], o[1], int(o[2]), tag) return ChainSpec(o[0], o[1], int(o[2]), common_name)
@staticmethod @staticmethod
@ -100,7 +100,7 @@ class ChainSpec:
:rtype: chainlib.chain.ChainSpec :rtype: chainlib.chain.ChainSpec
:returns: Resulting chain spec :returns: Resulting chain spec
""" """
return ChainSpec(o['engine'], o['common_name'], o['network_id'], tag=o['tag']) return ChainSpec(o['arch'], o['fork'], o['network_id'], common_name=o['common_name'])
def asdict(self): def asdict(self):
@ -113,7 +113,7 @@ class ChainSpec:
def __str__(self): def __str__(self):
s = '{}:{}:{}'.format(self.o['engine'], self.o['common_name'], self.o['network_id']) s = '{}:{}:{}'.format(self.o['arch'], self.o['fork'], self.o['network_id'])
if self.o['tag'] != None: if self.o['common_name'] != None:
s += ':' + self.o['tag'] s += ':' + self.o['common_name']
return s return s

View File

@ -57,7 +57,7 @@ class ArgumentParser(argparse.ArgumentParser):
self.pos_args = [] self.pos_args = []
def add_positional(self, name, type=str, help=None, required=True): def add_positional(self, name, type=str, help=None, append=False, required=True):
"""Add a positional argument. """Add a positional argument.
Stdin piping will only be possible in the event a single positional argument is defined. Stdin piping will only be possible in the event a single positional argument is defined.
@ -73,7 +73,7 @@ class ArgumentParser(argparse.ArgumentParser):
:param required: If true, argument will be set to required :param required: If true, argument will be set to required
:type required: bool :type required: bool
""" """
self.pos_args.append((name, type, help, required,)) self.pos_args.append((name, type, help, required, append,))
def parse_args(self, argv=sys.argv[1:]): def parse_args(self, argv=sys.argv[1:]):
@ -88,13 +88,23 @@ class ArgumentParser(argparse.ArgumentParser):
""" """
if len(self.pos_args) == 1: if len(self.pos_args) == 1:
arg = self.pos_args[0] arg = self.pos_args[0]
self.add_argument(arg[0], nargs='?', type=arg[1], default=stdin_arg(), help=arg[2]) if arg[4]:
self.add_argument(arg[0], nargs='*', type=arg[1], default=stdin_arg(), help=arg[2])
else:
self.add_argument(arg[0], nargs='?', type=arg[1], default=stdin_arg(), help=arg[2])
else: else:
for arg in self.pos_args: for arg in self.pos_args:
if arg[3]: if arg[3]:
self.add_argument(arg[0], type=arg[1], help=arg[2]) if arg[4]:
logg.debug('argumen')
self.add_argument(arg[0], nargs='+', type=arg[1], help=arg[2])
else:
self.add_argument(arg[0], type=arg[1], help=arg[2])
else: else:
self.add_argument(arg[0], nargs='?', type=arg[1], help=arg[2]) if arg[4]:
self.add_argument(arg[0], nargs='*', type=arg[1], help=arg[2])
else:
self.add_argument(arg[0], type=arg[1], help=arg[2])
args = super(ArgumentParser, self).parse_args(args=argv) args = super(ArgumentParser, self).parse_args(args=argv)
if args.dumpconfig: if args.dumpconfig:

View File

@ -170,7 +170,6 @@ class Config(confini.Config):
args_override = {} args_override = {}
if arg_flags & Flag.PROVIDER: if arg_flags & Flag.PROVIDER:
args_override['RPC_HTTP_PROVIDER'] = getattr(args, 'p')
args_override['RPC_PROVIDER'] = getattr(args, 'p') args_override['RPC_PROVIDER'] = getattr(args, 'p')
args_override['RPC_DIALECT'] = getattr(args, 'rpc_dialect') args_override['RPC_DIALECT'] = getattr(args, 'rpc_dialect')
if arg_flags & Flag.CHAIN_SPEC: if arg_flags & Flag.CHAIN_SPEC:

View File

@ -1,9 +1,6 @@
# standard imports # standard imports
import logging import logging
# external imports
from crypto_dev_signer.keystore.dict import DictKeystore
logg = logging.getLogger(__name__) logg = logging.getLogger(__name__)
@ -19,7 +16,7 @@ class Wallet:
:todo: sign_transaction_to_rlp from chainlib-eth must be renamed to sign_transaction_to_wire, and included as part of signer interface :todo: sign_transaction_to_rlp from chainlib-eth must be renamed to sign_transaction_to_wire, and included as part of signer interface
""" """
def __init__(self, signer_cls, keystore=DictKeystore(), checksummer=None): def __init__(self, signer_cls, keystore=None, checksummer=None):
self.signer_constructor = signer_cls self.signer_constructor = signer_cls
self.keystore = keystore self.keystore = keystore
self.signer = None self.signer = None

View File

@ -23,7 +23,10 @@ from .jsonrpc import (
ErrorParser, ErrorParser,
) )
from .http import PreemptiveBasicAuthHandler from .http import PreemptiveBasicAuthHandler
from .error import JSONRPCException from .error import (
JSONRPCException,
RPCException,
)
from .auth import Auth from .auth import Auth
logg = logging.getLogger(__name__) logg = logging.getLogger(__name__)
@ -308,8 +311,11 @@ class JSONRPCHTTPConnection(HTTPConnection):
) )
ho = build_opener(handler) ho = build_opener(handler)
install_opener(ho) install_opener(ho)
r = urlopen(req, data=data.encode('utf-8')) try:
r = urlopen(req, data=data.encode('utf-8'))
except URLError as e:
raise RPCException(e)
result = json.load(r) result = json.load(r)
logg.debug('(HTTP) recv {}'.format(result)) logg.debug('(HTTP) recv {}'.format(result))

View File

@ -1,5 +1,4 @@
[rpc] [rpc]
http_provider =
provider = provider =
auth = auth =
credentials = credentials =

View File

@ -1,3 +1,3 @@
crypto-dev-signer>=0.4.15rc2,<=0.4.15 funga>=0.5.1a1,<0.6.0
pysha3==1.0.2 pysha3==1.0.2
hexathon~=0.0.1a8 hexathon~=0.0.1a8

View File

@ -1,6 +1,6 @@
[metadata] [metadata]
name = chainlib name = chainlib
version = 0.0.9rc1 version = 0.0.10a7
description = Generic blockchain access library and tooling description = Generic blockchain access library and tooling
author = Louis Holbrook author = Louis Holbrook
author_email = dev@holbrook.no author_email = dev@holbrook.no

View File

@ -7,6 +7,13 @@ from tests.base import TestBase
class TestChain(TestBase): class TestChain(TestBase):
def test_chain_spec_str(self):
s = ChainSpec('foo', 'bar', 3, 'baz')
self.assertEqual('foo:bar:3:baz', str(s))
s = ChainSpec('foo', 'bar', 3)
self.assertEqual('foo:bar:3', str(s))
def test_chain_spec(self): def test_chain_spec(self):
s = ChainSpec.from_chain_str('foo:bar:3') s = ChainSpec.from_chain_str('foo:bar:3')
@ -18,5 +25,18 @@ class TestChain(TestBase):
s = ChainSpec.from_chain_str('foo') s = ChainSpec.from_chain_str('foo')
def test_chain_spec_dict(self):
s = 'foo:bar:3:baz'
c = ChainSpec.from_chain_str('foo:bar:3:baz')
d = c.asdict()
self.assertEqual(d['arch'], 'foo')
self.assertEqual(d['fork'], 'bar')
self.assertEqual(d['network_id'], 3)
self.assertEqual(d['common_name'], 'baz')
cc = ChainSpec.from_dict(d)
self.assertEqual(s, str(cc))
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()