orchestrator-core 3.1.2rc3__py3-none-any.whl → 3.1.2rc4__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 (46) hide show
  1. orchestrator/__init__.py +2 -2
  2. orchestrator/api/api_v1/api.py +1 -1
  3. orchestrator/api/api_v1/endpoints/processes.py +1 -1
  4. orchestrator/api/api_v1/endpoints/settings.py +1 -1
  5. orchestrator/api/api_v1/endpoints/subscriptions.py +1 -1
  6. orchestrator/app.py +1 -1
  7. orchestrator/cli/database.py +1 -1
  8. orchestrator/cli/generator/generator/migration.py +2 -5
  9. orchestrator/cli/migrate_tasks.py +13 -0
  10. orchestrator/config/assignee.py +1 -1
  11. orchestrator/db/models.py +1 -1
  12. orchestrator/devtools/populator.py +1 -1
  13. orchestrator/domain/__init__.py +2 -3
  14. orchestrator/domain/base.py +74 -5
  15. orchestrator/domain/lifecycle.py +1 -1
  16. orchestrator/graphql/schema.py +1 -1
  17. orchestrator/graphql/types.py +1 -1
  18. orchestrator/graphql/utils/get_subscription_product_blocks.py +13 -0
  19. orchestrator/migrations/env.py +1 -1
  20. orchestrator/migrations/helpers.py +6 -6
  21. orchestrator/schemas/engine_settings.py +1 -1
  22. orchestrator/schemas/subscription.py +1 -1
  23. orchestrator/security.py +1 -1
  24. orchestrator/services/celery.py +1 -1
  25. orchestrator/services/processes.py +1 -1
  26. orchestrator/services/products.py +1 -1
  27. orchestrator/services/subscriptions.py +1 -1
  28. orchestrator/services/tasks.py +1 -1
  29. orchestrator/settings.py +2 -23
  30. orchestrator/targets.py +1 -1
  31. orchestrator/types.py +1 -1
  32. orchestrator/utils/errors.py +1 -1
  33. orchestrator/utils/state.py +1 -1
  34. orchestrator/websocket/websocket_manager.py +1 -1
  35. orchestrator/workflow.py +1 -1
  36. orchestrator/workflows/modify_note.py +1 -1
  37. orchestrator/workflows/steps.py +1 -1
  38. orchestrator/workflows/tasks/cleanup_tasks_log.py +1 -1
  39. orchestrator/workflows/tasks/resume_workflows.py +1 -1
  40. orchestrator/workflows/tasks/validate_product_type.py +1 -1
  41. orchestrator/workflows/tasks/validate_products.py +1 -1
  42. orchestrator/workflows/utils.py +1 -1
  43. {orchestrator_core-3.1.2rc3.dist-info → orchestrator_core-3.1.2rc4.dist-info}/METADATA +3 -3
  44. {orchestrator_core-3.1.2rc3.dist-info → orchestrator_core-3.1.2rc4.dist-info}/RECORD +46 -46
  45. {orchestrator_core-3.1.2rc3.dist-info → orchestrator_core-3.1.2rc4.dist-info}/WHEEL +1 -1
  46. {orchestrator_core-3.1.2rc3.dist-info → orchestrator_core-3.1.2rc4.dist-info}/licenses/LICENSE +0 -0
orchestrator/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-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
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "3.1.2rc3"
16
+ __version__ = "3.1.2rc4"
17
17
 
18
18
  from orchestrator.app import OrchestratorCore
19
19
  from orchestrator.settings import app_settings
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
orchestrator/app.py CHANGED
@@ -5,7 +5,7 @@ This module contains the main `OrchestratorCore` class for the `FastAPI` backend
5
5
  provides the ability to run the CLI.
