Feat: use and test csv files
This commit is contained in:
parent
9d5c231c9c
commit
1ba29c057b
@ -100,14 +100,33 @@ def pdfjoin(pdf_files, destname, working_dir=".", rm_pdfs=1):
|
|||||||
|
|
||||||
|
|
||||||
def extract_student_csv(csv_filename):
|
def extract_student_csv(csv_filename):
|
||||||
""" Extract student list from csv_filename
|
""" Extract student list from csv_filename """
|
||||||
|
|
||||||
Student identifier is got in the column "Élève".
|
|
||||||
|
|
||||||
"""
|
|
||||||
with open(csv_filename, "r") as csvfile:
|
with open(csv_filename, "r") as csvfile:
|
||||||
reader = csv.DictReader(csvfile)
|
reader = csv.DictReader(csvfile)
|
||||||
return [r["Élève"] for r in reader]
|
return [r for r in reader]
|
||||||
|
|
||||||
|
|
||||||
|
def subject_metadata(quantity=0, metacsv=None):
|
||||||
|
""" Return metadata on subject to produce
|
||||||
|
|
||||||
|
if csv is given it will based on is
|
||||||
|
otherwise it will be based on quantity
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> subject_metadata(10)
|
||||||
|
"""
|
||||||
|
if metacsv:
|
||||||
|
metadata = []
|
||||||
|
for (i, s) in enumerate(extract_student_csv(metacsv)):
|
||||||
|
d = {"num": f"{i+1:02d}"}
|
||||||
|
d.update(s)
|
||||||
|
metadata.append(d)
|
||||||
|
elif quantity > 0:
|
||||||
|
metadata = [{"num": f"{i+1:02d}"} for i in range(quantity)]
|
||||||
|
else:
|
||||||
|
raise ValueError("Need metacsv or quantity to build subject metadata")
|
||||||
|
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
|
||||||
def produce_and_compile(options):
|
def produce_and_compile(options):
|
||||||
@ -122,15 +141,11 @@ def produce_and_compile(options):
|
|||||||
template = Path(options["template"]).name
|
template = Path(options["template"]).name
|
||||||
logger.debug(f"Template will be {template}")
|
logger.debug(f"Template will be {template}")
|
||||||
|
|
||||||
if options["students_csv"]:
|
list_infos = subject_metadata(
|
||||||
list_infos = [
|
options["number_subjects"], options["students_csv"]
|
||||||
{"num": f"{i+1:02d}", "name": s}
|
)
|
||||||
for (i, s) in enumerate(extract_student_csv(options["students_csv"]))
|
|
||||||
]
|
logger.debug(f"Metadata {list_infos}")
|
||||||
else:
|
|
||||||
list_infos = [
|
|
||||||
{"num": f"{i+1:02d}"} for i in range(options["number_subjects"])
|
|
||||||
]
|
|
||||||
|
|
||||||
tex_files = []
|
tex_files = []
|
||||||
for infos in list_infos:
|
for infos in list_infos:
|
||||||
@ -162,7 +177,7 @@ def produce_and_compile(options):
|
|||||||
logger.debug(f"Start compiling {texfile}")
|
logger.debug(f"Start compiling {texfile}")
|
||||||
pytex.pdflatex(texfile)
|
pytex.pdflatex(texfile)
|
||||||
logger.debug(f"End compiling {texfile}")
|
logger.debug(f"End compiling {texfile}")
|
||||||
pdf_files.append(str(texfile).split('.')[0] + ".pdf")
|
pdf_files.append(str(texfile).split(".")[0] + ".pdf")
|
||||||
logger.debug(f"Compiled files : {pdf_files}")
|
logger.debug(f"Compiled files : {pdf_files}")
|
||||||
|
|
||||||
if not options["no_join"] and not options["no_compile"]:
|
if not options["no_join"] and not options["no_compile"]:
|
||||||
|
6
test/students.csv
Normal file
6
test/students.csv
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
nom,classe,elo
|
||||||
|
Bob,1ST,1000
|
||||||
|
Pipo,1ST,1300
|
||||||
|
Popi,1ST,100
|
||||||
|
Boule,1ST,4000
|
||||||
|
Bill,1ST,1300
|
|
@ -9,7 +9,8 @@ from shutil import copyfile
|
|||||||
from bopytex import produce_and_compile
|
from bopytex import produce_and_compile
|
||||||
|
|
||||||
SNIPPETS_PATH = Path("snippets/")
|
SNIPPETS_PATH = Path("snippets/")
|
||||||
TEST_TEMPLATE_PATH = Path("test/templates/")
|
TEST_PATH = Path("test")
|
||||||
|
TEST_TEMPLATE_PATH = TEST_PATH / "templates/"
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@ -22,6 +23,9 @@ def prepare_test_template(tmp_path):
|
|||||||
snippets = TEST_TEMPLATE_PATH.glob("tpl_*.tex")
|
snippets = TEST_TEMPLATE_PATH.glob("tpl_*.tex")
|
||||||
for s in snippets:
|
for s in snippets:
|
||||||
copyfile(s, tmp / s.name)
|
copyfile(s, tmp / s.name)
|
||||||
|
csvs = TEST_PATH.glob("*.csv")
|
||||||
|
for s in csvs:
|
||||||
|
copyfile(s, tmp / s.name)
|
||||||
|
|
||||||
prev_dir = Path.cwd()
|
prev_dir = Path.cwd()
|
||||||
os.chdir(tmp)
|
os.chdir(tmp)
|
||||||
@ -66,6 +70,25 @@ def test_produce_and_compile_base(prepare_test_template):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_produce_and_compile_csv(prepare_test_template):
|
||||||
|
test_tpl = list(Path(".").glob("tpl_*.tex"))
|
||||||
|
assert [tpl.name for tpl in test_tpl] == ["tpl_test.tex"]
|
||||||
|
for tpl in test_tpl:
|
||||||
|
produce_and_compile(
|
||||||
|
{
|
||||||
|
"template": tpl,
|
||||||
|
"working_dir": None,
|
||||||
|
"only_corr": False,
|
||||||
|
"students_csv": "students.csv",
|
||||||
|
"number_subjects": 1,
|
||||||
|
"dirty": False,
|
||||||
|
"no_compile": False,
|
||||||
|
"no_join": False,
|
||||||
|
"corr": False,
|
||||||
|
"crazy": False,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
def test_pdfjoin_current_directory(prepare_test_template):
|
def test_pdfjoin_current_directory(prepare_test_template):
|
||||||
wdir = prepare_test_template
|
wdir = prepare_test_template
|
||||||
pass
|
pass
|
||||||
@ -99,23 +122,23 @@ def test_activate_solution():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def test_snippets(prepare_snippets):
|
#def test_snippets(prepare_snippets):
|
||||||
snippets = list(Path(".").glob("tpl_*.tex"))
|
# snippets = list(Path(".").glob("tpl_*.tex"))
|
||||||
for tpl in snippets:
|
# for tpl in snippets:
|
||||||
produce_and_compile(
|
# produce_and_compile(
|
||||||
{
|
# {
|
||||||
"template": tpl,
|
# "template": tpl,
|
||||||
"working_dir": None,
|
# "working_dir": None,
|
||||||
"only_corr": False,
|
# "only_corr": False,
|
||||||
"students_csv": None,
|
# "students_csv": None,
|
||||||
"number_subjects": 1,
|
# "number_subjects": 1,
|
||||||
"dirty": False,
|
# "dirty": False,
|
||||||
"no_compile": False,
|
# "no_compile": False,
|
||||||
"no_join": False,
|
# "no_join": False,
|
||||||
"corr": False,
|
# "corr": False,
|
||||||
"crazy": False,
|
# "crazy": False,
|
||||||
}
|
# }
|
||||||
)
|
# )
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user