• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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