6
6
  """
7
7
 
8
- # Copyright 2019-2020 SURF, ESnet
8
+ # Copyright 2019-2020 SURF, ESnet, GÉANT.
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
10
10
  # you may not use this file except in compliance with the License.
11
11
  # You may obtain a copy of the License at
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF, ESnet
1
+ # Copyright 2019-2025 SURF, ESnet, 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
@@ -31,16 +31,13 @@ from orchestrator.cli.generator.generator.helpers import (
31
31
  sort_product_blocks_by_dependencies,
32
32
  )
33
33
  from orchestrator.cli.generator.generator.settings import product_generator_settings as settings
34
- from orchestrator.settings import convert_database_uri
35
34
 
36
35
  logger = structlog.getLogger(__name__)
37
36
 
38
37
 
39
38
  def create_migration_file(message: str, head: str) -> Path | None:
40
- if environ.get("DATABASE_URI"):
41
- environ.update({"DATABASE_URI": convert_database_uri(environ["DATABASE_URI"])})
42
- else:
43
- environ.update({"DATABASE_URI": "postgresql+psycopg://nwa:nwa@localhost/orchestrator-core"})
39
+ if not environ.get("DATABASE_URI"):
40
+ environ.update({"DATABASE_URI": "postgresql://nwa:nwa@localhost/orchestrator-core"})
44
41
  if not environ.get("PYTHONPATH"):
45
42
  environ.update({"PYTHONPATH": "."})
46
43
  logger.info(
@@ -1,3 +1,16 @@
1
+ # Copyright 2019-2025 SURF, GÉANT.
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
+
1
14
  import itertools
2
15
  import operator
3
16
  from collections.abc import Iterable
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-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
orchestrator/db/models.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -11,11 +11,10 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
 
14
-
15
- from orchestrator.domain.base import SubscriptionModel
14
+ from orchestrator.domain.base import SubscriptionModel, SubscriptionModelRegistry
16
15
  from orchestrator.utils.docs import make_product_type_index_doc
17
16
 
18
- SUBSCRIPTION_MODEL_REGISTRY: dict[str, type[SubscriptionModel]] = {}
17
+ SUBSCRIPTION_MODEL_REGISTRY: SubscriptionModelRegistry = SubscriptionModelRegistry()
19
18
 
20
19
  __doc__ = make_product_type_index_doc(SUBSCRIPTION_MODEL_REGISTRY)
21
20
 
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF, ESnet.
1
+ # Copyright 2019-2025 SURF, ESnet, 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
@@ -12,14 +12,16 @@
12
12
  # limitations under the License.
13
13
  import itertools
14
14
  from collections import defaultdict
15
- from collections.abc import Callable, Iterable
16
15
  from datetime import datetime
17
- from inspect import get_annotations
16
+ from inspect import get_annotations, isclass
18
17
  from itertools import groupby, zip_longest
19
18
  from operator import attrgetter
20
19
  from typing import (
21
20
  Any,
21
+ Callable,
22
22
  ClassVar,
23
+ Iterable,
24
+ Mapping,
23
25
  Optional,
24
26
  TypeVar,
25
27
  Union,
@@ -596,7 +598,9 @@ class ProductBlockModel(DomainModel):
596
598
  product_blocks_in_model = cls._get_depends_on_product_block_types()
597
599
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
598
600
 
599
- product_blocks_in_model = set(flatten(map(attrgetter("__names__"), product_blocks_types_in_model))) # type: ignore
601
+ product_blocks_in_model = set(
602
+ flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
603
+ ) # type: ignore
600
604
 
601
605
  missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
602
606
  missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
@@ -1051,7 +1055,9 @@ class SubscriptionModel(DomainModel):
1051
1055
  product_blocks_in_model = cls._get_depends_on_product_block_types()
1052
1056
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
1053
1057
 
1054
- product_blocks_in_model = set(flatten(map(attrgetter("__names__"), product_blocks_types_in_model))) # type: ignore
1058
+ product_blocks_in_model = set(
1059
+ flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
1060
+ ) # type: ignore
1055
1061
 
1056
1062
  missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
1057
1063
  missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
@@ -1402,6 +1408,69 @@ class SubscriptionModel(DomainModel):
1402
1408
  return self._db_model
1403
1409
 
1404
1410
 
1411
+ def validate_base_model(
1412
+ name: str, cls: type[Any], base_model: type[BaseModel] = DomainModel, errors: list[str] | None = None
1413
+ ) -> None:
1414
+ """Validates that the given class is not Pydantic BaseModel or its direct subclass."""
1415
+ # Instantiate errors list if not provided and avoid mutating default
1416
+ if errors is None:
1417
+ errors = []
1418
+ # Return early when the node is not a class as there is nothing to be done
1419
+ if not isclass(cls):
1420
+ return
1421
+ # Validate each field in the ProductBlockModel's field dictionaries
1422
+ if issubclass(cls, ProductBlockModel) or issubclass(cls, SubscriptionModel):
1423
+ for name, clz in cls._product_block_fields_.items():
1424
+ validate_base_model(name, clz, ProductBlockModel, errors)
1425
+ for name, clz in cls._non_product_block_fields_.items():
1426
+ validate_base_model(name, clz, SubscriptionModel, errors)
1427
+ # Generate error if node is Pydantic BaseModel or direct subclass
1428
+ if issubclass(cls, BaseModel):
1429
+ err_msg: str = (
1430
+ f"If this field was intended to be a {base_model.__name__}, define {name}:{cls.__name__} with "
1431
+ f"{base_model.__name__} as its superclass instead. e.g., class {cls.__name__}({base_model.__name__}):"
1432
+ )
1433
+ if cls is BaseModel:
1434
+ errors.append(f"Field {name}: {cls.__name__} can not be {BaseModel.__name__}. " + err_msg)
1435
+ if len(cls.__mro__) > 1 and cls.__mro__[1] is BaseModel:
1436
+ errors.append(
1437
+ f"Field {name}: {cls.__name__} can not be a direct subclass of {BaseModel.__name__}. " + err_msg
1438
+ )
1439
+ # Format all errors as one per line and raise a TypeError when they exist
1440
+ if errors:
1441
+ raise TypeError("\n".join(errors))
1442
+
1443
+
1444
+ class SubscriptionModelRegistry(dict[str, type[SubscriptionModel]]):
1445
+ """A registry for all subscription models."""
1446
+
1447
+ def __setitem__(self, __key: str, __value: type[SubscriptionModel]) -> None:
1448
+ """Set value for key in while validating against Pydantic BaseModel."""
1449
+ validate_base_model(__key, __value)
1450
+ super().__setitem__(__key, __value)
1451
+
1452
+ def update(
1453
+ self,
1454
+ m: Any = None,
1455
+ /,
1456
+ **kwargs: type[SubscriptionModel],
1457
+ ) -> None:
1458
+ """Update dictionary with mapping and/or kwargs using `__setitem__`."""
1459
+ if m:
1460
+ if isinstance(m, Mapping):
1461
+ for key, value in m.items():
1462
+ self[key] = value
1463
+ elif isinstance(m, Iterable):
1464
+ for index, item in enumerate(m):
1465
+ try:
1466
+ key, value = item
1467
+ except ValueError:
1468
+ raise TypeError(f"dictionary update sequence element #{index} is not an iterable of length 2")
1469
+ self[key] = value
1470
+ for key, value in kwargs.items():
1471
+ self[key] = value
1472
+
1473
+
1405
1474
  def _validate_lifecycle_change_for_product_block(
1406
1475
  used_by: SubscriptionInstanceTable,
1407
1476
  product_block_model: ProductBlockModel,
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2022-2023 SURF.
1
+ # Copyright 2022-2023 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
@@ -1,4 +1,4 @@
1
- # Copyright 2022-2023 SURF.
1
+ # Copyright 2022-2023 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
@@ -1,3 +1,16 @@
1
+ # Copyright 2022-2023 SURF, GÉANT.
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
+
1
14
  from collections.abc import Generator
2
15
  from itertools import count
3
16
  from typing import TYPE_CHECKING, Annotated, Any
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -880,10 +880,10 @@ def delete_product(conn: sa.engine.Connection, name: str) -> None:
880
880
  RETURNING product_id
881
881
  ),
882
882
  deleted_p_pb AS (
883
- DELETE FROM product_product_blocks WHERE product_id = ANY(SELECT product_id FROM deleted_p)
883
+ DELETE FROM product_product_blocks WHERE product_id IN (SELECT product_id FROM deleted_p)
884
884
  ),
885
885
  deleted_pb_rt AS (
886
- DELETE FROM products_workflows WHERE product_id = ANY(SELECT product_id FROM deleted_p)
886
+ DELETE FROM products_workflows WHERE product_id IN (SELECT product_id FROM deleted_p)
887
887
  )
888
888
  SELECT * from deleted_p;
889
889
  """
