Compare commits
4 Commits
3e1bfba236
...
main
Author | SHA1 | Date | |
---|---|---|---|
45229d0575
|
|||
1f45a281e9 | |||
45168c669d | |||
1516ca2c5b |
BIN
exercise/3. Computed Tomography/solution3.zip
Normal file
BIN
exercise/3. Computed Tomography/solution3.zip
Normal file
Binary file not shown.
BIN
exercise/4. Inverse Problems/exercise4.zip
Normal file
BIN
exercise/4. Inverse Problems/exercise4.zip
Normal file
Binary file not shown.
BIN
exercise/4. Inverse Problems/solution4.zip
Normal file
BIN
exercise/4. Inverse Problems/solution4.zip
Normal file
Binary file not shown.
BIN
exercise/5. Advanced Sampling/exercise5.zip
Normal file
BIN
exercise/5. Advanced Sampling/exercise5.zip
Normal file
Binary file not shown.
BIN
exercise/5. Advanced Sampling/solution5.zip
Normal file
BIN
exercise/5. Advanced Sampling/solution5.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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()
|
Reference in New Issue
Block a user