| """ |
| File generation for catalog signing non-binary contents. |
| """ |
| |
| __author__ = "Steve Dower <steve.dower@python.org>" |
| __version__ = "3.8" |
| |
| |
| import sys |
| |
| __all__ = ["PYTHON_CAT_NAME", "PYTHON_CDF_NAME"] |
| |
| |
| def public(f): |
| __all__.append(f.__name__) |
| return f |
| |
| |
| PYTHON_CAT_NAME = "python.cat" |
| PYTHON_CDF_NAME = "python.cdf" |
| |
| |
| CATALOG_TEMPLATE = r"""[CatalogHeader] |
| Name={target.stem}.cat |
| ResultDir={target.parent} |
| PublicVersion=1 |
| CatalogVersion=2 |
| HashAlgorithms=SHA256 |
| PageHashes=false |
| EncodingType= |
| |
| [CatalogFiles] |
| """ |
| |
| |
| def can_sign(file): |
| return file.is_file() and file.stat().st_size |
| |
| |
| @public |
| def write_catalog(target, files): |
| with target.open("w", encoding="utf-8") as cat: |
| cat.write(CATALOG_TEMPLATE.format(target=target)) |
| cat.writelines("<HASH>{}={}\n".format(n, f) for n, f in files if can_sign(f)) |