Source code for bbarchivist.textgenerator

#!/usr/bin/env python3
"""This module is used for generation of URLs and related text files."""

from bbarchivist.networkutils import get_length  # network
from bbarchivist.utilities import (create_bar_url, fsizer, generate_urls, newer_103, stripper)  # utils

__author__ = "Thurask"
__license__ = "WTFPL v2"
__copyright__ = "2015-2018 Thurask"





[docs]def get_fnone(fsize): """ Get sentinel value for filesize when writing OS/radio links. :param fsize: Filesize. :type fsize: int """ return True if fsize is None else False
[docs]def system_individual_writer(appname, appurl, target, fsize): """ Write individual OS/radio link to file. :param appname: App name. :type appname: str :param appurl: App URL. :type appurl: str :param target: File to write to. :type target: file :param fsize: Filesize. :type fsize: int """ fnone = get_fnone(fsize) if fnone: target.write("{0} [{1}] {2}\n".format(appname, fsizer(0), appurl)) elif fsize > 0: target.write("{0} [{1}] {2}\n".format(appname, fsizer(fsize), appurl))
[docs]def app_individual_writer(app, target): """ Write individual app link to file. :param app: App URL. :type app: str :param target: File to write to. :type target: file """ fsize = get_length(app) base = app.split('/')[-1] base = stripper(base) if fsize > 0: target.write("{0} [{1}] {2}\n".format(base, fsizer(fsize), app))
[docs]def prep_thename(softwareversion, appendbars=False, temp=False): """ Generate name for output file. :param softwareversion: Software release version. :type softwareversion: str :param appendbars: Whether to add app bars to file. Default is false. :type appendbars: bool :param temp: If file we write to is temporary. Default is false. :type temp: bool """ thename = softwareversion if appendbars: thename += "plusapps" if temp: thename = "TEMPFILE" return thename
[docs]def write_altsw(target, altsw): """ Write alternate software release to file. :param target: File to write to. :type target: file :param altsw: Radio software release version, if different. :type altsw: str """ if altsw is not None: target.write("RADIO SOFTWARE RELEASE: {0}\n".format(altsw))
[docs]def write_disclaimer(target, avlty): """ Write availability disclaimer to file. :param target: File to write to. :type target: file :param avlty: Availability of links to download. Default is false. :type avlty: bool """ if not avlty: target.write("\n!!EXISTENCE NOT GUARANTEED!!\n")
[docs]def write_appbars(target, appendbars, appurls): """ Write app bar links to file. :param target: File to write to. :type target: file :param appendbars: Whether to add app bars to file. Default is false. :type appendbars: bool :param appurls: App bar URLs to add. :type softwareversion: list """ if appendbars: target.write("\nAPP URLS:\n") app_link_writer(target, appurls)
[docs]def write_signedbars(target, urllist, avlty, message): """ Write debrick/core/radio URLs to file. :param target: File to write to. :type target: file :param urllist: List of URLs to write. :type urllist: list(str) :param avlty: Availability of links to download. Default is false. :type avlty: bool :param message: Header for this section: debrick, core or radio. :type message: str """ target.write("\n{0}:\n".format(message)) system_link_writer(target, urllist, avlty)
[docs]def write_header(target, softwareversion, osversion, radioversion): """ Write header for file. :param target: File to write to. :type target: file :param softwareversion: Software release version. :type softwareversion: str :param osversion: OS version. :type osversion: str :param radioversion: Radio version. :type radioversion: str """ target.write("OS VERSION: {0}\n".format(osversion)) target.write("RADIO VERSION: {0}\n".format(radioversion)) target.write("SOFTWARE RELEASE: {0}\n".format(softwareversion))
[docs]def export_devloader(osversion, finals): """ Export Dev Alpha URLs to file. :param osversion: OS version. :type osversion: str :param finals: Dict of URL:content-length pairs. :type finals: dict(str: str) """ with open("DevAlpha-{0}.txt".format(osversion), "w") as target: dev_link_writer(target, finals)
[docs]def url_gen_filter(osversion, oslist, radlist): """ Filter OS and radio name list. :param osversion: OS version. :type osversion: str :param oslist: List of OS platforms. :type oslist: list(str) :param radlist: List of radio platforms. :type radlist: list(str) """ splitos = [int(i) for i in osversion.split(".")] if newer_103(splitos, 3): radlist = radlist[1:] oslist = oslist[1:] return oslist, radlist
[docs]def url_gen_dicter(inlist, filelist): """ Prepare name:URL dicts for a given pair of names and URLs. :param inlist: List of dictionary keys (OS/radio platforms) :type inlist: list(str) :param filelist: List of dictionary values (URLs) :type filelist: list(str) """ pairs = {title: url for title, url in zip(inlist, filelist)} return pairs
[docs]def url_gen(osversion, radioversion, softwareversion): """ Return all debrick, core and radio URLs from given OS, radio software. :param softwareversion: Software release version. :type softwareversion: str :param osversion: OS version. :type osversion: str :param radioversion: Radio version. :type radioversion: str """ radlist = ["STL100-1", "STL100-X/P9982", "STL100-4", "Q10/Q5/P9983", "Z30/LEAP/CLASSIC", "Z3", "PASSPORT"] oslist = ["STL100-1", "QC8960", "VERIZON QC8960", "Z3", "PASSPORT"] oses, radios, cores = generate_urls(softwareversion, osversion, radioversion, True) vzw = create_bar_url(softwareversion, "qc8960.verizon_sfi.desktop", osversion) vzwpoint = 2 if "winchester" in oses[0] else 1 oses.insert(vzwpoint, vzw) cores.insert(vzwpoint, oses[vzwpoint].replace(".desktop", "")) oslist, radlist = url_gen_filter(osversion, oslist, radlist) ospairs = url_gen_dicter(oslist, oses) corepairs = url_gen_dicter(oslist, cores) radiopairs = url_gen_dicter(radlist, radios) return ospairs, corepairs, radiopairs