bbarchivist.textgenerator   A
last analyzed

Complexity

Total Complexity 35

Size/Duplication

Total Lines 343
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 95
dl 0
loc 343
rs 9.6
c 0
b 0
f 0
ccs 93
cts 93
cp 1
wmc 35

17 Functions

Rating   Name   Duplication   Size   Complexity  
A dev_link_writer() 0 12 2
A write_disclaimer() 0 12 2
A write_altsw() 0 12 2
A write_links() 0 47 2
A write_appbars() 0 16 2
A get_fnone() 0 8 2
A write_signedbars() 0 18 1
A system_individual_writer() 0 21 3
A export_devloader() 0 12 2
A url_gen() 0 25 2
A system_link_writer() 0 19 3
A write_header() 0 19 1
A prep_thename() 0 19 3
A app_individual_writer() 0 15 2
A url_gen_filter() 0 18 2
A app_link_writer() 0 14 3
A url_gen_dicter() 0 12 1
1
#!/usr/bin/env python3
2 5
"""This module is used for generation of URLs and related text files."""
3
4 5
from bbarchivist.networkutils import get_length  # network
5 5
from bbarchivist.utilities import (create_bar_url, fsizer, generate_urls, newer_103, stripper)  # utils
6
7 5
__author__ = "Thurask"
8 5
__license__ = "WTFPL v2"
9 5
__copyright__ = "2015-2019 Thurask"
10
11
12 5
def system_link_writer(target, urls, avlty=False):
13
    """
14
    Write OS/radio links to file.
15
16
    :param target: File to write to.
17
    :type target: file
18
19
    :param urls: Dictionary of URLs; name: URL
20
    :type urls: dict(str: str)
21
22
    :param avlty: If this OS release is available. Default is false.
23
    :type avlty: bool
24
    """
25 5
    for key, val in urls.items():
26 5
        if avlty:
27 5
            fsize = get_length(val)
28
        else:
29 5
            fsize = None
30 5
        system_individual_writer(key, val, target, fsize)
31
32
33 5
def get_fnone(fsize):
34
    """
35
    Get sentinel value for filesize when writing OS/radio links.
36
37
    :param fsize: Filesize.
38
    :type fsize: int
39
    """
40 5
    return True if fsize is None else False
41
42
43 5
def system_individual_writer(appname, appurl, target, fsize):
44
    """
45
    Write individual OS/radio link to file.
46
47
    :param appname: App name.
48
    :type appname: str
49
50
    :param appurl: App URL.
51
    :type appurl: str
52
53
    :param target: File to write to.
54
    :type target: file
55
56
    :param fsize: Filesize.
57
    :type fsize: int
58
    """
59 5
    fnone = get_fnone(fsize)
60 5
    if fnone:
61 5
        target.write("{0} [{1}] {2}\n".format(appname, fsizer(0), appurl))
62 5
    elif fsize > 0:
63 5
        target.write("{0} [{1}] {2}\n".format(appname, fsizer(fsize), appurl))
64
65
66 5
def app_individual_writer(app, target):
67
    """
68
    Write individual app link to file.
69
70
    :param app: App URL.
71
    :type app: str
72
73
    :param target: File to write to.
74
    :type target: file
75
    """
76 5
    fsize = get_length(app)
77 5
    base = app.split('/')[-1]
78 5
    base = stripper(base)
79 5
    if fsize > 0:
80 5
        target.write("{0} [{1}] {2}\n".format(base, fsizer(fsize), app))
81
82
83 5
def app_link_writer(target, urls):
84
    """
85
    Write app links to file.
86
87
    :param target: File to write to.
88
    :type target: file
89
90
    :param urls: Dictionary of URLs; name: URL
91
    :type urls: dict(str: str)
92
    """
93 5
    stoppers = ["8960", "8930", "8974", "m5730", "winchester"]
94 5
    for app in urls:
95 5
        if all(word not in app for word in stoppers):
96 5
            app_individual_writer(app, target)
97
98
99 5
def dev_link_writer(target, finals):
100
    """
101
    Write Dev Alpha autooloader links to file.
102
103
    :param target: File to write to.
104
    :type target: file
105
106
    :param finals: Dict of URL:content-length pairs.
107
    :type finals: dict(str: str)
108
    """
