Commit 5351f71f8ac14c9c3b7298de6025fdaf8e0058b1
1 parent
f4aa081d
Exists in
dev
minor
Showing
2 changed files
with
27 additions
and
25 deletions
Show diff stats
README.md
| @@ -11,14 +11,14 @@ | @@ -11,14 +11,14 @@ | ||
| 11 | 11 | ||
| 12 | ## Requirements | 12 | ## Requirements |
| 13 | 13 | ||
| 14 | -The webserver is a python application that requires `>=python3.8` and the | 14 | +The web server is a python application that requires `>=python3.11` and the |
| 15 | package installer for python `pip`. The node package management `npm` is also | 15 | package installer for python `pip`. The node package management `npm` is also |
| 16 | -necessary in order to install the javascript libraries. | 16 | +necessary in order to install javascript libraries. |
| 17 | 17 | ||
| 18 | ```sh | 18 | ```sh |
| 19 | sudo apt install python3 python3-pip npm # Ubuntu | 19 | sudo apt install python3 python3-pip npm # Ubuntu |
| 20 | -sudo pkg install python38 py38-sqlite3 py38-pip npm # FreeBSD | ||
| 21 | -sudo port install python38 py38-pip py38-setuptools npm6 # MacOS (macports) | 20 | +sudo pkg install python py311-sqlite3 py311-pip npm # FreeBSD |
| 21 | +sudo port install python312 py312-pip py312-setuptools npm10 # MacOS (macports) | ||
| 22 | ``` | 22 | ``` |
| 23 | 23 | ||
| 24 | To make the `pip` install packages to a local directory, the file `pip.conf` | 24 | To make the `pip` install packages to a local directory, the file `pip.conf` |
perguntations/testfactory.py
| @@ -9,7 +9,8 @@ import random | @@ -9,7 +9,8 @@ import random | ||
| 9 | import logging | 9 | import logging |
| 10 | 10 | ||
| 11 | # other libraries | 11 | # other libraries |
| 12 | -import schema | 12 | +# import schema |
| 13 | +from schema import And, Or, Optional, Regex, Schema, Use | ||
| 13 | 14 | ||
| 14 | # this project | 15 | # this project |
| 15 | from .questions import QFactory, QuestionException, QDict | 16 | from .questions import QFactory, QuestionException, QDict |
| @@ -41,34 +42,35 @@ def check_import_files(files: list) -> bool: | @@ -41,34 +42,35 @@ def check_import_files(files: list) -> bool: | ||
| 41 | return True | 42 | return True |
| 42 | 43 | ||
| 43 | 44 | ||
| 44 | -def normalize_question_list(questions: list) -> None: | ||
| 45 | - """convert question ref from string to list of string""" | ||
| 46 | - for question in questions: | ||
| 47 | - if isinstance(question["ref"], str): | ||
| 48 | - question["ref"] = [question["ref"]] | ||
| 49 | - | ||
| 50 | - | ||
| 51 | -test_schema = schema.Schema( | 45 | +test_schema = Schema( |
| 52 | { | 46 | { |
| 53 | - "ref": schema.Regex("^[a-zA-Z0-9_-]+$"), | ||
| 54 | - "database": schema.And(str, path.isfile), | ||
| 55 | - "answers_dir": schema.And(str, check_answers_directory), | 47 | + "ref": Regex("^[a-zA-Z0-9_-]+$"), |
| 48 | + "database": And(str, path.isfile), | ||
| 49 | + "answers_dir": Use(check_answers_directory), | ||
| 56 | "title": str, | 50 | "title": str, |
| 57 | - schema.Optional("duration"): int, | ||
| 58 | - schema.Optional("autosubmit"): bool, | ||
| 59 | - schema.Optional("autocorrect"): bool, | ||
| 60 | - schema.Optional("show_points"): bool, | ||
| 61 | - schema.Optional("scale"): schema.And( | ||
| 62 | - [schema.Use(float)], lambda s: len(s) == 2 | ||
| 63 | - ), | ||
| 64 | - "files": schema.And([str], check_import_files), | ||
| 65 | - "questions": [{"ref": schema.Or(str, [str]), schema.Optional("points"): float}], | 51 | + Optional("duration"): int, |
| 52 | + Optional("autosubmit"): bool, | ||
| 53 | + Optional("autocorrect"): bool, | ||
| 54 | + Optional("show_points"): bool, | ||
| 55 | + Optional("scale"): And([Use(float)], lambda s: len(s) == 2), | ||
| 56 | + "files": And([str], check_import_files), | ||
| 57 | + "questions": [{ | ||
| 58 | + "ref": Or(str, [str]), | ||
| 59 | + Optional("points"): float | ||
| 60 | + }], | ||
| 66 | }, | 61 | }, |
| 67 | ignore_extra_keys=True, | 62 | ignore_extra_keys=True, |
| 68 | ) | 63 | ) |
| 69 | # FIXME: schema error with 'testfile' which is added in the code | 64 | # FIXME: schema error with 'testfile' which is added in the code |
| 70 | 65 | ||
| 71 | # ============================================================================ | 66 | # ============================================================================ |
| 67 | +def normalize_question_list(questions: list) -> None: # FIXME: move inside the class? | ||
| 68 | + """convert question ref from string to list of string""" | ||
| 69 | + for question in questions: | ||
| 70 | + if isinstance(question["ref"], str): | ||
| 71 | + question["ref"] = [question["ref"]] | ||
| 72 | + | ||
| 73 | + | ||
| 72 | class TestFactoryException(Exception): | 74 | class TestFactoryException(Exception): |
| 73 | """exception raised in this module""" | 75 | """exception raised in this module""" |
| 74 | 76 |
-
mentioned in commit cc91e4c034aa4336bad33042438dd98d4f20d958