Completed
Push — master ( c0a25d...3bf3d6 )
by John
03:47 queued 38s
created

tclnewprd_main()   A

Complexity

Conditions 1

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
c 1
b 0
f 1
dl 0
loc 21
rs 9.3142
1
#!/usr/bin/env python3
2
"""Check for new PRDs for TCL API devices."""
3
4
import sys  # load arguments
5
from bbarchivist import decorators  # enter to exit
6
from bbarchivist import jsonutils  # json
7
from bbarchivist import scriptutils  # default parser
8
from bbarchivist import utilities  # bool
9
10
__author__ = "Thurask"
11
__license__ = "WTFPL v2"
12
__copyright__ = "2017-2018 Thurask"
13
14
15
def grab_args():
16
    """
17
    Parse arguments from argparse/questionnaire.
18
19
    Invoke a function with those arguments.
20
    """
21
    if getattr(sys, "frozen", False) and len(sys.argv) == 1:
22
        questionnaire()
23
    else:
24
        parser = scriptutils.default_parser("bb-tclnewprd", "Check for new PRDs for TCL devices")
25
        parser.add_argument("prds", help="Only scan space separated list of PRDs", default=None, nargs="*")
26
        parser.add_argument(
27
            "-f", "--floor",
28
            dest="floor",
29
            help="When to start, default=1",
30
            default=1,
31
            type=int,
32
            choices=range(0, 998),
33
            metavar="INT")
34
        parser.add_argument(
35
            "-c", "--ceiling",
36
            dest="ceiling",
37
            help="When to stop, default=60",
38
            default=None,
39
            type=int,
40
            choices=range(1, 999),
41
            metavar="INT")
42
        parser.add_argument(
43
            "-x",
44
            "--export",
45
            dest="export",
46
            help="Write XML to logs folder",
47
            action="store_true",
48
            default=False)
49
        args = parser.parse_args(sys.argv[1:])
50
        parser.set_defaults()
51
        execute_args(args)
52
53
54
def questionnaire():
55
    """
56
    Questions to ask if no arguments given.
57
    """
58
    prds = questionnaire_prds()
59
    tclnewprd_main(prds=prds, floor=1, ceiling=61)
60
    decorators.enter_to_exit(True)
61
62
63
def questionnaire_prds():
64
    """
65
    Ask about individual versus full scanning.
66
    """
67
    selectbool = utilities.i2b("SCAN SELECTED PRDS (Y/N)?: ")
68
    if selectbool:
69
        prdin = input("ENTER PRD(S) TO SCAN (ex. 63116 63734 63737): ")
70
        prds = prdin.split(" ")
71
    else:
72
        prds = None
73
    return prds
74
75
76
def execute_args(args):
77
    """
78
    Get args and decide what to do with them.
79
80
    :param args: Arguments.
81
    :type args: argparse.Namespace
82
    """
83
    if not args.prds:
84
        args.prds = None
85
    if args.ceiling is None:
86
        args.ceiling = args.floor + 59  # default range
87
    if args.ceiling < args.floor:
88
        print("INVALID RANGE!")
89
        raise SystemExit
90
    args.ceiling += 1  # because range() is a half-open interval
91
    tclnewprd_main(args.prds, args.floor, args.ceiling, args.export)
92
93
94
def tclnewprd_main(prds=None, floor=1, ceiling=60, export=False):
95
    """
96
    Scan every PRD and produce latest versions.
97
98
    :param prds: Specific PRD(s) to check, None if we're checking all variants in database. Default is None.
99
    :type prds: list(str)
100
101
    :param floor: When to start. Default is 1.
102
    :type floor: int
103
104
    :param ceiling: When to stop. Default is 60.
105
    :type ceiling: int
106
107
    :param export: Whether to export XML response to file. Default is False.
108
    :type export: bool
109
    """
110
    scriptutils.slim_preamble("TCLNEWPRD")
111
    prdbase = jsonutils.load_json("prds")
112
    prddict = scriptutils.tcl_findprd_prepdict(prdbase)
113
    prddict = scriptutils.tcl_findprd_checkfilter(prddict, prds)
114
    scriptutils.tcl_findprd(prddict, floor, ceiling, export)
115
116
117
if __name__ == "__main__":
118
    grab_args()
119