sql-assignment-generator 0.0.12__tar.gz → 0.0.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/PKG-INFO +1 -1
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/pyproject.toml +1 -1
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/__init__.py +24 -13
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/test.py +1 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/.env.template +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/.gitattributes +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/.gitignore +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/.readthedocs.yaml +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/LICENSE +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/Makefile +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/README.md +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/docs/Makefile +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/docs/conf.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/docs/index.rst +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/docs/make.bat +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/docs/requirements.txt +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/requirements.txt +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/assignment.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/dataset/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/dataset/dataset.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/dataset/strings.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/exercise/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/exercise/exercise.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/assignments/exercise/strings.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/base.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/costraintType.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/aggregation.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/base.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/clause_from.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/clause_group_by.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/clause_having.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/clause_order_by.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/clause_select.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/clause_where.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/rows.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/set_operations.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/query/subquery.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/schema/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/schema/base.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/schema/tables.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/constraints/schema/values.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/difficulty_level.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/domains.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/base.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_002.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_004.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_007.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_009.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_010.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_011.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_012.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_015.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_019.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_021.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_026.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_035.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_039.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_040.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_041.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_042.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_043.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_044.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_045.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_046.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_049.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_052.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_053.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_054.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_055.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_057.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_058.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_059.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_060.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_062.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_063.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_064.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_066.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_067.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_068.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_069.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_070.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_071.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_072.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_073.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_074.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_075.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_076.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_077.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_078.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_079.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_080.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_081.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_083.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_084.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_086.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_088.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_089.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_091.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_093.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_095.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_096.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_097.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_098.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_099.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_102.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_104.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/error_requirements/err_105.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/exceptions.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/llm/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/llm/chatgpt.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/llm/message.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/src/sql_assignment_generator/llm/models.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_aggregation.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_clause_from.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_clause_group_by.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_clause_having.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_clause_order_by.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_clause_select.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_clause_where.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_rows.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_set_operation.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/query/test_subquery.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/schema/__init__.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/schema/test_tables.py +0 -0
- {sql_assignment_generator-0.0.12 → sql_assignment_generator-0.0.14}/tests/constraints/schema/test_values.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sql_assignment_generator
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.14
|
|
4
4
|
Summary: This project generates SQL assignments based on common mistakes made by learners.
|
|
5
5
|
Project-URL: Repository, https://github.com/DavidePonzini/sql_assignment_generator
|
|
6
6
|
Project-URL: Documentation, https://sql-assignment-generator.readthedocs.io/en/latest/index.html
|
|
@@ -24,6 +24,8 @@ def generate_assignment(
|
|
|
24
24
|
*,
|
|
25
25
|
shuffle_exercises: bool = False,
|
|
26
26
|
naming_func: Callable[[SqlErrors, DifficultyLevel], str] = lambda error, difficulty: f'{error.name} - {difficulty.name}',
|
|
27
|
+
max_dataset_attempts: int = 3,
|
|
28
|
+
max_exercise_attempts: int = 3,
|
|
27
29
|
max_unique_attempts: int = 3,
|
|
28
30
|
max_workers: int | None = None
|
|
29
31
|
) -> Assignment:
|
|
@@ -39,28 +41,37 @@ def generate_assignment(
|
|
|
39
41
|
domain (str | None): The domain for the assignments. If None, a random domain will be selected.
|
|
40
42
|
shuffle_exercises (bool): Whether to shuffle exercises to prevent ordering bias (shuffles input order).
|
|
41
43
|
naming_func (Callable[[SqlErrors, DifficultyLevel], str]): Generates exercise titles.
|
|
44
|
+
max_dataset_attempts (int): Maximum retries for generating a valid dataset before skipping.
|
|
45
|
+
max_exercise_attempts (int): Maximum retries for generating a valid exercise before skipping.
|
|
42
46
|
max_unique_attempts (int): Maximum retries to avoid duplicate solutions per (error, difficulty).
|
|
43
47
|
max_workers (int | None): Thread pool size. If None, uses ThreadPoolExecutor default.
|
|
44
48
|
|
|
45
49
|
Returns:
|
|
46
50
|
Assignment: The generated assignment (stable order).
|
|
47
51
|
'''
|
|
52
|
+
|
|
53
|
+
# filter only supported errors
|
|
54
|
+
supported_errors: list[tuple[SqlErrors, DifficultyLevel]] = []
|
|
55
|
+
for error, difficulty in errors:
|
|
56
|
+
if error in ERROR_REQUIREMENTS_MAP:
|
|
57
|
+
supported_errors.append((error, difficulty))
|
|
58
|
+
else:
|
|
59
|
+
dav_tools.messages.warning(f'Skipping unsupported error: {error.name}')
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
if not supported_errors:
|
|
62
|
+
raise ValueError('No supported errors provided for assignment generation.')
|
|
50
63
|
|
|
51
64
|
if domain is None:
|
|
52
65
|
domain = random_domain()
|
|
53
66
|
|
|
54
67
|
if shuffle_exercises:
|
|
55
68
|
random.shuffle(errors)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
dav_tools.messages.info(f'Starting assignment generation for {len(supported_errors)} exercises (out of {len(errors)} requested)')
|
|
56
72
|
|
|
57
73
|
# convert SqlErrors -> SqlErrorRequirements, keeping difficulty levels
|
|
58
|
-
requirements: list[tuple[SqlErrors, SqlErrorRequirements, DifficultyLevel]] = []
|
|
59
|
-
for error, difficulty in errors:
|
|
60
|
-
if error not in ERROR_REQUIREMENTS_MAP:
|
|
61
|
-
raise NotImplementedError(f'Error requirements not implemented for error: {error.name}')
|
|
62
|
-
|
|
63
|
-
requirements.append((error, ERROR_REQUIREMENTS_MAP[error], difficulty))
|
|
74
|
+
requirements: list[tuple[SqlErrors, SqlErrorRequirements, DifficultyLevel]] = [(error, ERROR_REQUIREMENTS_MAP[error], difficulty) for error, difficulty in supported_errors]
|
|
64
75
|
|
|
65
76
|
# initialize requirements and extra details
|
|
66
77
|
dataset_requirements: list[SchemaConstraint] = []
|
|
@@ -75,7 +86,7 @@ def generate_assignment(
|
|
|
75
86
|
dataset_extra_details = list(set(dataset_extra_details)) # deduplicate details
|
|
76
87
|
|
|
77
88
|
dav_tools.messages.info(f'Generating dataset for domain: {domain}')
|
|
78
|
-
dataset = Dataset.generate(domain, dataset_requirements, dataset_extra_details)
|
|
89
|
+
dataset = Dataset.generate(domain, dataset_requirements, dataset_extra_details, max_attempts=max_dataset_attempts)
|
|
79
90
|
|
|
80
91
|
generated_solutions_hashes: set[str] = set()
|
|
81
92
|
hashes_lock = threading.Lock()
|
|
@@ -98,7 +109,7 @@ def generate_assignment(
|
|
|
98
109
|
|
|
99
110
|
for attempt in range(max_unique_attempts):
|
|
100
111
|
try:
|
|
101
|
-
generated_exercise = Exercise.generate(error, difficulty, constraints, extra_details, dataset=dataset, title=title)
|
|
112
|
+
generated_exercise = Exercise.generate(error, difficulty, constraints, extra_details, dataset=dataset, title=title, max_attempts=max_exercise_attempts)
|
|
102
113
|
except ExerciseGenerationError:
|
|
103
114
|
with log_lock:
|
|
104
115
|
dav_tools.messages.warning(f'{title}: Skipping exercise generation for {error.name} due to validation failures.')
|
|
@@ -126,7 +137,7 @@ def generate_assignment(
|
|
|
126
137
|
return (idx, None)
|
|
127
138
|
|
|
128
139
|
# Pre-allocate so we can preserve ordering no matter completion order.
|
|
129
|
-
ordered_results: list[Exercise | None] = [None] * len(
|
|
140
|
+
ordered_results: list[Exercise | None] = [None] * len(supported_errors)
|
|
130
141
|
|
|
131
142
|
if max_workers == 1:
|
|
132
143
|
for idx, (error, requirement, difficulty) in enumerate(requirements):
|
|
@@ -144,10 +155,10 @@ def generate_assignment(
|
|
|
144
155
|
|
|
145
156
|
exercises: list[Exercise] = [ex for ex in ordered_results if ex is not None]
|
|
146
157
|
|
|
147
|
-
if len(exercises) < len(
|
|
148
|
-
dav_tools.messages.warning(f'Finished generating exercises with some failures. Generated {len(exercises)}
|
|
158
|
+
if len(exercises) < len(supported_errors):
|
|
159
|
+
dav_tools.messages.warning(f'Finished generating exercises with some failures. Generated: {len(exercises)}. Unsupported: {len(errors) - len(supported_errors)}. Failed: {len(supported_errors) - len(exercises)}.')
|
|
149
160
|
else:
|
|
150
|
-
dav_tools.messages.success(f'Successfully generated all {len(exercises)} exercises.')
|
|
161
|
+
dav_tools.messages.success(f'Successfully generated all {len(exercises)} exercises. Unsupported: {len(errors) - len(supported_errors)}.')
|
|
151
162
|
|
|
152
163
|
return Assignment(
|
|
153
164
|
dataset=dataset,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|