@@ -911,10 +911,10 @@ def delete_product_block(conn: sa.engine.Connection, name: str) -> None:
911
911
  RETURNING product_block_id
912
912
  ),
913
913
  deleted_p_pb AS (
914
- DELETE FROM product_product_blocks WHERE product_block_id =ANY(SELECT product_block_id FROM deleted_pb)
914
+ DELETE FROM product_product_blocks WHERE product_block_id IN (SELECT product_block_id FROM deleted_pb)
915
915
  ),
916
916
  deleted_pb_rt AS (
917
- DELETE FROM product_block_resource_types WHERE product_block_id =ANY(SELECT product_block_id FROM deleted_pb)
917
+ DELETE FROM product_block_resource_types WHERE product_block_id IN (SELECT product_block_id FROM deleted_pb)
918
918
  )
919
919
  SELECT * from deleted_pb;
920
920
  """
@@ -968,7 +968,7 @@ def delete_resource_type(conn: sa.engine.Connection, resource_type: str) -> None
968
968
  RETURNING resource_type_id
969
969
  ),
970
970
  deleted_pb_rt AS (
971
- DELETE FROM product_block_resource_types WHERE resource_type_id =ANY(SELECT resource_type_id FROM deleted_pb)
971
+ DELETE FROM product_block_resource_types WHERE resource_type_id IN (SELECT resource_type_id FROM deleted_pb)
972
972
  )
973
973
  SELECT * from deleted_pb;
974
974
  """
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-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
orchestrator/security.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
orchestrator/settings.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -13,7 +13,6 @@
13
13
 
14
14
  import secrets
15
15
  import string
16
- import warnings
17
16
  from pathlib import Path
18
17
  from typing import Literal
19
18
 
@@ -24,10 +23,6 @@ from oauth2_lib.settings import oauth2lib_settings
24
23
  from pydantic_forms.types import strEnum
25
24
 
26
25
 
27
- class OrchestratorDeprecationWarning(DeprecationWarning):
28
- pass
29
-
30
-
31
26
  class ExecutorType(strEnum):
32
27
  WORKER = "celery"
33
28
  THREADPOOL = "threadpool"
@@ -54,7 +49,7 @@ class AppSettings(BaseSettings):
54
49
  EXECUTOR: str = ExecutorType.THREADPOOL
55
50
  WORKFLOWS_SWAGGER_HOST: str = "localhost"
56
51
  WORKFLOWS_GUI_URI: str = "http://localhost:3000"
57
- DATABASE_URI: PostgresDsn = "postgresql+psycopg://nwa:nwa@localhost/orchestrator-core" # type: ignore
52
+ DATABASE_URI: PostgresDsn = "postgresql://nwa:nwa@localhost/orchestrator-core" # type: ignore
58
53
  MAX_WORKERS: int = 5
59
54
  MAIL_SERVER: str = "localhost"
60
55
  MAIL_PORT: int = 25
@@ -93,22 +88,6 @@ class AppSettings(BaseSettings):
93
88
  VALIDATE_OUT_OF_SYNC_SUBSCRIPTIONS: bool = False
94
89
  FILTER_BY_MODE: Literal["partial", "exact"] = "exact"
95
90
 
96
- def __init__(self) -> None:
97
- super(AppSettings, self).__init__()
98
- self.DATABASE_URI = PostgresDsn(convert_database_uri(str(self.DATABASE_URI)))
99
-
100
-
101
- def convert_database_uri(db_uri: str) -> str:
102
- if db_uri.startswith(("postgresql://", "postgresql+psycopg2://")):
103
- db_uri = "postgresql+psycopg" + db_uri[db_uri.find("://") :]
104
- warnings.filterwarnings("always", category=OrchestratorDeprecationWarning)
105
- warnings.warn(
106
- "DATABASE_URI converted to postgresql+psycopg:// format, please update your enviroment variable",
107
- OrchestratorDeprecationWarning,
108
- stacklevel=2,
109
- )
110
- return db_uri
111
-
112
91
 
113
92
  app_settings = AppSettings()
114
93
 
orchestrator/targets.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
orchestrator/types.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF, ESnet
1
+ # Copyright 2019-2020 SURF, ESnet, 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
orchestrator/workflow.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2024 SURF.
1
+ # Copyright 2019-2024 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 3.1.2rc3
3
+ Version: 3.1.2rc4
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Requires-Python: >=3.11,<3.14
6
6
  Classifier: Intended Audience :: Information Technology
@@ -39,7 +39,7 @@ Requires-Dist: more-itertools~=10.6.0
39
39
  Requires-Dist: itsdangerous
40
40
  Requires-Dist: Jinja2==3.1.6
41
41
  Requires-Dist: orjson==3.10.15
42
- Requires-Dist: psycopg[binary]==3.2.6
42
+ Requires-Dist: psycopg2-binary==2.9.10
43
43
  Requires-Dist: pydantic[email]~=2.8.2
44
44
  Requires-Dist: pydantic-settings~=2.8.0
45
45
  Requires-Dist: python-dateutil==2.8.2
@@ -47,7 +47,7 @@ Requires-Dist: python-rapidjson>=1.18,<1.21
47
47
  Requires-Dist: pytz==2025.1
48
48
  Requires-Dist: redis==5.1.1
49
49
  Requires-Dist: schedule==1.1.0
50
- Requires-Dist: sentry-sdk[fastapi]~=2.22.0
50
+ Requires-Dist: sentry-sdk[fastapi]~=2.24.0
51
51
  Requires-Dist: SQLAlchemy==2.0.39
52
52
  Requires-Dist: SQLAlchemy-Utils==0.41.2
53
53
  Requires-Dist: structlog
