From d94895c6d727d3a0d13910907826833800fce533 Mon Sep 17 00:00:00 2001 From: Kumi Date: Sat, 20 Aug 2022 05:58:22 +0000 Subject: [PATCH] Initial commit --- .gitignore | 3 +++ config.dist.ini | 5 +++++ worker.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 .gitignore create mode 100644 config.dist.ini create mode 100644 worker.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8822ed --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +config.ini +*.pyc +__pycache__/ \ No newline at end of file diff --git a/config.dist.ini b/config.dist.ini new file mode 100644 index 0000000..043e374 --- /dev/null +++ b/config.dist.ini @@ -0,0 +1,5 @@ +[IMPORTER] +SourcePath = /replication/courses/ +PHPScript = /var/www/html/moodle/local/replication/import_cli.php + +[STATUS] \ No newline at end of file diff --git a/worker.py b/worker.py new file mode 100644 index 0000000..35a893d --- /dev/null +++ b/worker.py @@ -0,0 +1,54 @@ +from pathlib import Path +from configparser import ConfigParser + +import re +import subprocess +import shutil + + +config = ConfigParser() + +config.read("config.ini") + +source = Path(config["IMPORTER"]["SourcePath"]) +completed = source / "completed" +completed.mkdir(exist_ok=True) + +courses = dict() + +mbzre = re.compile(r"course_(?P\d+)_(?P\d+)_(?P\d+).mbz") + +def call_php(courseid: int, categoryid: int, timestamp: int): + try: + subprocess.run(["php", config["IMPORTER"]["PHPScript"], f"--courseid={courseid}", f"--categoryid={categoryid}", f"--timestamp={timestamp}"], cwd=Path(config["IMPORTER"]["PHPScript"]).parent, check=True) + return True + except subprocess.CalledProcessError: + return False + + +for mbz in source.glob("course_*_*_*.mbz"): + meta = mbzre.search(mbz).groupdict() + + if not meta["courseid"] in courses.keys(): + courses[int(meta["courseid"])] = list() + + courses[int(meta["courseid"])].append((int(meta["categoryid"]), int(meta["timestamp"]))) + + +for course, data in sorted(courses.items(), key = lambda x: x[0]): + current = config.getint("STATUS", str(course), fallback=0) + + byage = sorted(data, key = lambda x: -x[1]) + + if byage[0][1] > current: + if not call_php(course, byage[0][0], byage[0][1]): + print("Something went wrong while importing {course}.") + continue + + config["STATUS"][str(course)] = str(byage[0][1]) + + for categoryid, timestamp in byage: + shutil.move(source / f"course_{course}_{categoryid}_{timestamp}.mbz", completed) + +with open("config.ini", "w") as configfile: + config.write(configfile) \ No newline at end of file