icloud_photos_downloader/scripts/compile_compatibility

57 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
""" takes results of compatibility tests and compie into one file """
import os
import sys
import itertools
def normalize(files):
presort = [ "pass", "fail", "na" ]
return [(list(g) + [ [0, k.split('.')[0], k.split('.')[1], k.split('.')[2], 'na'] ])[0] for (k, g) in itertools.groupby(sorted(files, key = lambda k: f"{k[1]}.{k[2]}.{k[3]}.{presort.index(k[4]) if k[4] in presort else 9}"), key = lambda k: f"{k[1]}.{k[2]}.{k[3]}")]
def stats(files):
""" Print statistics """
total = len([f for f in files if f[4] != 'na'])
passed = len([f for f in files if f[4] == 'pass'])
print(f"Compatibility rate: {round(100*passed/total,1) if total > 0 else 0}% ({passed} passed out of {total})")
print("")
def matrix(files):
""" Prints matrix """
archs = [k for k, _ in itertools.groupby(sorted(files, key = lambda ft: ft[3]), key = lambda ft: ft[3])]
# sort by priority of archs
presort = [ "amd64", "arm64", "arm32v7" ]
archs_sorted = sorted(archs, key = lambda k: f"{presort.index(k) if k in presort else 9}{k}")
# caption
print('|'.join(["OSes and distros"] + archs_sorted))
print('|'.join(['-'] + ['-' for a in archs_sorted]))
oses = [k for k, _ in itertools.groupby(sorted(files, key = lambda ft: ft[2]), key = lambda ft: ft[2])]
for o in oses:
results_raw = [list(filter(lambda ft: ft[2] == o and ft[3] == a, files)) for a in archs_sorted]
results = ["N/A" if len(r) == 0 or r[0][4] == "na" else (r[0][4] + ("" if r[0][0] == 0 else " (src)")) for r in results_raw]
print('|'.join([o] + results))
def main():
""" param: folder """
folder = sys.argv[1] if len(sys.argv) > 1 else "."
files = [f for f in os.listdir(folder) if not os.path.isdir(f)]
fts = [[os.path.getsize(os.path.join(folder,f))] + f.split('.') for f in files if len(f.split('.')) == 4]
print("## Minimal Effort Compatibility")
print("Checks if icloudpd can be installed using minimal effort. Minimal effort may require installing default version of package manager using OS tools")
print("")
stats(fts)
print("Legend:")
print("- N/A - not applicable/available")
print("- pass - test pass")
print("- fail - test fail")
print("- pass (src) - test pass using src (for pip)")
print("")
groups = [(k, list(g)) for k, g in itertools.groupby(sorted(fts, key = lambda ft: ft[1]), key = lambda ft: ft[1])]
for (g, f) in groups:
print(f"### {g}")
stats(f)
matrix(f)
if __name__ == "__main__":
main()