@@ -1,39 +1,39 @@
1
- orchestrator/__init__.py,sha256=SRujUPF8rKeTg1Ixeu8yyiXCPAlFG-1XYRWLEWtP0SQ,1058
2
- orchestrator/app.py,sha256=8GMzoHjdR0bkgRBCejiG8nIUjeo43f12I3WNNZ89pKE,11659
1
+ orchestrator/__init__.py,sha256=NteTfyhIqQKobRN4YysOJsOk9XCF6I55xT3JTTyztks,1066
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
5
5
  orchestrator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- orchestrator/security.py,sha256=_W_wFkjmlwVwwHRsql69iMoqRvDCiaA63i5rvRHSrZ0,2414
7
- orchestrator/settings.py,sha256=lrNKPtJMxZtbEZcUZ1MDGEpIDCJv_swWVoVJvwcooCY,4614
8
- orchestrator/targets.py,sha256=q_IMCdVUUYWcyKHqyls38fJPveJDBNfSzMKj_U2hLsk,768
9
- orchestrator/types.py,sha256=4vDeL5teRnugXoet3O2dMv8WwTsEyimrIfzagx9jQRo,15451
6
+ orchestrator/security.py,sha256=iXFxGxab54aav7oHEKLAVkTgrQMJGHy6IYLojEnD7gI,2422
7
+ orchestrator/settings.py,sha256=0vTcgLs007LoyOfRPCIR7lwh-urON3bxj4AtXBkro_8,3864
8
+ orchestrator/targets.py,sha256=ykjTGK7CozFaltNaxQcK90P4Cc1Qvf-W8dFztxtZhRQ,776
9
+ orchestrator/types.py,sha256=qzs7xx5AYRmKbpYRyJJP3wuDb0W0bcAzefCN0RWLAco,15459
10
10
  orchestrator/version.py,sha256=b58e08lxs47wUNXv0jXFO_ykpksmytuzEXD4La4W-NQ,1366
11
- orchestrator/workflow.py,sha256=eQEmi7IwnipDuwCmv1ipYWJbmOuxSG0_nH0-DMfUJog,43117
11
+ orchestrator/workflow.py,sha256=PCeJyCdcze2hWyEZQKLi0-1AadLXHr8CtMXJBZLGD3M,43125
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
15
15
  orchestrator/api/models.py,sha256=z9BDBx7uI4KBHWbD_LVrLsqNQ0_w-Mg9Qiy7PR_rZhk,5996
16
16
  orchestrator/api/api_v1/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
17
- orchestrator/api/api_v1/api.py,sha256=Q_Yh9w_SBoyx06jV_kf6leGFrAMXoGjF8UikIAie_us,2858
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=l85OZ-gs6YeVjFVsGhq6z_Hwkl-oY5YUagXlgzyivx8,13481
20
+ orchestrator/api/api_v1/endpoints/processes.py,sha256=OHKY4phU5ica0PhewTS3kvCtybYfFsvQ6Vhgl0_qX2I,13489
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=OVz0VXPAPX2BMiIjixmvPwXowRxbHb9wZ3OrbguIqPc,6218
24
+ orchestrator/api/api_v1/endpoints/settings.py,sha256=QPBwrRGqBlYHNRnADKQ5hpj74X2DB5lROu8KwVnyN_0,6226
25
25
  orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py,sha256=Elu4DVJoNtUFq_b3pG1Ws8StrUIo_jTViff2TJqe6ZU,3398
26
- orchestrator/api/api_v1/endpoints/subscriptions.py,sha256=s0nzWY1n8J1Ep-f6LuhRj_LX3shfCq7PsMmHf0_Rzsw,8716
26
+ orchestrator/api/api_v1/endpoints/subscriptions.py,sha256=EwkWBztI9xSMPkol49SM5csECthyu7HC38AhuW7pWUE,8724
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
30
30
  orchestrator/api/api_v1/endpoints/ws.py,sha256=1l7E0ag_sZ6UMfQPHlmew7ENwxjm6fflBwcMZAb7V-k,2786
31
31
  orchestrator/cli/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
32
- orchestrator/cli/database.py,sha256=6Q9TZHAHaBEgP4mQArVsXKcQ1V7D2KM3ClMZ4PgSzA0,19274
32
+ orchestrator/cli/database.py,sha256=qig-WqUtiDITz4KePxzcqZtC0FPTWRs_3l19qQpqIGA,19283
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=PoNMRQadY3_VtDfR3OKjbjf01Tu-Q2VJd8YAVB_zrUc,6669
36
+ orchestrator/cli/migrate_tasks.py,sha256=Fmcwuv8rI1Z_qEiL_kmOWCUq7rNIgnlntUc37phadN8,7249
37
37
  orchestrator/cli/migrate_workflows.py,sha256=-_nsKUcVa14-Ug3aSppU9yk-oWlK411SX33WqzD1p4M,8979
38
38
  orchestrator/cli/migration_helpers.py,sha256=C5tpkP5WEBr7G9S-1k1hgSI8ili6xd9Z5ygc9notaK0,4110
39
39
  orchestrator/cli/scheduler.py,sha256=iCKBWYUwQIYTDqKQ9rMVvs2sNiAzE-J2SkV170TPP2g,1896
@@ -58,7 +58,7 @@ orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2,sha256
58
58
  orchestrator/cli/generator/generator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  orchestrator/cli/generator/generator/enums.py,sha256=ztGxHzpq7l4HDSZswH8UDJlf2374tj_-Rzf8t-sub1s,2007
60
60
  orchestrator/cli/generator/generator/helpers.py,sha256=IoHXacEebef7MhUseTVkj05fRryyGMDH94Ai0nGq-nw,9838
61
- orchestrator/cli/generator/generator/migration.py,sha256=zWSZk42AayXj65mPIYKczRKVlPSXTsTM-pBf7lis2F8,7202
61
+ orchestrator/cli/generator/generator/migration.py,sha256=lDqosegGRKJRs1dN4QZV7lFwdWBKTEwe9DeNqP8OVkY,7045
62
62
  orchestrator/cli/generator/generator/product.py,sha256=W930c-9C8k0kW7I8_SC4mWf045neYcfFpkck5SwHeNQ,2079
