Passed
Push — master ( 375a87...8780e6 )
by Markus
02:06
created

tclfindver   A

Complexity

Total Complexity 0

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 0
eloc 52
dl 0
loc 71
rs 10
c 0
b 0
f 0
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
4
# pylint: disable=C0111,C0326,C0103
5
6
"""Find all OTA updates for a given PRD."""
7
8
import sys
9
10
from tcllib import ansi, argparser
11
from tcllib.devices import MobileDevice
12
from tcllib.dumpmgr import write_info_if_dumps_found
13
from tcllib.requests import CheckRequest, RequestRunner, ServerVoteSelector
14
15
16
dpdesc = """
17
    Finds all valid OTA updates for a given PRD. Scan range can be set by
18
    startver and endver switches.
19
    """
20
dp = argparser.DefaultParser(__file__, dpdesc)
21
dp.add_argument("prd", help="CU Reference #, e.g. PRD-63117-011")
22
dp.add_argument("startver", help="Beginning of scan range", nargs="?", default="AAA000")
23
dp.add_argument("endver", help="End of scan range", nargs="?", default="AAZ999")
24
args = dp.parse_args(sys.argv[1:])
25
26
dev = MobileDevice()
27
dev.curef = args.prd
28
start_ver = args.startver
29
end_ver = args.endver
30
31
print("Valid firmwares for model {} (between {} and {}):".format(dev.curef, start_ver, end_ver))
32
33
cur_ver = start_ver
34
allvers = []
35
while True:
36
    allvers.append(cur_ver)
37
    if cur_ver == end_ver:
38
        break
39
    letters = list(cur_ver[:3])
40
    num = int(cur_ver[3:6])
41
    num += 1
42
    if num > 999:
43
        num = 0
44
        for i in range(2, -1, -1):
45
            if letters[i] == "Z":
46
                letters[i] = "A"
47
                continue
48
            letters[i] = chr(ord(letters[i])+1)
49
            break
50
    cur_ver = "{:3}{:03d}".format("".join(letters), num)
51
52
runner = RequestRunner(ServerVoteSelector(), https=False)
53
runner.max_tries = 20
54
55
done_count = 0
56
total_count = len(allvers)
57
for fv in allvers:
58
    done_count += 1
59
    print("Checking {} ({}/{})".format(fv, done_count, total_count))
60
    print(ansi.UP_DEL, end="")
61
    dev.fwver = fv
62
    chk = CheckRequest(dev)
63
    runner.run(chk)
64
    if chk.success:
65
        chkres = chk.get_result()
66
        txt_tv = chkres.tvver
67
        print("{}: {} ⇨ {} {}".format(dev.curef, fv, txt_tv, chkres.filehash))
68
69
print("Scan complete.")
70
write_info_if_dumps_found()
71