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