109 5
    for key, val in finals.items():
110 5
        target.write("{0} [{1}]\n".format(key, fsizer(int(val))))
111
112
113 5
def prep_thename(softwareversion, appendbars=False, temp=False):
114
    """
115
    Generate name for output file.
116
117
    :param softwareversion: Software release version.
118
    :type softwareversion: str
119
120
    :param appendbars: Whether to add app bars to file. Default is false.
121
    :type appendbars: bool
122
123
    :param temp: If file we write to is temporary. Default is false.
124
    :type temp: bool
125
    """
126 5
    thename = softwareversion
127 5
    if appendbars:
128 5
        thename += "plusapps"
129 5
    if temp:
130 5
        thename = "TEMPFILE"
131 5
    return thename
132
133
134 5
def write_altsw(target, altsw):
135
    """
136
    Write alternate software release to file.
137
138
    :param target: File to write to.
139
    :type target: file
140
141
    :param altsw: Radio software release version, if different.
142
    :type altsw: str
143
    """
144 5
    if altsw is not None:
145 5
        target.write("RADIO SOFTWARE RELEASE: {0}\n".format(altsw))
146
147
148 5
def write_disclaimer(target, avlty):
149
    """
150
    Write availability disclaimer to file.
151
152
    :param target: File to write to.
153
    :type target: file
154
155
    :param avlty: Availability of links to download. Default is false.
156
    :type avlty: bool
157
    """
158 5
    if not avlty:
159 5
        target.write("\n!!EXISTENCE NOT GUARANTEED!!\n")
160
161
162 5
def write_appbars(target, appendbars, appurls):
163
    """
164
    Write app bar links to file.
165
166
    :param target: File to write to.
167
    :type target: file
168
169
    :param appendbars: Whether to add app bars to file. Default is false.
170
    :type appendbars: bool
171
172
    :param appurls: App bar URLs to add.
173
    :type softwareversion: list
174
    """
175 5
    if appendbars:
176 5
        target.write("\nAPP URLS:\n")
177 5
        app_link_writer(target, appurls)
178
179
180 5
def write_signedbars(target, urllist, avlty, message):
181
    """
182
    Write debrick/core/radio URLs to file.
183
184
    :param target: File to write to.
185
    :type target: file
186
187
    :param urllist: List of URLs to write.
188
    :type urllist: list(str)
189
190
    :param avlty: Availability of links to download. Default is false.
191
    :type avlty: bool
192
193
    :param message: Header for this section: debrick, core or radio.
194
    :type message: str
195
    """
196 5
    target.write("\n{0}:\n".format(message))
197 5
    system_link_writer(target, urllist, avlty)
198
199
200 5
def write_header(target, softwareversion, osversion, radioversion):
201
    """
202
    Write header for file.
203
204
    :param target: File to write to.
205
    :type target: file
206
207
    :param softwareversion: Software release version.
208
    :type softwareversion: str
209
210
    :param osversion: OS version.
211
    :type osversion: str
212
213
    :param radioversion: Radio version.
214
    :type radioversion: str
215
    """
216 5
    target.write("OS VERSION: {0}\n".format(osversion))
217 5
    target.write("RADIO VERSION: {0}\n".format(radioversion))
218 5
    target.write("SOFTWARE RELEASE: {0}\n".format(softwareversion))
219
220
221 5
def write_links(softwareversion, osversion, radioversion, osurls, coreurls, radiourls,
222
                avlty=False, appendbars=False, appurls=None, temp=False, altsw=None):
223
    """
224
    Write lookup links to file. Check for availability, can include app bars.
225
226
    :param softwareversion: Software release version.
227
    :type softwareversion: str
228
229
    :param osversion: OS version.
230
    :type osversion: str
231
232
    :param radioversion: Radio version.
233
    :type radioversion: str
234
235
    :param osurls: Pre-formed debrick OS URLs.
236
    :type osurls: dict{str:str}
237
238
    :param coreurls: Pre-formed core OS URLs.
239
    :type coreurls: dict{str:str}
240
241
    :param radiourls: Pre-formed radio URLs.
242
    :type radiourls: dict{str:str}
243
244
    :param avlty: Availability of links to download. Default is false.
245
    :type avlty: bool
246
247
    :param appendbars: Whether to add app bars to file. Default is false.
248
    :type appendbars: bool
249
250
    :param appurls: App bar URLs to add.
251
    :type softwareversion: list
252
253
    :param temp: If file we write to is temporary. Default is false.
254
    :type temp: bool
255
256
    :param altsw: Radio software release version, if different.
257
    :type altsw: str
258
    """
