Completed
Push — master ( 7bf81e...fdb8ce )
by John
02:23
created

questionnaire_prds()   A

Complexity

Conditions 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

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