Package: extractzip-sebastian-stigler
ExtractZipExtract Slides, Exercises, Solutions, TestExams or Exams!InstallationCreate the userextractzipand set the access rights for the home directory.# as user root:
adduser --disabled-password extractzip
chmod 2771 ~extractzipAddextractzipgroup toadmin usersthat want to use this tool.# as user root:
adduser jupyter-sebastian extractzipCreate the config directory and file and set access rights and ownership.# as user root
mkdir /etc/extractzip
chmod 755 /etc/extractzip
touch /etc/extractzip/config.yaml
chmod 664 /etc/extractzip/config.yaml
chown  extractzip:extractzip /etc/extractzip/config.yamlEdit the config file, where you specify thebase_path(home directory ofextractzip) and thecourses.
Each course has aname(the directory inbase_path) that follows the pattern^[a-z0-9_]+$and optional
entries forslides,exercises,solutions,testexamandexamwhich points to the basename of the corresponding
zip file.# as admin user with extractzip group (e.g. jupyter-sebastian)

# You can see here an course with the name 'testcourse'.
# The exam is commented out -> it can't be downloaded yet.

# /etc/extractzip/config.yaml

---
base_path: /home/extractzip
courses: 
  - name: testcourse
    slides: Slides.zip
    examples: Examples.zip
    exercises: Exercises.zip
    solutions: Solutions.zip
    # exam: Exam.zip
    testexam: Testexam.zipCreate the corresponding directory for the configured course, copy the zip files in it and set the correct
access rights.# as admin user with extractzip group (e.g. jupyter-sebastian)

cd ~extractzip
mkdir testcourse
chmod 2751 testcourse

# copy zipfiles to new directory from <src_dir>
cp <src_dir>/{Exercises,Solutions,Exam,Testexam}.zip testcourse/.
chmod 644 testcourse/*.zipCheck config, course directory and zip filesRun the following command with the course directory to check:CheckExtractZip testcourseThe result of the checks will be prefix with an emoji to indicatesuccess(🤩),failure(👿) orthe zipfile is not yet in the course directory(💀). The last one is not an error (see the third example below).If everything is ok, the output should look like this (make sure that the last line readsCheck complete!):-----Course name----------------------------------
  🤩  The course name 'testcourse' is well formed.
-----Check config file----------------------------
  🤩  Config file loaded.
-----Check base path------------------------------
  🤩  Base path is ok.
-----Check course 'testcourse' directory----------
  🤩  Course path is ok.
-----Check Exercises in course 'testcourse'-------
  🤩  Exercises is defined in the config.
  🤩  The file Exercises.zip is ok.
  🤩  The file Exercises.zip is not encrypted.
-----Check Solutions in course 'testcourse'-------
  🤩  Solutions is defined in the config.
  🤩  The file Solutions.zip is ok.
  🤩  The file Solutions.zip is not encrypted.
-----Check Exam in course 'testcourse'------------
  🤩  Exam is defined in the config.
  🤩  The file Exam.zip is ok.
  🤩  The file Exam.zip is encrypted.
-----Check TestExam in course 'testcourse'--------
  🤩  TestExam is defined in the config.
  🤩  The file Testexam.zip is ok.
  🤩  The file Testexam.zip is encrypted.
--------------------------------------------------
Check complete!If the result is not ok, the output looks something like this (make sure the last line readsCheck incomplete!):-----Course name----------------------------------
  🤩  The course name 'testcourse' is well formed.
-----Check config file----------------------------
  🤩  Config file loaded.
-----Check base path------------------------------
  🤩  Base path is ok.
-----Check course 'testcourse' directory----------
  🤩  Course path is ok.
-----Check Exercises in course 'testcourse'-------
  🤩  Exercises is defined in the config.
  👿  Exercises.zip mode is 444 but it should be 644
-----Check Solutions in course 'testcourse'-------
  🤩  Solutions is defined in the config.
  🤩  The file Solutions.zip is ok.
  🤩  The file Solutions.zip is not encrypted.
-----Check Exam in course 'testcourse'------------
  🤩  Exam is defined in the config.
  🤩  The file Exam.zip is ok.
  🤩  The file Exam.zip is encrypted.
-----Check TestExam in course 'testcourse'--------
  🤩  TestExam is defined in the config.
  🤩  The file Testexam.zip is ok.
  🤩  The file Testexam.zip is encrypted.
--------------------------------------------------
Check incomplete!If you see lines like the following than it means, you have not put the configured zipfile for TestExam in the
course directory.This isnotan error because you could have intentionally withheld the file until it is convenient during the course:-----Check TestExam in course 'testcourse'--------
  🤩  TestExam is defined in the config.
  💀  The TestExam doesn't exist (yet).
--------------------------------------------------Using the ExtractZip packageTheExtractZipclass has the following general method for extracting a specific zip file:ExtractZip().extract_<lang>_<zip_type>_<course>()Where<lang>is eitherdefor german orenfor english,<exam_type>is eitherslides,examples,exercises,solutions,testexamorexamand<course>is the name of the course from theconfig.yaml.In a Jupyter Notebook you can put the following in a cell to extract theslidesof thetestcoursewithenglish output:fromextractzipimportExtractZipExtractZip().extract_en_slides_testcourse()When the cell is executed, the corresponding zipfile will be extracted in the home directory of the current user.NoteThis project has been set up using PyScaffold 4.5. For details and usage
information on PyScaffold seehttps://pyscaffold.org/.