63
63
  orchestrator/cli/generator/generator/product_block.py,sha256=h552YZTuehtaux6PKw5GKWAmBQ6cStOSY4TbaJ1Kcq8,4802
64
64
  orchestrator/cli/generator/generator/settings.py,sha256=_IhRnQ7bpGjqYtFo-OiLky25IKCibdghC6pkHmPIPoI,1379
@@ -100,13 +100,13 @@ orchestrator/cli/helpers/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97
100
100
  orchestrator/cli/helpers/input_helpers.py,sha256=pv5GTMuIWLzBE_bKNhn1XD_gxoqB0s1ZN4cnKkIIu5I,1139
101
101
  orchestrator/cli/helpers/print_helpers.py,sha256=b3ePg6HfBLKPYBBVr5XOA__JnFEMI5HBjbjov3CP8Po,859
102
102
  orchestrator/config/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
103
- orchestrator/config/assignee.py,sha256=jxMIY6iCLjlbfxwhp-UhImunpE32C9sAR7FSpMD-LvU,772
103
+ orchestrator/config/assignee.py,sha256=9mFFe9hoi2NCkXFOKL2pU2aveBzcZhljSvqUnh55vrk,780
104
104
  orchestrator/db/__init__.py,sha256=6yC3HSSIgHgfLvGpYE-j8ENr8A2urJxjxUEiZ0C7JJY,3454
105
105
  orchestrator/db/database.py,sha256=MU_w_e95ho2dVb2JDnt_KFYholx___XDkiQXbc8wCkI,10269
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=escBOUNf5bHmjIuNH37fGgNSeZLzMiJvQgQFy4r4MYY,6244
109
- orchestrator/db/models.py,sha256=x0x4CT9LFm5XrqmY3LO9JWL7p_C7YSpbow4IRB_QLOg,26862
109
+ orchestrator/db/models.py,sha256=cMoPkAhr3Hg7VsXgO0LFiIUAudL2KEv21qjcHu940nA,26870
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
@@ -128,7 +128,7 @@ orchestrator/db/sorting/sorting.py,sha256=WpwImCDRKiOp4Tr54vovWpHkoJIov8SNQNPods
128
128
  orchestrator/db/sorting/subscription.py,sha256=uepBMyfRFLZz5yoYK4VK3mdRBvO1Gc-6jSQXQ41fR-8,1441
129
129
  orchestrator/db/sorting/workflow.py,sha256=6-JceMyB99M994Re58E0MX5uhlpnTW5OJCxmXopEfRU,576
130
130
  orchestrator/devtools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
- orchestrator/devtools/populator.py,sha256=MeO7qv7YskY5i5p1Ko9yluplY520GFq0HjFlz-WXMio,19680
131
+ orchestrator/devtools/populator.py,sha256=-8i3KDDP1cRgwiDKuYmomwrSlbmcMhpAaEaDvhyIbk4,19688
132
132
  orchestrator/devtools/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
133
  orchestrator/devtools/scripts/migrate_20.py,sha256=8-qLiWfjYctu2kNl5MHtZvfeCdUs0YzRjepy4VYOUkc,4891
134
134
  orchestrator/devtools/scripts/migrate_30.py,sha256=pRnJQFvmliwTLgbbDSUGyS9sCWqQcTms-g_3yfUO5vQ,3030
@@ -138,11 +138,11 @@ orchestrator/distlock/distlock_manager.py,sha256=VVfBpOnk574JncfHwS6sPavKwPxCgAn
138
138
  orchestrator/distlock/managers/__init__.py,sha256=ImIkNsrXcyE7-NgRWqEhUXUuUzda9KwcDkhebipfSdI,571
139
139
  orchestrator/distlock/managers/memory_distlock_manager.py,sha256=HWQafcVKBF-Cka_wukZZ1GM69AWPVOpJPje3quIebQ8,3114
140
140
  orchestrator/distlock/managers/redis_distlock_manager.py,sha256=DXtMhC8qtxiFO6xU9qYXHZQnCLjlmGBpeyfLA0vbRP0,3369
141
- orchestrator/domain/__init__.py,sha256=Rnt9XXHasAgieQiLT0JhUFRrysa9EIubvzcd5kk3Gvc,894
142
- orchestrator/domain/base.py,sha256=cMBJps91vtJJPXQUk0Ejps-K6DaEdkK6GTGdvtPpDnA,61953
141
+ orchestrator/domain/__init__.py,sha256=20DhXQPKY0g3rTgCkRlNDY58sLviToOVF8NPoex9WJc,936
142
+ orchestrator/domain/base.py,sha256=HfSd6XPvAwHKt7ONWCaE2Zzqhb0gOLqigXxi1QuvlDE,64883
143
143
  orchestrator/domain/customer_description.py,sha256=v7o6TTN4oc6bWHZU-jCT-fUYvkeYahbpXOwlKXofuI8,3360
144
144
  orchestrator/domain/helpers.py,sha256=2j2j_7J8qvniHxxpdoEQsoVpC-llkn0tbww2eCA0K1A,989
145
- orchestrator/domain/lifecycle.py,sha256=VeQwik9nNX-6bQl12G9VP4JPq6ephDV73XDXu1pfh5g,2914
145
+ orchestrator/domain/lifecycle.py,sha256=kGR0AFVOSUBlzdhgRr11CUnF26wbBYIjz8uKb_qPCg0,2922
146
146
  orchestrator/forms/__init__.py,sha256=bw_1238HKy_T0gvfA5oEjJFwkALzvWU4O_VJ0xE8UyU,1168
147
147
  orchestrator/forms/validators/__init__.py,sha256=2T7w429dQhChsAbnQDeyp2BrM_iKj6-nkNrz27RZatY,1906
148
148
  orchestrator/forms/validators/customer_contact_list.py,sha256=61A7FpXBjWhurIAGzJcLVlZSWajm41QWgFZP-rUT_5o,1508
@@ -153,8 +153,8 @@ orchestrator/forms/validators/product_id.py,sha256=u5mURLT0pOhbFLdwvYcy2_2fXMt35
153
153
  orchestrator/graphql/__init__.py,sha256=avq8Yg3Jr_9pJqh7ClyIAOX7YSg1eM_AWmt5C3FRYUY,1440
