orchestrator-core 3.2.3__py3-none-any.whl → 4.0.0__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.
Files changed (42) hide show
  1. orchestrator/__init__.py +1 -1
  2. orchestrator/api/api_v1/endpoints/settings.py +3 -13
  3. orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -2
  4. orchestrator/api/api_v1/endpoints/subscriptions.py +1 -0
  5. orchestrator/app.py +10 -1
  6. orchestrator/cli/generator/templates/new_product_migration.j2 +5 -1
  7. orchestrator/cli/migrate_tasks.py +5 -5
  8. orchestrator/cli/migrate_workflows.py +1 -2
  9. orchestrator/db/models.py +3 -1
  10. orchestrator/domain/base.py +4 -24
  11. orchestrator/domain/customer_description.py +0 -4
  12. orchestrator/graphql/mutations/customer_description.py +1 -1
  13. orchestrator/metrics/__init__.py +3 -0
  14. orchestrator/metrics/engine.py +49 -0
  15. orchestrator/metrics/init.py +14 -0
  16. orchestrator/metrics/processes.py +147 -0
  17. orchestrator/metrics/subscriptions.py +93 -0
  18. orchestrator/migrations/helpers.py +14 -6
  19. orchestrator/migrations/templates/alembic.ini.j2 +1 -2
  20. orchestrator/migrations/templates/env.py.j2 +4 -7
  21. orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +33 -0
  22. orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +28 -0
  23. orchestrator/schedules/validate_subscriptions.py +4 -4
  24. orchestrator/schemas/workflow.py +3 -1
  25. orchestrator/services/celery.py +13 -5
  26. orchestrator/services/processes.py +2 -2
  27. orchestrator/services/settings.py +10 -1
  28. orchestrator/services/subscriptions.py +10 -23
  29. orchestrator/services/workflows.py +8 -4
  30. orchestrator/settings.py +1 -4
  31. orchestrator/targets.py +1 -0
  32. orchestrator/utils/get_subscription_dict.py +0 -4
  33. orchestrator/utils/redis.py +1 -67
  34. orchestrator/workflows/modify_note.py +3 -11
  35. orchestrator/workflows/steps.py +2 -86
  36. orchestrator/workflows/tasks/validate_product_type.py +2 -2
  37. orchestrator/workflows/tasks/validate_products.py +3 -6
  38. orchestrator/workflows/utils.py +3 -23
  39. {orchestrator_core-3.2.3.dist-info → orchestrator_core-4.0.0.dist-info}/METADATA +9 -8
  40. {orchestrator_core-3.2.3.dist-info → orchestrator_core-4.0.0.dist-info}/RECORD +42 -35
  41. {orchestrator_core-3.2.3.dist-info → orchestrator_core-4.0.0.dist-info}/WHEEL +0 -0
  42. {orchestrator_core-3.2.3.dist-info → orchestrator_core-4.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -11,22 +11,18 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
  from copy import deepcopy
14
- from typing import Any
15
- from uuid import UUID
16
14
 
17
15
  import structlog
18
16
  from pydantic import ValidationError
19
17
 
20
18
  from orchestrator.db import db
21
19
  from orchestrator.db.models import ProcessSubscriptionTable
22
- from orchestrator.domain.base import ProductBlockModel, SubscriptionModel
20
+ from orchestrator.domain.base import SubscriptionModel
23
21
  from orchestrator.services.settings import reset_search_index
24
- from orchestrator.services.subscriptions import build_extended_domain_model, get_subscription
22
+ from orchestrator.services.subscriptions import get_subscription
25
23
  from orchestrator.targets import Target
26
24
  from orchestrator.types import SubscriptionLifecycle
27
25
  from orchestrator.utils.json import to_serializable
28
- from orchestrator.utils.redis import delete_from_redis, to_redis
29
- from orchestrator.websocket import sync_invalidate_subscription_cache
30
26
  from orchestrator.workflow import Step, step
31
27
  from pydantic_forms.types import State, UUIDstr
32
28
 
@@ -138,86 +134,6 @@ def set_status(status: SubscriptionLifecycle) -> Step:
138
134
  return _set_status
139
135
 
140
136
 
141
- @step("Remove domain model from cache")
142
- def remove_domain_model_from_cache(
143
- workflow_name: str, subscription: SubscriptionModel | None = None, subscription_id: UUID | None = None
144
- ) -> State:
145
- """Remove the domain model from the cache if it exists.
146
-
147
- Args:
148
- workflow_name: The workflow name
149
- subscription: Subscription Model
150
- subscription_id: The subscription id
151
-
152
- Returns:
153
- State
154
-
155
- """
156
-
157
- if not (subscription or subscription_id):
158
- logger.warning("No subscription found in this workflow", workflow_name=workflow_name)
159
- return {"deleted_subscription_id": None}
160
- if subscription:
161
- delete_from_redis(subscription.subscription_id)
162
- elif subscription_id:
163
- delete_from_redis(subscription_id)
164
-
165
- return {"deleted_subscription_id": subscription_id or subscription.subscription_id} # type: ignore[union-attr]
166
-
167
-
168
- @step("Cache Subscription and related subscriptions")
169
- def cache_domain_models(workflow_name: str, subscription: SubscriptionModel | None = None) -> State: # noqa: C901
170
- """Attempt to cache all Subscriptions once they have been touched once.
171
-
172
- Args:
173
- workflow_name: The Workflow Name
174
- subscription: The Subscription if it exists.
175
-
176
- Returns:
177
- Returns State.
178
-
179
- """
180
- cached_subscription_ids: set[UUID] = set()
181
- if not subscription:
182
- logger.warning("No subscription found in this workflow", workflow_name=workflow_name)
183
- return {"cached_subscription_ids": cached_subscription_ids}
184
-
185
- def _cache_other_subscriptions(product_block: ProductBlockModel) -> None:
186
- for field in product_block.model_fields:
187
- # subscription_instance is a ProductBlockModel or an arbitrary type
188
- subscription_instance: ProductBlockModel | Any = getattr(product_block, field)
189
- # If subscription_instance is a list, we need to step into it and loop.
190
- if isinstance(subscription_instance, list):
191
- for item in subscription_instance:
192
- if isinstance(item, ProductBlockModel):
193
- _cache_other_subscriptions(item)
194
-
195
- # If subscription_instance is a ProductBlockModel check the owner_subscription_id to decide the cache
196
- elif isinstance(subscription_instance, ProductBlockModel):
197
- _cache_other_subscriptions(subscription_instance)
198
- if not subscription_instance.owner_subscription_id == subscription.subscription_id:
199
- cached_subscription_ids.add(subscription_instance.owner_subscription_id)
200
-
201
- for field in subscription.model_fields:
202
- # There always is a single Root Product Block, it cannot be a list, so no need to check.
203
- instance: ProductBlockModel | Any = getattr(subscription, field)
204
- if isinstance(instance, ProductBlockModel):
205
- _cache_other_subscriptions(instance)
206
-
207
- # Cache all the sub subscriptions
208
- for subscription_id in cached_subscription_ids:
209
- subscription_model = SubscriptionModel.from_subscription(subscription_id)
210
- to_redis(build_extended_domain_model(subscription_model))
211
- sync_invalidate_subscription_cache(subscription.subscription_id, invalidate_all=False)
212
-
213
- # Cache the main subscription
214
- to_redis(build_extended_domain_model(subscription))
215
- cached_subscription_ids.add(subscription.subscription_id)
216
- sync_invalidate_subscription_cache(subscription.subscription_id)
217
-
218
- return {"cached_subscription_ids": cached_subscription_ids}
219
-
220
-
221
137
  @step("Refresh subscription search index")
222
138
  def refresh_subscription_search_index() -> State:
223
139
  try:
@@ -22,7 +22,7 @@ from orchestrator.services.subscriptions import (
22
22
  get_subscriptions_on_product_table_in_sync,
23
23
  )
24
24
  from orchestrator.services.workflows import (
25
- get_system_product_workflows_for_subscription,
25
+ get_validation_product_workflows_for_subscription,
26
26
  start_validation_workflow_for_workflows,
27
27
  )
28
28
  from orchestrator.targets import Target
@@ -62,7 +62,7 @@ def validate_product_type(product_type: str) -> State:
62
62
  subscriptions = get_subscriptions_on_product_table_in_sync()
63
63
 
64
64
  for subscription in subscriptions:
65
- system_product_workflows = get_system_product_workflows_for_subscription(
65
+ system_product_workflows = get_validation_product_workflows_for_subscription(
66
66
  subscription=subscription,
67
67
  )
68
68
 
@@ -105,13 +105,10 @@ def check_that_products_have_create_modify_and_terminate_workflows() -> State:
105
105
  product_data = get_products(filters=[ProductTable.status == "active"])
106
106
 
107
107
  workflows_not_complete: list = []
108
+ targets = ["CREATE", "TERMINATE", "MODIFY", "VALIDATE"]
108
109
  for product in product_data:
109
- workflows = {
110
- c.target
111
- for c in product.workflows
112
- if c.target in ["CREATE", "TERMINATE", "MODIFY", "SYSTEM"] and c.name != "modify_note"
113
- }
114
- if len(workflows) < 4:
110
+ workflows = {c.target for c in product.workflows if c.target in targets and c.name != "modify_note"}
111
+ if len(workflows) < len(targets):
115
112
  workflows_not_complete.append(product.name)
116
113
 
117
114
  # Do not raise an error but only report it in the `State` to allow exceptions.
@@ -24,16 +24,13 @@ from oauth2_lib.fastapi import OIDCUserModel
24
24
  from orchestrator.db import ProductTable, SubscriptionTable, db
25
25
  from orchestrator.forms.validators import ProductId
26
26
  from orchestrator.services import subscriptions
27
- from orchestrator.settings import app_settings
28
27
  from orchestrator.targets import Target
29
28
  from orchestrator.types import SubscriptionLifecycle
30
29
  from orchestrator.utils.errors import StaleDataError
31
- from orchestrator.utils.redis import caching_models_enabled
32
30
  from orchestrator.utils.state import form_inject_args
33
31
  from orchestrator.utils.validate_data_version import validate_data_version
34
- from orchestrator.workflow import Step, StepList, Workflow, begin, conditional, done, init, make_workflow, step
32
+ from orchestrator.workflow import Step, StepList, Workflow, begin, done, init, make_workflow, step
35
33
  from orchestrator.workflows.steps import (
36
- cache_domain_models,
37
34
  refresh_subscription_search_index,
38
35
  resync,
39
36
  set_status,
@@ -198,8 +195,6 @@ modify_initial_input_form_generator = None
198
195
 
199
196
  validate_initial_input_form_generator = wrap_modify_initial_input_form(modify_initial_input_form_generator)
200
197
 
201
- push_domain_models = conditional(lambda _: caching_models_enabled())
202
-
203
198
 
204
199
  def create_workflow(
205
200
  description: str,
@@ -228,7 +223,6 @@ def create_workflow(
228
223
  >> (additional_steps or StepList())
229
224
  >> set_status(status)
230
225
  >> resync
231
- >> push_domain_models(cache_domain_models)
232
226
  >> refresh_subscription_search_index
233
227
  >> done
234
228
  )
@@ -270,11 +264,9 @@ def modify_workflow(
270
264
  init
271
265
  >> store_process_subscription(Target.MODIFY)
272
266
  >> unsync
273
- >> push_domain_models(cache_domain_models)
274
267
  >> f()
275
268
  >> (additional_steps or StepList())
276
269
  >> resync
277
- >> push_domain_models(cache_domain_models)
278
270
  >> refresh_subscription_search_index
279
271
  >> done
280
272
  )
@@ -316,12 +308,10 @@ def terminate_workflow(
316
308
  init
317
309
  >> store_process_subscription(Target.TERMINATE)
318
310
  >> unsync
319
- >> push_domain_models(cache_domain_models)
320
311
  >> f()
321
312
  >> (additional_steps or StepList())
322
313
  >> set_status(SubscriptionLifecycle.TERMINATED)
323
314
  >> resync
324
- >> push_domain_models(cache_domain_models)
325
315
  >> refresh_subscription_search_index
326
316
  >> done
327
317
  )
@@ -352,19 +342,9 @@ def validate_workflow(description: str) -> Callable[[Callable[[], StepList]], Wo
352
342
  """
353
343
 
354
344
  def _validate_workflow(f: Callable[[], StepList]) -> Workflow:
355
- push_subscriptions = conditional(lambda _: app_settings.CACHE_DOMAIN_MODELS)
356
- steplist = (
357
- init
358
- >> store_process_subscription(Target.SYSTEM)
359
- >> unsync_unchecked
360
- >> push_subscriptions(cache_domain_models)
361
- >> f()
362
- >> resync
363
- >> push_subscriptions(cache_domain_models)
364
- >> done
365
- )
345
+ steplist = init >> store_process_subscription(Target.SYSTEM) >> unsync_unchecked >> f() >> resync >> done
366
346
 
367
- return make_workflow(f, description, validate_initial_input_form_generator, Target.SYSTEM, steplist)
347
+ return make_workflow(f, description, validate_initial_input_form_generator, Target.VALIDATE, steplist)
368
348
 
369
349
  return _validate_workflow
370
350
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 3.2.3
3
+ Version: 4.0.0
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Requires-Python: >=3.11,<3.14
6
6
  Classifier: Intended Audience :: Information Technology
@@ -35,30 +35,31 @@ Requires-Dist: deprecated
35
35
  Requires-Dist: deepmerge==2.0
36
36
  Requires-Dist: fastapi~=0.115.2
37
37
  Requires-Dist: fastapi-etag==0.4.0
38
- Requires-Dist: more-itertools~=10.6.0
38
+ Requires-Dist: more-itertools~=10.7.0
39
39
  Requires-Dist: itsdangerous
40
40
  Requires-Dist: Jinja2==3.1.6
41
- Requires-Dist: orjson==3.10.16
41
+ Requires-Dist: orjson==3.10.18
42
+ Requires-Dist: prometheus-client==0.21.1
42
43
  Requires-Dist: psycopg2-binary==2.9.10
43
44
  Requires-Dist: pydantic[email]~=2.8.2
44
- Requires-Dist: pydantic-settings~=2.8.0
45
+ Requires-Dist: pydantic-settings~=2.9.1
45
46
  Requires-Dist: python-dateutil==2.8.2
46
47
  Requires-Dist: python-rapidjson>=1.18,<1.21
47
48
  Requires-Dist: pytz==2025.2
48
49
  Requires-Dist: redis==5.1.1
49
50
  Requires-Dist: schedule==1.1.0
50
51
  Requires-Dist: semver==3.0.4
51
- Requires-Dist: sentry-sdk[fastapi]~=2.25.1
52
- Requires-Dist: SQLAlchemy==2.0.40
52
+ Requires-Dist: sentry-sdk[fastapi]~=2.28.0
53
+ Requires-Dist: SQLAlchemy==2.0.41
53
54
  Requires-Dist: SQLAlchemy-Utils==0.41.2
54
55
  Requires-Dist: structlog
55
- Requires-Dist: typer==0.15.2
56
+ Requires-Dist: typer==0.15.4
56
57
  Requires-Dist: uvicorn[standard]~=0.34.0
57
58
  Requires-Dist: nwa-stdlib~=1.9.0
58
59
  Requires-Dist: oauth2-lib~=2.4.0
59
60
  Requires-Dist: tabulate==0.9.0
60
61
  Requires-Dist: strawberry-graphql>=0.246.2
61
- Requires-Dist: pydantic-forms>=1.4.0, <=2.0.0
62
+ Requires-Dist: pydantic-forms>=1.4.0, <=2.1.0
62
63
  Requires-Dist: celery~=5.5.1 ; extra == "celery"
63
64
  Requires-Dist: toml ; extra == "dev"
64
65
  Requires-Dist: bumpversion ; extra == "dev"
@@ -1,11 +1,11 @@
1
- orchestrator/__init__.py,sha256=SAG1EbiZw8m_0wbefpfPXZ_rYgoIoLssZr_HdgxQShI,1063
2
- orchestrator/app.py,sha256=VN54_Zsx5x_3ym8aFadATg67a4J5lv8H-pxnPlR3RkM,11668
1
+ orchestrator/__init__.py,sha256=ey2nWHqiWSQXMSb8wHhOS7MI0YPtdHR8g9RnbuMDd98,1063
2
+ orchestrator/app.py,sha256=7UrXKjBKNSEaSSXAd5ww_RdMFhFqE4yvfj8faS2MzAA,12089
3
3
  orchestrator/exception_handlers.py,sha256=UsW3dw8q0QQlNLcV359bIotah8DYjMsj2Ts1LfX4ClY,1268
4
4
  orchestrator/log_config.py,sha256=1tPRX5q65e57a6a_zEii_PFK8SzWT0mnA5w2sKg4hh8,1853
5
5
  orchestrator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  orchestrator/security.py,sha256=iXFxGxab54aav7oHEKLAVkTgrQMJGHy6IYLojEnD7gI,2422
7
- orchestrator/settings.py,sha256=MTG7gnmbQYwUjAnhvX4Y3MEqmX8vIpAEC0lhDafa1zw,4039
8
- orchestrator/targets.py,sha256=ykjTGK7CozFaltNaxQcK90P4Cc1Qvf-W8dFztxtZhRQ,776
7
+ orchestrator/settings.py,sha256=ep4RXOIZfYb5ws4qT_E_iiANMQR91pvOhQQCv1t8osw,3879
8
+ orchestrator/targets.py,sha256=WizBgnp8hWX9YLFUIju7ewSubiwQqinCvyiYNcXHbHI,802
9
9
  orchestrator/types.py,sha256=qzs7xx5AYRmKbpYRyJJP3wuDb0W0bcAzefCN0RWLAco,15459
10
10
  orchestrator/version.py,sha256=b58e08lxs47wUNXv0jXFO_ykpksmytuzEXD4La4W-NQ,1366
11
11
  orchestrator/workflow.py,sha256=T_3Z1PrlF70C16ehAthKRF1hd3jpwV-MREDVxSLfxOw,44063
@@ -21,9 +21,9 @@ orchestrator/api/api_v1/endpoints/processes.py,sha256=i5GRoszvdmpZqOxSqON83DNuc0
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
24
- orchestrator/api/api_v1/endpoints/settings.py,sha256=QPBwrRGqBlYHNRnADKQ5hpj74X2DB5lROu8KwVnyN_0,6226
25
- orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py,sha256=Elu4DVJoNtUFq_b3pG1Ws8StrUIo_jTViff2TJqe6ZU,3398
26
- orchestrator/api/api_v1/endpoints/subscriptions.py,sha256=EwkWBztI9xSMPkol49SM5csECthyu7HC38AhuW7pWUE,8724
24
+ orchestrator/api/api_v1/endpoints/settings.py,sha256=orcwFqGiQ3Ala3mLm_27ChXPkUFoGUeGNaDZnEIk2Ak,5848
25
+ orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py,sha256=1_6LtgQleoq3M6z_W-Qz__Bj3OFUweoPrUqHMwSH6AM,3288
26
+ orchestrator/api/api_v1/endpoints/subscriptions.py,sha256=V-ebvjtFEKlALx8SKX42SiNPM-GAgSMWbuaimyktUQQ,8758
27
27
  orchestrator/api/api_v1/endpoints/translations.py,sha256=dIWh_fCnZZUxJoGiNeJ49DK_xpf75IpR_0EIMSvzIvY,963
28
28
  orchestrator/api/api_v1/endpoints/user.py,sha256=RyI32EXVu6I-IxWjz0XB5zQWzzLL60zKXLgLqLH02xU,1827
29
29
  orchestrator/api/api_v1/endpoints/workflows.py,sha256=_0vhGiQeu3-z16Zi0WmuDWBs8gmed6BzRNwYH_sF6AY,1977
@@ -33,8 +33,8 @@ orchestrator/cli/database.py,sha256=qig-WqUtiDITz4KePxzcqZtC0FPTWRs_3l19qQpqIGA,
33
33
  orchestrator/cli/generate.py,sha256=SBaYfRijXPF9r3VxarPKTiDzDcB6GBMMQvecQIb_ZLQ,7377
34
34
  orchestrator/cli/main.py,sha256=GC_kxa9OZ-Y0ig_klfWc6ysOQuPVTUmTmDRj3m8cJHA,983
35
35
  orchestrator/cli/migrate_domain_models.py,sha256=OhjNuIheytgShpMYCZ18leNUzk17ExhtkCqx7Ww03R8,20371
36
- orchestrator/cli/migrate_tasks.py,sha256=Fmcwuv8rI1Z_qEiL_kmOWCUq7rNIgnlntUc37phadN8,7249
37
- orchestrator/cli/migrate_workflows.py,sha256=-_nsKUcVa14-Ug3aSppU9yk-oWlK411SX33WqzD1p4M,8979
36
+ orchestrator/cli/migrate_tasks.py,sha256=bju8XColjSZD0v3rS4kl-24dLr8En_H4-6enBmqd494,7255
37
+ orchestrator/cli/migrate_workflows.py,sha256=nxUpx0vgEIc_8aJrjAyrw3E9Dt8JmaamTts8oiQ4vHY,8923
38
38
  orchestrator/cli/migration_helpers.py,sha256=C5tpkP5WEBr7G9S-1k1hgSI8ili6xd9Z5ygc9notaK0,4110
39
39
  orchestrator/cli/scheduler.py,sha256=iCKBWYUwQIYTDqKQ9rMVvs2sNiAzE-J2SkV170TPP2g,1896
40
40
  orchestrator/cli/domain_gen_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -83,7 +83,7 @@ orchestrator/cli/generator/templates/lazy_workflow_instance.j2,sha256=BYB6LwE19O
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
85
  orchestrator/cli/generator/templates/modify_product.j2,sha256=M1WDMmPwfXpUcuZUa-H5GnlKAr1t_xCQliLa66FI-YU,5057
86
- orchestrator/cli/generator/templates/new_product_migration.j2,sha256=d67I9haNkKdzWzNT0f1S6-UhG86fOWEohF0Al7NmXmA,3023
86
+ orchestrator/cli/generator/templates/new_product_migration.j2,sha256=XTeOmv8nVNfGXx6pfSGVwRk282Xx3lnw-7bkpHkd-Tk,3128
87
87
  orchestrator/cli/generator/templates/product.j2,sha256=gcN1poWRuGWbsLrQv0Z8SXO6MGuXBHBr33UvQtqsF8E,1241
88
88
  orchestrator/cli/generator/templates/product_block.j2,sha256=X5ynyBG39UiYekPHms7IkSHmxq2j-2OrhAYsFaRqktU,2454
89
89
  orchestrator/cli/generator/templates/shared_forms.j2,sha256=tXbauuMMExwHLYLJVkmAJ74SSFriXlwpOyd04jwWE0k,545
@@ -106,7 +106,7 @@ orchestrator/db/database.py,sha256=MU_w_e95ho2dVb2JDnt_KFYholx___XDkiQXbc8wCkI,1
106
106
  orchestrator/db/helpers.py,sha256=L8kEdnSSNGnUpZhdeGx2arCodakWN8vSpKdfjoLuHdY,831
107
107
  orchestrator/db/listeners.py,sha256=UBPYcH0FE3a7aZQu_D0O_JMXpXIRYXC0gjSAvlv5GZo,1142
108
108
  orchestrator/db/loaders.py,sha256=ez6JzQ3IKVkC_oLAkVlIIiI8Do7hXbdcPKCvUSLxRog,7962
109
- orchestrator/db/models.py,sha256=V7m-XOVzo_Kj_B-M46Ybr1zlbfXjbN64sQ3C-rz7PQE,27217
109
+ orchestrator/db/models.py,sha256=92lkqI4u3Si2tEMSTnMb5Uv08CSjqkgotgyEYqLvFeI,27302
110
110
  orchestrator/db/filters/__init__.py,sha256=RUj6P0XxEBhYj0SN5wH5-Vf_Wt_ilZR_n9DSar5m9oM,371
111
111
  orchestrator/db/filters/filters.py,sha256=55RtpQwM2rhrk4A6CCSeSXoo-BT9GnQoNTryA8CtLEg,5020
112
112
  orchestrator/db/filters/process.py,sha256=xvGhyfo_MZ1xhLvFC6yULjcT4mJk0fKc1glJIYgsWLE,4018
@@ -142,9 +142,9 @@ orchestrator/distlock/managers/__init__.py,sha256=ImIkNsrXcyE7-NgRWqEhUXUuUzda9K
142
142
  orchestrator/distlock/managers/memory_distlock_manager.py,sha256=HWQafcVKBF-Cka_wukZZ1GM69AWPVOpJPje3quIebQ8,3114
143
143
  orchestrator/distlock/managers/redis_distlock_manager.py,sha256=DXtMhC8qtxiFO6xU9qYXHZQnCLjlmGBpeyfLA0vbRP0,3369
144
144
  orchestrator/domain/__init__.py,sha256=20DhXQPKY0g3rTgCkRlNDY58sLviToOVF8NPoex9WJc,936
145
- orchestrator/domain/base.py,sha256=26UbHKXqI99w8SyS-Kjj4DF8IbgPNOh8iDPP6e3GEsA,70996
145
+ orchestrator/domain/base.py,sha256=jjMxJvt0GyaTff_z490lmkqDCtitkh0oA4GygB60n4s,69939
146
146
  orchestrator/domain/context_cache.py,sha256=vT1a01MBSBIaokoShK9KwjItd7abNmz7cXaF67VRZK8,2508
147
- orchestrator/domain/customer_description.py,sha256=v7o6TTN4oc6bWHZU-jCT-fUYvkeYahbpXOwlKXofuI8,3360
147
+ orchestrator/domain/customer_description.py,sha256=RU_pcgCIZjjFfDsY45lfV0z6ATlS1NXtB0E7eH3UcYQ,3190
148
148
  orchestrator/domain/helpers.py,sha256=D9O2duhCAZGmm39u-9ggvU-X2JsCbIS607kF77-r8QM,2549
149
149
  orchestrator/domain/lifecycle.py,sha256=kGR0AFVOSUBlzdhgRr11CUnF26wbBYIjz8uKb_qPCg0,2922
150
150
  orchestrator/domain/subscription_instance_transform.py,sha256=j_d49dFcSss0dl-BHS-ev2faLbE0y8hLvCfrzui6C74,4360
@@ -165,7 +165,7 @@ orchestrator/graphql/extensions/model_cache.py,sha256=1uhMRjBs9eK7zJ1Y6P6BopX068
165
165
  orchestrator/graphql/extensions/stats.py,sha256=pGhEBQg45XvqZhRobcrCSGwt5AGmR3gflsm1dYiIg5g,2018
166
166
  orchestrator/graphql/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  orchestrator/graphql/loaders/subscriptions.py,sha256=31zE2WC7z-tPIUmVpU1QWOJvNbLvF7sYgY7JAQ6OPJg,1856
168
- orchestrator/graphql/mutations/customer_description.py,sha256=37yX92fE1Sc51O9i-gP8JfD3HdsvpR3TtbgYqKtGC-w,3343
168
+ orchestrator/graphql/mutations/customer_description.py,sha256=zm_X1yvWl4qC97_rYUYSF-1q1gFrQX6fDrzQKhguDYs,3359
169
169
  orchestrator/graphql/mutations/start_process.py,sha256=8vLVvmBwL1ujbZJoI_8YE3VAgI-J2RTzgrTZJC8THZ4,1576
170
170
  orchestrator/graphql/resolvers/__init__.py,sha256=EEw9NO4LAryfrpkLlgsNQ9rytKd0usBDx95OURRV6sg,1031
171
171
  orchestrator/graphql/resolvers/customer.py,sha256=tq06MtMoaqFwqn3YQvSv0VmROW7QJZRJp1ykO4tUhck,934
@@ -202,13 +202,18 @@ orchestrator/graphql/utils/get_subscription_product_blocks.py,sha256=NReel2uZuir
202
202
  orchestrator/graphql/utils/is_query_detailed.py,sha256=ESQiM8OyhGF5vEE__cLV61oEIfnFvznoNCxi02rMTsE,2156
203
203
  orchestrator/graphql/utils/override_class.py,sha256=blwPXVHxLyXQga3KjiDzWozmMhHEWNrhLL_GDmoj6y0,1373
204
204
  orchestrator/graphql/utils/to_graphql_result_page.py,sha256=8ObkJP8reVf-TQOQVPKv1mNdfmSEMS1sG7s_-T7-pUU,902
205
+ orchestrator/metrics/__init__.py,sha256=onGOGku3DPlD6yylljxNYd9ztdsFzK31i3L1zdhOSAQ,171
206
+ orchestrator/metrics/engine.py,sha256=dfpMrKWXNL_5J8zYjH2voOYLx5cZOpGgkz8VsiYF8sg,1708
207
+ orchestrator/metrics/init.py,sha256=xBITvDjbNf-iabbBg0tAW8TPj6-wzr_MerOOqgDsoS4,608
208
+ orchestrator/metrics/processes.py,sha256=SyogN5NSuhYoRv2CSUE1So9e8Gkrwa71J6oGLOdODQU,5333
209
+ orchestrator/metrics/subscriptions.py,sha256=vC1O8VmTq5oJxNrn5CU99Rf8cxzdyhc7tXbZBSAU-O8,3036
205
210
  orchestrator/migrations/README,sha256=heMzebYwlGhnE8_4CWJ4LS74WoEZjBy-S-mIJRxAEKI,39
206
211
  orchestrator/migrations/alembic.ini,sha256=kMoADqhGeubU8xanILNaqm4oixLy9m4ngYtdGpZcc7I,873
207
212
  orchestrator/migrations/env.py,sha256=M_cPoAL2axuuup5fvMy8I_WTPHEw0RbPEHkhZ3QEGoE,3740
208
- orchestrator/migrations/helpers.py,sha256=7r286N3MFHJhSc-59okj_UO2VoU8L_4QBWfvABMzZAw,43779
213
+ orchestrator/migrations/helpers.py,sha256=xwi1Z-0MMZJ1Bk-HXkb6f_RU7BmO3ajK5a4qqO94elc,44068
209
214
  orchestrator/migrations/script.py.mako,sha256=607Zrgp-Z-m9WGLt4wewN1QDOmHeifxcePUdADkSZyM,510
210
- orchestrator/migrations/templates/alembic.ini.j2,sha256=jA-QykVparwWSNt5XDP0Zk7epLOhK7D87Af-i2shJV4,905
211
- orchestrator/migrations/templates/env.py.j2,sha256=RfLAQItZ56Jlzwi6LJfBo92m1-th_bdfkFKD1mwTZIE,2821
215
+ orchestrator/migrations/templates/alembic.ini.j2,sha256=8v7UbKvOiWEbEKQa-Au3uONKUuYx6aflulYanZX6r2I,883
216
+ orchestrator/migrations/templates/env.py.j2,sha256=LIt0ildZTZvNEx3imhy4GNzfFi_rPZg-8H7rGgrBOP8,2717
212
217
  orchestrator/migrations/templates/helpers.py.j2,sha256=3MWNMICGrcQFObyBQefL-FPjoVKUgP0QIlbk4TdMZds,98
213
218
  orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py,sha256=ufe6OFUELNpx6N2663bvdwgB4lP-v71fuMuJtx9CmJc,2698
214
219
  orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py,sha256=EHj87IXucruyB8KuxEWcc7JK1NIizZ5Jzmj-bzY0t1Y,1265
@@ -231,15 +236,17 @@ orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_
231
236
  orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py,sha256=xAhe74U0ZiVRo9Z8Uq7491RBbATMMUnYpTBjbG-BYL0,1690
232
237
  orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py,sha256=O0GfCISIDnyohGf3Ot_2HKedGRbMqLVox6t7Wd3PMvo,894
233
238
  orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py,sha256=RZpLkWP1yekeZ68feO5v4LZYluKvnnIKRNDCE4tI9HM,1753
239
+ orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py,sha256=uh5J2bR_UERqlNrDjDBSfiAdEfI9YQzgR9-t9ordFOo,847
234
240
  orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py,sha256=jtwDFOh-NlE31aH5dFmbynb23TZN6Mkzevxx-KLP7KE,776
235
241
  orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql,sha256=hPldk0DAesUbHv3Qd_N7U-cAk-t1wIgxt4FOA120gQ8,1776
236
242
  orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py,sha256=6kHRNSZxUze2jy7b8uRvkt5mzsax10Z-Z3lsACtPLRM,1067
243
+ orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py,sha256=VLFDHFYRWn5ktUba0KuSPWyvjYJdfN1WypWmOPqIW18,721
237
244
  orchestrator/schedules/__init__.py,sha256=JnnaglfK1qYUBKI6Dd9taV-tCZIPlAdAkHtnkJDMXxY,1066
238
245
  orchestrator/schedules/resume_workflows.py,sha256=kSotzTAXjX7p9fpSYiGOpuxuTQfv54eRFAe0YSG0DHc,832
239
246
  orchestrator/schedules/scheduling.py,sha256=ehtwgpbvMOk1jhn-hHgVzg_9wLJkI6l3mRY3DcO9ZVY,1526
240
247
  orchestrator/schedules/task_vacuum.py,sha256=eovnuKimU8SFRw1IF62MsAVFSdgeeV1u57kapUbz8As,821
241
248
  orchestrator/schedules/validate_products.py,sha256=YMr7ASSqdXM6pd6oZu0kr8mfmH8If16MzprrsHdN_ZU,1234
242
- orchestrator/schedules/validate_subscriptions.py,sha256=YYcU2iGf8Ga_s577kgpKdhQV4p7wCEHGYvUf8FCvBvQ,2022
249
+ orchestrator/schedules/validate_subscriptions.py,sha256=9SYvsn4BJ5yo_1nu555hWjl5XffTx7QMaRhH5oOjM9E,2042
243
250
  orchestrator/schemas/__init__.py,sha256=YDyZ0YBvzB4ML9oDBCBPGnBvf680zFFgUzg7X0tYBRY,2326
244
251
  orchestrator/schemas/base.py,sha256=Vc444LetsINLRhG2SxW9Bq01hOzChPOhQWCImQTr-As,930
245
252
  orchestrator/schemas/engine_settings.py,sha256=LF8al7tJssiilb5A4emPtUYo0tVDSaT1Lvo_DN_ttrY,1296
@@ -251,21 +258,21 @@ orchestrator/schemas/product_block.py,sha256=kCqvm6qadHpegMr9aWI_fYX-T7mS-5S-ldP
251
258
  orchestrator/schemas/resource_type.py,sha256=VDju4XywcDDLxdpbWU62RTvR9QF8x_GRrpTlN_NE8uI,1064
252
259
  orchestrator/schemas/subscription.py,sha256=-jXyHZIed9Xlia18ksSDyenblNN6Q2yM2FlGELyJ458,3423
253
260
  orchestrator/schemas/subscription_descriptions.py,sha256=Ft_jw1U0bf9Z0U8O4OWfLlcl0mXCVT_qYVagBP3GbIQ,1262
254
- orchestrator/schemas/workflow.py,sha256=w-CaRPp9AAddhnd8o_0jPaey1Vnnh-s-A5s5kWlR2pI,1977
261
+ orchestrator/schemas/workflow.py,sha256=VqQ9XfV4fVd6MjY0LRRQzWBJHmlPsAamWfTwDx1cZkg,2102
255
262
  orchestrator/services/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
256
- orchestrator/services/celery.py,sha256=W37UNc4hbUS2SKjVmawsnF5wukmEfIdipsTESv_EOTw,4768
263
+ orchestrator/services/celery.py,sha256=SmAUsN755yE7cZ3og92qTvPPeRIpdEKlbaLih7o38h8,5089
257
264
  orchestrator/services/fixed_inputs.py,sha256=kyz7s2HLzyDulvcq-ZqefTw1om86COvyvTjz0_5CmgI,876
258
265
  orchestrator/services/input_state.py,sha256=HF7wl9fWdaAW8pdCCqbuYoKyNj8dY0g8Ff8vXis8z5A,2211
259
266
  orchestrator/services/process_broadcast_thread.py,sha256=D44YbjF8mRqGuznkRUV4SoRn1J0lfy_x1H508GnSVlU,4649
260
- orchestrator/services/processes.py,sha256=JXVa9E3NtcuFlUggK3LhjHilSAlF-4kTyCCHROakAJA,30554
267
+ orchestrator/services/processes.py,sha256=rTH6zLNsun3qDCPguz2LYS87MQR_LJREIPrgkGS6kwk,30494
261
268
  orchestrator/services/products.py,sha256=BP4KyE8zO-8z7Trrs5T6zKBOw53S9BfBJnHWI3p6u5Y,1943
262
269
  orchestrator/services/resource_types.py,sha256=_QBy_JOW_X3aSTqH0CuLrq4zBJL0p7Q-UDJUcuK2_qc,884
263
- orchestrator/services/settings.py,sha256=u-834F4KWloXS8zi7R9mp-D3cjl-rbVjKJRU35IqhXo,2723
270
+ orchestrator/services/settings.py,sha256=HEWfFulgoEDwgfxGEO__QTr5fDiwNBEj1UhAeTAdbLQ,3159
264
271
  orchestrator/services/subscription_relations.py,sha256=9C126TUfFvyBe7y4x007kH_dvxJ9pZ1zSnaWeH6HC5k,12261
265
- orchestrator/services/subscriptions.py,sha256=u1qkCk7FuniJseQjnuDWiIlqy9ok4SY8nWUyLeJ11No,28068
272
+ orchestrator/services/subscriptions.py,sha256=nr2HI89nC0lYjzTh2j-lEQ5cPQK43LNZv3gvP6jbepw,27189
266
273
  orchestrator/services/tasks.py,sha256=NjPkuauQoh9UJDcjA7OcKFgPk0i6NoKdDO7HlpGbBJ8,6575
267
274
  orchestrator/services/translations.py,sha256=GyP8soUFGej8AS8uulBsk10CCK6Kwfjv9AHMFm3ElQY,1713
268
- orchestrator/services/workflows.py,sha256=oH7klit4kv2NGo-BACWA0ZtajVMSJAxG5m-kM6TXIMI,3742
275
+ orchestrator/services/workflows.py,sha256=iEkt2OBuTwkDru4V6ZSKatnw0b96ZdPV-VQqeZ9EOgU,4015
269
276
  orchestrator/utils/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
270
277
  orchestrator/utils/crypt.py,sha256=18eNamYWMllPkxyRtWIde3FDr3rSF74R5SAL6WsCj9Y,5584
271
278
  orchestrator/utils/datetime.py,sha256=a1WQ_yvu7MA0TiaRpC5avwbOSFdrj4eMrV4a7I2sD5Q,1477
@@ -275,11 +282,11 @@ orchestrator/utils/enrich_process.py,sha256=o_QSy5Q4wn1SMHhzVOw6bp7uhDXr7GhAIWRD
275
282
  orchestrator/utils/errors.py,sha256=6FxvXrITmRjP5bYnJJ3CxjAwA5meNjRAVYouz4TWKkU,4653
276
283
  orchestrator/utils/fixed_inputs.py,sha256=pnL6I_19VMp_Bny8SYjSzVFNvTFDyeCxFFOWGhTnDiQ,2665
277
284
  orchestrator/utils/functional.py,sha256=X1MDNwHmkU3-8mFb21m31HGlcfc5TygliXR0sXN3-rU,8304
278
- orchestrator/utils/get_subscription_dict.py,sha256=EoSlFUXer_Kc5G0PjDPeujugZ76kKoPrjRr4Mg4HrzY,839
285
+ orchestrator/utils/get_subscription_dict.py,sha256=hctkFvD3U6LpygNwz2uesRMdnXSY-PaohBqPATsi9r4,694
279
286
  orchestrator/utils/get_updated_properties.py,sha256=egVZ0R5LNJ4e51Z8SXlU8cmb4tXxG-xb1d7OKwh-7xI,1322
280
287
  orchestrator/utils/helpers.py,sha256=NjUF3IvWdnLulliP8-JQvGGGpHrh0vs0Vm092ynw-ss,3212
281
288
  orchestrator/utils/json.py,sha256=7386sdqkrKYyy4sbn5NscwctH_v1hLyw5172P__rU3g,8341
282
- orchestrator/utils/redis.py,sha256=E5uPFCOlS1n_jv0xoaS1fuLnVv-shQn0K1hzpVwUWZY,7303
289
+ orchestrator/utils/redis.py,sha256=BjUNmrKx8YVyJIucl2mhXubK6WV-49OnAU6rPMOZpM0,4469
283
290
  orchestrator/utils/redis_client.py,sha256=9rhsvedjK_CyClAjUicQyge0mVIViATqKFGZyjBY3XA,1384
284
291
  orchestrator/utils/search_query.py,sha256=ji5LHtrzohGz6b1IG41cnPdpWXzLEzz4SGWgHly_yfU,16205
285
292
  orchestrator/utils/state.py,sha256=RYKVlvKDBfsBdDk9wHjZKBTlQJbV4SqtCotAlTA2-bI,14021
@@ -290,17 +297,17 @@ orchestrator/websocket/websocket_manager.py,sha256=hwlG9FDXcNU42jDNNsPMQLIyrvEpG
290
297
  orchestrator/websocket/managers/broadcast_websocket_manager.py,sha256=fwoSgTjkHJ2GmsLTU9dqQpAA9i8b1McPu7gLNzxtfG4,5401
291
298
  orchestrator/websocket/managers/memory_websocket_manager.py,sha256=lF5EEx1iFMCGEkTbItTDr88NENMSaSeG1QrJ7teoPkY,3324
292
299
  orchestrator/workflows/__init__.py,sha256=NzIGGI-8SNAwCk2YqH6sHhEWbgAY457ntDwjO15N8v4,4131
293
- orchestrator/workflows/modify_note.py,sha256=X70qQtC0ITp5IE5OR8j5Op57k3ol1S9txnhDbZTICao,2416
300
+ orchestrator/workflows/modify_note.py,sha256=l6QtijRPv8gnHxzwTz_4nWIPcZ0FcKQh_yFbtjYEDMg,2163
294
301
  orchestrator/workflows/removed_workflow.py,sha256=V0Da5TEdfLdZZKD38ig-MTp3_IuE7VGqzHHzvPYQmLI,909
295
- orchestrator/workflows/steps.py,sha256=yAb6XZaRhR2mKV4_yo-4hSYMTknbMD27-pNGMfjVzi0,9802
296
- orchestrator/workflows/utils.py,sha256=fLayx_oggM8PdYnyukHSJE3R9u-X2zYY1WRMCELUY74,14545
302
+ orchestrator/workflows/steps.py,sha256=ulpheoHaCOE1qh71Bja4KW4pItQh1Z6q4QU4tn5GtNk,6067
303
+ orchestrator/workflows/utils.py,sha256=yBwfITlseimyLEzbwI0ehOAlr-xI1N3WGVudFz4boXk,13778
297
304
  orchestrator/workflows/tasks/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
298
305
  orchestrator/workflows/tasks/cleanup_tasks_log.py,sha256=BfWYbPXhnLAHUJ0mlODDnjZnQQAvKCZJDVTwbwOWI04,1624
299
306
  orchestrator/workflows/tasks/resume_workflows.py,sha256=MzJqlSXUvKStkT7NGzxZyRlfAer_ezYm-kjUqaZi0yc,2359
300
- orchestrator/workflows/tasks/validate_product_type.py,sha256=UVX_6Kh8ueQs8ujLawnKVDdNc8UhWp_u69aNA8okR_w,3184
301
- orchestrator/workflows/tasks/validate_products.py,sha256=i6jQME9N8sZZWo4pkNOS1Zgwh3eB2w66DnJi9k93yNk,8521
307
+ orchestrator/workflows/tasks/validate_product_type.py,sha256=paG-NAY1bdde3Adt8zItkcBKf5Pxw6f5ngGW6an6dYU,3192
308
+ orchestrator/workflows/tasks/validate_products.py,sha256=GZJBoFF-WMphS7ghMs2-gqvV2iL1F0POhk0uSNt93n0,8510
302
309
  orchestrator/workflows/translations/en-GB.json,sha256=ST53HxkphFLTMjFHonykDBOZ7-P_KxksktZU3GbxLt0,846
303
- orchestrator_core-3.2.3.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
304
- orchestrator_core-3.2.3.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
305
- orchestrator_core-3.2.3.dist-info/METADATA,sha256=AzahqbZrlKJSQnVOq21UaeGImMLI-62j2UI52TGS0eE,5029
306
- orchestrator_core-3.2.3.dist-info/RECORD,,
310
+ orchestrator_core-4.0.0.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
311
+ orchestrator_core-4.0.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
312
+ orchestrator_core-4.0.0.dist-info/METADATA,sha256=lBgH0anclehbueI9Y4jCsk3DOdkFtWJ3Vs6l7TpBHXA,5070
313
+ orchestrator_core-4.0.0.dist-info/RECORD,,