Completed
Push — master ( 4fb5d7...82edc4 )
by John
01:11
created

devloader_exporter()   A

Complexity

Conditions 2

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 18
rs 9.4285
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
            "-i", "--increment",
42
            dest="increment",
43
            help="Loop increment, default = 3",
44
            default=3,
45
            type=utilities.positive_integer,
46
            metavar="INT")
47
        parser.add_argument(
48
            "-c", "--ceiling",
49
            dest="ceiling",
50
            help="When to stop script, default = 9996",
51
            default=9999,
52
            type=int,
53
            choices=range(1, 10000),
54
            metavar="INT")
55
        parser.set_defaults()
56
        args = parser.parse_args(sys.argv[1:])
57
        devloader_main(args.os, args.export, args.recurse, args.ceiling, args.increment)
58
    else:
59
        osversion = input("OS VERSION: ")
60
        export = utilities.s2b(input("EXPORT TO FILE (Y/N)?: "))
61
        print(" ")
62
        devloader_main(osversion, export)
63
        decorators.enter_to_exit(True)
64
65
66
def devloader_exporter(osversion, export, urls):
67
    """
68
    Handle exporting links to text/stdout.
69
70
    :param osversion: OS version.
71
    :type osversion: str
72
73
    :param export: If we write URLs to file. Default is false.
74
    :type export: bool
75
76
    :param urls: List of Dev Alpha URLs.
77
    :type urls: list(str)
78
    """
79
    if export:
80
        print("EXPORTING...")
81
        textgenerator.export_devloader(osversion, urls)
82
    else:
83
        utilities.lprint(urls.keys())
84
85
86
@decorators.wrap_keyboard_except
87
def devloader_main(osversion, export=False, loop=False, ceiling=9999, inc=3):
88
    """
89
    Wrap around :mod:`bbarchivist.networkutils` Dev Alpha autoloader searching.
90
91
    :param osversion: OS version.
92
    :type osversion: str
93
94
    :param export: If we write URLs to file. Default is false.
95
    :type export: bool
96
97
    :param loop: Whether or not to automatically lookup. Default is false.
98
    :type loop: bool
99
100
    :param ceiling: When to stop loop. Default is 9999 (i.e. 10.x.y.9999).
101
    :type ceiling: int
102
103
    :param inc: Lookup increment. Default is 3.
104
    :type inc: int
105
    """
106
    skels = jsonutils.load_json('devskeletons')
107
    scriptutils.slim_preamble("DEVLOADER")
108
    while True:
109
        if loop and int(osversion.split(".")[3]) > ceiling:
110
            break
111
        print("OS VERSION: {0}".format(osversion), end="\r")
112
        urls = networkutils.devalpha_urls_bootstrap(osversion, skels)
113
        if urls:
114
            urls = networkutils.dev_dupe_cleaner(urls)
115
            print("{0} AVAILABLE!    \n".format(osversion), end="\r")  # spaces to clear line
116
            devloader_exporter(osversion, export, urls)
117
            if not loop:
118
                break
119
        else:
120
            if not loop:
121
                print("NOT FOUND!                ", end="\r")
122
                break
123
        if loop:
124
            osversion = utilities.increment(osversion, inc)
125
            continue
126
127
if __name__ == "__main__":
128
    grab_args()
129