154
154
  orchestrator/graphql/autoregistration.py,sha256=pF2jbMKG26MvYoMSa6ZpqpHjVks7_NvSRFymHTgmfjs,6342
155
155
  orchestrator/graphql/pagination.py,sha256=iqVDn3GPZpiQhEydfwkBJLURY-X8wwUphS8Lkeg0BOc,2413
156
- orchestrator/graphql/schema.py,sha256=JNAd_MNyFkKzFIutaA6bwtgUsahGDt9RhWZIpFAtVAg,9090
157
- orchestrator/graphql/types.py,sha256=0aaRM1cUaWUC2SaWRtgLmSe2_2C0KuwA4LMCav4SdPg,5037
156
+ orchestrator/graphql/schema.py,sha256=uAD7cPqjxhHGDTilTLqmovtQsm7nnv-9adLk7YHPt4I,9098
157
+ orchestrator/graphql/types.py,sha256=tF3B2n_4AmNIpNuA4Xg-kB-q9Xy7HU8opfDDPSX26nw,5045
158
158
  orchestrator/graphql/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
159
  orchestrator/graphql/extensions/stats.py,sha256=pGhEBQg45XvqZhRobcrCSGwt5AGmR3gflsm1dYiIg5g,2018
160
160
  orchestrator/graphql/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -192,14 +192,14 @@ orchestrator/graphql/utils/create_resolver_error_handler.py,sha256=PpQMVwGrE9t0n
192
192
  orchestrator/graphql/utils/get_query_loaders.py,sha256=NJCxa2vvl66bC-4ts099DPX9vwFkU6cerqICLmZntL0,2258
193
193
  orchestrator/graphql/utils/get_selected_fields.py,sha256=0hBcQkU-7TNVO_KG-MmLItKm0O3gmbqoxXNkLHO-wHo,1002
194
194
  orchestrator/graphql/utils/get_selected_paths.py,sha256=H0btESeOr3_VB7zy5Cx25OS0uzBcg2Y1I-arAmSOnsQ,1382
195
- orchestrator/graphql/utils/get_subscription_product_blocks.py,sha256=bAoNa9F9l_AT5u96-fFQ2qcZ4uSz5pgqUzZ7QlEsTiU,4194
195
+ orchestrator/graphql/utils/get_subscription_product_blocks.py,sha256=nv-PQobDeGw4EcSiiIwGKJotiSEvWECRqpJ25x0qS_k,4774
196
196
  orchestrator/graphql/utils/is_query_detailed.py,sha256=ESQiM8OyhGF5vEE__cLV61oEIfnFvznoNCxi02rMTsE,2156
197
197
  orchestrator/graphql/utils/override_class.py,sha256=blwPXVHxLyXQga3KjiDzWozmMhHEWNrhLL_GDmoj6y0,1373
198
198
  orchestrator/graphql/utils/to_graphql_result_page.py,sha256=8ObkJP8reVf-TQOQVPKv1mNdfmSEMS1sG7s_-T7-pUU,902
199
199
  orchestrator/migrations/README,sha256=heMzebYwlGhnE8_4CWJ4LS74WoEZjBy-S-mIJRxAEKI,39
200
200
  orchestrator/migrations/alembic.ini,sha256=kMoADqhGeubU8xanILNaqm4oixLy9m4ngYtdGpZcc7I,873
201
- orchestrator/migrations/env.py,sha256=0NrhF3vVeKMtU1kGNrc-nSfk8EnK4KbcDdUeGvWGCBM,3732
202
- orchestrator/migrations/helpers.py,sha256=U-b64Gp6VBq5sTDN0fqrG8mbXcpncCFVgYObW9y7ffs,43778
201
+ orchestrator/migrations/env.py,sha256=M_cPoAL2axuuup5fvMy8I_WTPHEw0RbPEHkhZ3QEGoE,3740
202
+ orchestrator/migrations/helpers.py,sha256=7r286N3MFHJhSc-59okj_UO2VoU8L_4QBWfvABMzZAw,43779
203
203
  orchestrator/migrations/script.py.mako,sha256=607Zrgp-Z-m9WGLt4wewN1QDOmHeifxcePUdADkSZyM,510
204
204
  orchestrator/migrations/templates/alembic.ini.j2,sha256=jA-QykVparwWSNt5XDP0Zk7epLOhK7D87Af-i2shJV4,905
205
205
  orchestrator/migrations/templates/env.py.j2,sha256=RfLAQItZ56Jlzwi6LJfBo92m1-th_bdfkFKD1mwTZIE,2821
@@ -233,28 +233,28 @@ orchestrator/schedules/validate_products.py,sha256=YMr7ASSqdXM6pd6oZu0kr8mfmH8If
233
233
  orchestrator/schedules/validate_subscriptions.py,sha256=YYcU2iGf8Ga_s577kgpKdhQV4p7wCEHGYvUf8FCvBvQ,2022
234
234
  orchestrator/schemas/__init__.py,sha256=YDyZ0YBvzB4ML9oDBCBPGnBvf680zFFgUzg7X0tYBRY,2326
235
235
  orchestrator/schemas/base.py,sha256=Vc444LetsINLRhG2SxW9Bq01hOzChPOhQWCImQTr-As,930
236
- orchestrator/schemas/engine_settings.py,sha256=8cgJHPigu2TjYG-t3uRrBLFjcVJGKVPpAnIKFs29mL4,1288
236
+ orchestrator/schemas/engine_settings.py,sha256=LF8al7tJssiilb5A4emPtUYo0tVDSaT1Lvo_DN_ttrY,1296
237
237
  orchestrator/schemas/fixed_input.py,sha256=Rth3hT5K7zYuQr1bUY_NJRzb03xEZuT1p6EvYXVNE54,1214
238
238
  orchestrator/schemas/problem_detail.py,sha256=DxiUhWv6EVXLZgdKFv0EYVnCgtkDj7xteDCR0q2f5yw,802
239
239
  orchestrator/schemas/process.py,sha256=NgS1eBRtO2GUCRNsvbvYyjNkR2aBdH-kwcsR_y8DfNU,2354
240
240
  orchestrator/schemas/product.py,sha256=MhMCh058ZuS2RJq-wSmxIPUNlhQexxXIx3DSz2OmOh4,1570
241
241
  orchestrator/schemas/product_block.py,sha256=kCqvm6qadHpegMr9aWI_fYX-T7mS-5S-ldPxnGQZg7M,1519
242
242
  orchestrator/schemas/resource_type.py,sha256=VDju4XywcDDLxdpbWU62RTvR9QF8x_GRrpTlN_NE8uI,1064
243
- orchestrator/schemas/subscription.py,sha256=1SKrhw25-HtTp39lM05R9gynr9GprMxQol4GjnXPEwM,3415
243
+ orchestrator/schemas/subscription.py,sha256=-jXyHZIed9Xlia18ksSDyenblNN6Q2yM2FlGELyJ458,3423
244
244
  orchestrator/schemas/subscription_descriptions.py,sha256=Ft_jw1U0bf9Z0U8O4OWfLlcl0mXCVT_qYVagBP3GbIQ,1262
245
245
  orchestrator/schemas/workflow.py,sha256=w-CaRPp9AAddhnd8o_0jPaey1Vnnh-s-A5s5kWlR2pI,1977
246
246
  orchestrator/services/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
247
- orchestrator/services/celery.py,sha256=DHruqocnORNZUca9WDIti9GXYk9Q38BFyeJy7-N7l3c,4760
247
+ orchestrator/services/celery.py,sha256=W37UNc4hbUS2SKjVmawsnF5wukmEfIdipsTESv_EOTw,4768
248
248
  orchestrator/services/fixed_inputs.py,sha256=kyz7s2HLzyDulvcq-ZqefTw1om86COvyvTjz0_5CmgI,876
249
249
  orchestrator/services/input_state.py,sha256=HF7wl9fWdaAW8pdCCqbuYoKyNj8dY0g8Ff8vXis8z5A,2211
250
250
  orchestrator/services/process_broadcast_thread.py,sha256=D44YbjF8mRqGuznkRUV4SoRn1J0lfy_x1H508GnSVlU,4649
251
- orchestrator/services/processes.py,sha256=NuxNHaaXc2IlLhMp0rf9-EPgsDjybDCfglQd9wBhOP0,29405
252
- orchestrator/services/products.py,sha256=w6b6sSA3MstmbM_YN8xWEvkb_YnuCQFph48wYU3_Lx4,1935
251
+ orchestrator/services/processes.py,sha256=eccgO84o-FVRgmL4QaJhQByjoxUhni-VOMo1UQRBYic,29413
252
+ orchestrator/services/products.py,sha256=BP4KyE8zO-8z7Trrs5T6zKBOw53S9BfBJnHWI3p6u5Y,1943
253
253
  orchestrator/services/resource_types.py,sha256=_QBy_JOW_X3aSTqH0CuLrq4zBJL0p7Q-UDJUcuK2_qc,884
254
254
  orchestrator/services/settings.py,sha256=u-834F4KWloXS8zi7R9mp-D3cjl-rbVjKJRU35IqhXo,2723
255
255
  orchestrator/services/subscription_relations.py,sha256=9C126TUfFvyBe7y4x007kH_dvxJ9pZ1zSnaWeH6HC5k,12261
256
- orchestrator/services/subscriptions.py,sha256=yEeZbgXqrfAgo-l0Tz_NtNJHG5-CkXa8-l76gZ_aw6A,26209
257
- orchestrator/services/tasks.py,sha256=LYThlemDTI5fK-whc7qciJuukTGyprDR-UbQHweKsX8,6567
256
+ orchestrator/services/subscriptions.py,sha256=65_SLjr_TRyCynWO2Db3Xb_ufbgT-s_UDphl7ICuwSM,26217
257
+ orchestrator/services/tasks.py,sha256=NjPkuauQoh9UJDcjA7OcKFgPk0i6NoKdDO7HlpGbBJ8,6575
258
258
  orchestrator/services/translations.py,sha256=GyP8soUFGej8AS8uulBsk10CCK6Kwfjv9AHMFm3ElQY,1713
259
259
  orchestrator/services/workflows.py,sha256=oH7klit4kv2NGo-BACWA0ZtajVMSJAxG5m-kM6TXIMI,3742
260
260
  orchestrator/utils/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
@@ -263,7 +263,7 @@ orchestrator/utils/datetime.py,sha256=a1WQ_yvu7MA0TiaRpC5avwbOSFdrj4eMrV4a7I2sD5
263
263
  orchestrator/utils/deprecation_logger.py,sha256=oqju7ecJcB_r7cMnldaOAA79QUZYS_h69IkDrFV9nAg,875
264
264
  orchestrator/utils/docs.py,sha256=GbyD61oKn1yVYaphUKHCBvrWEWJDTQfRc_VEbVb-zgU,6172
265
265
  orchestrator/utils/enrich_process.py,sha256=o_QSy5Q4wn1SMHhzVOw6bp7uhDXr7GhAIWRDDMWUVO4,4699
266
- orchestrator/utils/errors.py,sha256=4dJ3BvAEunG5w-VUtc8346zzOTUv_102qeH2YFdJhPs,4645
266
+ orchestrator/utils/errors.py,sha256=6FxvXrITmRjP5bYnJJ3CxjAwA5meNjRAVYouz4TWKkU,4653
267
267
  orchestrator/utils/fixed_inputs.py,sha256=pnL6I_19VMp_Bny8SYjSzVFNvTFDyeCxFFOWGhTnDiQ,2665
268
268
  orchestrator/utils/functional.py,sha256=w_iqB8zppLMnUaioyRjsZAAYC4y5kLw3zih5NKkEFoM,8063
269
269
  orchestrator/utils/get_subscription_dict.py,sha256=fkgDM54hn5YGUP9_2MOcJApJK1Z6c_Rl6sJERsrOy6M,686
@@ -273,25 +273,25 @@ orchestrator/utils/json.py,sha256=7386sdqkrKYyy4sbn5NscwctH_v1hLyw5172P__rU3g,83
273
273
  orchestrator/utils/redis.py,sha256=E2vrMO3uQHb4nJENgA3WnpB0iw2C615YMuaWT-4gqoI,7027
