Feat: service work but do nothing!

This commit is contained in:
Bertrand Benjamin 2022-04-10 06:45:10 +02:00
parent abd517b339
commit 3f1464f3f6
3 changed files with 24 additions and 91 deletions

View File

@ -0,0 +1,9 @@
from bopytex.tasks import Task
def simple(options: dict) -> list[Task]:
"""Simple planner with options['quantity'] tasks and no dependencies"""
return [
Task("Do", args={"number": i}, deps=[], output=f"{i}")
for i in range(options["quantity"])
]

View File

@ -5,75 +5,22 @@
Producing then compiling templates Producing then compiling templates
""" """
import csv
import os
from bopytex.actions import ACTIONS from bopytex.actions import ACTIONS
from bopytex.planner import only_corr_planner, default_planner
from bopytex.scheduler import Scheduler from bopytex.scheduler import Scheduler
def build_subject_list_from_infos(infos: list[dict]) -> list[dict]: def orcherstrator(
subjects = [] options: dict,
digit = len(str(len(infos))) planner,
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, actions: dict = ACTIONS,
): ):
tasks = planner(options)
if only_corr: scheduler = Scheduler([options["template"]])
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) scheduler.append(tasks)
for task in scheduler.backlog: for task in scheduler.backlog():
pass yield task
# ----------------------------- # -----------------------------

View File

@ -1,33 +1,10 @@
from bopytex.service import build_subject_list_from_infos, build_subject_list_from_qty from bopytex.planner import fake_planner
from bopytex.service import orcherstrator
from bopytex.tasks import Task
def test_build_subject_list_from_qty(): def test_service():
subjects = build_subject_list_from_qty(10) options = {"quantity": 3, "template": "tpl_src.tex"}
assert subjects == [ service = orcherstrator(options, fake_planner.simple)
{"number": "01"}, for i, task in enumerate(service):
{"number": "02"}, assert task == Task("Do", args={"number": i}, deps=[], output=f"{i}")
{"number": "03"},
{"number": "04"},
{"number": "05"},
{"number": "06"},
{"number": "07"},
{"number": "08"},
{"number": "09"},
{"number": "10"},
]
def test_build_subject_list_from_infos():
infos = [
{"name": "test1", "date": "today"},
{"name": "test2", "date": "tomorow"},
]
subjects = build_subject_list_from_infos(infos)
assert subjects == [
{"name": "test1", "date": "today", "number": "1"},
{"name": "test2", "date": "tomorow", "number": "2"},
]
def test_bopytex():
pass