prepare-assignment 0.4.2__tar.gz → 0.4.3__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.
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/PKG-INFO +1 -1
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/preparer.py +11 -1
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/validator.py +24 -1
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/pyproject.toml +1 -1
- prepare_assignment-0.4.3/tests/conftest.py +25 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_preparer.py +34 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_validator.py +32 -1
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/dependabot.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/workflows/pr-title.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/workflows/pypi-publish.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/workflows/release.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/workflows/semantic-release.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/workflows/test.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.gitignore +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.releaserc.json +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/LICENSE +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/README.md +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/__main__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/cli/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/cli/main.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/cli/task.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/cli/tasks.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/check.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/command.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/expression.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/main.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/runner.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/shell.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/subsituter.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/task_handler.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/versions.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/config.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/constants.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/errors.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/job_environment.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/prepare.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/task_definition.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/task_properties.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/types.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/schemas/config.schema.json +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/schemas/prepare.schema.json +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/schemas/task.schema.json +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/config.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/default_validator.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/dependency.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/files.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/logger.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/paths.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/resources.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/tasks.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/virtual_env.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/yml_loader.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_check.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_command.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_expression.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_resolve_version.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_runner.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_runner_process.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_shell.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_substituter.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/core/test_task_handler.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/data/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/data/test_prepare.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/data/test_types.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/test_dependencies.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/test_main.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/prepare.yml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/solution/pom.xml +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/solution/src/main/java/gradelist/AssessmentResult.java +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/solution/src/main/java/gradelist/GradeList.java +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/solution/src/main/java/gradelist/Test.java +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/solution/src/test/java/gradelist/AssessmentResultTest.java +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/testproject/solution/src/test/java/gradelist/GradeListTest.java +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/__init__.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/test_config.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/test_default_validator.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/test_files.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/test_logger.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/test_paths.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/tests/utils/test_resources.py +0 -0
- {prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/uv.lock +0 -0
|
@@ -12,7 +12,7 @@ from virtualenv import cli_run
|
|
|
12
12
|
|
|
13
13
|
from prepare_assignment.core.versions import COMMIT_HASH_RE, get_git_url, resolve_version
|
|
14
14
|
from prepare_assignment.core.validator import validate_task_definition, validate_tasks, load_yaml, \
|
|
15
|
-
validate_default_values
|
|
15
|
+
validate_default_values, validate_unique_ids
|
|
16
16
|
from prepare_assignment.data.errors import DependencyError, ValidationError, PrepareTaskError
|
|
17
17
|
from prepare_assignment.data.task_definition import TaskDefinition, CompositeTaskDefinition, \
|
|
18
18
|
PythonTaskDefinition, ValidableTask
|
|
@@ -154,10 +154,19 @@ def __sub_tasks(task: TaskDefinition) -> List[Any]:
|
|
|
154
154
|
return [step for step in task.tasks if step.get("uses", None) is not None]
|
|
155
155
|
|
|
156
156
|
|
|
157
|
+
def __validate_sub_task_ids(props: TaskProperties, task: TaskDefinition) -> None:
|
|
158
|
+
if isinstance(task, CompositeTaskDefinition):
|
|
159
|
+
validate_unique_ids(str(props.definition_path), f"task '{task.name}'", task.tasks)
|
|
160
|
+
|
|
161
|
+
|
|
157
162
|
def __load_task_from_disk(props: TaskProperties, parsed: Dict[str, ValidableTask]) -> None:
|
|
158
163
|
logger.debug(f"Task '{props}' is already available, loading from disk")
|
|
159
164
|
task_yaml = load_yaml(props.definition_path)
|
|
160
165
|
task = TaskDefinition.of(task_yaml, props.task_path)
|
|
166
|
+
try:
|
|
167
|
+
__validate_sub_task_ids(props, task)
|
|
168
|
+
except ValidationError as e:
|
|
169
|
+
raise PrepareTaskError(f"Unable to prepare task '{props}'", e) from e
|
|
161
170
|
# Always rebuild the schema, so schemas generated by older versions of prepare are updated
|
|
162
171
|
json_schema = __build_json_schema(props, task)
|
|
163
172
|
with open(__schema_path(props), "r", encoding="utf-8") as handle:
|
|
@@ -181,6 +190,7 @@ def __prepare_task(props: TaskProperties) -> ValidableTask:
|
|
|
181
190
|
task_yaml = validate_task_definition(props.definition_path)
|
|
182
191
|
task: TaskDefinition = TaskDefinition.of(task_yaml, props.task_path)
|
|
183
192
|
validate_default_values(task)
|
|
193
|
+
__validate_sub_task_ids(props, task)
|
|
184
194
|
if isinstance(task, PythonTaskDefinition):
|
|
185
195
|
main_path = os.path.join(props.repo_path, Path(task.main)) # type: ignore
|
|
186
196
|
if not Path(main_path).resolve().is_relative_to(props.repo_path.resolve()):
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Dict, Any
|
|
6
|
+
from typing import Dict, Any, List
|
|
7
7
|
|
|
8
8
|
from jsonschema.exceptions import ValidationError
|
|
9
9
|
from jsonschema.validators import validate
|
|
@@ -37,9 +37,32 @@ def validate_prepare(prepare_file: str, prepare: Dict[str, Any]) -> None:
|
|
|
37
37
|
except ValidationError as ve:
|
|
38
38
|
message = f"Error in: {prepare_file}, unable to verify '{ve.json_path}'\n\t -> {ve.message}"
|
|
39
39
|
raise VE(message)
|
|
40
|
+
for job, steps in prepare["jobs"].items():
|
|
41
|
+
validate_unique_ids(prepare_file, f"job '{job}'", steps)
|
|
40
42
|
logger.debug("✓ Prepare file is valid")
|
|
41
43
|
|
|
42
44
|
|
|
45
|
+
def validate_unique_ids(file: str, where: str, steps: List[Dict[str, Any]]) -> None:
|
|
46
|
+
"""
|
|
47
|
+
Validate that the ids of the steps are unique, the outputs of a step are stored under its id
|
|
48
|
+
NOTE: steps without an id are not checked
|
|
49
|
+
:param file: path/name of the file that contains the steps
|
|
50
|
+
:param where: the job or composite task that contains the steps, used in the error message
|
|
51
|
+
:param steps: the steps of the job or composite task
|
|
52
|
+
:return: None
|
|
53
|
+
:raises: ValidationError: if multiple steps have the same id
|
|
54
|
+
"""
|
|
55
|
+
names: Dict[str, List[str]] = {}
|
|
56
|
+
for step in steps:
|
|
57
|
+
step_id = step.get("id", None)
|
|
58
|
+
if step_id is not None:
|
|
59
|
+
names.setdefault(step_id, []).append(step.get("name", ""))
|
|
60
|
+
for step_id, step_names in names.items():
|
|
61
|
+
if len(step_names) > 1:
|
|
62
|
+
quoted = ", ".join(f"'{name}'" for name in step_names)
|
|
63
|
+
raise VE(f"Error in: {file}, {where} has multiple steps with id '{step_id}': {quoted}")
|
|
64
|
+
|
|
65
|
+
|
|
43
66
|
def validate_tasks(file: str, task: Dict[str, Any], json_schema: Any) -> None:
|
|
44
67
|
"""
|
|
45
68
|
Validate all tasks based on their respective json schemas
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Iterator
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
# Loggers that prepare() configures (level, handlers), see prepare_assignment/core/main.py
|
|
7
|
+
_LOGGERS = ("prepare_assignment", "tasks")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture(autouse=True)
|
|
11
|
+
def reset_loggers() -> Iterator[None]:
|
|
12
|
+
"""
|
|
13
|
+
Restore the prepare loggers after every test. prepare() sets their level (e.g. ERROR for verbosity 0), which made
|
|
14
|
+
tests that check log output with caplog fail when they ran after a test that calls prepare().
|
|
15
|
+
"""
|
|
16
|
+
saved = {}
|
|
17
|
+
for name in _LOGGERS:
|
|
18
|
+
logger = logging.getLogger(name)
|
|
19
|
+
saved[name] = (logger.level, list(logger.handlers), logger.propagate)
|
|
20
|
+
yield
|
|
21
|
+
for name, (level, handlers, propagate) in saved.items():
|
|
22
|
+
logger = logging.getLogger(name)
|
|
23
|
+
logger.setLevel(level)
|
|
24
|
+
logger.handlers[:] = handlers
|
|
25
|
+
logger.propagate = propagate
|
|
@@ -283,3 +283,37 @@ def test_outdated_schema_is_updated_on_load(mocker: MockerFixture) -> None:
|
|
|
283
283
|
spy.assert_not_called()
|
|
284
284
|
with open(schema_file) as handle:
|
|
285
285
|
assert "if" in json.load(handle)["properties"]
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
DUPLICATE_ID_COMPOSITE: Final[Dict[str, Any]] = {
|
|
289
|
+
'id': 'duplicate',
|
|
290
|
+
'name': 'duplicate',
|
|
291
|
+
'description': 'Composite task with a duplicate step id',
|
|
292
|
+
'runs': {
|
|
293
|
+
'using': 'composite',
|
|
294
|
+
'tasks': [{'name': 'first', 'id': 'same', 'run': 'echo 1'},
|
|
295
|
+
{'name': 'second', 'id': 'same', 'run': 'echo 2'}]
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def test_composite_duplicate_id_is_rejected(mocker: MockerFixture) -> None:
|
|
301
|
+
__clean_cache()
|
|
302
|
+
mocker.patch("prepare_assignment.core.preparer.__download_task")
|
|
303
|
+
mocker.patch("prepare_assignment.core.preparer.validate_task_definition", return_value=DUPLICATE_ID_COMPOSITE)
|
|
304
|
+
remove = mocker.patch("prepare_assignment.core.preparer.remove_tree")
|
|
305
|
+
prepare = {'prepare': [{'name': 'duplicate', 'uses': 'duplicate', 'with': {}}]}
|
|
306
|
+
with pytest.raises(PrepareTaskError) as exc:
|
|
307
|
+
prepare_tasks("prepare.yml", prepare)
|
|
308
|
+
assert "multiple steps with id 'same'" in str(exc.value.cause)
|
|
309
|
+
remove.assert_called()
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def test_cached_composite_duplicate_id_is_rejected(mocker: MockerFixture) -> None:
|
|
313
|
+
__clean_cache()
|
|
314
|
+
mocker.patch("prepare_assignment.core.preparer.__is_installed", return_value=True)
|
|
315
|
+
mocker.patch("prepare_assignment.core.preparer.load_yaml", return_value=DUPLICATE_ID_COMPOSITE)
|
|
316
|
+
prepare = {'prepare': [{'name': 'duplicate', 'uses': 'duplicate', 'with': {}}]}
|
|
317
|
+
with pytest.raises(PrepareTaskError) as exc:
|
|
318
|
+
prepare_tasks("prepare.yml", prepare)
|
|
319
|
+
assert "multiple steps with id 'same'" in str(exc.value.cause)
|
|
@@ -5,7 +5,8 @@ import pytest
|
|
|
5
5
|
from pytest_mock import MockerFixture
|
|
6
6
|
|
|
7
7
|
from prepare_assignment.core.validator import (validate_prepare, validate_tasks, load_yaml,
|
|
8
|
-
validate_task_definition, validate_default_values
|
|
8
|
+
validate_task_definition, validate_default_values,
|
|
9
|
+
validate_unique_ids)
|
|
9
10
|
from prepare_assignment.data.task_definition import PythonTaskDefinition
|
|
10
11
|
from prepare_assignment.data.errors import ValidationError
|
|
11
12
|
|
|
@@ -179,3 +180,33 @@ def test_validate_default_values_bool_for_integer_invalid() -> None:
|
|
|
179
180
|
task_copy["inputs"]["num"] = {'description': 'n', 'type': 'integer', 'default': True, 'required': False}
|
|
180
181
|
with pytest.raises(ValidationError):
|
|
181
182
|
validate_default_values(PythonTaskDefinition.of(task_copy, "test.yml"))
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def test_validate_unique_ids_valid() -> None:
|
|
186
|
+
steps = [{'name': 'a', 'id': 'a', 'run': 'echo'}, {'name': 'b', 'id': 'b', 'run': 'echo'},
|
|
187
|
+
{'name': 'no id', 'run': 'echo'}, {'name': 'no id', 'run': 'echo'}]
|
|
188
|
+
validate_unique_ids("prepare.yml", "job 'build'", steps)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def test_validate_unique_ids_duplicate() -> None:
|
|
192
|
+
steps = [{'name': 'Remove old artefacts', 'id': 'remove', 'uses': 'remove'},
|
|
193
|
+
{'name': 'other', 'id': 'other', 'uses': 'remove'},
|
|
194
|
+
{'name': 'Remove old temp directory', 'id': 'remove', 'uses': 'remove'}]
|
|
195
|
+
with pytest.raises(ValidationError) as exc:
|
|
196
|
+
validate_unique_ids("prepare.yml", "job 'build'", steps)
|
|
197
|
+
assert exc.value.message == ("Error in: prepare.yml, job 'build' has multiple steps with id 'remove': "
|
|
198
|
+
"'Remove old artefacts', 'Remove old temp directory'")
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def test_validate_prepare_duplicate_id() -> None:
|
|
202
|
+
prepare = {'name': 'Duplicate', 'jobs': {'build': [{'name': 'a', 'id': 'same', 'run': 'echo'},
|
|
203
|
+
{'name': 'b', 'id': 'same', 'run': 'echo'}]}}
|
|
204
|
+
with pytest.raises(ValidationError) as exc:
|
|
205
|
+
validate_prepare("prepare.yml", prepare)
|
|
206
|
+
assert "job 'build'" in exc.value.message
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def test_validate_prepare_same_id_in_different_jobs() -> None:
|
|
210
|
+
prepare = {'name': 'Different jobs', 'jobs': {'build': [{'name': 'a', 'id': 'same', 'run': 'echo'}],
|
|
211
|
+
'test': [{'name': 'b', 'id': 'same', 'run': 'echo'}]}}
|
|
212
|
+
validate_prepare("prepare.yml", prepare)
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/ISSUE_TEMPLATE/feature_request.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/.github/workflows/semantic-release.yml
RENAMED
|
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
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/core/task_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/job_environment.py
RENAMED
|
File without changes
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/task_definition.py
RENAMED
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/data/task_properties.py
RENAMED
|
File without changes
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/schemas/config.schema.json
RENAMED
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/schemas/prepare.schema.json
RENAMED
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/schemas/task.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/default_validator.py
RENAMED
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/dependency.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/virtual_env.py
RENAMED
|
File without changes
|
{prepare_assignment-0.4.2 → prepare_assignment-0.4.3}/prepare_assignment/utils/yml_loader.py
RENAMED
|
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
|