Completed
Push — master ( 152b55...0bdad9 )
by John
01:22
created

devloader_main()   F

Complexity

Conditions 9

Size

Total Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 9
c 1
b 0
f 1
dl 0
loc 41
rs 3
1
#!/usr/bin/env python3
2
"""Generate Dev Alpha autoloader URLs."""
3
4
import sys  # load arguments
5
from bbarchivist import decorators  # wrap Ctrl+C
6
from bbarchivist import networkutils  # check function
7
from bbarchivist import jsonutils  # json
8
from bbarchivist import scriptutils  # default parser
9
from bbarchivist import textgenerator  # export
10
from bbarchivist import utilities  # filesize
11
12
__author__ = "Thurask"
13
__license__ = "WTFPL v2"
14
__copyright__ = "Copyright 2015-2016 Thurask"
15
16
17
def grab_args():
18
    """
19
    Parse arguments from argparse/questionnaire.
20
21
    Invoke :func:`devloader.devloader_main` with arguments.
22
    """
23
    if len(sys.argv) > 1:
24
        parser = scriptutils.default_parser("bb-devloader", "Dev Alpha URL generator")
25
        parser.add_argument(
26
            "os",
27
            help="OS version, 10.x.y.zzzz")
28
        parser.add_argument(
29
            "-l", "--loop",
30
            dest="recurse",
31
            help="Loop lookup, CTRL-C to quit",
32
            action="store_true",
33
            default=False)
34
        parser.add_argument(
35
            "-e", "--export",
36
            dest="export",
37
            help="Export links to files",
38
            action="store_true",
39
            default=False)
40
        parser.add_argument(
41
            "-c", "--ceiling",
42
            dest="ceiling",
43
            help="When to stop script, default = 9996",
44
            default=9999,
45
            type=int,
46
            choices=range(1, 10000),
47
            metavar="INT")
48
        parser.set_defaults()
49
        args = parser.parse_args(sys.argv[1:])
50
        devloader_main(args.os, args.export, args.recurse, args.ceiling)
51
    else:
52
        osversion = input("OS VERSION: ")
53
        export = utilities.s2b(input("EXPORT TO FILE (Y/N)?: "))
54
        print(" ")
55
        devloader_main(osversion, export)
56
        decorators.enter_to_exit(True)
57
58
59
@decorators.wrap_keyboard_except
60
def devloader_main(osversion, export=False, loop=False, ceiling=9999):
61
    """
62
    Wrap around :mod:`bbarchivist.networkutils` Dev Alpha autoloader searching.
63
64
    :param osversion: OS version.
65
    :type osversion: str
66
67
    :param export: If we write URLs to file. Default is false.
68
    :type export: bool
69
70
    :param loop: Whether or not to automatically lookup. Default is false.
71
    :type loop: bool
72
73
    :param ceiling: When to stop loop. Default is 9999 (i.e. 10.x.y.9999).
74
    :type ceiling: int
75
    """
76
    skels = jsonutils.load_json('devskeletons')
77
    scriptutils.slim_preamble("DEVLOADER")
78
    while True:
79
        if loop and int(osversion.split(".")[3]) > ceiling:
80
            break
81
        print("OS VERSION: {0}".format(osversion), end="\r")
82
        urls = networkutils.devalpha_urls_bootstrap(osversion, skels)
83
        if urls:
84
            urls = networkutils.dev_dupe_cleaner(urls)
85
            print("{0} AVAILABLE!    \n".format(osversion), end="\r")  # spaces to clear line
86
            if export:
87
                print("EXPORTING...")
88
                textgenerator.export_devloader(osversion, urls)
89
            else:
90
                utilities.lprint(urls.keys())
91
            if not loop:
92
                break
93
        else:
94
            if not loop:
95
                print("NOT FOUND!                ", end="\r")
96
                break
97
        if loop:
98
            osversion = utilities.increment(osversion)
99
            continue
100
101
if __name__ == "__main__":
102
    grab_args()
103