Skip to content
Snippets Groups Projects
Commit ca0aa17e authored by Sivecano's avatar Sivecano
Browse files

initial

parents
No related branches found
No related tags found
No related merge requests found
*
!.gitignore
!downloader.py
!semesters.json
#!/usr/bin/env python3
import os
import urllib.request
import json
import re
import sys
import argparse
parser = argparse.ArgumentParser(
prog="downloader",
description="file downloader intended for my ETH exercise series and scripts",
epilog="requires a semesters.json in your active directory"
)
parser.add_argument("week", nargs="?", default=15, type=int)
parser.add_argument("-a", "--all", action="store_true")
parser.add_argument("-s", "--semester", type=int)
args = parser.parse_args()
print(args)
with open("semesters.json", "r") as f:
data = json.load(f)
name = data["name"]
data = data["semesters"]
sem = max(map(int, data))
if args.semester is not None:
sem = min(args.semester, sem)
def get_shorthand(lecture: str):
return "".join((i[:4] for i in re.split(" |_", lecture)))
def ensure_path_existence(path: str):
if os.path.exists(path):
return
os.mkdir(path)
def setup_template(lecture: str, week: int):
shorthand = get_shorthand(lecture)
# I do not wish for my files to get overwritten
if os.path.exists(lec["name"] + os.sep + shorthand + "_" + str(week) + ".tex"):
return
with open(lecture + os.sep + "Exercises" + os.sep + shorthand + "_" + str(week) + ".tex", "w") as file:
print("\\documentclass{amsart}", file=file)
print("\\usepackage{amsmath}", file=file)
print("\\usepackage{amssymb}", file=file)
print(f"\n\\author{{{name}}}", file=file)
print("\\title{{{} Series {}}}".format(
lecture.replace("_", " "), week), file=file)
print("\n\\begin{document}\n\\maketitle", file=file)
print("\\begin{enumerate}\n", file=file)
print("\\end{enumerate}", file=file)
print("\\end{document}", file=file)
# returns True on success and false on failure
def download_week(lec: dict, week: int):
ensure_path_existence(lec["name"])
num = week + lec["offset"]
f = lec["file"].format(num)
try:
urllib.request.urlretrieve(f"{lec['url']}/{f}", f"{lec['name']}/{f}")
except urllib.error.HTTPError as e:
print(lec["name"].ljust(max((len(l["name"]) for l in lecs))), f"week {week:2} Download failed with code ", e.code)
return False
ensure_path_existence(lec["name"] + os.sep + "Exercises")
setup_template(lec["name"], num)
return True
ensure_path_existence(f"Semester_{sem}")
os.system("rm ./current")
os.system(f"ln -sf ./Semester_{sem} ./current")
os.chdir(f"Semester_{sem}")
lecs = data[str(sem)]
for lec in lecs:
if args.all:
for i in range(1, args.week + 1):
if not download_week(lec, i):
break;
else:
download_week(lec, args.week)
print("ALL DONE! :)")
{
"name" : "Fadri Lardon",
"semesters" : {
"3" : [
{
"name" : "Complex_Analysis",
"url" : "https://metaphor.ethz.ch/x/2022/hs/401-2303-00L/ex",
"file" : "ES{}.pdf",
"offset" : 0
},
{
"name" : "Analysis_3",
"url" : "https://metaphor.ethz.ch/x/2022/hs/401-2283-00L/ex",
"file" : "serie{:02d}_en.pdf",
"offset" : 0
},
{
"name" : "Algebra_I",
"url" : "https://metaphor.ethz.ch/x/2022/hs/401-2003-00L/ex",
"file" : "S{}.pdf",
"offset" : 0
},
{
"name" : "Theoretical_Informatics",
"url" : "https://courses.ite.inf.ethz.ch/theo_inf_22",
"file" : "blatt{:02d}e.pdf",
"offset" : 0
}
],
"4" : [
{
"name" : "Topology",
"url" : "https://metaphor.ethz.ch/x/2023/fs/401-2554-00L/ex",
"file" : "Serie{}.pdf",
"offset" : 0
},
{
"name" : "Algebra_II",
"url" : "https://metaphor.ethz.ch/x/2023/fs/401-2004-00L/ex",
"file" : "S{}.pdf",
"offset" : 14
},
{
"name" : "Analysis_4",
"url" : "https://metaphor.ethz.ch/x/2023/fs/401-2464-00L/ex",
"file" : "ps{}.pdf",
"offset" : -1
},
{
"name" : "Probability_&_Statistics",
"url" : "https://metaphor.ethz.ch/x/2023/fs/401-2604-00L/ex",
"file" : "2023_WuS_S{}.pdf",
"offset" : 0
},
{
"name" : "Geometry",
"url" : "https://metaphor.ethz.ch/x/2023/fs/401-2534-00L/ex",
"file" : "ex_{}.pdf",
"offset" : 0
}
]
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment