forked from konstin/sudoku-in-python-packaging
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate_packages.py
More file actions
69 lines (53 loc) · 1.95 KB
/
generate_packages.py
File metadata and controls
69 lines (53 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from itertools import product
from pathlib import Path
from zipfile import ZipFile
GRID_SIZE = 8
PACKAGE_DIR = Path("packages")
WHEEL_FILE_CONTENTS = """
Wheel-Version: 1.0
Generator: nqueens (1.0.0)
Root-Is-Purelib: true
Tag: py3-none-any
""".strip()
def to_name(column: int) -> str:
return f"queen_{chr(ord('a') + column)}"
def to_version(row: int) -> str:
return f"{row + 1}"
def exclude(column: int, row: int) -> str:
return f"{to_name(column)} != {to_version(row)}"
def get_exclusions(column: int, row: int, grid_size: int):
return (
exclude(c, r)
for c, r in product(range(grid_size), repeat=2)
if (
# column exclusion (row exclusion is implicit)
(r == row and c != column)
# diagonal exclusion
or ((d_c := abs(c - column)) == (d_r := abs(r - row)) and (d_c or d_r))
)
)
def generate_package(column: int, row: int, grid_size: int):
name = to_name(column)
version = to_version(row)
metadata = [
f"Name: {name}",
f"Version: {version}",
"Metadata-Version: 2.2",
*(f"Requires-Dist: {d}" for d in get_exclusions(column, row, grid_size)),
]
filename = f"{name}-{version}-py3-none-any.whl"
# Write the wheel
with ZipFile(PACKAGE_DIR.joinpath(filename), "w") as writer:
writer.writestr(f"{name}-{version}.dist-info/METADATA", "\n".join(metadata))
writer.writestr(f"{name}-{version}.dist-info/WHEEL", WHEEL_FILE_CONTENTS)
# Not checked anyway
# record = f"{name}-{version}.dist-info/METADATA,,"
# record += f"{name}-{version}.dist-info/WHEEL,,"
# record += f"{name}-{version}.dist-info/RECORD,,"
writer.writestr(f"{name}-{version}.dist-info/RECORD", "")
def main():
PACKAGE_DIR.mkdir(exist_ok=True, parents=True)
for column, row in product(range(GRID_SIZE), repeat=2):
generate_package(column, row, GRID_SIZE)
if __name__ == "__main__":
main()