1""" 2File generation for catalog signing non-binary contents. 3""" 4 5__author__ = "Steve Dower <steve.dower@python.org>" 6__version__ = "3.8" 7 8 9__all__ = ["PYTHON_CAT_NAME", "PYTHON_CDF_NAME"] 10 11 12def public(f): 13 __all__.append(f.__name__) 14 return f 15 16 17PYTHON_CAT_NAME = "python.cat" 18PYTHON_CDF_NAME = "python.cdf" 19 20 21CATALOG_TEMPLATE = r"""[CatalogHeader] 22Name={target.stem}.cat 23ResultDir={target.parent} 24PublicVersion=1 25CatalogVersion=2 26HashAlgorithms=SHA256 27PageHashes=false 28EncodingType= 29 30[CatalogFiles] 31""" 32 33 34def can_sign(file): 35 return file.is_file() and file.stat().st_size 36 37 38@public 39def write_catalog(target, files): 40 with target.open("w", encoding="utf-8") as cat: 41 cat.write(CATALOG_TEMPLATE.format(target=target)) 42 cat.writelines("<HASH>{}={}\n".format(n, f) for n, f in files if can_sign(f)) 43