infrahub-server 1.1.6__py3-none-any.whl → 1.2.0rc0__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.
- infrahub/api/artifact.py +16 -4
- infrahub/api/dependencies.py +8 -0
- infrahub/api/oauth2.py +0 -1
- infrahub/api/oidc.py +0 -1
- infrahub/api/query.py +18 -7
- infrahub/api/schema.py +32 -6
- infrahub/api/transformation.py +12 -5
- infrahub/{message_bus/messages/check_artifact_create.py → artifacts/models.py} +2 -4
- infrahub/{message_bus/operations/check/artifact.py → artifacts/tasks.py} +26 -25
- infrahub/cli/__init__.py +0 -2
- infrahub/cli/db.py +6 -7
- infrahub/cli/events.py +8 -3
- infrahub/cli/git_agent.py +9 -7
- infrahub/cli/tasks.py +4 -6
- infrahub/computed_attribute/tasks.py +63 -17
- infrahub/computed_attribute/triggers.py +90 -0
- infrahub/config.py +1 -1
- infrahub/context.py +39 -0
- infrahub/core/account.py +5 -8
- infrahub/core/attribute.py +53 -21
- infrahub/core/branch/models.py +4 -4
- infrahub/core/branch/tasks.py +89 -130
- infrahub/core/changelog/__init__.py +0 -0
- infrahub/core/changelog/diff.py +232 -0
- infrahub/core/changelog/models.py +488 -0
- infrahub/core/constants/__init__.py +19 -2
- infrahub/core/constants/infrahubkind.py +1 -0
- infrahub/core/diff/combiner.py +12 -8
- infrahub/core/diff/coordinator.py +49 -70
- infrahub/core/diff/data_check_synchronizer.py +86 -7
- infrahub/core/diff/enricher/aggregated.py +3 -3
- infrahub/core/diff/enricher/cardinality_one.py +2 -7
- infrahub/core/diff/enricher/hierarchy.py +5 -3
- infrahub/core/diff/enricher/labels.py +14 -4
- infrahub/core/diff/enricher/path_identifier.py +3 -9
- infrahub/core/diff/enricher/summary_counts.py +3 -1
- infrahub/core/diff/merger/merger.py +8 -4
- infrahub/core/diff/model/path.py +47 -29
- infrahub/core/diff/query/all_conflicts.py +6 -3
- infrahub/core/diff/query/artifact.py +1 -1
- infrahub/core/diff/query/delete_query.py +1 -1
- infrahub/core/diff/query/diff_get.py +3 -2
- infrahub/core/diff/query/diff_summary.py +1 -1
- infrahub/core/diff/query/field_specifiers.py +3 -1
- infrahub/core/diff/query/field_summary.py +3 -2
- infrahub/core/diff/query/filters.py +12 -1
- infrahub/core/diff/query/get_conflict_query.py +1 -1
- infrahub/core/diff/query/has_conflicts_query.py +6 -3
- infrahub/core/diff/query/merge.py +3 -3
- infrahub/core/diff/query/{drop_tracking_id.py → merge_tracking_id.py} +4 -4
- infrahub/core/diff/query/roots_metadata.py +9 -2
- infrahub/core/diff/query/save.py +151 -66
- infrahub/core/diff/query/summary_counts_enricher.py +220 -0
- infrahub/core/diff/query/time_range_query.py +3 -2
- infrahub/core/diff/query/update_conflict_query.py +1 -1
- infrahub/core/diff/query_parser.py +49 -24
- infrahub/core/diff/repository/deserializer.py +24 -25
- infrahub/core/diff/repository/repository.py +76 -20
- infrahub/core/diff/tasks.py +9 -8
- infrahub/core/enums.py +1 -1
- infrahub/core/integrity/object_conflict/conflict_recorder.py +1 -1
- infrahub/core/ipam/reconciler.py +1 -1
- infrahub/core/ipam/tasks.py +2 -3
- infrahub/core/manager.py +18 -13
- infrahub/core/merge.py +5 -2
- infrahub/core/migrations/graph/m001_add_version_to_graph.py +1 -1
- infrahub/core/migrations/graph/m002_attribute_is_default.py +2 -2
- infrahub/core/migrations/graph/m003_relationship_parent_optional.py +2 -2
- infrahub/core/migrations/graph/m004_add_attr_documentation.py +1 -1
- infrahub/core/migrations/graph/m005_add_rel_read_only.py +1 -1
- infrahub/core/migrations/graph/m006_add_rel_on_delete.py +1 -1
- infrahub/core/migrations/graph/m007_add_rel_allow_override.py +1 -1
- infrahub/core/migrations/graph/m008_add_human_friendly_id.py +1 -1
- infrahub/core/migrations/graph/m009_add_generate_profile_attr.py +1 -1
- infrahub/core/migrations/graph/m010_add_generate_profile_attr_generic.py +1 -1
- infrahub/core/migrations/graph/m011_remove_profile_relationship_schema.py +2 -2
- infrahub/core/migrations/graph/m012_convert_account_generic.py +12 -23
- infrahub/core/migrations/graph/m013_convert_git_password_credential.py +7 -11
- infrahub/core/migrations/graph/m014_remove_index_attr_value.py +2 -2
- infrahub/core/migrations/graph/m015_diff_format_update.py +1 -1
- infrahub/core/migrations/graph/m016_diff_delete_bug_fix.py +1 -1
- infrahub/core/migrations/graph/m017_add_core_profile.py +1 -1
- infrahub/core/migrations/graph/m018_uniqueness_nulls.py +2 -2
- infrahub/core/migrations/query/attribute_add.py +1 -1
- infrahub/core/migrations/query/attribute_rename.py +1 -1
- infrahub/core/migrations/query/delete_element_in_schema.py +1 -1
- infrahub/core/migrations/query/node_duplicate.py +1 -1
- infrahub/core/migrations/query/relationship_duplicate.py +1 -1
- infrahub/core/migrations/query/schema_attribute_update.py +1 -1
- infrahub/core/migrations/schema/node_attribute_remove.py +1 -1
- infrahub/core/migrations/schema/node_remove.py +1 -1
- infrahub/core/migrations/schema/tasks.py +5 -5
- infrahub/core/migrations/shared.py +4 -4
- infrahub/core/models.py +7 -8
- infrahub/core/node/__init__.py +161 -40
- infrahub/core/node/base.py +1 -1
- infrahub/core/node/constraints/grouped_uniqueness.py +9 -2
- infrahub/core/node/delete_validator.py +4 -4
- infrahub/core/node/ipam.py +13 -8
- infrahub/core/node/permissions.py +4 -0
- infrahub/core/node/resource_manager/ip_prefix_pool.py +8 -5
- infrahub/core/node/standard.py +3 -5
- infrahub/core/property.py +1 -1
- infrahub/core/protocols.py +4 -0
- infrahub/core/protocols_base.py +4 -2
- infrahub/core/query/__init__.py +2 -5
- infrahub/core/query/attribute.py +9 -9
- infrahub/core/query/branch.py +5 -5
- infrahub/core/query/delete.py +1 -1
- infrahub/core/query/diff.py +45 -7
- infrahub/core/query/ipam.py +4 -4
- infrahub/core/query/node.py +19 -14
- infrahub/core/query/relationship.py +10 -11
- infrahub/core/query/resource_manager.py +13 -11
- infrahub/core/query/standard_node.py +6 -6
- infrahub/core/query/task.py +3 -3
- infrahub/core/query/task_log.py +1 -1
- infrahub/core/query/utils.py +5 -5
- infrahub/core/registry.py +0 -2
- infrahub/core/relationship/constraints/count.py +1 -1
- infrahub/core/relationship/constraints/peer_kind.py +1 -1
- infrahub/core/relationship/model.py +66 -26
- infrahub/core/schema/__init__.py +6 -4
- infrahub/core/schema/basenode_schema.py +1 -3
- infrahub/core/schema/definitions/core.py +14 -2
- infrahub/core/schema/definitions/internal.py +16 -0
- infrahub/core/schema/generated/genericnode_schema.py +5 -0
- infrahub/core/schema/generated/node_schema.py +5 -0
- infrahub/core/schema/generic_schema.py +5 -1
- infrahub/core/schema/manager.py +45 -42
- infrahub/core/schema/node_schema.py +4 -0
- infrahub/core/schema/profile_schema.py +4 -0
- infrahub/core/schema/relationship_schema.py +2 -2
- infrahub/core/schema/schema_branch.py +248 -14
- infrahub/core/schema/template_schema.py +36 -0
- infrahub/core/task/user_task.py +7 -5
- infrahub/core/timestamp.py +1 -1
- infrahub/core/utils.py +3 -2
- infrahub/core/validators/attribute/choices.py +1 -1
- infrahub/core/validators/attribute/enum.py +1 -1
- infrahub/core/validators/attribute/kind.py +1 -1
- infrahub/core/validators/attribute/length.py +1 -1
- infrahub/core/validators/attribute/optional.py +1 -1
- infrahub/core/validators/attribute/regex.py +1 -1
- infrahub/core/validators/attribute/unique.py +1 -1
- infrahub/core/validators/checks_runner.py +37 -0
- infrahub/core/validators/node/generate_profile.py +1 -1
- infrahub/core/validators/node/hierarchy.py +1 -1
- infrahub/core/validators/query.py +1 -1
- infrahub/core/validators/relationship/count.py +1 -1
- infrahub/core/validators/relationship/optional.py +1 -1
- infrahub/core/validators/relationship/peer.py +1 -1
- infrahub/core/validators/tasks.py +8 -6
- infrahub/core/validators/uniqueness/query.py +20 -17
- infrahub/database/__init__.py +15 -2
- infrahub/database/memgraph.py +1 -1
- infrahub/dependencies/builder/constraint/grouped/node_runner.py +0 -2
- infrahub/dependencies/builder/diff/combiner.py +1 -1
- infrahub/dependencies/builder/diff/conflicts_enricher.py +1 -1
- infrahub/dependencies/builder/diff/coordinator.py +0 -2
- infrahub/dependencies/builder/diff/deserializer.py +1 -1
- infrahub/dependencies/builder/diff/enricher/summary_counts.py +1 -1
- infrahub/events/branch_action.py +47 -21
- infrahub/events/group_action.py +73 -0
- infrahub/events/models.py +159 -51
- infrahub/events/node_action.py +74 -8
- infrahub/events/repository_action.py +8 -8
- infrahub/events/schema_action.py +21 -8
- infrahub/generators/tasks.py +12 -13
- infrahub/git/base.py +3 -5
- infrahub/git/constants.py +0 -1
- infrahub/git/integrator.py +36 -35
- infrahub/git/repository.py +7 -8
- infrahub/git/tasks.py +43 -107
- infrahub/git_credential/helper.py +2 -3
- infrahub/graphql/analyzer.py +572 -11
- infrahub/graphql/app.py +34 -26
- infrahub/graphql/auth/query_permission_checker/anonymous_checker.py +5 -5
- infrahub/graphql/auth/query_permission_checker/default_branch_checker.py +4 -4
- infrahub/graphql/auth/query_permission_checker/merge_operation_checker.py +4 -4
- infrahub/graphql/auth/query_permission_checker/object_permission_checker.py +28 -35
- infrahub/graphql/auth/query_permission_checker/super_admin_checker.py +5 -5
- infrahub/graphql/enums.py +1 -1
- infrahub/graphql/initialization.py +5 -1
- infrahub/graphql/loaders/node.py +2 -2
- infrahub/graphql/manager.py +59 -54
- infrahub/graphql/mutations/account.py +20 -13
- infrahub/graphql/mutations/artifact_definition.py +16 -12
- infrahub/graphql/mutations/branch.py +61 -40
- infrahub/graphql/mutations/computed_attribute.py +19 -13
- infrahub/graphql/mutations/diff.py +37 -9
- infrahub/graphql/mutations/diff_conflict.py +9 -8
- infrahub/graphql/mutations/graphql_query.py +19 -11
- infrahub/graphql/mutations/ipam.py +21 -19
- infrahub/graphql/mutations/main.py +197 -44
- infrahub/graphql/mutations/menu.py +8 -8
- infrahub/graphql/mutations/proposed_change.py +36 -28
- infrahub/graphql/mutations/relationship.py +302 -105
- infrahub/graphql/mutations/repository.py +41 -35
- infrahub/graphql/mutations/resource_manager.py +26 -26
- infrahub/graphql/mutations/schema.py +51 -33
- infrahub/graphql/mutations/tasks.py +16 -10
- infrahub/graphql/parser.py +1 -1
- infrahub/graphql/permissions.py +6 -4
- infrahub/graphql/queries/account.py +22 -18
- infrahub/graphql/queries/branch.py +6 -4
- infrahub/graphql/queries/diff/tree.py +48 -42
- infrahub/graphql/queries/event.py +112 -0
- infrahub/graphql/queries/internal.py +3 -3
- infrahub/graphql/queries/ipam.py +23 -18
- infrahub/graphql/queries/relationship.py +11 -10
- infrahub/graphql/queries/resource_manager.py +43 -27
- infrahub/graphql/queries/search.py +9 -8
- infrahub/graphql/queries/status.py +12 -9
- infrahub/graphql/queries/task.py +11 -9
- infrahub/graphql/resolvers/resolver.py +69 -43
- infrahub/graphql/resolvers/single_relationship.py +16 -10
- infrahub/graphql/schema.py +2 -0
- infrahub/graphql/subscription/__init__.py +1 -1
- infrahub/graphql/subscription/events.py +1 -1
- infrahub/graphql/subscription/graphql_query.py +8 -8
- infrahub/graphql/types/branch.py +2 -2
- infrahub/graphql/types/common.py +6 -1
- infrahub/graphql/types/enums.py +2 -0
- infrahub/graphql/types/event.py +100 -0
- infrahub/graphql/types/interface.py +2 -2
- infrahub/graphql/types/node.py +3 -3
- infrahub/graphql/types/permission.py +2 -2
- infrahub/graphql/types/relationship.py +3 -3
- infrahub/graphql/types/standard_node.py +9 -11
- infrahub/graphql/utils.py +28 -182
- infrahub/groups/tasks.py +2 -3
- infrahub/lock.py +1 -1
- infrahub/menu/constants.py +1 -0
- infrahub/menu/generator.py +14 -3
- infrahub/menu/menu.py +116 -127
- infrahub/menu/models.py +4 -4
- infrahub/message_bus/messages/__init__.py +0 -4
- infrahub/message_bus/messages/event_branch_merge.py +3 -0
- infrahub/message_bus/messages/request_proposedchange_pipeline.py +2 -0
- infrahub/message_bus/operations/__init__.py +3 -5
- infrahub/message_bus/operations/check/__init__.py +2 -2
- infrahub/message_bus/operations/check/generator.py +1 -3
- infrahub/message_bus/operations/check/repository.py +1 -1
- infrahub/message_bus/operations/event/branch.py +7 -3
- infrahub/message_bus/operations/event/schema.py +1 -1
- infrahub/message_bus/operations/finalize/validator.py +1 -1
- infrahub/message_bus/operations/git/file.py +2 -2
- infrahub/message_bus/operations/git/repository.py +1 -1
- infrahub/message_bus/operations/requests/__init__.py +0 -2
- infrahub/message_bus/operations/requests/generator_definition.py +1 -1
- infrahub/message_bus/operations/requests/proposed_change.py +26 -11
- infrahub/message_bus/operations/requests/repository.py +2 -2
- infrahub/message_bus/operations/send/echo.py +1 -1
- infrahub/message_bus/types.py +1 -1
- infrahub/permissions/__init__.py +2 -1
- infrahub/permissions/types.py +26 -0
- infrahub/pools/prefix.py +29 -165
- infrahub/prefect_server/__init__.py +0 -0
- infrahub/prefect_server/app.py +18 -0
- infrahub/prefect_server/database.py +20 -0
- infrahub/prefect_server/events.py +28 -0
- infrahub/prefect_server/models.py +46 -0
- infrahub/proposed_change/models.py +15 -1
- infrahub/proposed_change/tasks.py +173 -35
- infrahub/pytest_plugin.py +4 -4
- infrahub/server.py +12 -11
- infrahub/services/__init__.py +147 -62
- infrahub/services/adapters/cache/__init__.py +7 -5
- infrahub/services/adapters/cache/nats.py +40 -22
- infrahub/services/adapters/cache/redis.py +0 -4
- infrahub/services/adapters/event/__init__.py +10 -18
- infrahub/services/adapters/http/__init__.py +0 -5
- infrahub/services/adapters/http/httpx.py +22 -15
- infrahub/services/adapters/message_bus/__init__.py +23 -6
- infrahub/services/adapters/message_bus/local.py +8 -6
- infrahub/services/adapters/message_bus/nats.py +12 -6
- infrahub/services/adapters/message_bus/rabbitmq.py +22 -9
- infrahub/services/adapters/workflow/__init__.py +11 -8
- infrahub/services/adapters/workflow/local.py +28 -7
- infrahub/services/adapters/workflow/worker.py +23 -7
- infrahub/services/component.py +38 -35
- infrahub/services/scheduler.py +32 -29
- infrahub/storage.py +2 -4
- infrahub/task_manager/constants.py +1 -1
- infrahub/task_manager/event.py +182 -0
- infrahub/task_manager/models.py +125 -1
- infrahub/task_manager/task.py +1 -1
- infrahub/tasks/artifact.py +14 -16
- infrahub/tasks/registry.py +1 -1
- infrahub/tasks/telemetry.py +13 -14
- infrahub/transformations/tasks.py +3 -5
- infrahub/trigger/__init__.py +0 -0
- infrahub/trigger/catalogue.py +15 -0
- infrahub/trigger/constants.py +9 -0
- infrahub/trigger/models.py +69 -0
- infrahub/trigger/tasks.py +85 -0
- infrahub/types.py +1 -1
- infrahub/utils.py +1 -1
- infrahub/webhook/constants.py +0 -2
- infrahub/webhook/models.py +8 -2
- infrahub/webhook/tasks.py +20 -73
- infrahub/webhook/triggers.py +20 -0
- infrahub/workers/infrahub_async.py +36 -25
- infrahub/workers/utils.py +63 -0
- infrahub/workflows/catalogue.py +13 -37
- infrahub/workflows/initialization.py +6 -8
- infrahub/workflows/models.py +3 -5
- infrahub/workflows/utils.py +1 -1
- infrahub_sdk/ctl/check.py +3 -3
- infrahub_sdk/ctl/cli_commands.py +11 -10
- infrahub_sdk/ctl/exceptions.py +0 -6
- infrahub_sdk/ctl/exporter.py +1 -1
- infrahub_sdk/ctl/generator.py +5 -5
- infrahub_sdk/ctl/importer.py +3 -2
- infrahub_sdk/ctl/menu.py +1 -1
- infrahub_sdk/ctl/object.py +1 -1
- infrahub_sdk/ctl/repository.py +23 -15
- infrahub_sdk/ctl/schema.py +2 -2
- infrahub_sdk/ctl/utils.py +4 -3
- infrahub_sdk/ctl/validate.py +2 -1
- infrahub_sdk/exceptions.py +6 -0
- infrahub_sdk/generator.py +3 -0
- infrahub_sdk/node.py +2 -2
- infrahub_sdk/schema/__init__.py +14 -2
- infrahub_sdk/schema/main.py +7 -0
- infrahub_sdk/utils.py +11 -1
- infrahub_sdk/yaml.py +2 -3
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/METADATA +46 -12
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/RECORD +338 -321
- infrahub_testcontainers/container.py +14 -6
- infrahub_testcontainers/docker-compose.test.yml +24 -5
- infrahub_testcontainers/haproxy.cfg +43 -0
- infrahub_testcontainers/helpers.py +85 -1
- infrahub/core/branch/constants.py +0 -2
- infrahub/graphql/query.py +0 -52
- infrahub/message_bus/messages/request_artifactdefinition_check.py +0 -17
- infrahub/message_bus/operations/requests/artifact_definition.py +0 -148
- infrahub/schema/constants.py +0 -1
- infrahub/schema/tasks.py +0 -76
- infrahub/services/adapters/database/__init__.py +0 -9
- infrahub_sdk/ctl/_file.py +0 -13
- /infrahub/{schema → artifacts}/__init__.py +0 -0
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/WHEEL +0 -0
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/entry_points.txt +0 -0
infrahub/graphql/manager.py
CHANGED
|
@@ -7,7 +7,7 @@ import graphene
|
|
|
7
7
|
|
|
8
8
|
from infrahub import config
|
|
9
9
|
from infrahub.core.attribute import String
|
|
10
|
-
from infrahub.core.constants import InfrahubKind, RelationshipKind
|
|
10
|
+
from infrahub.core.constants import InfrahubKind, RelationshipCardinality, RelationshipKind
|
|
11
11
|
from infrahub.core.schema import (
|
|
12
12
|
AttributeSchema,
|
|
13
13
|
GenericSchema,
|
|
@@ -15,6 +15,7 @@ from infrahub.core.schema import (
|
|
|
15
15
|
NodeSchema,
|
|
16
16
|
ProfileSchema,
|
|
17
17
|
RelationshipSchema,
|
|
18
|
+
TemplateSchema,
|
|
18
19
|
)
|
|
19
20
|
from infrahub.core.timestamp import Timestamp
|
|
20
21
|
from infrahub.graphql.mutations.attribute import BaseAttributeCreate, BaseAttributeUpdate
|
|
@@ -59,6 +60,7 @@ from .types import (
|
|
|
59
60
|
)
|
|
60
61
|
from .types.attribute import BaseAttribute as BaseAttributeType
|
|
61
62
|
from .types.attribute import TextAttributeType
|
|
63
|
+
from .types.event import EVENT_TYPES
|
|
62
64
|
|
|
63
65
|
if TYPE_CHECKING:
|
|
64
66
|
from graphql import GraphQLSchema
|
|
@@ -66,8 +68,6 @@ if TYPE_CHECKING:
|
|
|
66
68
|
from infrahub.core.branch import Branch
|
|
67
69
|
from infrahub.core.schema.schema_branch import SchemaBranch
|
|
68
70
|
|
|
69
|
-
# pylint: disable=redefined-builtin,c-extension-no-member,too-many-lines,too-many-public-methods
|
|
70
|
-
|
|
71
71
|
|
|
72
72
|
class DeleteInput(graphene.InputObjectType):
|
|
73
73
|
id = graphene.String(required=False)
|
|
@@ -105,7 +105,7 @@ class BranchDetails:
|
|
|
105
105
|
gql_manager: GraphQLSchemaManager
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
class GraphQLSchemaManager:
|
|
108
|
+
class GraphQLSchemaManager:
|
|
109
109
|
_extra_types: dict[str, GraphQLTypes] = {}
|
|
110
110
|
_branch_details_by_name: dict[str, BranchDetails] = {}
|
|
111
111
|
|
|
@@ -161,6 +161,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
161
161
|
self._graphql_types: dict[str, GraphQLTypes] = {}
|
|
162
162
|
|
|
163
163
|
self._load_attribute_types()
|
|
164
|
+
self._load_event_types()
|
|
164
165
|
if config.SETTINGS.experimental_features.graphql_enums:
|
|
165
166
|
self._load_all_enum_types(node_schemas=self.schema.get_all().values())
|
|
166
167
|
self._load_node_interface()
|
|
@@ -251,7 +252,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
251
252
|
|
|
252
253
|
def get_type(self, name: str) -> type[InfrahubObject]:
|
|
253
254
|
if name in self._graphql_types and issubclass(
|
|
254
|
-
self._graphql_types[name],
|
|
255
|
+
self._graphql_types[name], BaseAttributeType | graphene.Interface | graphene.ObjectType
|
|
255
256
|
):
|
|
256
257
|
return self._graphql_types[name]
|
|
257
258
|
raise ValueError(f"Unable to find {name!r}")
|
|
@@ -273,6 +274,10 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
273
274
|
for data_type in ATTRIBUTE_TYPES.values():
|
|
274
275
|
self.set_type(name=data_type.get_graphql_type_name(), graphql_type=data_type.get_graphql_type())
|
|
275
276
|
|
|
277
|
+
def _load_event_types(self) -> None:
|
|
278
|
+
for event in EVENT_TYPES.values():
|
|
279
|
+
self.set_type(name=event._meta.name, graphql_type=event)
|
|
280
|
+
|
|
276
281
|
def _load_node_interface(self) -> None:
|
|
277
282
|
node_interface_schema = GenericSchema(
|
|
278
283
|
name="Node", namespace="Core", description="Interface for all nodes in Infrahub"
|
|
@@ -339,13 +344,13 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
339
344
|
|
|
340
345
|
return RelatedNodeInput
|
|
341
346
|
|
|
342
|
-
def generate_object_types(self) -> None:
|
|
347
|
+
def generate_object_types(self) -> None:
|
|
343
348
|
"""Generate all GraphQL objects for the schema and store them in the internal registry."""
|
|
344
349
|
|
|
345
350
|
full_schema = self.schema.get_all(duplicate=False)
|
|
346
351
|
|
|
347
352
|
# Generate all GraphQL Interface Object first and store them in the registry
|
|
348
|
-
for
|
|
353
|
+
for node_schema in full_schema.values():
|
|
349
354
|
if not isinstance(node_schema, GenericSchema):
|
|
350
355
|
continue
|
|
351
356
|
interface = self.generate_interface_object(schema=node_schema, populate_cache=True)
|
|
@@ -385,8 +390,8 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
385
390
|
self.set_type(name=nested_edged_interface._meta.name, graphql_type=nested_edged_interface)
|
|
386
391
|
|
|
387
392
|
# Generate all GraphQL ObjectType, Nested, Paginated & NestedPaginated and store them in the registry
|
|
388
|
-
for
|
|
389
|
-
if isinstance(node_schema,
|
|
393
|
+
for node_schema in full_schema.values():
|
|
394
|
+
if isinstance(node_schema, NodeSchema | ProfileSchema | TemplateSchema):
|
|
390
395
|
node_type = self.generate_graphql_object(schema=node_schema, populate_cache=True)
|
|
391
396
|
node_type_edged = self.generate_graphql_edged_object(
|
|
392
397
|
schema=node_schema, node=node_type, populate_cache=True
|
|
@@ -417,11 +422,13 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
417
422
|
continue
|
|
418
423
|
peer_filters = self.generate_filters(schema=peer_schema, top_level=False)
|
|
419
424
|
|
|
420
|
-
if rel.cardinality ==
|
|
425
|
+
if rel.cardinality == RelationshipCardinality.ONE:
|
|
421
426
|
peer_type = self.get_type(name=f"NestedEdged{peer_schema.kind}")
|
|
422
|
-
node_type._meta.fields[rel.name] = graphene.Field(
|
|
427
|
+
node_type._meta.fields[rel.name] = graphene.Field(
|
|
428
|
+
peer_type, resolver=single_relationship_resolver, required=True
|
|
429
|
+
)
|
|
423
430
|
|
|
424
|
-
elif rel.cardinality ==
|
|
431
|
+
elif rel.cardinality == RelationshipCardinality.MANY:
|
|
425
432
|
peer_type = self.get_type(name=f"NestedPaginated{peer_schema.kind}")
|
|
426
433
|
|
|
427
434
|
if (isinstance(node_schema, NodeSchema) and node_schema.hierarchy) or (
|
|
@@ -430,7 +437,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
430
437
|
peer_filters["include_descendants"] = graphene.Boolean()
|
|
431
438
|
|
|
432
439
|
node_type._meta.fields[rel.name] = graphene.Field(
|
|
433
|
-
peer_type, required=
|
|
440
|
+
peer_type, required=True, resolver=many_relationship_resolver, **peer_filters
|
|
434
441
|
)
|
|
435
442
|
|
|
436
443
|
if (isinstance(node_schema, NodeSchema) and node_schema.hierarchy) or (
|
|
@@ -448,16 +455,16 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
448
455
|
peer_type_edge = self.get_type(name=f"NestedEdged{hierarchy_name}")
|
|
449
456
|
|
|
450
457
|
node_type._meta.fields["parent"] = graphene.Field(
|
|
451
|
-
peer_type_edge, required=
|
|
458
|
+
peer_type_edge, required=True, resolver=single_relationship_resolver
|
|
452
459
|
)
|
|
453
460
|
node_type._meta.fields["children"] = graphene.Field(
|
|
454
|
-
peer_type, required=
|
|
461
|
+
peer_type, required=True, resolver=many_relationship_resolver, **peer_filters
|
|
455
462
|
)
|
|
456
463
|
node_type._meta.fields["ancestors"] = graphene.Field(
|
|
457
|
-
peer_type, required=
|
|
464
|
+
peer_type, required=True, resolver=ancestors_resolver, **peer_filters
|
|
458
465
|
)
|
|
459
466
|
node_type._meta.fields["descendants"] = graphene.Field(
|
|
460
|
-
peer_type, required=
|
|
467
|
+
peer_type, required=True, resolver=descendants_resolver, **peer_filters
|
|
461
468
|
)
|
|
462
469
|
|
|
463
470
|
def generate_query_mixin(self) -> type[object]:
|
|
@@ -478,6 +485,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
478
485
|
class_attrs[node_schema.kind] = graphene.Field(
|
|
479
486
|
node_type,
|
|
480
487
|
resolver=default_paginated_list_resolver,
|
|
488
|
+
required=True,
|
|
481
489
|
**node_filters,
|
|
482
490
|
)
|
|
483
491
|
if node_name == InfrahubKind.GENERICACCOUNT:
|
|
@@ -513,7 +521,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
513
521
|
else:
|
|
514
522
|
base_class = mutation_map.get(node_schema.kind, InfrahubMutation)
|
|
515
523
|
|
|
516
|
-
if isinstance(node_schema,
|
|
524
|
+
if isinstance(node_schema, NodeSchema | ProfileSchema | TemplateSchema):
|
|
517
525
|
mutations = self.generate_graphql_mutations(schema=node_schema, base_class=base_class)
|
|
518
526
|
|
|
519
527
|
class_attrs[f"{node_schema.kind}Create"] = mutations.create.Field()
|
|
@@ -539,7 +547,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
539
547
|
|
|
540
548
|
interfaces: set[type[InfrahubObject]] = set()
|
|
541
549
|
|
|
542
|
-
if isinstance(schema,
|
|
550
|
+
if isinstance(schema, NodeSchema | ProfileSchema | TemplateSchema) and schema.inherit_from:
|
|
543
551
|
for generic_name in schema.inherit_from:
|
|
544
552
|
generic = self.get_type(name=generic_name)
|
|
545
553
|
interfaces.add(generic)
|
|
@@ -559,7 +567,9 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
559
567
|
main_attrs = {
|
|
560
568
|
"id": graphene.Field(graphene.String, required=True, description="Unique identifier"),
|
|
561
569
|
"hfid": graphene.Field(
|
|
562
|
-
graphene.List(of_type=graphene.String),
|
|
570
|
+
graphene.List(of_type=graphene.NonNull(graphene.String)),
|
|
571
|
+
required=False,
|
|
572
|
+
description="Human friendly identifier",
|
|
563
573
|
),
|
|
564
574
|
"_updated_at": graphene.DateTime(required=False),
|
|
565
575
|
"display_label": graphene.String(required=False),
|
|
@@ -569,7 +579,8 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
569
579
|
for attr in schema.local_attributes:
|
|
570
580
|
attr_kind = get_attr_kind(schema, attr)
|
|
571
581
|
attr_type = self.get_type(name=get_attribute_type(kind=attr_kind).get_graphql_type_name())
|
|
572
|
-
|
|
582
|
+
req = "" if attr.optional else " (required)"
|
|
583
|
+
main_attrs[attr.name] = graphene.Field(attr_type, description=f"{attr.description}{req}")
|
|
573
584
|
|
|
574
585
|
graphql_object = type(schema.kind, (InfrahubObject,), main_attrs)
|
|
575
586
|
|
|
@@ -589,7 +600,9 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
589
600
|
main_attrs = {
|
|
590
601
|
"id": graphene.Field(graphene.String, required=False, description="Unique identifier"),
|
|
591
602
|
"hfid": graphene.Field(
|
|
592
|
-
graphene.List(of_type=graphene.String),
|
|
603
|
+
graphene.List(of_type=graphene.NonNull(graphene.String)),
|
|
604
|
+
required=False,
|
|
605
|
+
description="Human friendly identifier",
|
|
593
606
|
),
|
|
594
607
|
"display_label": graphene.String(required=False),
|
|
595
608
|
"Meta": type("Meta", (object,), meta_attrs),
|
|
@@ -598,7 +611,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
598
611
|
for attr in schema.attributes:
|
|
599
612
|
attr_kind = get_attr_kind(node_schema=schema, attr_schema=attr)
|
|
600
613
|
attr_type = self.get_type(name=get_attribute_type(kind=attr_kind).get_graphql_type_name())
|
|
601
|
-
main_attrs[attr.name] = graphene.Field(attr_type,
|
|
614
|
+
main_attrs[attr.name] = graphene.Field(attr_type, description=attr.description)
|
|
602
615
|
|
|
603
616
|
interface_object = type(schema.kind, (InfrahubInterface,), main_attrs)
|
|
604
617
|
|
|
@@ -629,7 +642,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
629
642
|
self.set_type(name=type_name, graphql_type=relationship_property)
|
|
630
643
|
|
|
631
644
|
def generate_graphql_mutations(
|
|
632
|
-
self, schema:
|
|
645
|
+
self, schema: NodeSchema | ProfileSchema | TemplateSchema, base_class: type[InfrahubMutation]
|
|
633
646
|
) -> GraphqlMutations:
|
|
634
647
|
graphql_mutation_create_input = self.generate_graphql_mutation_create_input(schema)
|
|
635
648
|
graphql_mutation_update_input = self.generate_graphql_mutation_update_input(schema)
|
|
@@ -657,7 +670,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
657
670
|
return GraphqlMutations(create=create, update=update, upsert=upsert, delete=delete)
|
|
658
671
|
|
|
659
672
|
def generate_graphql_mutation_create_input(
|
|
660
|
-
self, schema:
|
|
673
|
+
self, schema: NodeSchema | ProfileSchema | TemplateSchema
|
|
661
674
|
) -> type[graphene.InputObjectType]:
|
|
662
675
|
"""Generate an InputObjectType Object from a Infrahub NodeSchema
|
|
663
676
|
|
|
@@ -677,10 +690,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
677
690
|
attr_kind = get_attr_kind(schema, attr)
|
|
678
691
|
attr_type = get_attribute_type(kind=attr_kind).get_graphql_create()
|
|
679
692
|
|
|
680
|
-
|
|
681
|
-
required = not attr.optional if not attr.default_value else False
|
|
682
|
-
|
|
683
|
-
attrs[attr.name] = graphene.InputField(attr_type, required=required, description=attr.description)
|
|
693
|
+
attrs[attr.name] = graphene.InputField(attr_type, description=attr.description)
|
|
684
694
|
|
|
685
695
|
for rel in schema.relationships:
|
|
686
696
|
if rel.internal_peer or rel.read_only:
|
|
@@ -688,14 +698,11 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
688
698
|
|
|
689
699
|
input_type = self._get_related_input_type(relationship=rel)
|
|
690
700
|
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
attrs[rel.name] = graphene.InputField(input_type, required=required, description=rel.description)
|
|
701
|
+
if rel.cardinality == RelationshipCardinality.ONE:
|
|
702
|
+
attrs[rel.name] = graphene.InputField(input_type, description=rel.description)
|
|
694
703
|
|
|
695
|
-
elif rel.cardinality ==
|
|
696
|
-
attrs[rel.name] = graphene.InputField(
|
|
697
|
-
graphene.List(input_type), required=required, description=rel.description
|
|
698
|
-
)
|
|
704
|
+
elif rel.cardinality == RelationshipCardinality.MANY:
|
|
705
|
+
attrs[rel.name] = graphene.InputField(graphene.List(input_type), description=rel.description)
|
|
699
706
|
|
|
700
707
|
return type(f"{schema.kind}CreateInput", (graphene.InputObjectType,), attrs)
|
|
701
708
|
|
|
@@ -728,10 +735,10 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
728
735
|
|
|
729
736
|
input_type = self._get_related_input_type(relationship=rel)
|
|
730
737
|
|
|
731
|
-
if rel.cardinality ==
|
|
738
|
+
if rel.cardinality == RelationshipCardinality.ONE:
|
|
732
739
|
attrs[rel.name] = graphene.InputField(input_type, required=False, description=rel.description)
|
|
733
740
|
|
|
734
|
-
elif rel.cardinality ==
|
|
741
|
+
elif rel.cardinality == RelationshipCardinality.MANY:
|
|
735
742
|
attrs[rel.name] = graphene.InputField(
|
|
736
743
|
graphene.List(input_type), required=False, description=rel.description
|
|
737
744
|
)
|
|
@@ -739,7 +746,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
739
746
|
return type(f"{schema.kind}UpdateInput", (graphene.InputObjectType,), attrs)
|
|
740
747
|
|
|
741
748
|
def generate_graphql_mutation_upsert_input(
|
|
742
|
-
self, schema:
|
|
749
|
+
self, schema: NodeSchema | ProfileSchema | TemplateSchema
|
|
743
750
|
) -> type[graphene.InputObjectType]:
|
|
744
751
|
"""Generate an InputObjectType Object from a Infrahub NodeSchema
|
|
745
752
|
|
|
@@ -775,10 +782,10 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
775
782
|
input_type = self._get_related_input_type(relationship=rel)
|
|
776
783
|
|
|
777
784
|
required = not rel.optional
|
|
778
|
-
if rel.cardinality ==
|
|
785
|
+
if rel.cardinality == RelationshipCardinality.ONE:
|
|
779
786
|
attrs[rel.name] = graphene.InputField(input_type, required=required, description=rel.description)
|
|
780
787
|
|
|
781
|
-
elif rel.cardinality ==
|
|
788
|
+
elif rel.cardinality == RelationshipCardinality.MANY:
|
|
782
789
|
attrs[rel.name] = graphene.InputField(
|
|
783
790
|
graphene.List(input_type), required=required, description=rel.description
|
|
784
791
|
)
|
|
@@ -787,7 +794,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
787
794
|
|
|
788
795
|
def generate_graphql_mutation_create(
|
|
789
796
|
self,
|
|
790
|
-
schema:
|
|
797
|
+
schema: NodeSchema | ProfileSchema | TemplateSchema,
|
|
791
798
|
input_type: type[graphene.InputObjectType],
|
|
792
799
|
base_class: type[InfrahubMutation] = InfrahubMutation,
|
|
793
800
|
mutation_type: str = "Create",
|
|
@@ -834,7 +841,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
834
841
|
|
|
835
842
|
@staticmethod
|
|
836
843
|
def generate_graphql_mutation_delete(
|
|
837
|
-
schema:
|
|
844
|
+
schema: NodeSchema | ProfileSchema | TemplateSchema, base_class: type[InfrahubMutation] = InfrahubMutation
|
|
838
845
|
) -> type[InfrahubMutation]:
|
|
839
846
|
"""Generate a GraphQL Mutation to DELETE an object based on the specified NodeSchema."""
|
|
840
847
|
name = f"{schema.kind}Delete"
|
|
@@ -940,7 +947,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
940
947
|
}
|
|
941
948
|
|
|
942
949
|
if relation_property:
|
|
943
|
-
main_attrs["properties"] = graphene.Field(relation_property)
|
|
950
|
+
main_attrs["properties"] = graphene.Field(relation_property, required=False)
|
|
944
951
|
|
|
945
952
|
graphql_edged_object = type(object_name, (InfrahubObject,), main_attrs)
|
|
946
953
|
|
|
@@ -967,16 +974,14 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
967
974
|
}
|
|
968
975
|
|
|
969
976
|
main_attrs: dict[str, Any] = {
|
|
970
|
-
"count": graphene.Int(required=
|
|
971
|
-
"edges": graphene.List(of_type=edge),
|
|
977
|
+
"count": graphene.Int(required=True),
|
|
978
|
+
"edges": graphene.List(of_type=graphene.NonNull(edge), required=True),
|
|
979
|
+
"permissions": graphene.Field(
|
|
980
|
+
PaginatedObjectPermission, required=True, resolver=parent_field_name_resolver
|
|
981
|
+
),
|
|
972
982
|
"Meta": type("Meta", (object,), meta_attrs),
|
|
973
983
|
}
|
|
974
984
|
|
|
975
|
-
if isinstance(schema, (NodeSchema, GenericSchema)):
|
|
976
|
-
main_attrs["permissions"] = graphene.Field(
|
|
977
|
-
PaginatedObjectPermission, required=True, resolver=parent_field_name_resolver
|
|
978
|
-
)
|
|
979
|
-
|
|
980
985
|
graphql_paginated_object = type(object_name, (InfrahubObject,), main_attrs)
|
|
981
986
|
|
|
982
987
|
if populate_cache:
|
|
@@ -1004,7 +1009,7 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
1004
1009
|
}
|
|
1005
1010
|
|
|
1006
1011
|
if relation_property:
|
|
1007
|
-
main_attrs["properties"] = graphene.Field(relation_property)
|
|
1012
|
+
main_attrs["properties"] = graphene.Field(relation_property, required=False)
|
|
1008
1013
|
|
|
1009
1014
|
object_name = f"NestedEdged{schema.kind}"
|
|
1010
1015
|
nested_interface_object = type(object_name, (InfrahubObject,), main_attrs)
|
|
@@ -1025,8 +1030,8 @@ class GraphQLSchemaManager: # pylint: disable=too-many-public-methods
|
|
|
1025
1030
|
}
|
|
1026
1031
|
|
|
1027
1032
|
main_attrs: dict[str, Any] = {
|
|
1028
|
-
"count": graphene.Int(required=
|
|
1029
|
-
"edges": graphene.List(of_type=base_interface),
|
|
1033
|
+
"count": graphene.Int(required=True),
|
|
1034
|
+
"edges": graphene.List(of_type=graphene.NonNull(base_interface)),
|
|
1030
1035
|
"Meta": type("Meta", (object,), meta_attrs),
|
|
1031
1036
|
}
|
|
1032
1037
|
|
|
@@ -22,9 +22,6 @@ if TYPE_CHECKING:
|
|
|
22
22
|
from ..initialization import GraphqlContext
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
# pylint: disable=unused-argument
|
|
26
|
-
|
|
27
|
-
|
|
28
25
|
class InfrahubAccountTokenCreateInput(InputObjectType):
|
|
29
26
|
name = InputField(String(required=False), description="The name of the token")
|
|
30
27
|
expiration = InputField(String(required=False), description="Timestamp when the token expires")
|
|
@@ -52,23 +49,25 @@ class AccountMixin:
|
|
|
52
49
|
@classmethod
|
|
53
50
|
async def mutate(
|
|
54
51
|
cls,
|
|
55
|
-
root: dict,
|
|
52
|
+
root: dict, # noqa: ARG003
|
|
56
53
|
info: GraphQLResolveInfo,
|
|
57
54
|
data: dict[str, Any],
|
|
58
55
|
) -> Self:
|
|
59
|
-
|
|
56
|
+
graphql_context: GraphqlContext = info.context
|
|
60
57
|
|
|
61
|
-
if not
|
|
58
|
+
if not graphql_context.account_session:
|
|
62
59
|
raise ValueError("An account_session is mandatory to execute this mutation")
|
|
63
60
|
|
|
64
|
-
if
|
|
61
|
+
if graphql_context.account_session.auth_type != AuthType.JWT:
|
|
65
62
|
raise PermissionDeniedError("This operation requires authentication with a JWT token")
|
|
66
63
|
|
|
67
64
|
results = await NodeManager.query(
|
|
68
|
-
schema=CoreAccount, filters={"ids": [
|
|
65
|
+
schema=CoreAccount, filters={"ids": [graphql_context.account_session.account_id]}, db=graphql_context.db
|
|
69
66
|
)
|
|
70
67
|
if not results:
|
|
71
|
-
raise NodeNotFoundError(
|
|
68
|
+
raise NodeNotFoundError(
|
|
69
|
+
node_type=InfrahubKind.ACCOUNT, identifier=graphql_context.account_session.account_id
|
|
70
|
+
)
|
|
72
71
|
|
|
73
72
|
account = results[0]
|
|
74
73
|
|
|
@@ -77,10 +76,10 @@ class AccountMixin:
|
|
|
77
76
|
"InfrahubAccountTokenDelete": cls.delete_token,
|
|
78
77
|
"InfrahubAccountSelfUpdate": cls.update_self,
|
|
79
78
|
}
|
|
80
|
-
response = await mutation_map[cls.__name__](db=
|
|
79
|
+
response = await mutation_map[cls.__name__](db=graphql_context.db, account=account, data=data, info=info)
|
|
81
80
|
|
|
82
81
|
# Reset the time of the query to guarantee that all resolvers executed after this point will account for the changes
|
|
83
|
-
|
|
82
|
+
graphql_context.at = Timestamp()
|
|
84
83
|
|
|
85
84
|
return response
|
|
86
85
|
|
|
@@ -108,7 +107,11 @@ class AccountMixin:
|
|
|
108
107
|
@classmethod
|
|
109
108
|
@retry_db_transaction(name="account_token_delete")
|
|
110
109
|
async def delete_token(
|
|
111
|
-
cls,
|
|
110
|
+
cls,
|
|
111
|
+
db: InfrahubDatabase,
|
|
112
|
+
account: CoreNode,
|
|
113
|
+
data: dict[str, Any],
|
|
114
|
+
info: GraphQLResolveInfo, # noqa: ARG003
|
|
112
115
|
) -> Self:
|
|
113
116
|
token_id = str(data.get("id"))
|
|
114
117
|
|
|
@@ -130,7 +133,11 @@ class AccountMixin:
|
|
|
130
133
|
@classmethod
|
|
131
134
|
@retry_db_transaction(name="account_update_self")
|
|
132
135
|
async def update_self(
|
|
133
|
-
cls,
|
|
136
|
+
cls,
|
|
137
|
+
db: InfrahubDatabase,
|
|
138
|
+
account: CoreNode,
|
|
139
|
+
data: dict[str, Any],
|
|
140
|
+
info: GraphQLResolveInfo, # noqa: ARG003
|
|
134
141
|
) -> Self:
|
|
135
142
|
for field in ("password", "description"):
|
|
136
143
|
if value := data.get(field):
|
|
@@ -25,7 +25,7 @@ log = get_logger()
|
|
|
25
25
|
|
|
26
26
|
class InfrahubArtifactDefinitionMutation(InfrahubMutationMixin, Mutation):
|
|
27
27
|
@classmethod
|
|
28
|
-
def __init_subclass_with_meta__(
|
|
28
|
+
def __init_subclass_with_meta__(
|
|
29
29
|
cls,
|
|
30
30
|
schema: NodeSchema,
|
|
31
31
|
_meta: Optional[Any] = None,
|
|
@@ -48,20 +48,22 @@ class InfrahubArtifactDefinitionMutation(InfrahubMutationMixin, Mutation):
|
|
|
48
48
|
info: GraphQLResolveInfo,
|
|
49
49
|
data: InputObjectType,
|
|
50
50
|
branch: Branch,
|
|
51
|
-
database: Optional[InfrahubDatabase] = None,
|
|
51
|
+
database: Optional[InfrahubDatabase] = None, # noqa: ARG003
|
|
52
52
|
) -> tuple[Node, Self]:
|
|
53
|
-
|
|
53
|
+
graphql_context: GraphqlContext = info.context
|
|
54
54
|
|
|
55
55
|
artifact_definition, result = await super().mutate_create(info=info, data=data, branch=branch)
|
|
56
56
|
|
|
57
|
-
if
|
|
57
|
+
if graphql_context.service:
|
|
58
58
|
model = RequestArtifactDefinitionGenerate(
|
|
59
59
|
branch=branch.name,
|
|
60
60
|
artifact_definition_id=artifact_definition.id,
|
|
61
61
|
artifact_definition_name=artifact_definition.name.value, # type: ignore[attr-defined]
|
|
62
62
|
)
|
|
63
|
-
await
|
|
64
|
-
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE,
|
|
63
|
+
await graphql_context.service.workflow.submit_workflow(
|
|
64
|
+
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE,
|
|
65
|
+
context=graphql_context.get_context(),
|
|
66
|
+
parameters={"model": model},
|
|
65
67
|
)
|
|
66
68
|
|
|
67
69
|
return artifact_definition, result
|
|
@@ -72,21 +74,23 @@ class InfrahubArtifactDefinitionMutation(InfrahubMutationMixin, Mutation):
|
|
|
72
74
|
info: GraphQLResolveInfo,
|
|
73
75
|
data: InputObjectType,
|
|
74
76
|
branch: Branch,
|
|
75
|
-
database: Optional[InfrahubDatabase] = None,
|
|
76
|
-
node: Optional[Node] = None,
|
|
77
|
+
database: Optional[InfrahubDatabase] = None, # noqa: ARG003
|
|
78
|
+
node: Optional[Node] = None, # noqa: ARG003
|
|
77
79
|
) -> tuple[Node, Self]:
|
|
78
|
-
|
|
80
|
+
graphql_context: GraphqlContext = info.context
|
|
79
81
|
|
|
80
82
|
artifact_definition, result = await super().mutate_update(info=info, data=data, branch=branch)
|
|
81
83
|
|
|
82
|
-
if
|
|
84
|
+
if graphql_context.service:
|
|
83
85
|
model = RequestArtifactDefinitionGenerate(
|
|
84
86
|
branch=branch.name,
|
|
85
87
|
artifact_definition_id=artifact_definition.id,
|
|
86
88
|
artifact_definition_name=artifact_definition.name.value, # type: ignore[attr-defined]
|
|
87
89
|
)
|
|
88
|
-
await
|
|
89
|
-
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE,
|
|
90
|
+
await graphql_context.service.workflow.submit_workflow(
|
|
91
|
+
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE,
|
|
92
|
+
context=graphql_context.get_context(),
|
|
93
|
+
parameters={"model": model},
|
|
90
94
|
)
|
|
91
95
|
|
|
92
96
|
return artifact_definition, result
|