digitalhub-runtime-python 0.10.2__tar.gz → 0.11.0b0__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.
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/PKG-INFO +3 -3
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/utils.py +2 -2
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/python_run/entity.py +2 -2
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/python_run/spec.py +0 -5
- digitalhub_runtime_python-0.11.0b0/digitalhub_runtime_python/entities/task/python_job/spec.py +15 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/utils/inputs.py +2 -2
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/pyproject.toml +4 -4
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/test_validate.py +1 -1
- digitalhub_runtime_python-0.10.2/digitalhub_runtime_python/entities/task/python_job/spec.py +0 -49
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/scripts/bump.sh +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/scripts/changelog.sh +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/scripts/cliff.toml +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/workflows/release.yml +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/workflows/run_local_test.yml +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/workflows/test_release.yml +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.gitignore +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/LICENSE.txt +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/README.md +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/_base/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/_base/runtime_entity/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/_base/runtime_entity/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/_commons/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/_commons/enums.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/entity.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/models.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/spec.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/function/python/status.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/python_run/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/python_run/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/python_run/status.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/run/python_run/utils.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_build/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_build/entity.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_build/spec.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_build/status.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_job/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_job/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_job/entity.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_job/models.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_job/status.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/entities/task/python_serve/status.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/runtimes/__init__.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/runtimes/builder.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/runtimes/runtime.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/utils/configuration.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/utils/outputs.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/digitalhub_runtime_python/utils/utils.py +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/function/function-python-git.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/function/function-python-local.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/function/function-python-zip.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/run/run-python+build.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/run/run-python+job.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/run/run-python+serve.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/task/task-python+build.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/task/task-python+job.json +0 -0
- {digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/test/local/instances/entities/task/task-python+serve.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub-runtime-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0b0
|
|
4
4
|
Summary: Python runtime for DHCore
|
|
5
5
|
Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk-runtime-python
|
|
6
6
|
Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
|
|
@@ -228,10 +228,10 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
228
228
|
Classifier: Programming Language :: Python :: 3.11
|
|
229
229
|
Classifier: Programming Language :: Python :: 3.12
|
|
230
230
|
Requires-Python: <3.13,>=3.9
|
|
231
|
-
Requires-Dist: digitalhub[full]<0.
|
|
231
|
+
Requires-Dist: digitalhub[full]<0.12,>=0.11.0b
|
|
232
232
|
Requires-Dist: nuclio-sdk
|
|
233
233
|
Provides-Extra: dev
|
|
234
|
-
Requires-Dist: digitalhub[dev]<0.
|
|
234
|
+
Requires-Dist: digitalhub[dev]<0.12,>=0.11.0b; extra == 'dev'
|
|
235
235
|
Description-Content-Type: text/markdown
|
|
236
236
|
|
|
237
237
|
# SDK for DHCore
|
|
@@ -4,7 +4,7 @@ import typing
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
6
|
from digitalhub.stores.data.api import get_store
|
|
7
|
-
from digitalhub.stores.data.
|
|
7
|
+
from digitalhub.stores.data.utils import get_default_store
|
|
8
8
|
from digitalhub.utils.exceptions import EntityError
|
|
9
9
|
from digitalhub.utils.file_utils import eval_py_type, eval_zip_type
|
|
10
10
|
from digitalhub.utils.generic_utils import encode_source, encode_string
|
|
@@ -143,7 +143,7 @@ def source_post_check(exec: FunctionPython) -> FunctionPython:
|
|
|
143
143
|
# Check zip
|
|
144
144
|
elif eval_zip_type(code_src):
|
|
145
145
|
filename = Path(code_src).name
|
|
146
|
-
dst = f"zip+
|
|
146
|
+
dst = f"zip+{get_default_store(exec.project)}/{exec.project}/{exec.ENTITY_TYPE}/{exec.name}/{exec.id}/{filename}"
|
|
147
147
|
get_store(exec.project, dst).upload(code_src, dst)
|
|
148
148
|
exec.spec.source["source"] = dst
|
|
149
149
|
if ":" not in exec.spec.source["handler"]:
|
|
@@ -8,7 +8,7 @@ import requests
|
|
|
8
8
|
from digitalhub.entities._commons.enums import Relationship, State
|
|
9
9
|
from digitalhub.entities._commons.utils import get_entity_type_from_key
|
|
10
10
|
from digitalhub.entities.run._base.entity import Run
|
|
11
|
-
from digitalhub.factory.
|
|
11
|
+
from digitalhub.factory.factory import factory
|
|
12
12
|
from digitalhub.utils.exceptions import EntityError
|
|
13
13
|
from digitalhub.utils.logger import LOGGER
|
|
14
14
|
|
|
@@ -77,7 +77,7 @@ class RunPythonRun(Run):
|
|
|
77
77
|
Run object.
|
|
78
78
|
"""
|
|
79
79
|
task_kind = self.spec.task.split("://")[0]
|
|
80
|
-
action = get_action_from_task_kind(self.kind, task_kind)
|
|
80
|
+
action = factory.get_action_from_task_kind(self.kind, task_kind)
|
|
81
81
|
|
|
82
82
|
if action == TaskActions.SERVE.value:
|
|
83
83
|
serve_timeout = 300
|
|
@@ -27,7 +27,6 @@ class RunSpecPythonRun(RunSpec):
|
|
|
27
27
|
base_image: str | None = None,
|
|
28
28
|
python_version: str | None = None,
|
|
29
29
|
requirements: list | None = None,
|
|
30
|
-
schedule: str | None = None,
|
|
31
30
|
service_type: str | None = None,
|
|
32
31
|
replicas: int | None = None,
|
|
33
32
|
instructions: dict | None = None,
|
|
@@ -59,7 +58,6 @@ class RunSpecPythonRun(RunSpec):
|
|
|
59
58
|
self.python_version = python_version
|
|
60
59
|
self.requirements = requirements
|
|
61
60
|
|
|
62
|
-
self.schedule = schedule
|
|
63
61
|
self.service_type = service_type
|
|
64
62
|
self.replicas = replicas
|
|
65
63
|
self.instructions = instructions
|
|
@@ -78,9 +76,6 @@ class RunValidatorPythonRun(RunValidator):
|
|
|
78
76
|
python_version: str = None
|
|
79
77
|
requirements: list = None
|
|
80
78
|
|
|
81
|
-
# Task job
|
|
82
|
-
schedule: str = None
|
|
83
|
-
|
|
84
79
|
# Task serve
|
|
85
80
|
service_type: str = None
|
|
86
81
|
replicas: int = None
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.task._base.spec import TaskSpecFunction, TaskValidatorFunction
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TaskSpecPythonJob(TaskSpecFunction):
|
|
7
|
+
"""
|
|
8
|
+
TaskSpecPythonJob specifications.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class TaskValidatorPythonJob(TaskValidatorFunction):
|
|
13
|
+
"""
|
|
14
|
+
TaskValidatorPythonJob validator.
|
|
15
|
+
"""
|
|
@@ -6,7 +6,7 @@ from typing import Any, Callable
|
|
|
6
6
|
|
|
7
7
|
from digitalhub.context.api import get_context
|
|
8
8
|
from digitalhub.entities.project.crud import get_project
|
|
9
|
-
from digitalhub.factory.
|
|
9
|
+
from digitalhub.factory.factory import factory
|
|
10
10
|
from digitalhub.utils.logger import LOGGER
|
|
11
11
|
|
|
12
12
|
if typing.TYPE_CHECKING:
|
|
@@ -85,7 +85,7 @@ def get_entity_inputs(inputs: dict) -> dict[str, Entity]:
|
|
|
85
85
|
Dictionary of inputs.
|
|
86
86
|
"""
|
|
87
87
|
try:
|
|
88
|
-
return {k: build_entity_from_dict(v) for k, v in inputs.items()}
|
|
88
|
+
return {k: factory.build_entity_from_dict(v) for k, v in inputs.items()}
|
|
89
89
|
except Exception as e:
|
|
90
90
|
msg = f"Error during inputs collection. Exception: {e.__class__}. Error: {e.args}"
|
|
91
91
|
LOGGER.exception(msg)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "digitalhub-runtime-python"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.11.0b0"
|
|
8
8
|
description = "Python runtime for DHCore"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -22,13 +22,13 @@ classifiers = [
|
|
|
22
22
|
keywords = ["data", "dataops", "kubernetes"]
|
|
23
23
|
requires-python = ">=3.9, <3.13"
|
|
24
24
|
dependencies = [
|
|
25
|
-
"digitalhub[full]>=0.
|
|
25
|
+
"digitalhub[full]>=0.11.0b, <0.12",
|
|
26
26
|
"nuclio-sdk"
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
[project.optional-dependencies]
|
|
30
30
|
dev = [
|
|
31
|
-
"digitalhub[dev]>=0.
|
|
31
|
+
"digitalhub[dev]>=0.11.0b, <0.12"
|
|
32
32
|
]
|
|
33
33
|
|
|
34
34
|
[project.urls]
|
|
@@ -47,7 +47,7 @@ line-length = 120
|
|
|
47
47
|
convention = "numpy"
|
|
48
48
|
|
|
49
49
|
[tool.bumpver]
|
|
50
|
-
current_version = "0.
|
|
50
|
+
current_version = "0.11.0b0"
|
|
51
51
|
version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
|
|
52
52
|
commit_message = "Bump version {old_version} -> {new_version}"
|
|
53
53
|
commit = false
|
|
@@ -46,7 +46,7 @@ def is_valid(built, kind):
|
|
|
46
46
|
schema = json.load(schema_file)
|
|
47
47
|
|
|
48
48
|
# To validate all the properties
|
|
49
|
-
schema["required"] = [a for a in
|
|
49
|
+
schema["required"] = [a for a in list(schema["properties"].keys())]
|
|
50
50
|
validate(instance=built, schema=schema)
|
|
51
51
|
return True
|
|
52
52
|
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from digitalhub.entities.task._base.spec import TaskSpecFunction, TaskValidatorFunction
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class TaskSpecPythonJob(TaskSpecFunction):
|
|
7
|
-
"""TaskSpecPythonJob specifications."""
|
|
8
|
-
|
|
9
|
-
def __init__(
|
|
10
|
-
self,
|
|
11
|
-
function: str,
|
|
12
|
-
node_selector: list[dict] | None = None,
|
|
13
|
-
volumes: list[dict] | None = None,
|
|
14
|
-
resources: dict | None = None,
|
|
15
|
-
affinity: dict | None = None,
|
|
16
|
-
tolerations: list[dict] | None = None,
|
|
17
|
-
envs: list[dict] | None = None,
|
|
18
|
-
secrets: list[str] | None = None,
|
|
19
|
-
profile: str | None = None,
|
|
20
|
-
runtime_class: str | None = None,
|
|
21
|
-
priority_class: str | None = None,
|
|
22
|
-
schedule: str | None = None,
|
|
23
|
-
**kwargs,
|
|
24
|
-
) -> None:
|
|
25
|
-
super().__init__(
|
|
26
|
-
function,
|
|
27
|
-
node_selector,
|
|
28
|
-
volumes,
|
|
29
|
-
resources,
|
|
30
|
-
affinity,
|
|
31
|
-
tolerations,
|
|
32
|
-
envs,
|
|
33
|
-
secrets,
|
|
34
|
-
profile,
|
|
35
|
-
runtime_class,
|
|
36
|
-
priority_class,
|
|
37
|
-
**kwargs,
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
self.schedule = schedule
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class TaskValidatorPythonJob(TaskValidatorFunction):
|
|
44
|
-
"""
|
|
45
|
-
TaskValidatorPythonJob validator.
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
schedule: str = None
|
|
49
|
-
"""Schedule."""
|
{digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/scripts/bump.sh
RENAMED
|
File without changes
|
{digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/scripts/changelog.sh
RENAMED
|
File without changes
|
{digitalhub_runtime_python-0.10.2 → digitalhub_runtime_python-0.11.0b0}/.github/scripts/cliff.toml
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
|
|
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
|