WIP add environment variable support to man generator
This commit is contained in:
95
scripts/chainlib-man.py
Normal file
95
scripts/chainlib-man.py
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import tempfile
|
||||
import shutil
|
||||
|
||||
from hexathon import strip_0x, add_0x
|
||||
|
||||
from chainlib.cli.man import (
|
||||
DocGenerator,
|
||||
apply_groff,
|
||||
)
|
||||
from chainlib.cli.base import argflag_std_base
|
||||
from chainlib.cli.arg import ArgumentParser as ChainlibArgumentParser
|
||||
from chainlib.eth.cli.config import Config
|
||||
|
||||
|
||||
logging.basicConfig(level=logging.WARNING)
|
||||
logg = logging.getLogger()
|
||||
|
||||
argparser = argparse.ArgumentParser()
|
||||
argparser.add_argument('-b', default=add_0x(hex(argflag_std_base)), help='argument flag bitmask')
|
||||
argparser.add_argument('-c', help='config override directory')
|
||||
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('header_file', help='groff file containing heading, synopsis and description')
|
||||
args = argparser.parse_args(sys.argv[1:])
|
||||
|
||||
if args.v:
|
||||
logg.setLevel(logging.DEBUG)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
toolname = args.n
|
||||
if toolname == None:
|
||||
parts = os.path.splitext(os.path.basename(args.header_file))
|
||||
toolname = parts[0]
|
||||
|
||||
g.process()
|
||||
|
||||
if args.overrides_file != None:
|
||||
f = open(args.overrides_file, 'r')
|
||||
while True:
|
||||
s = f.readline()
|
||||
if len(s) == 0:
|
||||
break
|
||||
v = s.split('\t', maxsplit=2)
|
||||
fargs = None
|
||||
try:
|
||||
fargs = v[2].rstrip().split(',')
|
||||
except IndexError:
|
||||
fargs = []
|
||||
g.override_arg(v[0], v[1], fargs)
|
||||
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)
|
||||
|
||||
f = open(args.header_file)
|
||||
head = f.read()
|
||||
f.close()
|
||||
|
||||
(fd, fp) = tempfile.mkstemp()
|
||||
f = os.fdopen(fd, 'w')
|
||||
f.write(head)
|
||||
f.write(str(g))
|
||||
f.close()
|
||||
|
||||
dest = os.path.join(args.d, toolname + '.1')
|
||||
shutil.copyfile(fp, dest)
|
||||
|
||||
os.unlink(fp)
|
||||
@@ -1,42 +0,0 @@
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import tempfile
|
||||
import shutil
|
||||
|
||||
from hexathon import strip_0x, add_0x
|
||||
|
||||
from chainlib.cli.man import DocGenerator
|
||||
from chainlib.cli.base import argflag_std_base
|
||||
|
||||
argparser = argparse.ArgumentParser()
|
||||
argparser.add_argument('-b', default=add_0x(hex(argflag_std_base)), help='argument flag bitmask')
|
||||
argparser.add_argument('-n', help='tool name to use for man filename')
|
||||
argparser.add_argument('-d', default='.', help='output directory')
|
||||
argparser.add_argument('header_file', help='groff file containing heading, synopsis and description')
|
||||
args = argparser.parse_args(sys.argv[1:])
|
||||
|
||||
#b = bytes.fromhex(strip_0x(sys.argv[1]))
|
||||
b = bytes.fromhex(strip_0x(args.b))
|
||||
g = DocGenerator(int.from_bytes(b, byteorder='little'))
|
||||
g.process()
|
||||
|
||||
f = open(args.header_file)
|
||||
head = f.read()
|
||||
f.close()
|
||||
|
||||
toolname = args.n
|
||||
if toolname == None:
|
||||
parts = os.path.splitext(os.path.basename(args.header_file))
|
||||
toolname = parts[0]
|
||||
|
||||
(fd, fp) = tempfile.mkstemp()
|
||||
f = os.fdopen(fd, 'w')
|
||||
f.write(head)
|
||||
f.write(str(g))
|
||||
f.close()
|
||||
|
||||
dest = os.path.join(args.d, toolname + '.1')
|
||||
shutil.copyfile(fp, dest)
|
||||
|
||||
os.unlink(fp)
|
||||
Reference in New Issue
Block a user