Commit 5351f71f8ac14c9c3b7298de6025fdaf8e0058b1

Authored by Miguel Barão
1 parent f4aa081d
Exists in dev

minor

Showing 2 changed files with 27 additions and 25 deletions   Show diff stats
@@ -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