96 lines
3.2 KiB
Python
Executable file
96 lines
3.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
import subprocess
|
|
|
|
from settings import *
|
|
from logger import Logger
|
|
|
|
|
|
logger = Logger()
|
|
|
|
|
|
def trigger_export(courseid, categoryid):
|
|
output_name = f"course_{courseid}_{categoryid}_{int(datetime.now().timestamp())}.mbz"
|
|
result = subprocess.run([MOOSH_PATH, "-p", MOODLE_PATH, "course-backup",
|
|
"-p", OUTPUT_PATH, "-f", output_name, "--template", courseid],
|
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
for message in result.stdout.decode().splitlines():
|
|
logger.debug(message)
|
|
for error in result.stderr.decode().splitlines():
|
|
logger.error(error)
|
|
return output_name
|
|
|
|
|
|
def trigger_categories_export():
|
|
OUTPUT_PATH = Path(OUTPUT_PATH)
|
|
|
|
output_name = f"categories_{int(datetime.now().timestamp())}.xml"
|
|
result = subprocess.run([MOOSH_PATH, "-p", MOODLE_PATH, "category-export", "0"],
|
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
|
try:
|
|
with open(OUTPUT_PATH / output_name, "wb") as xmlfile:
|
|
xmlfile.write(result.stdout)
|
|
except IOError as e:
|
|
logger.error(
|
|
f"Could not write categories to {OUTPUT_PATH / output_name}: {e}")
|
|
|
|
for error in result.stderr.decode().splitlines():
|
|
logger.error(error)
|
|
|
|
|
|
def main():
|
|
global SIGNAL_PATH, OUTPUT_PATH
|
|
logger.info("Moodle Export Worker starting")
|
|
SIGNAL_PATH = Path(SIGNAL_PATH)
|
|
OUTPUT_PATH = Path(OUTPUT_PATH)
|
|
|
|
if SIGNAL_PATH.exists():
|
|
if not SIGNAL_PATH.is_dir():
|
|
logger.fatal(
|
|
f"Cannot create signalling directory {SIGNAL_PATH} because a file with that name exists.")
|
|
exit(1)
|
|
else:
|
|
try:
|
|
SIGNAL_PATH.mkdir()
|
|
except Exception as e:
|
|
logger.fatal(
|
|
f"Cannot create signalling directory {SIGNAL_PATH}: {e}")
|
|
exit(1)
|
|
|
|
for f in SIGNAL_PATH.glob("*-*.mew"):
|
|
logger.debug(f"Found file {f.name} - start processing")
|
|
try:
|
|
pre = datetime.now()
|
|
output_name = trigger_export(*f.name.split(".")[0].split("-"))
|
|
dur = datetime.now() - pre
|
|
size = Path(OUTPUT_PATH / output_name).stat().st_size
|
|
f.unlink()
|
|
logger.debug(
|
|
f"Created file {output_name} ({size} bytes) in {dur.seconds} seconds")
|
|
except Exception as e:
|
|
logger.error(
|
|
f"Export of course {f.name.split('.')[0].split('-')[0]} failed: {e}")
|
|
|
|
if (SIGNAL_PATH / "categories.mew").exists():
|
|
logger.debug(f"Found file categories.mew - processing categories")
|
|
try:
|
|
pre = datetime.now()
|
|
output_name = trigger_categories_export()
|
|
dur = datetime.now() - pre
|
|
size = Path(OUTPUT_PATH / output_name).stat().st_size
|
|
f.unlink()
|
|
logger.debug(
|
|
f"Created file {output_name} ({size} bytes) in {dur.seconds} seconds")
|
|
except Exception as e:
|
|
logger.error(
|
|
f"Export of categories failed: {e}")
|
|
|
|
logger.info("Moodle Export Worker done")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|