Added Full lecture build script
This commit is contained in:
parent
1f45a281e9
commit
45229d0575
Binary file not shown.
BIN
lecture/Lecture.pdf
Normal file
BIN
lecture/Lecture.pdf
Normal file
Binary file not shown.
74
lecture/build_lecture.py
Normal file
74
lecture/build_lecture.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
from functools import wraps
|
||||||
|
from pathlib import Path
|
||||||
|
from re import compile
|
||||||
|
from subprocess import run
|
||||||
|
from typing import Callable, Dict, Iterable, List, Mapping, ParamSpec, Tuple, TypeVar
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR = Path.cwd()
|
||||||
|
PROJECT_DIR = Path(__file__).resolve().absolute().parent.relative_to(WORKDIR)
|
||||||
|
OUTPUT_FILE = PROJECT_DIR / "Lecture.pdf"
|
||||||
|
idRegex = compile(r"^(\d+)\..+$")
|
||||||
|
|
||||||
|
def get_id(file: Path):
|
||||||
|
matches = idRegex.search(file.name)
|
||||||
|
if matches is None:
|
||||||
|
print(f"WARNING: File '{file.name}' hasn't got an id in the filename!")
|
||||||
|
return None
|
||||||
|
return int(matches.group(1))
|
||||||
|
|
||||||
|
def not_output_file(file: Path):
|
||||||
|
global OUTPUT_FILE
|
||||||
|
return file != OUTPUT_FILE
|
||||||
|
|
||||||
|
T = TypeVar("T")
|
||||||
|
Params = ParamSpec("Params")
|
||||||
|
|
||||||
|
def get_sequential(f: Callable[Params, Mapping[int, T]]) -> Callable[Params, List[T]]:
|
||||||
|
@wraps(f)
|
||||||
|
def wrapper(*args: Params.args, **kwargs: Params.kwargs):
|
||||||
|
items = f(*args, **kwargs)
|
||||||
|
def get_or_raise(i: int):
|
||||||
|
item = items.get(i)
|
||||||
|
if item is None:
|
||||||
|
raise Exception(f"Expected Item with index {i}, but it was not found!")
|
||||||
|
return item
|
||||||
|
return list(map(get_or_raise, range(len(items))))
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
def only_unique_ids(f: Callable[Params, Iterable[Tuple[int, T]]]) -> Callable[Params, Dict[int, T]]:
|
||||||
|
@wraps(f)
|
||||||
|
def wrapper(*args: Params.args, **kwargs: Params.kwargs):
|
||||||
|
items: Dict[int, T] = dict()
|
||||||
|
for uid, pdf in f(*args, **kwargs):
|
||||||
|
existing = items.get(uid)
|
||||||
|
if existing is not None:
|
||||||
|
raise ValueError(f"Got item '{pdf}' with id {uid}, but '{existing}' already has that id!")
|
||||||
|
items[uid] = pdf
|
||||||
|
return items
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
@get_sequential
|
||||||
|
@only_unique_ids
|
||||||
|
def get_files(path: Path):
|
||||||
|
global OUTPUT_FILE
|
||||||
|
files = path.rglob("*.pdf")
|
||||||
|
for file in files:
|
||||||
|
if file == OUTPUT_FILE: continue
|
||||||
|
number = get_id(file)
|
||||||
|
if number is None: continue
|
||||||
|
yield number, file
|
||||||
|
|
||||||
|
def main():
|
||||||
|
pdfs = get_files(PROJECT_DIR)
|
||||||
|
for pdf in pdfs:
|
||||||
|
print(f"Adding file {pdf.name}")
|
||||||
|
cmd = ["pdftk"]
|
||||||
|
cmd.extend(map(str, pdfs))
|
||||||
|
cmd.append("cat")
|
||||||
|
cmd.append("output")
|
||||||
|
cmd.append(str(OUTPUT_FILE))
|
||||||
|
run(cmd)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user