#!/usr/bin/env python # encoding: utf-8 """ Producing then compiling templates """ import csv import os from bopytex.actions import ACTIONS from bopytex.planner import only_corr_planner, default_planner from bopytex.scheduler import Scheduler def build_subject_list_from_infos(infos: list[dict]) -> list[dict]: subjects = [] digit = len(str(len(infos))) for i, infos in enumerate(infos): subjects.append({"number": str(i + 1).zfill(digit), **infos}) return subjects def build_subject_list_from_qty(qty: int) -> list[dict]: subjects = [] digit = len(str(qty)) for i in range(qty): subjects.append({"number": str(i + 1).zfill(digit)}) return subjects def build_subjects(students_csv, quantity_subjects): if students_csv: with open(students_csv, "r") as csv_file: infos = csv.DictReader(csv_file) return build_subject_list_from_infos(infos) return build_subject_list_from_qty(quantity_subjects) def list_files(dir=".", accept=lambda _: True, reject=lambda _: False): tex_files = [] for file in os.listdir(dir): if accept(file) and not reject(file): tex_files.append(file) return tex_files def bopytex( template: str, students_csv: str, quantity_subjects: int, corr: bool, only_corr: bool, no_join: bool, no_pdf: bool, actions: dict = ACTIONS, ): if only_corr: tex_files = list_files( accept=lambda x: x.endswith(".tex"), reject=lambda x: x.startswith("tpl_"), ) tasks = only_corr_planner(sources=tex_files, no_pdf=no_pdf, no_join=no_join) else: subjects = build_subjects( students_csv=students_csv, quantity_subjects=quantity_subjects ) tasks = default_planner(template, subjects, corr, no_join, no_pdf) scheduler = Scheduler([template]) scheduler.append(tasks) for task in scheduler.backlog: pass # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: # cursor: 16 del