259 5
    thename = prep_thename(softwareversion, appendbars, temp)
260 5
    with open("{0}.txt".format(thename), "w") as target:
261 5
        write_header(target, softwareversion, osversion, radioversion)
262 5
        write_altsw(target, altsw)
263 5
        write_disclaimer(target, avlty)
264 5
        write_signedbars(target, osurls, avlty, "DEBRICK URLS")
265 5
        write_signedbars(target, coreurls, avlty, "CORE URLS")
266 5
        write_signedbars(target, radiourls, avlty, "RADIO URLS")
267 5
        write_appbars(target, appendbars, appurls)
268
269
270 5
def export_devloader(osversion, finals):
271
    """
272
    Export Dev Alpha URLs to file.
273
274
    :param osversion: OS version.
275
    :type osversion: str
276
277
    :param finals: Dict of URL:content-length pairs.
278
    :type finals: dict(str: str)
279
    """
280 5
    with open("DevAlpha-{0}.txt".format(osversion), "w") as target:
281 5
        dev_link_writer(target, finals)
282
283
284 5
def url_gen_filter(osversion, oslist, radlist):
285
    """
286
    Filter OS and radio name list.
287
288
    :param osversion: OS version.
289
    :type osversion: str
290
291
    :param oslist: List of OS platforms.
292
    :type oslist: list(str)
293
294
    :param radlist: List of radio platforms.
295
    :type radlist: list(str)
296
    """
297 5
    splitos = [int(i) for i in osversion.split(".")]
298 5
    if newer_103(splitos, 3):
299 5
        radlist = radlist[1:]
300 5
        oslist = oslist[1:]
301 5
    return oslist, radlist
302
303
304 5
def url_gen_dicter(inlist, filelist):
305
    """
306
    Prepare name:URL dicts for a given pair of names and URLs.
307
308
    :param inlist: List of dictionary keys (OS/radio platforms)
309
    :type inlist: list(str)
310
311
    :param filelist: List of dictionary values (URLs)
312
    :type filelist: list(str)
313
    """
314 5
    pairs = {title: url for title, url in zip(inlist, filelist)}
315 5
    return pairs
316
317
318 5
def url_gen(osversion, radioversion, softwareversion):
319
    """
320
    Return all debrick, core and radio URLs from given OS, radio software.
321
322
    :param softwareversion: Software release version.
323
    :type softwareversion: str
324
325
    :param osversion: OS version.
326
    :type osversion: str
327
328
    :param radioversion: Radio version.
329
    :type radioversion: str
330
    """
331 5
    radlist = ["STL100-1", "STL100-X/P9982", "STL100-4", "Q10/Q5/P9983", "Z30/LEAP/CLASSIC", "Z3", "PASSPORT"]
332 5
    oslist = ["STL100-1", "QC8960", "VERIZON QC8960", "Z3", "PASSPORT"]
333 5
    oses, radios, cores = generate_urls(softwareversion, osversion, radioversion, True)
334 5
    vzw = create_bar_url(softwareversion, "qc8960.verizon_sfi.desktop", osversion)
335 5
    vzwpoint = 2 if "winchester" in oses[0] else 1
336 5
    oses.insert(vzwpoint, vzw)
337 5
    cores.insert(vzwpoint, oses[vzwpoint].replace(".desktop", ""))
338 5
    oslist, radlist = url_gen_filter(osversion, oslist, radlist)
339 5
    ospairs = url_gen_dicter(oslist, oses)
340 5
    corepairs = url_gen_dicter(oslist, cores)
341 5
    radiopairs = url_gen_dicter(radlist, radios)
342
    return ospairs, corepairs, radiopairs
343