Skip to content
Snippets Groups Projects
Commit 8e462b5f authored by tuhe's avatar tuhe
Browse files

updtes

parent a5a5f9f8
No related branches found
No related tags found
No related merge requests found
......@@ -15,7 +15,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
# beamer-slider
setuptools.setup(
name="coursebox",
version="0.1.16",
version="0.1.17.11",
author="Tue Herlau",
author_email="tuhe@dtu.dk",
description="A course management system currently used at DTU",
......
Metadata-Version: 2.1
Name: coursebox
Version: 0.1.16
Version: 0.1.17.10
Summary: A course management system currently used at DTU
Home-page: https://lab.compute.dtu.dk/tuhe/coursebox
Author: Tue Herlau
......
......@@ -173,6 +173,9 @@ def lectures(info, pensum=None):
if pensum is not None:
rd, html = lecture['reading'], ""
if rd is None:
rd = ""
while True:
i = rd.find("\\cite")
if i < 0: break
......@@ -198,11 +201,14 @@ def lectures(info, pensum=None):
for i in range(0, len(lecture_info)):
l = dict()
l['year'] = d.year
l['month'] = d.strftime('%B')
l['day'] = d.day
l['date'] = d
l['preceded_by_holiday'] = i == holiday
l = {**l, **date2format(d)}
if not continuing_education():
ehw = int(info.get('extraordinary_holiday_week', -1))
if 'extraordinary_holiday_week' in info and int(lecture_info[i]['number']) == int(info['extraordinary_holiday_week']) and ehw == 13:
......@@ -238,10 +244,47 @@ def lectures(info, pensum=None):
linfo['homework_problems_long'] = hwp.replace("P", "Problem ") if hwp else ""
if linfo["learning_objectives"]:
linfo["learning_objectives"] = [s.strip() for s in linfo["learning_objectives"].split("\n")]
linfo['reading_rst'] = bib2rst(linfo['reading'])
l.update(linfo)
lectures.append(l)
return lectures, pensum
def bib2rst(bib):
if bib is None or 'cite' not in bib:
return bib
bib = bib.split("cite")[1]
where = None
if "[" in bib:
where = bib.split("[")[1].split("]")[0]
what = bib.split("{")[1].split("}")[0]
if where is None:
return f":cite:p:`{what}`"
else:
return f"{where}, :cite:p:`{what}`"
# return ""
pass
def date2format(nd):
ab = 'st'
if nd.day == 2:
ab = "nd"
elif nd.day == 3:
ab = 'rd'
elif nd.day >= 4:
ab = 'th'
latex_long = f"{nd.strftime('%A')} {nd.day}{ab} {nd.strftime('%B')}, {nd.year}"
latex_short = f"{nd.strftime('%B')} {nd.day}{ab}, {nd.year}"
return {'latex_short': latex_short,
'latex_long': latex_long,
'latex_abbrev': f"{nd.strftime('%b')} {nd.day}{ab}",
'latex_abbrev_year': f"{nd.strftime('%b')} {nd.day}{ab}, {nd.year}",
}
# return latex_short, latex_long
def get_forum(paths):
a = xlsx_to_dicts(paths['information.xlsx'], sheet='forum', as_dict_list=True)
if a is None:
......@@ -263,12 +306,12 @@ def get_forum(paths):
return d2
# @profile
def class_information():
def class_information(verbose=False):
course_number = core_conf['course_number']
piazza = 'https://piazza.com/dtu.dk/%s%s/%s' % (semester().lower(), year(), course_number)
paths = get_paths()
teachers = xlsx_to_dicts(paths['information.xlsx'], sheet='teachers')
students, all_groups = populate_student_report_results( get_enrolled_students() )
students, all_groups = populate_student_report_results( get_enrolled_students(), verbose=verbose)
continuing_education_mode = core_conf['continuing_education_mode']
faq = xlsx_to_dicts(paths['information.xlsx'], sheet='faq')
......@@ -359,6 +402,8 @@ def class_information():
if 'reports_delta' in d:
print(234)
if 'handin_day_delta' in d:
d['reports_info'] = {}
for k, r in enumerate(d['reports_handin']):
......@@ -368,15 +413,21 @@ def class_information():
nd = d['lectures'][r-1]['date'] + timedelta(days=int(d['handin_day_delta']))
ri['date'] = nd
ri['html'] = f"{nd.day} {nd.strftime('%b')}"
ab = 'st'
if nd.day == 2:
ab = "nd"
elif nd.day == 3:
ab = 'rd'
elif nd.day >= 4:
ab = 'th'
ri['latex_long'] = f"{nd.strftime('%A')} {nd.day}{ab} {nd.strftime('%B')}, {nd.year}"
ri['latex_short'] = f"{nd.strftime('%B')} {nd.day}{ab}, {nd.year}"
# ab = 'st'
# if nd.day == 2:
# ab = "nd"
# elif nd.day == 3:
# ab = 'rd'
# elif nd.day >= 4:
# ab = 'th'
# latex_short, latex_long = date2format(nd)
# ri['latex_long'] = latex_long # f"{nd.strftime('%A')} {nd.day}{ab} {nd.strftime('%B')}, {nd.year}"
# ri['latex_short'] = latex_short # f"{nd.strftime('%B')} {nd.day}{ab}, {nd.year}"
ri = {**ri, **date2format(nd)}
d['reports_info'][k] = ri
......@@ -384,6 +435,47 @@ def class_information():
if ppi is not None:
d = ppi(paths, d)
r_details = {}
def get_lecture_date(lecture_id, delta_days=0):
ri = {}
ri['lecture'] = lecture_id
if lecture_id is None:
return ri
l = [l for l in d['lectures'] if l['number'] == lecture_id][0]
nd = l['date'] + timedelta(days=delta_days)
ri['date'] = nd
ri['html'] = f"{nd.day} {nd.strftime('%b')}"
# ab = 'st'
# if nd.day == 2:
# ab = "nd"
# elif nd.day == 3:
# ab = 'rd'
# elif nd.day >= 4:
# ab = 'th'
# ri['latex_long'] = f"{nd.strftime('%A')} {nd.day}{ab} {nd.strftime('%B')}, {nd.year}"
# ri['latex_short'] = f"{nd.strftime('%B')} {nd.day}{ab}, {nd.year}"
ri = {**ri, **date2format(nd)}
# d['reports_info'][k] = ri
return ri
# TH: This is the new way of specifying projects. Change to this datastructure gradually.
reports = xlsx_to_dicts(paths['information.xlsx'], sheet='reports', as_dict_list=False)
if reports is not None:
d['reports'] = {}
for r in reports:
if 'id' in r:
d['reports'][r['id']] = r
r['handin'] = get_lecture_date(r['handin'], delta_days=int(d['handin_day_delta']))
r['handout'] = get_lecture_date(r['handout'], delta_days=0)
r['exercises'] = [e.strip() for e in r['exercises'].split(",") if len(e.strip()) > 0]
ice = xlsx_to_dicts(paths['information.xlsx'], sheet='ce', as_dict_list=True)
return d
def fix_instructor_comma(dd, instructors):
......
......@@ -200,12 +200,13 @@ def get_groups_from_report(repn):
# @profile
def populate_student_report_results(students):
def populate_student_report_results(students, verbose=False):
# take students (list-of-dicts in the info format) and assign them the results from the reports.
out = get_output_file()
import time
t0 = time.time()
print("> Loading student report scores from: %s"%out)
if verbose:
print(f"> Loading student report scores from: {out}")
if not os.path.exists(out):
return students, []
......
......@@ -149,6 +149,8 @@ def make_lectures(week=None, mode=0, gather_pdf_out=True, gather_sixup=True, mak
for f in glob.glob(paths['lectures'] + "/templates/*.tex"):
ex = "_partial.tex"
if f.endswith(ex):
# print(info)
print("Building file", f)
jinjafy_template(info, file_in=f, file_out=lecture_texdir + "/templates/"+os.path.basename(f)[:-len(ex)] + ".tex")
# Fix questions.
......@@ -162,7 +164,16 @@ def make_lectures(week=None, mode=0, gather_pdf_out=True, gather_sixup=True, mak
if make_quizzes:
lecture_question_compiler(paths, info, lecture_texfile)
print("Making file", lecture_texfile, Linux)
# pdf_out = slider.latexmk(lecture_texfile, Linux=Linux)
try:
pdf_out = slider.latexmk(lecture_texfile, Linux=Linux)
except Exception as e:
log = lecture_texfile[:-4] + ".log"
print("loading log", log)
with open(log, 'r') as f:
print(f.read())
raise e
all_pdfs.append( (w,pdf_out))
if len(all_pdfs) > 0:
......@@ -198,13 +209,7 @@ def handle_pdf_collection(paths, all_pdfs, gather_pdf_out, gather_sixup, odir):
for dpdf in pdf_compiled_all_6up:
output_dir = paths['pdf_out'] + odir
if not os.path.exists(output_dir):
os.mkdir(output_dir)
# if not info['slides_showsolutions']:
# odir += "/lectures_without_solutions"
# if not os.path.isdir(odir):
# os.mkdir(odir)
#
os.makedirs(output_dir)
shutil.copy(dpdf, output_dir + "/" + os.path.basename(dpdf))
for f in glob.glob(tmp_dir + "/*"):
......@@ -392,7 +397,7 @@ def make_exercises_projects_tutors(week=None, only_exercises=False, make_exercis
'year': ex0_date.year,
'month': calendar.month_name[ex0_date.month],
'day': ex0_date.day}
all_lectures = [ex0] + info['lectures'][:-1]
all_lectures = [ex0] + info['lectures']
exercises_to_compile = all_lectures[week:week+1] if week != None else all_lectures
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment