infrahub-server 1.1.6__py3-none-any.whl → 1.2.0b1__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} +5 -3
- 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/models.py +1 -1
- infrahub/computed_attribute/tasks.py +64 -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 +54 -22
- infrahub/core/branch/models.py +4 -4
- infrahub/core/branch/tasks.py +137 -129
- infrahub/core/changelog/__init__.py +0 -0
- infrahub/core/changelog/diff.py +283 -0
- infrahub/core/changelog/models.py +499 -0
- infrahub/core/constants/__init__.py +43 -2
- infrahub/core/constants/infrahubkind.py +1 -0
- infrahub/core/constants/schema.py +2 -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 +7 -7
- infrahub/core/diff/enricher/hierarchy.py +22 -7
- infrahub/core/diff/enricher/labels.py +19 -4
- infrahub/core/diff/enricher/path_identifier.py +7 -9
- infrahub/core/diff/enricher/summary_counts.py +3 -1
- infrahub/core/diff/merger/merger.py +8 -4
- infrahub/core/diff/model/path.py +76 -35
- infrahub/core/diff/parent_node_adder.py +78 -0
- infrahub/core/diff/payload_builder.py +13 -2
- 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 +14 -3
- 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 +233 -142
- infrahub/core/diff/query/summary_counts_enricher.py +267 -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 +32 -28
- infrahub/core/diff/repository/repository.py +215 -41
- infrahub/core/diff/tasks.py +13 -12
- infrahub/core/enums.py +1 -1
- infrahub/core/graph/__init__.py +1 -1
- infrahub/core/graph/index.py +3 -0
- 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 +20 -15
- infrahub/core/merge.py +5 -2
- infrahub/core/migrations/graph/__init__.py +4 -0
- 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/graph/m019_restore_rels_to_time.py +256 -0
- infrahub/core/migrations/graph/m020_add_generate_template_attr.py +48 -0
- 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 +39 -19
- 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 +27 -13
- 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 +170 -46
- 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 +6 -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 +213 -26
- 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 +76 -38
- infrahub/core/schema/__init__.py +6 -4
- infrahub/core/schema/attribute_schema.py +8 -0
- infrahub/core/schema/basenode_schema.py +13 -3
- infrahub/core/schema/definitions/core/__init__.py +153 -0
- infrahub/core/schema/definitions/core/account.py +168 -0
- infrahub/core/schema/definitions/core/artifact.py +127 -0
- infrahub/core/schema/definitions/core/builtin.py +21 -0
- infrahub/core/schema/definitions/core/check.py +60 -0
- infrahub/core/schema/definitions/core/generator.py +96 -0
- infrahub/core/schema/definitions/core/graphql_query.py +77 -0
- infrahub/core/schema/definitions/core/group.py +105 -0
- infrahub/core/schema/definitions/core/ipam.py +252 -0
- infrahub/core/schema/definitions/core/lineage.py +17 -0
- infrahub/core/schema/definitions/core/menu.py +46 -0
- infrahub/core/schema/definitions/core/permission.py +161 -0
- infrahub/core/schema/definitions/core/profile.py +29 -0
- infrahub/core/schema/definitions/core/propose_change.py +88 -0
- infrahub/core/schema/definitions/core/propose_change_comment.py +188 -0
- infrahub/core/schema/definitions/core/propose_change_validator.py +326 -0
- infrahub/core/schema/definitions/core/repository.py +280 -0
- infrahub/core/schema/definitions/core/resource_pool.py +180 -0
- infrahub/core/schema/definitions/core/template.py +12 -0
- infrahub/core/schema/definitions/core/transform.py +87 -0
- infrahub/core/schema/definitions/core/webhook.py +108 -0
- 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 +10 -2
- infrahub/core/schema/schema_branch.py +260 -16
- infrahub/core/schema/template_schema.py +36 -0
- infrahub/core/task/user_task.py +7 -5
- infrahub/core/timestamp.py +3 -3
- 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 +16 -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 +4 -2
- infrahub/dependencies/builder/diff/enricher/hierarchy.py +3 -1
- infrahub/dependencies/builder/diff/enricher/summary_counts.py +1 -1
- infrahub/dependencies/builder/diff/parent_node_adder.py +8 -0
- infrahub/events/artifact_action.py +76 -0
- infrahub/events/branch_action.py +50 -21
- infrahub/events/group_action.py +117 -0
- infrahub/events/models.py +164 -51
- infrahub/events/node_action.py +70 -8
- infrahub/events/repository_action.py +8 -8
- infrahub/events/schema_action.py +21 -8
- infrahub/exceptions.py +9 -0
- infrahub/generators/models.py +1 -0
- infrahub/generators/tasks.py +34 -15
- infrahub/git/base.py +3 -5
- infrahub/git/constants.py +0 -1
- infrahub/git/integrator.py +60 -36
- infrahub/git/models.py +80 -1
- infrahub/git/repository.py +7 -8
- infrahub/git/tasks.py +432 -112
- 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/context.py +33 -0
- infrahub/graphql/enums.py +1 -1
- infrahub/graphql/initialization.py +5 -1
- infrahub/graphql/loaders/node.py +2 -2
- infrahub/graphql/manager.py +63 -63
- infrahub/graphql/mutations/account.py +20 -13
- infrahub/graphql/mutations/artifact_definition.py +16 -12
- infrahub/graphql/mutations/branch.py +86 -40
- infrahub/graphql/mutations/computed_attribute.py +24 -13
- infrahub/graphql/mutations/diff.py +54 -14
- infrahub/graphql/mutations/diff_conflict.py +14 -8
- infrahub/graphql/mutations/generator.py +83 -0
- infrahub/graphql/mutations/graphql_query.py +19 -11
- infrahub/graphql/mutations/ipam.py +25 -23
- infrahub/graphql/mutations/main.py +243 -50
- infrahub/graphql/mutations/menu.py +10 -10
- infrahub/graphql/mutations/proposed_change.py +36 -28
- infrahub/graphql/mutations/relationship.py +343 -104
- infrahub/graphql/mutations/repository.py +41 -35
- infrahub/graphql/mutations/resource_manager.py +26 -26
- infrahub/graphql/mutations/schema.py +66 -33
- infrahub/graphql/mutations/tasks.py +16 -10
- infrahub/graphql/parser.py +1 -1
- infrahub/graphql/permissions.py +3 -10
- infrahub/graphql/queries/account.py +22 -18
- infrahub/graphql/queries/branch.py +6 -4
- infrahub/graphql/queries/diff/tree.py +63 -52
- infrahub/graphql/queries/event.py +115 -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 +4 -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/context.py +12 -0
- infrahub/graphql/types/enums.py +2 -0
- infrahub/graphql/types/event.py +158 -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 +21 -21
- infrahub/menu/generator.py +0 -1
- infrahub/menu/menu.py +116 -138
- infrahub/menu/models.py +4 -4
- infrahub/message_bus/__init__.py +11 -13
- infrahub/message_bus/messages/__init__.py +0 -14
- infrahub/message_bus/messages/check_generator_run.py +1 -3
- infrahub/message_bus/messages/event_branch_merge.py +3 -0
- infrahub/message_bus/messages/proposed_change/request_proposedchange_refreshartifacts.py +6 -0
- infrahub/message_bus/messages/request_proposedchange_pipeline.py +2 -0
- infrahub/message_bus/messages/send_echo_request.py +1 -1
- infrahub/message_bus/operations/__init__.py +4 -13
- infrahub/message_bus/operations/check/__init__.py +2 -2
- infrahub/message_bus/operations/check/generator.py +1 -3
- infrahub/message_bus/operations/event/branch.py +7 -3
- infrahub/message_bus/operations/event/schema.py +1 -1
- infrahub/message_bus/operations/event/worker.py +0 -3
- 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 -4
- infrahub/message_bus/operations/requests/generator_definition.py +2 -4
- infrahub/message_bus/operations/requests/proposed_change.py +37 -20
- infrahub/message_bus/operations/send/echo.py +1 -1
- infrahub/message_bus/types.py +1 -1
- infrahub/permissions/__init__.py +2 -1
- infrahub/permissions/globals.py +15 -0
- 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 +18 -1
- infrahub/proposed_change/tasks.py +195 -53
- infrahub/pytest_plugin.py +4 -4
- infrahub/server.py +13 -12
- infrahub/services/__init__.py +148 -63
- infrahub/services/adapters/cache/__init__.py +11 -11
- infrahub/services/adapters/cache/nats.py +42 -25
- infrahub/services/adapters/cache/redis.py +3 -11
- 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 +25 -8
- infrahub/services/adapters/message_bus/local.py +9 -7
- infrahub/services/adapters/message_bus/nats.py +14 -8
- infrahub/services/adapters/message_bus/rabbitmq.py +23 -10
- infrahub/services/adapters/workflow/__init__.py +11 -8
- infrahub/services/adapters/workflow/local.py +27 -6
- infrahub/services/adapters/workflow/worker.py +23 -7
- infrahub/services/component.py +43 -40
- infrahub/services/protocols.py +7 -7
- infrahub/services/scheduler.py +30 -29
- infrahub/storage.py +2 -4
- infrahub/task_manager/constants.py +1 -1
- infrahub/task_manager/event.py +261 -0
- infrahub/task_manager/models.py +147 -3
- infrahub/task_manager/task.py +1 -1
- infrahub/tasks/artifact.py +19 -18
- 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 +16 -0
- infrahub/trigger/constants.py +9 -0
- infrahub/trigger/models.py +105 -0
- infrahub/trigger/tasks.py +91 -0
- infrahub/types.py +1 -1
- infrahub/utils.py +1 -1
- infrahub/webhook/constants.py +0 -2
- infrahub/webhook/models.py +161 -40
- infrahub/webhook/tasks.py +123 -202
- infrahub/webhook/triggers.py +27 -0
- infrahub/workers/infrahub_async.py +36 -25
- infrahub/workers/utils.py +63 -0
- infrahub/workflows/catalogue.py +71 -52
- infrahub/workflows/initialization.py +14 -8
- infrahub/workflows/models.py +28 -4
- infrahub/workflows/utils.py +1 -1
- infrahub_sdk/client.py +8 -0
- infrahub_sdk/ctl/branch.py +3 -2
- infrahub_sdk/ctl/check.py +3 -3
- infrahub_sdk/ctl/cli_commands.py +16 -11
- 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 -19
- infrahub_sdk/ctl/validate.py +2 -1
- infrahub_sdk/exceptions.py +12 -0
- infrahub_sdk/generator.py +3 -0
- infrahub_sdk/node.py +4 -4
- infrahub_sdk/protocols.py +21 -8
- infrahub_sdk/schema/__init__.py +14 -2
- infrahub_sdk/schema/main.py +7 -0
- infrahub_sdk/task/__init__.py +1 -0
- infrahub_sdk/task/constants.py +3 -0
- infrahub_sdk/task/exceptions.py +25 -0
- infrahub_sdk/task/manager.py +545 -0
- infrahub_sdk/task/models.py +74 -0
- infrahub_sdk/timestamp.py +134 -33
- infrahub_sdk/utils.py +39 -1
- infrahub_sdk/yaml.py +2 -3
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/METADATA +47 -12
- infrahub_server-1.2.0b1.dist-info/RECORD +725 -0
- 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/core/schema/definitions/core.py +0 -2274
- infrahub/graphql/query.py +0 -52
- infrahub/message_bus/messages/check_repository_checkdefinition.py +0 -20
- infrahub/message_bus/messages/check_repository_mergeconflicts.py +0 -16
- infrahub/message_bus/messages/check_repository_usercheck.py +0 -26
- infrahub/message_bus/messages/request_artifactdefinition_check.py +0 -17
- infrahub/message_bus/messages/request_repository_checks.py +0 -12
- infrahub/message_bus/messages/request_repository_userchecks.py +0 -18
- infrahub/message_bus/operations/check/repository.py +0 -293
- infrahub/message_bus/operations/requests/artifact_definition.py +0 -148
- infrahub/message_bus/operations/requests/repository.py +0 -133
- 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_server-1.1.6.dist-info/RECORD +0 -681
- /infrahub/{schema → artifacts}/__init__.py +0 -0
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/WHEEL +0 -0
- {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/entry_points.txt +0 -0
infrahub/graphql/queries/ipam.py
CHANGED
|
@@ -4,13 +4,14 @@ import ipaddress
|
|
|
4
4
|
from typing import TYPE_CHECKING, Optional
|
|
5
5
|
|
|
6
6
|
from graphene import Field, Int, ObjectType, String
|
|
7
|
+
from netaddr import IPSet
|
|
7
8
|
|
|
8
9
|
from infrahub.core.constants import InfrahubKind
|
|
9
10
|
from infrahub.core.manager import NodeManager
|
|
10
11
|
from infrahub.core.query.ipam import get_ip_addresses, get_subnets
|
|
11
12
|
from infrahub.exceptions import NodeNotFoundError, ValidationError
|
|
12
13
|
from infrahub.pools.address import get_available
|
|
13
|
-
from infrahub.pools.prefix import
|
|
14
|
+
from infrahub.pools.prefix import get_next_available_prefix
|
|
14
15
|
|
|
15
16
|
if TYPE_CHECKING:
|
|
16
17
|
from graphql import GraphQLResolveInfo
|
|
@@ -23,18 +24,18 @@ class IPAddressGetNextAvailable(ObjectType):
|
|
|
23
24
|
|
|
24
25
|
@staticmethod
|
|
25
26
|
async def resolve(
|
|
26
|
-
root: dict, #
|
|
27
|
+
root: dict, # noqa: ARG004
|
|
27
28
|
info: GraphQLResolveInfo,
|
|
28
29
|
prefix_id: str,
|
|
29
30
|
prefix_length: Optional[int] = None,
|
|
30
31
|
) -> dict[str, str]:
|
|
31
|
-
|
|
32
|
+
graphql_context: GraphqlContext = info.context
|
|
32
33
|
|
|
33
|
-
prefix = await NodeManager.get_one(id=prefix_id, db=
|
|
34
|
+
prefix = await NodeManager.get_one(id=prefix_id, db=graphql_context.db, branch=graphql_context.branch)
|
|
34
35
|
|
|
35
36
|
if not prefix:
|
|
36
37
|
raise NodeNotFoundError(
|
|
37
|
-
branch_name=
|
|
38
|
+
branch_name=graphql_context.branch.name, node_type=InfrahubKind.IPPREFIX, identifier=prefix_id
|
|
38
39
|
)
|
|
39
40
|
|
|
40
41
|
ip_prefix = ipaddress.ip_network(prefix.prefix.value) # type: ignore[attr-defined]
|
|
@@ -43,12 +44,12 @@ class IPAddressGetNextAvailable(ObjectType):
|
|
|
43
44
|
if not ip_prefix.prefixlen <= prefix_length <= ip_prefix.max_prefixlen:
|
|
44
45
|
raise ValidationError(input_value="Invalid prefix length for current selected prefix")
|
|
45
46
|
|
|
46
|
-
namespace = await prefix.ip_namespace.get_peer(db=
|
|
47
|
+
namespace = await prefix.ip_namespace.get_peer(db=graphql_context.db) # type: ignore[attr-defined]
|
|
47
48
|
addresses = await get_ip_addresses(
|
|
48
|
-
db=
|
|
49
|
+
db=graphql_context.db,
|
|
49
50
|
ip_prefix=ip_prefix,
|
|
50
51
|
namespace=namespace,
|
|
51
|
-
branch=
|
|
52
|
+
branch=graphql_context.branch,
|
|
52
53
|
)
|
|
53
54
|
|
|
54
55
|
available = get_available(
|
|
@@ -70,33 +71,35 @@ class IPPrefixGetNextAvailable(ObjectType):
|
|
|
70
71
|
|
|
71
72
|
@staticmethod
|
|
72
73
|
async def resolve(
|
|
73
|
-
root: dict, #
|
|
74
|
+
root: dict, # noqa: ARG004
|
|
74
75
|
info: GraphQLResolveInfo,
|
|
75
76
|
prefix_id: str,
|
|
76
77
|
prefix_length: int,
|
|
77
78
|
) -> dict[str, str]:
|
|
78
|
-
|
|
79
|
+
graphql_context: GraphqlContext = info.context
|
|
79
80
|
|
|
80
|
-
prefix = await NodeManager.get_one(id=prefix_id, db=
|
|
81
|
+
prefix = await NodeManager.get_one(id=prefix_id, db=graphql_context.db, branch=graphql_context.branch)
|
|
81
82
|
|
|
82
83
|
if not prefix:
|
|
83
84
|
raise NodeNotFoundError(
|
|
84
|
-
branch_name=
|
|
85
|
+
branch_name=graphql_context.branch.name, node_type=InfrahubKind.IPPREFIX, identifier=prefix_id
|
|
85
86
|
)
|
|
86
87
|
|
|
87
|
-
namespace = await prefix.ip_namespace.get_peer(db=
|
|
88
|
+
namespace = await prefix.ip_namespace.get_peer(db=graphql_context.db) # type: ignore[attr-defined]
|
|
88
89
|
subnets = await get_subnets(
|
|
89
|
-
db=
|
|
90
|
+
db=graphql_context.db,
|
|
90
91
|
ip_prefix=ipaddress.ip_network(prefix.prefix.value), # type: ignore[attr-defined]
|
|
91
92
|
namespace=namespace,
|
|
92
|
-
branch=
|
|
93
|
+
branch=graphql_context.branch,
|
|
93
94
|
)
|
|
94
95
|
|
|
95
|
-
pool =
|
|
96
|
+
pool = IPSet([prefix.prefix.value])
|
|
96
97
|
for subnet in subnets:
|
|
97
|
-
pool.
|
|
98
|
+
pool.remove(addr=str(subnet.prefix))
|
|
99
|
+
|
|
100
|
+
prefix_ver = ipaddress.ip_network(prefix.prefix.value).version
|
|
101
|
+
next_available = get_next_available_prefix(pool=pool, prefix_length=prefix_length, prefix_ver=prefix_ver)
|
|
98
102
|
|
|
99
|
-
next_available = pool.get(prefixlen=prefix_length)
|
|
100
103
|
return {"prefix": str(next_available)}
|
|
101
104
|
|
|
102
105
|
|
|
@@ -105,6 +108,7 @@ InfrahubIPAddressGetNextAvailable = Field(
|
|
|
105
108
|
prefix_id=String(required=True),
|
|
106
109
|
prefix_length=Int(required=False),
|
|
107
110
|
resolver=IPAddressGetNextAvailable.resolve,
|
|
111
|
+
required=True,
|
|
108
112
|
)
|
|
109
113
|
|
|
110
114
|
|
|
@@ -113,4 +117,5 @@ InfrahubIPPrefixGetNextAvailable = Field(
|
|
|
113
117
|
prefix_id=String(required=True),
|
|
114
118
|
prefix_length=Int(required=False),
|
|
115
119
|
resolver=IPPrefixGetNextAvailable.resolve,
|
|
120
|
+
required=True,
|
|
116
121
|
)
|
|
@@ -15,30 +15,30 @@ if TYPE_CHECKING:
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Relationships(ObjectType):
|
|
18
|
-
edges = List(RelationshipNode)
|
|
19
|
-
count = Int()
|
|
18
|
+
edges = List(of_type=NonNull(RelationshipNode), required=True)
|
|
19
|
+
count = Int(required=True)
|
|
20
20
|
|
|
21
21
|
@staticmethod
|
|
22
22
|
async def resolve(
|
|
23
|
-
root: dict, #
|
|
23
|
+
root: dict, # noqa: ARG004
|
|
24
24
|
info: GraphQLResolveInfo,
|
|
25
25
|
ids: list[str],
|
|
26
26
|
limit: int = 10,
|
|
27
27
|
offset: int = 0,
|
|
28
28
|
excluded_namespaces: Optional[list[str]] = None,
|
|
29
29
|
) -> dict[str, Any]:
|
|
30
|
-
|
|
30
|
+
graphql_context: GraphqlContext = info.context
|
|
31
31
|
|
|
32
32
|
fields = await extract_fields_first_node(info)
|
|
33
33
|
excluded_namespaces = excluded_namespaces or []
|
|
34
34
|
|
|
35
35
|
response: dict[str, Any] = {"edges": [], "count": None}
|
|
36
36
|
|
|
37
|
-
async with
|
|
37
|
+
async with graphql_context.db.start_session() as db:
|
|
38
38
|
query = await RelationshipGetByIdentifierQuery.init(
|
|
39
39
|
db=db,
|
|
40
|
-
branch=
|
|
41
|
-
at=
|
|
40
|
+
branch=graphql_context.branch,
|
|
41
|
+
at=graphql_context.at,
|
|
42
42
|
identifiers=ids,
|
|
43
43
|
excluded_namespaces=excluded_namespaces,
|
|
44
44
|
limit=limit,
|
|
@@ -74,9 +74,10 @@ class Relationships(ObjectType):
|
|
|
74
74
|
|
|
75
75
|
Relationship = Field(
|
|
76
76
|
Relationships,
|
|
77
|
-
resolver=Relationships.resolve,
|
|
78
|
-
limit=Int(required=False),
|
|
79
|
-
offset=Int(required=False),
|
|
80
77
|
ids=List(NonNull(String), required=True),
|
|
81
78
|
excluded_namespaces=List(String),
|
|
79
|
+
limit=Int(required=False),
|
|
80
|
+
offset=Int(required=False),
|
|
81
|
+
resolver=Relationships.resolve,
|
|
82
|
+
required=True,
|
|
82
83
|
)
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any
|
|
4
4
|
|
|
5
|
-
from graphene import Field, Float, Int, List, ObjectType, String
|
|
5
|
+
from graphene import Field, Float, Int, List, NonNull, ObjectType, String
|
|
6
6
|
from infrahub_sdk.utils import extract_fields_first_node
|
|
7
7
|
|
|
8
8
|
from infrahub.core import registry
|
|
@@ -21,8 +21,10 @@ from infrahub.pools.number import NumberUtilizationGetter
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
22
|
from graphql import GraphQLResolveInfo
|
|
23
23
|
|
|
24
|
+
from infrahub.core.branch import Branch
|
|
24
25
|
from infrahub.core.node import Node
|
|
25
26
|
from infrahub.core.protocols import CoreNode
|
|
27
|
+
from infrahub.core.timestamp import Timestamp
|
|
26
28
|
from infrahub.database import InfrahubDatabase
|
|
27
29
|
from infrahub.graphql.initialization import GraphqlContext
|
|
28
30
|
|
|
@@ -69,19 +71,21 @@ def _validate_pool_type(pool_id: str, pool: CoreNode | None = None) -> CoreNode:
|
|
|
69
71
|
|
|
70
72
|
class PoolAllocated(ObjectType):
|
|
71
73
|
count = Field(Int, required=True, description="The number of allocations within the selected pool.")
|
|
72
|
-
edges = Field(List(of_type=PoolAllocatedEdge, required=True), required=True)
|
|
74
|
+
edges = Field(List(of_type=NonNull(PoolAllocatedEdge), required=True), required=True)
|
|
73
75
|
|
|
74
76
|
@staticmethod
|
|
75
|
-
async def resolve(
|
|
76
|
-
root: dict,
|
|
77
|
+
async def resolve(
|
|
78
|
+
root: dict, # noqa: ARG004
|
|
77
79
|
info: GraphQLResolveInfo,
|
|
78
80
|
pool_id: str,
|
|
79
81
|
resource_id: str,
|
|
80
82
|
offset: int = 0,
|
|
81
83
|
limit: int = 10,
|
|
82
84
|
) -> dict:
|
|
83
|
-
|
|
84
|
-
pool: CoreNode | None = await NodeManager.get_one(
|
|
85
|
+
graphql_context: GraphqlContext = info.context
|
|
86
|
+
pool: CoreNode | None = await NodeManager.get_one(
|
|
87
|
+
id=pool_id, db=graphql_context.db, branch=graphql_context.branch
|
|
88
|
+
)
|
|
85
89
|
|
|
86
90
|
fields = await extract_fields_first_node(info=info)
|
|
87
91
|
|
|
@@ -90,14 +94,19 @@ class PoolAllocated(ObjectType):
|
|
|
90
94
|
match pool.get_kind():
|
|
91
95
|
case InfrahubKind.NUMBERPOOL:
|
|
92
96
|
return await resolve_number_pool_allocation(
|
|
93
|
-
db=
|
|
97
|
+
db=graphql_context.db,
|
|
98
|
+
graphql_context=graphql_context,
|
|
99
|
+
pool=pool,
|
|
100
|
+
fields=fields,
|
|
101
|
+
offset=offset,
|
|
102
|
+
limit=limit,
|
|
94
103
|
)
|
|
95
104
|
case InfrahubKind.IPPREFIXPOOL:
|
|
96
105
|
allocated_kinds.append(InfrahubKind.IPPREFIX)
|
|
97
106
|
case InfrahubKind.IPADDRESSPOOL:
|
|
98
107
|
allocated_kinds.append(InfrahubKind.IPADDRESS)
|
|
99
108
|
|
|
100
|
-
resources = await pool.resources.get_peers(db=
|
|
109
|
+
resources = await pool.resources.get_peers(db=graphql_context.db) # type: ignore[attr-defined,union-attr]
|
|
101
110
|
if resource_id not in resources:
|
|
102
111
|
raise ValidationError(
|
|
103
112
|
input_value=f"The selected pool_id={pool_id} doesn't contain the requested resource_id={resource_id}"
|
|
@@ -106,8 +115,8 @@ class PoolAllocated(ObjectType):
|
|
|
106
115
|
resource = resources[resource_id]
|
|
107
116
|
|
|
108
117
|
query = await IPPrefixUtilization.init(
|
|
109
|
-
db=
|
|
110
|
-
at=
|
|
118
|
+
db=graphql_context.db,
|
|
119
|
+
at=graphql_context.at,
|
|
111
120
|
ip_prefixes=[resource],
|
|
112
121
|
allocated_kinds=allocated_kinds,
|
|
113
122
|
offset=offset,
|
|
@@ -115,10 +124,10 @@ class PoolAllocated(ObjectType):
|
|
|
115
124
|
)
|
|
116
125
|
response: dict[str, Any] = {}
|
|
117
126
|
if "count" in fields:
|
|
118
|
-
response["count"] = await query.count(db=
|
|
127
|
+
response["count"] = await query.count(db=graphql_context.db)
|
|
119
128
|
|
|
120
129
|
if edges := fields.get("edges"):
|
|
121
|
-
await query.execute(db=
|
|
130
|
+
await query.execute(db=graphql_context.db)
|
|
122
131
|
|
|
123
132
|
node_fields = edges.get("node", {})
|
|
124
133
|
|
|
@@ -146,9 +155,9 @@ class PoolAllocated(ObjectType):
|
|
|
146
155
|
if not identifier_query_class:
|
|
147
156
|
raise ValidationError(input_value=f"This query doesn't get support {pool.get_kind()}")
|
|
148
157
|
identifier_query = await identifier_query_class.init(
|
|
149
|
-
db=
|
|
158
|
+
db=graphql_context.db, at=graphql_context.at, pool_id=pool_id, allocated=allocated_ids
|
|
150
159
|
)
|
|
151
|
-
await identifier_query.execute(db=
|
|
160
|
+
await identifier_query.execute(db=graphql_context.db)
|
|
152
161
|
|
|
153
162
|
reservations = {}
|
|
154
163
|
for result in identifier_query.get_results():
|
|
@@ -171,20 +180,22 @@ class PoolUtilization(ObjectType):
|
|
|
171
180
|
utilization_default_branch = Field(
|
|
172
181
|
Float, required=True, description="The overall utilization of the pool isolated to the default branch."
|
|
173
182
|
)
|
|
174
|
-
edges = Field(List(of_type=IPPrefixUtilizationEdge, required=True), required=True)
|
|
183
|
+
edges = Field(List(of_type=NonNull(IPPrefixUtilizationEdge), required=True), required=True)
|
|
175
184
|
|
|
176
185
|
@staticmethod
|
|
177
|
-
async def resolve(
|
|
178
|
-
root: dict,
|
|
186
|
+
async def resolve(
|
|
187
|
+
root: dict, # noqa: ARG004
|
|
179
188
|
info: GraphQLResolveInfo,
|
|
180
189
|
pool_id: str,
|
|
181
190
|
) -> dict:
|
|
182
|
-
|
|
183
|
-
db: InfrahubDatabase =
|
|
184
|
-
pool: CoreNode | None = await NodeManager.get_one(id=pool_id, db=db, branch=
|
|
191
|
+
graphql_context: GraphqlContext = info.context
|
|
192
|
+
db: InfrahubDatabase = graphql_context.db
|
|
193
|
+
pool: CoreNode | None = await NodeManager.get_one(id=pool_id, db=db, branch=graphql_context.branch)
|
|
185
194
|
pool = _validate_pool_type(pool_id=pool_id, pool=pool)
|
|
186
195
|
if pool.get_kind() == "CoreNumberPool":
|
|
187
|
-
return await resolve_number_pool_utilization(
|
|
196
|
+
return await resolve_number_pool_utilization(
|
|
197
|
+
db=db, at=graphql_context.at, pool=pool, branch=graphql_context.branch
|
|
198
|
+
)
|
|
188
199
|
|
|
189
200
|
resources_map: dict[str, Node] = {}
|
|
190
201
|
|
|
@@ -193,7 +204,9 @@ class PoolUtilization(ObjectType):
|
|
|
193
204
|
except SchemaNotFoundError:
|
|
194
205
|
pass
|
|
195
206
|
|
|
196
|
-
utilization_getter = PrefixUtilizationGetter(
|
|
207
|
+
utilization_getter = PrefixUtilizationGetter(
|
|
208
|
+
db=db, ip_prefixes=list(resources_map.values()), at=graphql_context.at
|
|
209
|
+
)
|
|
197
210
|
fields = await extract_fields_first_node(info=info)
|
|
198
211
|
response: dict[str, Any] = {}
|
|
199
212
|
total_utilization = None
|
|
@@ -262,11 +275,11 @@ class PoolUtilization(ObjectType):
|
|
|
262
275
|
|
|
263
276
|
|
|
264
277
|
async def resolve_number_pool_allocation(
|
|
265
|
-
db: InfrahubDatabase,
|
|
278
|
+
db: InfrahubDatabase, graphql_context: GraphqlContext, pool: CoreNode, fields: dict, offset: int, limit: int
|
|
266
279
|
) -> dict:
|
|
267
280
|
response: dict[str, Any] = {}
|
|
268
281
|
query = await NumberPoolGetAllocated.init(
|
|
269
|
-
db=db, pool=pool, offset=offset, limit=limit, branch=
|
|
282
|
+
db=db, pool=pool, offset=offset, limit=limit, branch=graphql_context.branch, branch_agnostic=True
|
|
270
283
|
)
|
|
271
284
|
|
|
272
285
|
if "count" in fields:
|
|
@@ -290,8 +303,10 @@ async def resolve_number_pool_allocation(
|
|
|
290
303
|
return response
|
|
291
304
|
|
|
292
305
|
|
|
293
|
-
async def resolve_number_pool_utilization(
|
|
294
|
-
|
|
306
|
+
async def resolve_number_pool_utilization(
|
|
307
|
+
db: InfrahubDatabase, pool: CoreNode, at: Timestamp | str | None, branch: Branch
|
|
308
|
+
) -> dict:
|
|
309
|
+
number_pool = NumberUtilizationGetter(db=db, pool=pool, at=at, branch=branch)
|
|
295
310
|
await number_pool.load_data()
|
|
296
311
|
|
|
297
312
|
return {
|
|
@@ -322,9 +337,10 @@ InfrahubResourcePoolAllocated = Field(
|
|
|
322
337
|
limit=Int(required=False),
|
|
323
338
|
offset=Int(required=False),
|
|
324
339
|
resolver=PoolAllocated.resolve,
|
|
340
|
+
required=True,
|
|
325
341
|
)
|
|
326
342
|
|
|
327
343
|
|
|
328
344
|
InfrahubResourcePoolUtilization = Field(
|
|
329
|
-
PoolUtilization, pool_id=String(required=True), resolver=PoolUtilization.resolve
|
|
345
|
+
PoolUtilization, pool_id=String(required=True), resolver=PoolUtilization.resolve, required=True
|
|
330
346
|
)
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import ipaddress
|
|
4
4
|
from typing import TYPE_CHECKING, Any, Optional
|
|
5
5
|
|
|
6
|
-
from graphene import Boolean, Field, Int, List, ObjectType, String
|
|
6
|
+
from graphene import Boolean, Field, Int, List, NonNull, ObjectType, String
|
|
7
7
|
from infrahub_sdk.utils import extract_fields_first_node, is_valid_uuid
|
|
8
8
|
|
|
9
9
|
from infrahub.core.constants import InfrahubKind
|
|
@@ -27,7 +27,7 @@ class NodeEdge(ObjectType):
|
|
|
27
27
|
|
|
28
28
|
class NodeEdges(ObjectType):
|
|
29
29
|
count = Field(Int, required=True)
|
|
30
|
-
edges = Field(List(of_type=NodeEdge, required=True)
|
|
30
|
+
edges = Field(List(of_type=NonNull(NodeEdge)), required=True)
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
def _collapse_ipv6(s: str) -> str:
|
|
@@ -97,13 +97,13 @@ def _collapse_ipv6(s: str) -> str:
|
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
async def search_resolver(
|
|
100
|
-
root: dict, #
|
|
100
|
+
root: dict, # noqa: ARG001
|
|
101
101
|
info: GraphQLResolveInfo,
|
|
102
102
|
q: str,
|
|
103
103
|
limit: int = 10,
|
|
104
104
|
partial_match: bool = True,
|
|
105
105
|
) -> dict[str, Any]:
|
|
106
|
-
|
|
106
|
+
graphql_context: GraphqlContext = info.context
|
|
107
107
|
response: dict[str, Any] = {}
|
|
108
108
|
results: list[CoreNode] = []
|
|
109
109
|
|
|
@@ -111,7 +111,7 @@ async def search_resolver(
|
|
|
111
111
|
|
|
112
112
|
if is_valid_uuid(q):
|
|
113
113
|
matching: Optional[CoreNode] = await NodeManager.get_one(
|
|
114
|
-
db=
|
|
114
|
+
db=graphql_context.db, branch=graphql_context.branch, at=graphql_context.at, id=q
|
|
115
115
|
)
|
|
116
116
|
if matching:
|
|
117
117
|
results.append(matching)
|
|
@@ -124,8 +124,8 @@ async def search_resolver(
|
|
|
124
124
|
|
|
125
125
|
for kind in [InfrahubKind.NODE, InfrahubKind.GENERICGROUP]:
|
|
126
126
|
objs = await NodeManager.query(
|
|
127
|
-
db=
|
|
128
|
-
branch=
|
|
127
|
+
db=graphql_context.db,
|
|
128
|
+
branch=graphql_context.branch,
|
|
129
129
|
schema=kind,
|
|
130
130
|
filters={"any__value": q},
|
|
131
131
|
limit=limit,
|
|
@@ -133,7 +133,7 @@ async def search_resolver(
|
|
|
133
133
|
)
|
|
134
134
|
results.extend(objs)
|
|
135
135
|
|
|
136
|
-
if "edges" in fields
|
|
136
|
+
if "edges" in fields:
|
|
137
137
|
response["edges"] = [{"node": {"id": obj.id, "kind": obj.get_kind()}} for obj in results]
|
|
138
138
|
|
|
139
139
|
if "count" in fields:
|
|
@@ -148,4 +148,5 @@ InfrahubSearchAnywhere = Field(
|
|
|
148
148
|
limit=Int(required=False),
|
|
149
149
|
partial_match=Boolean(required=False),
|
|
150
150
|
resolver=search_resolver,
|
|
151
|
+
required=True,
|
|
151
152
|
)
|
|
@@ -2,11 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any
|
|
4
4
|
|
|
5
|
-
from graphene import Boolean, Field, List, ObjectType, String
|
|
5
|
+
from graphene import Boolean, Field, List, NonNull, ObjectType, String
|
|
6
6
|
from infrahub_sdk.utils import extract_fields_first_node
|
|
7
7
|
|
|
8
|
-
from infrahub.services import services
|
|
9
|
-
|
|
10
8
|
if TYPE_CHECKING:
|
|
11
9
|
from graphql import GraphQLResolveInfo
|
|
12
10
|
|
|
@@ -30,7 +28,7 @@ class StatusWorkerEdge(ObjectType):
|
|
|
30
28
|
|
|
31
29
|
|
|
32
30
|
class StatusWorkerEdges(ObjectType):
|
|
33
|
-
edges = Field(List(of_type=StatusWorkerEdge, required=True), required=True)
|
|
31
|
+
edges = Field(List(of_type=NonNull(StatusWorkerEdge), required=True), required=True)
|
|
34
32
|
|
|
35
33
|
|
|
36
34
|
class Status(ObjectType):
|
|
@@ -39,15 +37,18 @@ class Status(ObjectType):
|
|
|
39
37
|
|
|
40
38
|
|
|
41
39
|
async def resolve_status(
|
|
42
|
-
root: dict, #
|
|
40
|
+
root: dict, # noqa: ARG001
|
|
43
41
|
info: GraphQLResolveInfo,
|
|
44
42
|
) -> dict:
|
|
45
|
-
|
|
46
|
-
service =
|
|
43
|
+
graphql_context: GraphqlContext = info.context
|
|
44
|
+
service = graphql_context.service
|
|
45
|
+
if service is None:
|
|
46
|
+
raise ValueError("GraphqlContext.service is None")
|
|
47
|
+
|
|
47
48
|
fields = await extract_fields_first_node(info)
|
|
48
49
|
response: dict[str, Any] = {}
|
|
49
50
|
workers = await service.component.list_workers(
|
|
50
|
-
branch=str(
|
|
51
|
+
branch=str(graphql_context.branch.uuid) or graphql_context.branch.name, schema_hash=True
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
if summary := fields.get("summary"):
|
|
@@ -63,4 +64,6 @@ async def resolve_status(
|
|
|
63
64
|
return response
|
|
64
65
|
|
|
65
66
|
|
|
66
|
-
InfrahubStatus = Field(
|
|
67
|
+
InfrahubStatus = Field(
|
|
68
|
+
Status, description="Retrieve the status of all infrahub workers.", resolver=resolve_status, required=True
|
|
69
|
+
)
|
infrahub/graphql/queries/task.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any
|
|
4
4
|
|
|
5
|
-
from graphene import Field, Int, List, ObjectType, String
|
|
5
|
+
from graphene import Field, Int, List, NonNull, ObjectType, String
|
|
6
6
|
from infrahub_sdk.utils import extract_fields_first_node
|
|
7
7
|
from prefect.client.schemas.objects import StateType
|
|
8
8
|
|
|
@@ -17,12 +17,12 @@ if TYPE_CHECKING:
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class Tasks(ObjectType):
|
|
20
|
-
edges = List(TaskNodes)
|
|
21
|
-
count = Int()
|
|
20
|
+
edges = List(NonNull(TaskNodes), required=True)
|
|
21
|
+
count = Int(required=True)
|
|
22
22
|
|
|
23
23
|
@staticmethod
|
|
24
24
|
async def resolve(
|
|
25
|
-
root: dict, #
|
|
25
|
+
root: dict, # noqa: ARG004
|
|
26
26
|
info: GraphQLResolveInfo,
|
|
27
27
|
limit: int = 10,
|
|
28
28
|
offset: int = 0,
|
|
@@ -49,7 +49,7 @@ class Tasks(ObjectType):
|
|
|
49
49
|
|
|
50
50
|
@staticmethod
|
|
51
51
|
async def resolve_branch_status(
|
|
52
|
-
root: dict, #
|
|
52
|
+
root: dict, # noqa: ARG004
|
|
53
53
|
info: GraphQLResolveInfo,
|
|
54
54
|
branch: str,
|
|
55
55
|
) -> dict[str, Any]:
|
|
@@ -72,11 +72,11 @@ class Tasks(ObjectType):
|
|
|
72
72
|
limit: int | None = None,
|
|
73
73
|
offset: int | None = None,
|
|
74
74
|
) -> dict[str, Any]:
|
|
75
|
-
|
|
75
|
+
graphql_context: GraphqlContext = info.context
|
|
76
76
|
fields = await extract_fields_first_node(info)
|
|
77
77
|
|
|
78
78
|
prefect_tasks = await PrefectTask.query(
|
|
79
|
-
db=
|
|
79
|
+
db=graphql_context.db,
|
|
80
80
|
fields=fields,
|
|
81
81
|
q=q,
|
|
82
82
|
ids=ids,
|
|
@@ -97,7 +97,6 @@ class Tasks(ObjectType):
|
|
|
97
97
|
|
|
98
98
|
Task = Field(
|
|
99
99
|
Tasks,
|
|
100
|
-
resolver=Tasks.resolve,
|
|
101
100
|
limit=Int(required=False),
|
|
102
101
|
offset=Int(required=False),
|
|
103
102
|
related_node__ids=List(String),
|
|
@@ -106,11 +105,14 @@ Task = Field(
|
|
|
106
105
|
workflow=List(String),
|
|
107
106
|
ids=List(String),
|
|
108
107
|
q=String(required=False),
|
|
108
|
+
resolver=Tasks.resolve,
|
|
109
|
+
required=True,
|
|
109
110
|
)
|
|
110
111
|
|
|
111
112
|
TaskBranchStatus = Field(
|
|
112
113
|
Tasks,
|
|
113
|
-
resolver=Tasks.resolve_branch_status,
|
|
114
114
|
branch=String(required=False),
|
|
115
115
|
description="Return the list of all pending or running tasks that can modify the data, for a given branch",
|
|
116
|
+
resolver=Tasks.resolve_branch_status,
|
|
117
|
+
required=True,
|
|
116
118
|
)
|