Source code for bbarchivist.scripts.certchecker
#!/usr/bin/env python3
"""Checks certifications for a given device."""
import sys # load arguments
from bbarchivist import argutils # arguments
from bbarchivist import decorators # enter to exit
from bbarchivist import jsonutils # json
from bbarchivist import networkutils # check function
from bbarchivist import scriptutils # default parser
from bbarchivist import utilities # lprint
__author__ = "Thurask"
__license__ = "WTFPL v2"
__copyright__ = "2015-2018 Thurask"
[docs]def grab_args():
"""
Parse arguments from argparse/questionnaire.
Invoke :func:`certchecker.certchecker_main` with arguments.
"""
datafile = jsonutils.load_json('devices')
if len(sys.argv) > 1:
parser = argutils.default_parser("bb-certchecker", "Certification scraper")
parser.add_argument(
"device",
help="FCCID/HWID/model #, or family",
nargs="?",
default=None)
parser.add_argument(
"-f",
"--family",
dest="family",
help="Return all certs of a device family",
action="store_true",
default=False)
fgroup = parser.add_mutually_exclusive_group()
fgroup.add_argument(
"-d",
"--database",
dest="database",
help="List all devices in database",
action="store_true",
default=False)
fgroup.add_argument(
"-c",
"--certs",
dest="certs",
help="List certified devices in database",
action="store_true",
default=False)
fgroup.add_argument(
"-l",
"--list",
dest="list",
help="List families in database",
action="store_true",
default=False)
parser.set_defaults()
args = parser.parse_args(sys.argv[1:])
execute_args(args, datafile)
else:
device = scriptutils.questionnaire_device("DEVICE (XXX100-#/FCCID/HWID): ")
print(" ")
certchecker_main(device, datafile)
decorators.enter_to_exit(True)
[docs]def execute_args(args, datafile):
"""
Get args and decide what to do with them.
:param args: Arguments.
:type args: argparse.Namespace
:param datafile: List of device entries.
:type datafile: list(dict)
"""
if args.database:
jsonutils.list_devices(datafile)
elif args.certs:
jsonutils.list_available_certs(datafile)
elif args.list:
jsonutils.list_family(datafile)
else:
execute_args_end(args, datafile)
[docs]def execute_args_end(args, datafile):
"""
Continue the first half.
:param args: Arguments.
:type args: argparse.Namespace
:param datafile: List of device entries.
:type datafile: list(dict)
"""
if args.family:
certchecker_family(args, datafile)
elif args.device is None:
print("NO DEVICE SPECIFIED!")
raise SystemExit
else:
certchecker_main(args.device, datafile)
[docs]def certchecker_family(args, datafile):
"""
Output all devices in a family.
:param args: Arguments.
:type args: argparse.Namespace
:param datafile: List of device entries.
:type datafile: list(dict)
"""
family = jsonutils.read_family(datafile, args.device.upper())
for ptcrbid in family:
certchecker_main(ptcrbid, datafile)
if ptcrbid != family[-1]:
print("")
[docs]def certchecker_main(device, data):
"""
Wrap around :mod:`bbarchivist.networkutils` certification checking.
:param device: Hardware ID, PTCRB ID, FCC ID or model number.
:type device: str
:param data: List of device entries.
:type data: list(dict)
"""
device = device.upper()
name, ptcrbid, hwid, fccid = jsonutils.extract_cert(data, device)
argutils.slim_preamble("CERTCHECKER")
print("DEVICE: {0}".format(device.upper()))
print("VARIANT: {0}".format(name.upper()))
if hwid:
print("HARDWARE ID: {0}".format(hwid.upper()))
if fccid:
print("FCC ID: {0}".format(fccid.upper()))
print("\nCHECKING CERTIFICATIONS...\n")
certlist = networkutils.ptcrb_scraper(ptcrbid)
utilities.lprint(sorted(certlist, reverse=True))
if __name__ == "__main__":
grab_args()