orchestrator-core 3.2.0rc1__py3-none-any.whl → 3.2.2__py3-none-any.whl
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.
- orchestrator/__init__.py +1 -1
- orchestrator/api/api_v1/endpoints/processes.py +1 -1
- orchestrator/cli/generator/generator/workflow.py +13 -1
- orchestrator/cli/generator/templates/modify_product.j2 +9 -0
- orchestrator/domain/context_cache.py +7 -0
- orchestrator/graphql/extensions/model_cache.py +29 -0
- orchestrator/graphql/schema.py +3 -1
- orchestrator/graphql/schemas/subscription.py +2 -2
- orchestrator/graphql/utils/get_subscription_product_blocks.py +8 -2
- orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +1 -1
- orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +44 -0
- orchestrator/services/subscriptions.py +6 -0
- orchestrator/utils/get_subscription_dict.py +7 -3
- orchestrator/utils/redis.py +1 -1
- orchestrator/workflow.py +10 -2
- {orchestrator_core-3.2.0rc1.dist-info → orchestrator_core-3.2.2.dist-info}/METADATA +4 -3
- {orchestrator_core-3.2.0rc1.dist-info → orchestrator_core-3.2.2.dist-info}/RECORD +19 -17
- {orchestrator_core-3.2.0rc1.dist-info → orchestrator_core-3.2.2.dist-info}/WHEEL +0 -0
- {orchestrator_core-3.2.0rc1.dist-info → orchestrator_core-3.2.2.dist-info}/licenses/LICENSE +0 -0
orchestrator/__init__.py
CHANGED
|
@@ -128,7 +128,7 @@ def delete(process_id: UUID) -> None:
|
|
|
128
128
|
status_code=HTTPStatus.CREATED,
|
|
129
129
|
dependencies=[Depends(check_global_lock, use_cache=False)],
|
|
130
130
|
)
|
|
131
|
-
|
|
131
|
+
def new_process(
|
|
132
132
|
workflow_key: str,
|
|
133
133
|
request: Request,
|
|
134
134
|
json_data: list[dict[str, Any]] | None = Body(...),
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
|
|
14
13
|
from collections.abc import Callable
|
|
15
14
|
from functools import partial, wraps
|
|
15
|
+
from importlib import metadata
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
from typing import Any
|
|
18
18
|
|
|
19
|
+
import semver
|
|
19
20
|
import structlog
|
|
20
21
|
from jinja2 import Environment
|
|
21
22
|
|
|
@@ -123,7 +124,17 @@ def get_product_workflow_path(config: dict, workflow_type: str) -> Path:
|
|
|
123
124
|
return product_workflow_folder(config) / Path(f"{workflow_type}_{file_name}").with_suffix(".py")
|
|
124
125
|
|
|
125
126
|
|
|
127
|
+
def eval_pydantic_forms_version() -> bool:
|
|
128
|
+
updated_version = semver.Version.parse("2.0.0")
|
|
129
|
+
|
|
130
|
+
installed_version = metadata.version("pydantic-forms")
|
|
131
|
+
installed_semver = semver.Version.parse(installed_version)
|
|
132
|
+
|
|
133
|
+
return installed_semver >= updated_version
|
|
134
|
+
|
|
135
|
+
|
|
126
136
|
def render_template(environment: Environment, config: dict, template: str, workflow: str = "") -> str:
|
|
137
|
+
use_updated_readonly_field = eval_pydantic_forms_version()
|
|
127
138
|
product_block = root_product_block(config)
|
|
128
139
|
types_to_import = get_name_spaced_types_to_import(product_block["fields"])
|
|
129
140
|
fields = get_input_fields(product_block)
|
|
@@ -152,6 +163,7 @@ def render_template(environment: Environment, config: dict, template: str, workf
|
|
|
152
163
|
product_types_module=get_product_types_module(),
|
|
153
164
|
workflows_module=get_workflows_module(),
|
|
154
165
|
workflow_validations=workflow_validations if workflow else [],
|
|
166
|
+
use_updated_readonly_field=use_updated_readonly_field,
|
|
155
167
|
)
|
|
156
168
|
|
|
157
169
|
|
|
@@ -7,7 +7,12 @@ from typing import Annotated
|
|
|
7
7
|
import structlog
|
|
8
8
|
from pydantic import AfterValidator, ConfigDict, model_validator
|
|
9
9
|
from pydantic_forms.types import FormGenerator, State, UUIDstr
|
|
10
|
+
|
|
11
|
+
{%- if use_updated_readonly_field is true %}
|
|
12
|
+
from pydantic_forms.validators import read_only_field
|
|
13
|
+
{%- else %}
|
|
10
14
|
from pydantic_forms.validators import ReadOnlyField
|
|
15
|
+
{%- endif %}
|
|
11
16
|
|
|
12
17
|
from orchestrator.forms import FormPage
|
|
13
18
|
from orchestrator.forms.validators import CustomerId, Divider
|
|
@@ -52,7 +57,11 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
|
|
|
52
57
|
divider_1: Divider
|
|
53
58
|
|
|
54
59
|
{% for field in fields if not field.modifiable is defined -%}
|
|
60
|
+
{% if use_updated_readonly_field is true -%}
|
|
61
|
+
{{ field.name }}: read_only_field({{ product_block.name }}.{{ field.name }})
|
|
62
|
+
{% else -%}
|
|
55
63
|
{{ field.name }}: ReadOnlyField({{ product_block.name }}.{{ field.name }})
|
|
64
|
+
{% endif -%}
|
|
56
65
|
{% endfor -%}
|
|
57
66
|
|
|
58
67
|
{% for field in fields if field.modifiable is defined -%}
|
|
@@ -38,6 +38,13 @@ def cache_subscription_models() -> Iterator:
|
|
|
38
38
|
with cache_subscription_models():
|
|
39
39
|
subscription_dict = subscription.model_dump()
|
|
40
40
|
"""
|
|
41
|
+
if __subscription_model_cache.get() is not None:
|
|
42
|
+
# If it's already active in the current context, we do nothing.
|
|
43
|
+
# This makes the contextmanager reentrant.
|
|
44
|
+
# The outermost contextmanager will eventually reset the context.
|
|
45
|
+
yield
|
|
46
|
+
return
|
|
47
|
+
|
|
41
48
|
before = __subscription_model_cache.set({})
|
|
42
49
|
try:
|
|
43
50
|
yield
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright 2022-2025 SURF.
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
from collections.abc import Iterator
|
|
14
|
+
|
|
15
|
+
from strawberry.extensions import SchemaExtension
|
|
16
|
+
|
|
17
|
+
from orchestrator.domain.context_cache import cache_subscription_models
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ModelCacheExtension(SchemaExtension):
|
|
21
|
+
"""Wraps the GraphQL operation in a cache_subscription_models context.
|
|
22
|
+
|
|
23
|
+
For more background, please refer to the documentation of the contextmanager.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def on_operation(self, *args, **kwargs) -> Iterator[None]: # type: ignore
|
|
27
|
+
|
|
28
|
+
with cache_subscription_models():
|
|
29
|
+
yield
|
orchestrator/graphql/schema.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2022-
|
|
1
|
+
# Copyright 2022-2025 SURF, GÉANT.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -32,6 +32,7 @@ from oauth2_lib.fastapi import AuthManager
|
|
|
32
32
|
from oauth2_lib.strawberry import authenticated_field
|
|
33
33
|
from orchestrator.domain.base import SubscriptionModel
|
|
34
34
|
from orchestrator.graphql.autoregistration import create_subscription_strawberry_type, register_domain_models
|
|
35
|
+
from orchestrator.graphql.extensions.model_cache import ModelCacheExtension
|
|
35
36
|
from orchestrator.graphql.extensions.stats import StatsExtension
|
|
36
37
|
from orchestrator.graphql.mutations.customer_description import CustomerSubscriptionDescriptionMutation
|
|
37
38
|
from orchestrator.graphql.mutations.start_process import ProcessMutation
|
|
@@ -160,6 +161,7 @@ def default_context_getter(
|
|
|
160
161
|
|
|
161
162
|
|
|
162
163
|
def get_extensions(mutation: Any, query: Any) -> Iterable[type[SchemaExtension]]:
|
|
164
|
+
yield ModelCacheExtension
|
|
163
165
|
yield ErrorHandlerExtension
|
|
164
166
|
if app_settings.ENABLE_GRAPHQL_DEPRECATION_CHECKER:
|
|
165
167
|
yield make_deprecation_checker_extension(query=query, mutation=mutation)
|
|
@@ -101,9 +101,9 @@ class SubscriptionInterface:
|
|
|
101
101
|
|
|
102
102
|
@strawberry.field(description="Return all products block instances of a subscription") # type: ignore
|
|
103
103
|
async def product_block_instances(
|
|
104
|
-
self, tags: list[str] | None = None, resource_types: list[str] | None = None
|
|
104
|
+
self, info: OrchestratorInfo, tags: list[str] | None = None, resource_types: list[str] | None = None
|
|
105
105
|
) -> list[ProductBlockInstance]:
|
|
106
|
-
return await get_subscription_product_blocks(self.subscription_id, tags, resource_types)
|
|
106
|
+
return await get_subscription_product_blocks(info, self.subscription_id, tags, resource_types)
|
|
107
107
|
|
|
108
108
|
@strawberry.field(description="Return fixed inputs") # type: ignore
|
|
109
109
|
async def fixed_inputs(self) -> strawberry.scalars.JSON:
|
|
@@ -21,6 +21,8 @@ from pydantic.alias_generators import to_camel as to_lower_camel
|
|
|
21
21
|
from strawberry.scalars import JSON
|
|
22
22
|
|
|
23
23
|
from orchestrator.graphql.schemas.product_block import owner_subscription_resolver
|
|
24
|
+
from orchestrator.graphql.types import OrchestratorInfo
|
|
25
|
+
from orchestrator.graphql.utils.get_selected_paths import get_selected_paths
|
|
24
26
|
from orchestrator.utils.get_subscription_dict import get_subscription_dict
|
|
25
27
|
|
|
26
28
|
if TYPE_CHECKING:
|
|
@@ -81,9 +83,13 @@ pb_instance_property_keys = (
|
|
|
81
83
|
|
|
82
84
|
|
|
83
85
|
async def get_subscription_product_blocks(
|
|
84
|
-
|
|
86
|
+
info: OrchestratorInfo,
|
|
87
|
+
subscription_id: UUID,
|
|
88
|
+
tags: list[str] | None = None,
|
|
89
|
+
product_block_instance_values: list[str] | None = None,
|
|
85
90
|
) -> list[ProductBlockInstance]:
|
|
86
|
-
|
|
91
|
+
inject_inuseby = "in_use_by_relations" in get_selected_paths(info)
|
|
92
|
+
subscription, _ = await get_subscription_dict(subscription_id, inject_inuseby=inject_inuseby)
|
|
87
93
|
|
|
88
94
|
def to_product_block(product_block: dict[str, Any]) -> ProductBlockInstance:
|
|
89
95
|
def is_resource_type(candidate: Any) -> bool:
|
|
@@ -52,5 +52,5 @@ def upgrade() -> None:
|
|
|
52
52
|
def downgrade() -> None:
|
|
53
53
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
54
54
|
op.drop_index(op.f("ix_input_state_input_state_id"), table_name="input_states")
|
|
55
|
-
op.drop_table("
|
|
55
|
+
op.drop_table("input_states")
|
|
56
56
|
# ### end Alembic commands ###
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""add cascade constraint on processes input state.
|
|
2
|
+
|
|
3
|
+
Revision ID: fc5c993a4b4a
|
|
4
|
+
Revises: 42b3d076a85b
|
|
5
|
+
Create Date: 2025-04-09 18:27:31.922214
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from alembic import op
|
|
10
|
+
|
|
11
|
+
# revision identifiers, used by Alembic.
|
|
12
|
+
revision = "fc5c993a4b4a"
|
|
13
|
+
down_revision = "42b3d076a85b"
|
|
14
|
+
branch_labels = None
|
|
15
|
+
depends_on = None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def upgrade() -> None:
|
|
19
|
+
# Drop the existing foreign key constraint
|
|
20
|
+
op.drop_constraint("input_states_pid_fkey", "input_states", type_="foreignkey")
|
|
21
|
+
|
|
22
|
+
# Add a new foreign key constraint with cascade delete
|
|
23
|
+
op.create_foreign_key(
|
|
24
|
+
"input_states_pid_fkey",
|
|
25
|
+
"input_states",
|
|
26
|
+
"processes",
|
|
27
|
+
["pid"],
|
|
28
|
+
["pid"],
|
|
29
|
+
ondelete="CASCADE",
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def downgrade() -> None:
|
|
34
|
+
# Drop the cascade foreign key constraint
|
|
35
|
+
op.drop_constraint("input_states_pid_fkey", "input_states", type_="foreignkey")
|
|
36
|
+
|
|
37
|
+
# Recreate the original foreign key constraint without cascade
|
|
38
|
+
op.create_foreign_key(
|
|
39
|
+
"input_states_pid_fkey",
|
|
40
|
+
"input_states",
|
|
41
|
+
"processes",
|
|
42
|
+
["pid"],
|
|
43
|
+
["pid"],
|
|
44
|
+
)
|
|
@@ -597,6 +597,12 @@ def convert_to_in_use_by_relation(obj: Any) -> dict[str, str]:
|
|
|
597
597
|
return {"subscription_instance_id": str(obj.subscription_instance_id), "subscription_id": str(obj.subscription_id)}
|
|
598
598
|
|
|
599
599
|
|
|
600
|
+
def build_domain_model(subscription_model: SubscriptionModel) -> dict:
|
|
601
|
+
"""Create a subscription dict from the SubscriptionModel."""
|
|
602
|
+
with cache_subscription_models():
|
|
603
|
+
return subscription_model.model_dump()
|
|
604
|
+
|
|
605
|
+
|
|
600
606
|
def build_extended_domain_model(subscription_model: SubscriptionModel) -> dict:
|
|
601
607
|
"""Create a subscription dict from the SubscriptionModel with additional keys."""
|
|
602
608
|
from orchestrator.settings import app_settings
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
from uuid import UUID
|
|
2
2
|
|
|
3
3
|
from orchestrator.domain.base import SubscriptionModel
|
|
4
|
-
from orchestrator.services.subscriptions import _generate_etag, build_extended_domain_model
|
|
4
|
+
from orchestrator.services.subscriptions import _generate_etag, build_domain_model, build_extended_domain_model
|
|
5
5
|
from orchestrator.utils.redis import from_redis
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
async def get_subscription_dict(subscription_id: UUID) -> tuple[dict, str]:
|
|
8
|
+
async def get_subscription_dict(subscription_id: UUID, inject_inuseby: bool = True) -> tuple[dict, str]:
|
|
9
9
|
"""Helper function to get subscription dict by uuid from db or cache."""
|
|
10
10
|
|
|
11
11
|
if cached_model := from_redis(subscription_id):
|
|
12
12
|
return cached_model # type: ignore
|
|
13
13
|
|
|
14
14
|
subscription_model = SubscriptionModel.from_subscription(subscription_id)
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
if not inject_inuseby:
|
|
17
|
+
subscription = build_domain_model(subscription_model)
|
|
18
|
+
else:
|
|
19
|
+
subscription = build_extended_domain_model(subscription_model)
|
|
16
20
|
etag = _generate_etag(subscription)
|
|
17
21
|
return subscription, etag
|
orchestrator/utils/redis.py
CHANGED
|
@@ -58,7 +58,7 @@ def from_redis(subscription_id: UUID) -> tuple[PY_JSON_TYPES, str] | None:
|
|
|
58
58
|
|
|
59
59
|
if app_settings.ENABLE_SUBSCRIPTION_MODEL_OPTIMIZATIONS:
|
|
60
60
|
# TODO #900 remove toggle and remove usage of this function in get_subscription_dict
|
|
61
|
-
log.
|
|
61
|
+
log.info("Using SubscriptionModel optimization, not loading subscription from redis cache")
|
|
62
62
|
return None
|
|
63
63
|
|
|
64
64
|
if caching_models_enabled():
|
orchestrator/workflow.py
CHANGED
|
@@ -223,7 +223,11 @@ def step(name: str) -> Callable[[StepFunc], Step]:
|
|
|
223
223
|
def decorator(func: StepFunc) -> Step:
|
|
224
224
|
@functools.wraps(func)
|
|
225
225
|
def wrapper(state: State) -> Process:
|
|
226
|
-
with bound_contextvars(
|
|
226
|
+
with bound_contextvars(
|
|
227
|
+
func=func.__qualname__,
|
|
228
|
+
workflow_name=state.get("workflow_name"),
|
|
229
|
+
process_id=state.get("process_id"),
|
|
230
|
+
):
|
|
227
231
|
step_in_inject_args = inject_args(func)
|
|
228
232
|
try:
|
|
229
233
|
with transactional(db, logger):
|
|
@@ -248,7 +252,11 @@ def retrystep(name: str) -> Callable[[StepFunc], Step]:
|
|
|
248
252
|
def decorator(func: StepFunc) -> Step:
|
|
249
253
|
@functools.wraps(func)
|
|
250
254
|
def wrapper(state: State) -> Process:
|
|
251
|
-
with bound_contextvars(
|
|
255
|
+
with bound_contextvars(
|
|
256
|
+
func=func.__qualname__,
|
|
257
|
+
workflow_name=state.get("workflow_name"),
|
|
258
|
+
process_id=state.get("process_id"),
|
|
259
|
+
):
|
|
252
260
|
step_in_inject_args = inject_args(func)
|
|
253
261
|
try:
|
|
254
262
|
with transactional(db, logger):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: orchestrator-core
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.2
|
|
4
4
|
Summary: This is the orchestrator workflow engine.
|
|
5
5
|
Requires-Python: >=3.11,<3.14
|
|
6
6
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -47,6 +47,7 @@ Requires-Dist: python-rapidjson>=1.18,<1.21
|
|
|
47
47
|
Requires-Dist: pytz==2025.2
|
|
48
48
|
Requires-Dist: redis==5.1.1
|
|
49
49
|
Requires-Dist: schedule==1.1.0
|
|
50
|
+
Requires-Dist: semver==3.0.4
|
|
50
51
|
Requires-Dist: sentry-sdk[fastapi]~=2.25.1
|
|
51
52
|
Requires-Dist: SQLAlchemy==2.0.40
|
|
52
53
|
Requires-Dist: SQLAlchemy-Utils==0.41.2
|
|
@@ -57,8 +58,8 @@ Requires-Dist: nwa-stdlib~=1.9.0
|
|
|
57
58
|
Requires-Dist: oauth2-lib~=2.4.0
|
|
58
59
|
Requires-Dist: tabulate==0.9.0
|
|
59
60
|
Requires-Dist: strawberry-graphql>=0.246.2
|
|
60
|
-
Requires-Dist: pydantic-forms
|
|
61
|
-
Requires-Dist: celery~=5.
|
|
61
|
+
Requires-Dist: pydantic-forms>=1.4.0, <=2.0.0
|
|
62
|
+
Requires-Dist: celery~=5.5.1 ; extra == "celery"
|
|
62
63
|
Requires-Dist: toml ; extra == "dev"
|
|
63
64
|
Requires-Dist: bumpversion ; extra == "dev"
|
|
64
65
|
Requires-Dist: mypy_extensions ; extra == "dev"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
orchestrator/__init__.py,sha256=
|
|
1
|
+
orchestrator/__init__.py,sha256=mMFQmoeaP3qy5_hoq-R3v0-C8-hJNlXSTQb79ERXOKk,1063
|
|
2
2
|
orchestrator/app.py,sha256=VN54_Zsx5x_3ym8aFadATg67a4J5lv8H-pxnPlR3RkM,11668
|
|
3
3
|
orchestrator/exception_handlers.py,sha256=UsW3dw8q0QQlNLcV359bIotah8DYjMsj2Ts1LfX4ClY,1268
|
|
4
4
|
orchestrator/log_config.py,sha256=1tPRX5q65e57a6a_zEii_PFK8SzWT0mnA5w2sKg4hh8,1853
|
|
@@ -8,7 +8,7 @@ orchestrator/settings.py,sha256=MTG7gnmbQYwUjAnhvX4Y3MEqmX8vIpAEC0lhDafa1zw,4039
|
|
|
8
8
|
orchestrator/targets.py,sha256=ykjTGK7CozFaltNaxQcK90P4Cc1Qvf-W8dFztxtZhRQ,776
|
|
9
9
|
orchestrator/types.py,sha256=qzs7xx5AYRmKbpYRyJJP3wuDb0W0bcAzefCN0RWLAco,15459
|
|
10
10
|
orchestrator/version.py,sha256=b58e08lxs47wUNXv0jXFO_ykpksmytuzEXD4La4W-NQ,1366
|
|
11
|
-
orchestrator/workflow.py,sha256=
|
|
11
|
+
orchestrator/workflow.py,sha256=T_3Z1PrlF70C16ehAthKRF1hd3jpwV-MREDVxSLfxOw,44063
|
|
12
12
|
orchestrator/api/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
|
|
13
13
|
orchestrator/api/error_handling.py,sha256=YrPCxSa-DSa9KwqIMlXI-KGBGnbGIW5ukOPiikUH9E4,1502
|
|
14
14
|
orchestrator/api/helpers.py,sha256=s0QRHYw8AvEmlkmRhuEzz9xixaZKUF3YuPzUVHkcoXk,6933
|
|
@@ -17,7 +17,7 @@ orchestrator/api/api_v1/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n
|
|
|
17
17
|
orchestrator/api/api_v1/api.py,sha256=m4iDktsSpzxUDaudkdgXeZ83a6B4wfc3pczQsa-Pb-8,2866
|
|
18
18
|
orchestrator/api/api_v1/endpoints/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
|
|
19
19
|
orchestrator/api/api_v1/endpoints/health.py,sha256=iaxs1XX1_250_gKNsspuULCV2GEMBjbtjsmfQTOvMAI,1284
|
|
20
|
-
orchestrator/api/api_v1/endpoints/processes.py,sha256=
|
|
20
|
+
orchestrator/api/api_v1/endpoints/processes.py,sha256=i5GRoszvdmpZqOxSqON83DNuc0UIV-ohOqbAa0OhESE,13564
|
|
21
21
|
orchestrator/api/api_v1/endpoints/product_blocks.py,sha256=kZ6ywIOsS_S2qGq7RvZ4KzjvaS1LmwbGWR37AKRvWOw,2146
|
|
22
22
|
orchestrator/api/api_v1/endpoints/products.py,sha256=BfFtwu9dZXEQbtKxYj9icc73GKGvAGMR5ytyf41nQlQ,3081
|
|
23
23
|
orchestrator/api/api_v1/endpoints/resource_types.py,sha256=gGyuaDyOD0TAVoeFGaGmjDGnQ8eQQArOxKrrk4MaDzA,2145
|
|
@@ -65,7 +65,7 @@ orchestrator/cli/generator/generator/settings.py,sha256=_IhRnQ7bpGjqYtFo-OiLky25
|
|
|
65
65
|
orchestrator/cli/generator/generator/translations.py,sha256=ip0RghW2bY7CoemEab9SxSgjizI44G35AoNHuBsgvrU,1878
|
|
66
66
|
orchestrator/cli/generator/generator/unittest.py,sha256=cLbPRjBQyKFLDNABoTR3WQ21EisAodHs5Q3EGx4VQ6c,4541
|
|
67
67
|
orchestrator/cli/generator/generator/validations.py,sha256=yLv_S_ZBOc_z5DNjz4JY50A4ErWeOk8rk5orty9hwbM,1815
|
|
68
|
-
orchestrator/cli/generator/generator/workflow.py,sha256=
|
|
68
|
+
orchestrator/cli/generator/generator/workflow.py,sha256=8mkb0a2zisb6iUFq8ICrOm2D3I_6fxxrit_LPxViSzk,8406
|
|
69
69
|
orchestrator/cli/generator/products/workshop/circuit.yaml,sha256=AyRUWj61GUBoW9k9z1yfn9vZYXy52PiDMOayAr_FUdE,759
|
|
70
70
|
orchestrator/cli/generator/products/workshop/node.yaml,sha256=4498iAjH6wHQAiRqsvczpgjJnyO8iCLokT6MgKwlxXQ,538
|
|
71
71
|
orchestrator/cli/generator/products/workshop/user.yaml,sha256=92VrWlU1-C6KI8iONO-LGWt-U45rbZpCxhzF2Ags3iw,532
|
|
@@ -82,7 +82,7 @@ orchestrator/cli/generator/templates/enums.j2,sha256=pmx7_DeoE4X9u83_In18C97XqZP
|
|
|
82
82
|
orchestrator/cli/generator/templates/lazy_workflow_instance.j2,sha256=BYB6LwE19OarY7_7Ovej5rqppZWtjiDkG7TDK5dYU7Y,523
|
|
83
83
|
orchestrator/cli/generator/templates/list_definitions.j2,sha256=XS-F5XXy4HOdsZ-xahprwxfhU0UaiF4VeopkIxfoado,277
|
|
84
84
|
orchestrator/cli/generator/templates/macros.j2,sha256=fEODRym4gLfL40w9OelXFMDtAjtzmN5nccWDk86oTNI,904
|
|
85
|
-
orchestrator/cli/generator/templates/modify_product.j2,sha256=
|
|
85
|
+
orchestrator/cli/generator/templates/modify_product.j2,sha256=M1WDMmPwfXpUcuZUa-H5GnlKAr1t_xCQliLa66FI-YU,5057
|
|
86
86
|
orchestrator/cli/generator/templates/new_product_migration.j2,sha256=d67I9haNkKdzWzNT0f1S6-UhG86fOWEohF0Al7NmXmA,3023
|
|
87
87
|
orchestrator/cli/generator/templates/product.j2,sha256=gcN1poWRuGWbsLrQv0Z8SXO6MGuXBHBr33UvQtqsF8E,1241
|
|
88
88
|
orchestrator/cli/generator/templates/product_block.j2,sha256=X5ynyBG39UiYekPHms7IkSHmxq2j-2OrhAYsFaRqktU,2454
|
|
@@ -143,7 +143,7 @@ orchestrator/distlock/managers/memory_distlock_manager.py,sha256=HWQafcVKBF-Cka_
|
|
|
143
143
|
orchestrator/distlock/managers/redis_distlock_manager.py,sha256=DXtMhC8qtxiFO6xU9qYXHZQnCLjlmGBpeyfLA0vbRP0,3369
|
|
144
144
|
orchestrator/domain/__init__.py,sha256=20DhXQPKY0g3rTgCkRlNDY58sLviToOVF8NPoex9WJc,936
|
|
145
145
|
orchestrator/domain/base.py,sha256=26UbHKXqI99w8SyS-Kjj4DF8IbgPNOh8iDPP6e3GEsA,70996
|
|
146
|
-
orchestrator/domain/context_cache.py,sha256=
|
|
146
|
+
orchestrator/domain/context_cache.py,sha256=vT1a01MBSBIaokoShK9KwjItd7abNmz7cXaF67VRZK8,2508
|
|
147
147
|
orchestrator/domain/customer_description.py,sha256=v7o6TTN4oc6bWHZU-jCT-fUYvkeYahbpXOwlKXofuI8,3360
|
|
148
148
|
orchestrator/domain/helpers.py,sha256=D9O2duhCAZGmm39u-9ggvU-X2JsCbIS607kF77-r8QM,2549
|
|
149
149
|
orchestrator/domain/lifecycle.py,sha256=kGR0AFVOSUBlzdhgRr11CUnF26wbBYIjz8uKb_qPCg0,2922
|
|
@@ -158,9 +158,10 @@ orchestrator/forms/validators/product_id.py,sha256=u5mURLT0pOhbFLdwvYcy2_2fXMt35
|
|
|
158
158
|
orchestrator/graphql/__init__.py,sha256=avq8Yg3Jr_9pJqh7ClyIAOX7YSg1eM_AWmt5C3FRYUY,1440
|
|
159
159
|
orchestrator/graphql/autoregistration.py,sha256=pF2jbMKG26MvYoMSa6ZpqpHjVks7_NvSRFymHTgmfjs,6342
|
|
160
160
|
orchestrator/graphql/pagination.py,sha256=iqVDn3GPZpiQhEydfwkBJLURY-X8wwUphS8Lkeg0BOc,2413
|
|
161
|
-
orchestrator/graphql/schema.py,sha256=
|
|
161
|
+
orchestrator/graphql/schema.py,sha256=gwZ3nAgKL0zlpc-aK58hSUAGPVD11Tb3aRSSK9hC39I,9204
|
|
162
162
|
orchestrator/graphql/types.py,sha256=tF3B2n_4AmNIpNuA4Xg-kB-q9Xy7HU8opfDDPSX26nw,5045
|
|
163
163
|
orchestrator/graphql/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
164
|
+
orchestrator/graphql/extensions/model_cache.py,sha256=1uhMRjBs9eK7zJ1Y6P6BopX06822w2Yh9jliwYvG6yQ,1085
|
|
164
165
|
orchestrator/graphql/extensions/stats.py,sha256=pGhEBQg45XvqZhRobcrCSGwt5AGmR3gflsm1dYiIg5g,2018
|
|
165
166
|
orchestrator/graphql/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
166
167
|
orchestrator/graphql/loaders/subscriptions.py,sha256=31zE2WC7z-tPIUmVpU1QWOJvNbLvF7sYgY7JAQ6OPJg,1856
|
|
@@ -189,7 +190,7 @@ orchestrator/graphql/schemas/product_block.py,sha256=Qk9cbA6vm7ZPrhdgPHatKRuy6Ty
|
|
|
189
190
|
orchestrator/graphql/schemas/resource_type.py,sha256=s5d_FwQXL2-Sc-IDUxTJun5qFQ4zOP4-XcHF9ql-t1g,898
|
|
190
191
|
orchestrator/graphql/schemas/settings.py,sha256=drhm5VcLmUbiYAk6WUSJcyJqjNM96E6GvpxVdPAobnA,999
|
|
191
192
|
orchestrator/graphql/schemas/strawberry_pydantic_patch.py,sha256=CjNUhTKdYmLiaem-WY_mzw4HASIeaZitxGF8pPocqVw,1602
|
|
192
|
-
orchestrator/graphql/schemas/subscription.py,sha256=
|
|
193
|
+
orchestrator/graphql/schemas/subscription.py,sha256=RnnxPgha_7D4Ii87cp3eyBV93_RZIryzWyVHZwyn3eA,9603
|
|
193
194
|
orchestrator/graphql/schemas/version.py,sha256=HSzVg_y4Sjd5_H5rRUtu3FJKOG_8ifhvBNt_qjOtC-E,92
|
|
194
195
|
orchestrator/graphql/schemas/workflow.py,sha256=0UWU0HGTiAC_5Wzh16clBd74JoYHrr38YIGV86q-si0,1276
|
|
195
196
|
orchestrator/graphql/utils/__init__.py,sha256=1JvenzEVW1CBa1sGVI9I8IWnnoXIkb1hneDqph9EEZY,524
|
|
@@ -197,7 +198,7 @@ orchestrator/graphql/utils/create_resolver_error_handler.py,sha256=PpQMVwGrE9t0n
|
|
|
197
198
|
orchestrator/graphql/utils/get_query_loaders.py,sha256=abS_HJ7K9een78gMiGq3IhwGwxQXHvZygExe0h_t9ns,815
|
|
198
199
|
orchestrator/graphql/utils/get_selected_fields.py,sha256=0hBcQkU-7TNVO_KG-MmLItKm0O3gmbqoxXNkLHO-wHo,1002
|
|
199
200
|
orchestrator/graphql/utils/get_selected_paths.py,sha256=H0btESeOr3_VB7zy5Cx25OS0uzBcg2Y1I-arAmSOnsQ,1382
|
|
200
|
-
orchestrator/graphql/utils/get_subscription_product_blocks.py,sha256=
|
|
201
|
+
orchestrator/graphql/utils/get_subscription_product_blocks.py,sha256=NReel2uZuiretN62xEXUIFVXgJZUIKSQ3dUsSWCCzT4,5090
|
|
201
202
|
orchestrator/graphql/utils/is_query_detailed.py,sha256=ESQiM8OyhGF5vEE__cLV61oEIfnFvznoNCxi02rMTsE,2156
|
|
202
203
|
orchestrator/graphql/utils/override_class.py,sha256=blwPXVHxLyXQga3KjiDzWozmMhHEWNrhLL_GDmoj6y0,1373
|
|
203
204
|
orchestrator/graphql/utils/to_graphql_result_page.py,sha256=8ObkJP8reVf-TQOQVPKv1mNdfmSEMS1sG7s_-T7-pUU,902
|
|
@@ -229,9 +230,10 @@ orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_
|
|
|
229
230
|
orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql,sha256=mhPnqjG5H3W8_BD7w5tYzXUQSxFOM7Rahn_MudEPTIE,5383
|
|
230
231
|
orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py,sha256=xAhe74U0ZiVRo9Z8Uq7491RBbATMMUnYpTBjbG-BYL0,1690
|
|
231
232
|
orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py,sha256=O0GfCISIDnyohGf3Ot_2HKedGRbMqLVox6t7Wd3PMvo,894
|
|
232
|
-
orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py,sha256=
|
|
233
|
+
orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py,sha256=RZpLkWP1yekeZ68feO5v4LZYluKvnnIKRNDCE4tI9HM,1753
|
|
233
234
|
orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py,sha256=jtwDFOh-NlE31aH5dFmbynb23TZN6Mkzevxx-KLP7KE,776
|
|
234
235
|
orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql,sha256=hPldk0DAesUbHv3Qd_N7U-cAk-t1wIgxt4FOA120gQ8,1776
|
|
236
|
+
orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py,sha256=6kHRNSZxUze2jy7b8uRvkt5mzsax10Z-Z3lsACtPLRM,1067
|
|
235
237
|
orchestrator/schedules/__init__.py,sha256=JnnaglfK1qYUBKI6Dd9taV-tCZIPlAdAkHtnkJDMXxY,1066
|
|
236
238
|
orchestrator/schedules/resume_workflows.py,sha256=kSotzTAXjX7p9fpSYiGOpuxuTQfv54eRFAe0YSG0DHc,832
|
|
237
239
|
orchestrator/schedules/scheduling.py,sha256=ehtwgpbvMOk1jhn-hHgVzg_9wLJkI6l3mRY3DcO9ZVY,1526
|
|
@@ -260,7 +262,7 @@ orchestrator/services/products.py,sha256=BP4KyE8zO-8z7Trrs5T6zKBOw53S9BfBJnHWI3p
|
|
|
260
262
|
orchestrator/services/resource_types.py,sha256=_QBy_JOW_X3aSTqH0CuLrq4zBJL0p7Q-UDJUcuK2_qc,884
|
|
261
263
|
orchestrator/services/settings.py,sha256=u-834F4KWloXS8zi7R9mp-D3cjl-rbVjKJRU35IqhXo,2723
|
|
262
264
|
orchestrator/services/subscription_relations.py,sha256=9C126TUfFvyBe7y4x007kH_dvxJ9pZ1zSnaWeH6HC5k,12261
|
|
263
|
-
orchestrator/services/subscriptions.py,sha256=
|
|
265
|
+
orchestrator/services/subscriptions.py,sha256=u1qkCk7FuniJseQjnuDWiIlqy9ok4SY8nWUyLeJ11No,28068
|
|
264
266
|
orchestrator/services/tasks.py,sha256=NjPkuauQoh9UJDcjA7OcKFgPk0i6NoKdDO7HlpGbBJ8,6575
|
|
265
267
|
orchestrator/services/translations.py,sha256=GyP8soUFGej8AS8uulBsk10CCK6Kwfjv9AHMFm3ElQY,1713
|
|
266
268
|
orchestrator/services/workflows.py,sha256=oH7klit4kv2NGo-BACWA0ZtajVMSJAxG5m-kM6TXIMI,3742
|
|
@@ -273,11 +275,11 @@ orchestrator/utils/enrich_process.py,sha256=o_QSy5Q4wn1SMHhzVOw6bp7uhDXr7GhAIWRD
|
|
|
273
275
|
orchestrator/utils/errors.py,sha256=6FxvXrITmRjP5bYnJJ3CxjAwA5meNjRAVYouz4TWKkU,4653
|
|
274
276
|
orchestrator/utils/fixed_inputs.py,sha256=pnL6I_19VMp_Bny8SYjSzVFNvTFDyeCxFFOWGhTnDiQ,2665
|
|
275
277
|
orchestrator/utils/functional.py,sha256=X1MDNwHmkU3-8mFb21m31HGlcfc5TygliXR0sXN3-rU,8304
|
|
276
|
-
orchestrator/utils/get_subscription_dict.py,sha256=
|
|
278
|
+
orchestrator/utils/get_subscription_dict.py,sha256=EoSlFUXer_Kc5G0PjDPeujugZ76kKoPrjRr4Mg4HrzY,839
|
|
277
279
|
orchestrator/utils/get_updated_properties.py,sha256=egVZ0R5LNJ4e51Z8SXlU8cmb4tXxG-xb1d7OKwh-7xI,1322
|
|
278
280
|
orchestrator/utils/helpers.py,sha256=NjUF3IvWdnLulliP8-JQvGGGpHrh0vs0Vm092ynw-ss,3212
|
|
279
281
|
orchestrator/utils/json.py,sha256=7386sdqkrKYyy4sbn5NscwctH_v1hLyw5172P__rU3g,8341
|
|
280
|
-
orchestrator/utils/redis.py,sha256=
|
|
282
|
+
orchestrator/utils/redis.py,sha256=E5uPFCOlS1n_jv0xoaS1fuLnVv-shQn0K1hzpVwUWZY,7303
|
|
281
283
|
orchestrator/utils/redis_client.py,sha256=9rhsvedjK_CyClAjUicQyge0mVIViATqKFGZyjBY3XA,1384
|
|
282
284
|
orchestrator/utils/search_query.py,sha256=ji5LHtrzohGz6b1IG41cnPdpWXzLEzz4SGWgHly_yfU,16205
|
|
283
285
|
orchestrator/utils/state.py,sha256=RYKVlvKDBfsBdDk9wHjZKBTlQJbV4SqtCotAlTA2-bI,14021
|
|
@@ -298,7 +300,7 @@ orchestrator/workflows/tasks/resume_workflows.py,sha256=MzJqlSXUvKStkT7NGzxZyRlf
|
|
|
298
300
|
orchestrator/workflows/tasks/validate_product_type.py,sha256=UVX_6Kh8ueQs8ujLawnKVDdNc8UhWp_u69aNA8okR_w,3184
|
|
299
301
|
orchestrator/workflows/tasks/validate_products.py,sha256=i6jQME9N8sZZWo4pkNOS1Zgwh3eB2w66DnJi9k93yNk,8521
|
|
300
302
|
orchestrator/workflows/translations/en-GB.json,sha256=ST53HxkphFLTMjFHonykDBOZ7-P_KxksktZU3GbxLt0,846
|
|
301
|
-
orchestrator_core-3.2.
|
|
302
|
-
orchestrator_core-3.2.
|
|
303
|
-
orchestrator_core-3.2.
|
|
304
|
-
orchestrator_core-3.2.
|
|
303
|
+
orchestrator_core-3.2.2.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
|
|
304
|
+
orchestrator_core-3.2.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
305
|
+
orchestrator_core-3.2.2.dist-info/METADATA,sha256=OAszxQW45Nht7C2FhlviZ1H85z2LGfjFePbrkeKWmeY,5029
|
|
306
|
+
orchestrator_core-3.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|