Source code for bbarchivist.scripts.tclnewprd

#!/usr/bin/env python3
"""Check for new PRDs for TCL API devices."""

import sys  # load arguments

from bbarchivist import argutils  # arguments
from bbarchivist import decorators  # enter to exit
from bbarchivist import jsonutils  # json
from bbarchivist import scriptutilstcl  # script frontends
from bbarchivist import utilities  # bool

__author__ = "Thurask"
__license__ = "WTFPL v2"
__copyright__ = "2017-2018 Thurask"


[docs]def grab_args(): """ Parse arguments from argparse/questionnaire. Invoke a function with those arguments. """ if getattr(sys, "frozen", False) and len(sys.argv) == 1: questionnaire() else: parser = argutils.default_parser("bb-tclnewprd", "Check for new PRDs for TCL devices") parser.add_argument( "prds", help="Only scan space separated list of PRDs", default=None, nargs="*") parser.add_argument( "-f", "--floor", dest="floor", help="When to start, default=1", default=1, type=int, choices=range(0, 998), metavar="INT") parser.add_argument( "-c", "--ceiling", dest="ceiling", help="When to stop, default=60", default=None, type=int, choices=range(1, 999), metavar="INT") parser.add_argument( "-x", "--export", dest="export", help="Write XML to logs folder", action="store_true", default=False) parser.add_argument( "-np", "--no-prefix", dest="noprefix", help="Don't add PRD- prefix", action="store_true", default=False) parser.add_argument( "-k", "--key2", dest="key2mode", help="Use KEY2 syntax", action="store_true", default=False) args = parser.parse_args(sys.argv[1:]) parser.set_defaults() execute_args(args)
[docs]def questionnaire(): """ Questions to ask if no arguments given. """ prds = questionnaire_prds() tclnewprd_main(prds=prds, floor=1, ceiling=61) decorators.enter_to_exit(True)
[docs]def questionnaire_prds(): """ Ask about individual versus full scanning. """ selectbool = utilities.i2b("SCAN SELECTED PRDS (Y/N)?: ") if selectbool: prdin = input("ENTER PRD(S) TO SCAN (ex. 63116 63734 63737): ") prds = prdin.split(" ") else: prds = None return prds
[docs]def execute_args(args): """ Get args and decide what to do with them. :param args: Arguments. :type args: argparse.Namespace """ if not args.prds: args.prds = None if args.ceiling is None: args.ceiling = args.floor + 59 # default range if args.ceiling < args.floor: print("INVALID RANGE!") raise SystemExit args.ceiling += 1 # because range() is a half-open interval tclnewprd_main(args.prds, args.floor, args.ceiling, args.export, args.noprefix, args.key2mode)
[docs]def tclnewprd_main(prds=None, floor=1, ceiling=60, export=False, noprefix=False, key2mode=False): """ Scan every PRD and produce latest versions. :param prds: Specific PRD(s) to check, None if all will be checked. Default is None. :type prds: list(str) :param floor: When to start. Default is 1. :type floor: int :param ceiling: When to stop. Default is 60. :type ceiling: int :param export: Whether to export XML response to file. Default is False. :type export: bool :param noprefix: Whether to skip adding "PRD-" prefix. Default is False. :type noprefix: bool :param key2mode: Whether to use new-style prefix. Default is False. :type key2mode: bool """ argutils.slim_preamble("TCLNEWPRD") prdbase = jsonutils.load_json("prds") prddict = scriptutilstcl.tcl_findprd_prepdict(prdbase) prddict = scriptutilstcl.tcl_findprd_checkfilter(prddict, prds) scriptutilstcl.tcl_findprd(prddict, floor, ceiling, export, noprefix, key2mode)
if __name__ == "__main__": grab_args()