Add env/config descriptions from ini dir
This commit is contained in:
parent
92fb016014
commit
af7f977007
@ -1,15 +1,35 @@
|
||||
# standard imports
|
||||
import os
|
||||
|
||||
# external imports
|
||||
import confini
|
||||
|
||||
# local imports
|
||||
from .base import (
|
||||
Flag,
|
||||
argflag_std_target,
|
||||
)
|
||||
|
||||
def apply_groff(collection, v, arg=None):
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
data_dir = os.path.join(script_dir, '..', 'data')
|
||||
|
||||
|
||||
def apply_groff(collection, v, arg=None, typ='arg'):
|
||||
s = ''
|
||||
for flag in collection:
|
||||
if len(s) > 0:
|
||||
s += ', '
|
||||
s += '\\fB' + flag
|
||||
s += format_groff(flag, v, arg=arg, typ=typ)
|
||||
return s
|
||||
|
||||
|
||||
def format_groff(k, v, arg=None, typ='arg'):
|
||||
s = ''
|
||||
if typ == 'env':
|
||||
s += '\\fI'
|
||||
else:
|
||||
s += '\\fB'
|
||||
s += k
|
||||
if arg != None:
|
||||
s += ' \\fI' + arg
|
||||
s += '\\fP'
|
||||
@ -19,11 +39,12 @@ def apply_groff(collection, v, arg=None):
|
||||
|
||||
class DocEntry:
|
||||
|
||||
def __init__(self, *args, argvalue=None):
|
||||
def __init__(self, *args, argvalue=None, typ='arg'):
|
||||
self.flags = args
|
||||
self.v = argvalue
|
||||
self.render = self.get_empty
|
||||
self.groff = None
|
||||
self.typ = typ
|
||||
|
||||
|
||||
def __check_line_default(self, m):
|
||||
@ -51,7 +72,7 @@ class DocEntry:
|
||||
v = self.groff
|
||||
if v == None:
|
||||
v = self.plain
|
||||
s = apply_groff(self.flags, v, arg=self.v)
|
||||
s = apply_groff(self.flags, v, arg=self.v, typ=self.typ)
|
||||
return s
|
||||
|
||||
|
||||
@ -61,11 +82,12 @@ class DocEntry:
|
||||
|
||||
class DocGenerator:
|
||||
|
||||
def __init__(self, arg_flags, config):
|
||||
self.config = config
|
||||
# def __init__(self, arg_flags, config):
|
||||
def __init__(self, arg_flags):
|
||||
#self.config = config
|
||||
self.arg_flags = arg_flags
|
||||
self.docs = {}
|
||||
self.envs = {}
|
||||
# self.envs = {}
|
||||
|
||||
|
||||
def __str__(self):
|
||||
@ -86,15 +108,6 @@ class DocGenerator:
|
||||
return s
|
||||
|
||||
|
||||
def get_args(self):
|
||||
s = ''
|
||||
ks = list(self.docs.keys())
|
||||
ks.sort()
|
||||
for k in ks:
|
||||
s += str(self.docs[k]) + "\n"
|
||||
return s
|
||||
|
||||
|
||||
def override_arg(self, k, v, args):
|
||||
o = self.docs[k]
|
||||
#g.docs[v[0]].groff = v[1].rstrip()
|
||||
@ -105,12 +118,12 @@ class DocGenerator:
|
||||
for i in range(l):
|
||||
o.flags.append(args[i])
|
||||
|
||||
|
||||
def process_env(self):
|
||||
for k in self.config.all():
|
||||
if k[0] == '_':
|
||||
continue
|
||||
self.envs[k] = None
|
||||
#
|
||||
# def process_env(self):
|
||||
# for k in self.config.all():
|
||||
# if k[0] == '_':
|
||||
# continue
|
||||
# self.envs[k] = None
|
||||
|
||||
|
||||
def process_arg(self):
|
||||
@ -255,4 +268,54 @@ class DocGenerator:
|
||||
|
||||
def process(self):
|
||||
self.process_arg()
|
||||
self.process_env()
|
||||
# self.process_env()
|
||||
|
||||
|
||||
class EnvDocGenerator:
|
||||
|
||||
def __init__(self, arg_flags, override=None):
|
||||
self.arg_flags = arg_flags
|
||||
self.envs = {}
|
||||
env_dir = os.path.join(data_dir, 'env')
|
||||
self.config = confini.Config(env_dir, override_dirs=override)
|
||||
self.config.process()
|
||||
|
||||
|
||||
def __add(self, k):
|
||||
v = format_groff(k, self.config.get(k), None, typ='env')
|
||||
self.envs[k] = v
|
||||
|
||||
|
||||
def process(self):
|
||||
ks = []
|
||||
if self.arg_flags & Flag.PROVIDER:
|
||||
ks += [
|
||||
'RPC_PROVIDER',
|
||||
'RPC_DIALECT',
|
||||
]
|
||||
if self.arg_flags & Flag.RPC_AUTH:
|
||||
ks += [
|
||||
'RPC_AUTH',
|
||||
'RPC_CREDENTIALS',
|
||||
]
|
||||
|
||||
if self.arg_flags & Flag.CHAIN_SPEC:
|
||||
ks.append('CHAIN_SPEC')
|
||||
|
||||
if self.arg_flags & Flag.KEY_FILE:
|
||||
ks += [
|
||||
'WALLET_KEY_FILE',
|
||||
'WALLET_PASSPHRASE',
|
||||
]
|
||||
|
||||
for k in ks:
|
||||
self.__add(k)
|
||||
|
||||
|
||||
def __str__(self):
|
||||
s = ''
|
||||
ks = list(self.envs.keys())
|
||||
ks.sort()
|
||||
for k in ks:
|
||||
s += str(self.envs[k]) + "\n"
|
||||
return s
|
||||
|
14
chainlib/data/env/env.ini
vendored
Normal file
14
chainlib/data/env/env.ini
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
[rpc]
|
||||
provider = Fully-qualified URL to the RPC endpoint of the blockchain node.
|
||||
auth = Authentication method to use for the \fIRPC_PROVIDER\fP. Currently only \fIbasic\fP is supported.
|
||||
credentials = Authentication credentials to use for \fIRPC_AUTH\fP. For \fIbasic\fP authentication the value must be given as \fI<user>:<pass>\fP.
|
||||
dialect = Enables translations of EVM node specific formatting and response codes.
|
||||
scheme = (needs content)
|
||||
verify = (needs content)
|
||||
|
||||
[chain]
|
||||
spec = String specifying the type of chain connected to, in the format \fI<engine>:<fork>:<network_id>:<common_name>\fP. For EVM nodes the \fIengine\fP value will always be \fIevm\fP.
|
||||
|
||||
[wallet]
|
||||
key_file = The wallet key file containing private key to use for transaction signing. Overridden by \fB-y\fP.
|
||||
passphrase = Passphrase to unlock wallet. \fBWARNING:\fP it is \fBunsafe\fP to pass the passphrase as an environment variable. If the key unlocks something of value, the passphrase should rather be in a configuration file, preferably as an encrypted entry. Alternatively, a passphrase can be read from file using the \fB--passphrase-file\fP option. Files containing passphrases should only be accessible by the owner.
|
@ -10,6 +10,7 @@ import shutil
|
||||
from hexathon import strip_0x, add_0x
|
||||
|
||||
from chainlib.cli.man import (
|
||||
EnvDocGenerator,
|
||||
DocGenerator,
|
||||
apply_groff,
|
||||
)
|
||||
@ -28,7 +29,7 @@ argparser.add_argument('-n', help='tool name to use for man filename')
|
||||
argparser.add_argument('-d', default='.', help='output directory')
|
||||
argparser.add_argument('-v', action='store_true', help='turn on debug logging')
|
||||
argparser.add_argument('--overrides-file', dest='overrides_file', help='load options description override from file')
|
||||
argparser.add_argument('--overrides-env-file', dest='overrides_env_file', help='load envionment description overrides from file')
|
||||
argparser.add_argument('--overrides-env-dir', dest='overrides_env_dir', help='load envionment description override config from directory')
|
||||
argparser.add_argument('header_file', help='groff file containing heading, synopsis and description')
|
||||
args = argparser.parse_args(sys.argv[1:])
|
||||
|
||||
@ -39,9 +40,10 @@ if args.v:
|
||||
b = bytes.fromhex(strip_0x(args.b))
|
||||
flags = int.from_bytes(b, byteorder='little')
|
||||
|
||||
empty_args = ChainlibArgumentParser(flags).parse_args([])
|
||||
config = Config.from_args(empty_args, arg_flags=flags)
|
||||
g = DocGenerator(flags, config)
|
||||
#empty_args = ChainlibArgumentParser(flags).parse_args([])
|
||||
#config = Config.from_args(empty_args, arg_flags=flags)
|
||||
#g = DocGenerator(flags, config)
|
||||
g = DocGenerator(flags)
|
||||
|
||||
toolname = args.n
|
||||
if toolname == None:
|
||||
@ -66,18 +68,8 @@ if args.overrides_file != None:
|
||||
f.close()
|
||||
|
||||
|
||||
s_env = ''
|
||||
if args.overrides_env_file != None:
|
||||
f = open(args.overrides_env_file, 'r')
|
||||
while True:
|
||||
s = f.readline()
|
||||
if len(s) == 0:
|
||||
break
|
||||
(k, description) = s.split('\t', maxsplit=1)
|
||||
v = config.get(k)
|
||||
s_env += apply_groff([k], description)
|
||||
|
||||
print(s_env)
|
||||
ge = EnvDocGenerator(flags, override=args.overrides_env_dir)
|
||||
ge.process()
|
||||
|
||||
f = open(args.header_file)
|
||||
head = f.read()
|
||||
@ -87,6 +79,8 @@ f.close()
|
||||
f = os.fdopen(fd, 'w')
|
||||
f.write(head)
|
||||
f.write(str(g))
|
||||
f.write(".SH ENVIRONMENT\n\n")
|
||||
f.write(str(ge))
|
||||
f.close()
|
||||
|
||||
dest = os.path.join(args.d, toolname + '.1')
|
||||
|
Loading…
Reference in New Issue
Block a user