274
274
  orchestrator/utils/redis_client.py,sha256=9rhsvedjK_CyClAjUicQyge0mVIViATqKFGZyjBY3XA,1384
275
275
  orchestrator/utils/search_query.py,sha256=ji5LHtrzohGz6b1IG41cnPdpWXzLEzz4SGWgHly_yfU,16205
276
- orchestrator/utils/state.py,sha256=eEmYCo9gczy0R6pIIahNyEjOnNJWI0oC5aI-1gqy5Ns,14012
276
+ orchestrator/utils/state.py,sha256=RYKVlvKDBfsBdDk9wHjZKBTlQJbV4SqtCotAlTA2-bI,14021
277
277
  orchestrator/utils/strings.py,sha256=N0gWjmQaMjE9_99VtRvRaU8IBLTKMgBKSXcTZ9TpWAg,1077
278
278
  orchestrator/utils/validate_data_version.py,sha256=3Eioy2wE2EWKSgkyMKcEKrkCAfUIAq-eb73iRcpgppw,184
279
279
  orchestrator/websocket/__init__.py,sha256=V79jskk1z3uPIYgu0Gt6JLzuqr7NGfNeAZ-hbBqoUv4,5745
280
- orchestrator/websocket/websocket_manager.py,sha256=Vw5GW67rP_RYoPUhfPp9Fi8_M9E9SoHOHmCQVibkSWc,2755
280
+ orchestrator/websocket/websocket_manager.py,sha256=hwlG9FDXcNU42jDNNsPMQLIyrvEpGX5cm_vrONsLH8s,2763
281
281
  orchestrator/websocket/managers/broadcast_websocket_manager.py,sha256=fwoSgTjkHJ2GmsLTU9dqQpAA9i8b1McPu7gLNzxtfG4,5401
282
282
  orchestrator/websocket/managers/memory_websocket_manager.py,sha256=lF5EEx1iFMCGEkTbItTDr88NENMSaSeG1QrJ7teoPkY,3324
283
283
  orchestrator/workflows/__init__.py,sha256=NzIGGI-8SNAwCk2YqH6sHhEWbgAY457ntDwjO15N8v4,4131
284
- orchestrator/workflows/modify_note.py,sha256=FcyxUajzGeBX0O1XjXDgqNLpBHqU6Uk3iA1Vzq6gMHc,2408
284
+ orchestrator/workflows/modify_note.py,sha256=X70qQtC0ITp5IE5OR8j5Op57k3ol1S9txnhDbZTICao,2416
285
285
  orchestrator/workflows/removed_workflow.py,sha256=V0Da5TEdfLdZZKD38ig-MTp3_IuE7VGqzHHzvPYQmLI,909
286
- orchestrator/workflows/steps.py,sha256=8va4iHbU35bUB-RVatI8dMs8LzB0Y29s9ZdmDFTv7VE,9794
287
- orchestrator/workflows/utils.py,sha256=9KfhnDL88csT4fvFfUVDv8o9mHBtNUQuG3LBDms8ApQ,13525
286
+ orchestrator/workflows/steps.py,sha256=yAb6XZaRhR2mKV4_yo-4hSYMTknbMD27-pNGMfjVzi0,9802
287
+ orchestrator/workflows/utils.py,sha256=pnpswomdpBKQz9KiklXRbgeG2HBHo-m6ZuPMkaeTriM,13533
288
288
  orchestrator/workflows/tasks/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
289
- orchestrator/workflows/tasks/cleanup_tasks_log.py,sha256=A3R_EQHJ75EYvzRK8ZdDcFNC9KjsSOQXLugmaNVOcWA,1616
290
- orchestrator/workflows/tasks/resume_workflows.py,sha256=R0I3jxGToiqDr5mF3YjDd6dNQjQrSYb7-X7GCn7E9uc,2351
291
- orchestrator/workflows/tasks/validate_product_type.py,sha256=5FwhRQyMNgtys5DM846EIIY0uXKvnSYy3Orf7lOg0DA,3176
292
- orchestrator/workflows/tasks/validate_products.py,sha256=5uXX7MXMDDP13cXRvfLDNvvCp4nG7zLQBm_IYdf8BSs,8513
289
+ orchestrator/workflows/tasks/cleanup_tasks_log.py,sha256=BfWYbPXhnLAHUJ0mlODDnjZnQQAvKCZJDVTwbwOWI04,1624
290
+ orchestrator/workflows/tasks/resume_workflows.py,sha256=MzJqlSXUvKStkT7NGzxZyRlfAer_ezYm-kjUqaZi0yc,2359
291
+ orchestrator/workflows/tasks/validate_product_type.py,sha256=UVX_6Kh8ueQs8ujLawnKVDdNc8UhWp_u69aNA8okR_w,3184
292
+ orchestrator/workflows/tasks/validate_products.py,sha256=i6jQME9N8sZZWo4pkNOS1Zgwh3eB2w66DnJi9k93yNk,8521
293
293
  orchestrator/workflows/translations/en-GB.json,sha256=ST53HxkphFLTMjFHonykDBOZ7-P_KxksktZU3GbxLt0,846
294
- orchestrator_core-3.1.2rc3.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
295
- orchestrator_core-3.1.2rc3.dist-info/WHEEL,sha256=_2ozNFCLWc93bK4WKHCO-eDUENDlo-dgc9cU3qokYO4,82
296
- orchestrator_core-3.1.2rc3.dist-info/METADATA,sha256=jh6W7fea4ZKjoqBM-q5LM_zvE5F1mgHEwV2_O2qO-mk,4993
297
- orchestrator_core-3.1.2rc3.dist-info/RECORD,,
294
+ orchestrator_core-3.1.2rc4.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
295
+ orchestrator_core-3.1.2rc4.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
296
+ orchestrator_core-3.1.2rc4.dist-info/METADATA,sha256=nkpFSS7JcEKQbHpjU4r0MTn2_1pwtwsG5KBZFG_HgEM,4994
297
+ orchestrator_core-3.1.2rc4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 3.11.0
2
+ Generator: flit 3.12.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any