infrahub-server 1.1.7__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 +50 -21
- infrahub/core/branch/models.py +4 -4
- infrahub/core/branch/tasks.py +130 -125
- 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 +1 -1
- infrahub/core/diff/enricher/cardinality_one.py +6 -1
- infrahub/core/diff/enricher/hierarchy.py +22 -7
- infrahub/core/diff/enricher/labels.py +6 -1
- infrahub/core/diff/enricher/path_identifier.py +5 -1
- infrahub/core/diff/enricher/summary_counts.py +107 -0
- infrahub/core/diff/merger/merger.py +3 -1
- infrahub/core/diff/model/path.py +34 -11
- infrahub/core/diff/parent_node_adder.py +78 -0
- infrahub/core/diff/payload_builder.py +13 -2
- infrahub/core/diff/query/all_conflicts.py +1 -1
- infrahub/core/diff/query/artifact.py +1 -1
- infrahub/core/diff/query/delete_query.py +1 -1
- infrahub/core/diff/query/diff_get.py +1 -1
- infrahub/core/diff/query/diff_summary.py +1 -1
- infrahub/core/diff/query/field_specifiers.py +1 -1
- infrahub/core/diff/query/field_summary.py +1 -1
- infrahub/core/diff/query/filters.py +2 -2
- infrahub/core/diff/query/get_conflict_query.py +1 -1
- infrahub/core/diff/query/has_conflicts_query.py +1 -1
- infrahub/core/diff/query/merge.py +3 -3
- infrahub/core/diff/query/merge_tracking_id.py +1 -1
- infrahub/core/diff/query/roots_metadata.py +1 -1
- infrahub/core/diff/query/save.py +191 -185
- infrahub/core/diff/query/summary_counts_enricher.py +52 -5
- infrahub/core/diff/query/time_range_query.py +1 -1
- infrahub/core/diff/query/update_conflict_query.py +1 -1
- infrahub/core/diff/repository/deserializer.py +9 -4
- infrahub/core/diff/repository/repository.py +156 -38
- 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 +164 -45
- infrahub/core/node/base.py +1 -1
- infrahub/core/node/delete_validator.py +4 -4
- infrahub/core/node/ipam.py +7 -7
- 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 +4 -4
- infrahub/core/query/ipam.py +4 -4
- infrahub/core/query/node.py +11 -12
- infrahub/core/query/relationship.py +211 -25
- infrahub/core/query/resource_manager.py +10 -10
- 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 +2 -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 +1 -1
- infrahub/database/__init__.py +3 -2
- infrahub/database/memgraph.py +1 -1
- infrahub/dependencies/builder/diff/combiner.py +1 -1
- infrahub/dependencies/builder/diff/conflicts_enricher.py +1 -1
- 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 +8 -0
- 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 -15
- infrahub/graphql/mutations/diff.py +33 -17
- 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 +233 -45
- infrahub/graphql/mutations/menu.py +10 -10
- infrahub/graphql/mutations/proposed_change.py +36 -28
- infrahub/graphql/mutations/relationship.py +341 -130
- 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 +10 -7
- 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 +37 -25
- 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/globals.py +15 -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/batch.py +2 -2
- infrahub_sdk/client.py +8 -0
- infrahub_sdk/config.py +1 -1
- infrahub_sdk/ctl/branch.py +3 -2
- infrahub_sdk/ctl/check.py +4 -4
- 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 +6 -21
- infrahub_sdk/ctl/validate.py +2 -1
- infrahub_sdk/data.py +1 -1
- infrahub_sdk/exceptions.py +12 -0
- infrahub_sdk/generator.py +3 -0
- infrahub_sdk/node.py +5 -8
- infrahub_sdk/protocols.py +20 -8
- infrahub_sdk/schema/__init__.py +14 -5
- 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/testing/docker.py +30 -0
- infrahub_sdk/timestamp.py +134 -33
- infrahub_sdk/transfer/exporter/json.py +1 -1
- infrahub_sdk/utils.py +39 -1
- infrahub_sdk/yaml.py +2 -3
- {infrahub_server-1.1.7.dist-info → infrahub_server-1.2.0b1.dist-info}/METADATA +7 -6
- {infrahub_server-1.1.7.dist-info → infrahub_server-1.2.0b1.dist-info}/RECORD +383 -339
- infrahub_testcontainers/container.py +2 -3
- infrahub_testcontainers/docker-compose.test.yml +2 -2
- 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/{schema → artifacts}/__init__.py +0 -0
- {infrahub_server-1.1.7.dist-info → infrahub_server-1.2.0b1.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.1.7.dist-info → infrahub_server-1.2.0b1.dist-info}/WHEEL +0 -0
- {infrahub_server-1.1.7.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
|
|
@@ -71,19 +71,21 @@ def _validate_pool_type(pool_id: str, pool: CoreNode | None = None) -> CoreNode:
|
|
|
71
71
|
|
|
72
72
|
class PoolAllocated(ObjectType):
|
|
73
73
|
count = Field(Int, required=True, description="The number of allocations within the selected pool.")
|
|
74
|
-
edges = Field(List(of_type=PoolAllocatedEdge, required=True), required=True)
|
|
74
|
+
edges = Field(List(of_type=NonNull(PoolAllocatedEdge), required=True), required=True)
|
|
75
75
|
|
|
76
76
|
@staticmethod
|
|
77
|
-
async def resolve(
|
|
78
|
-
root: dict,
|
|
77
|
+
async def resolve(
|
|
78
|
+
root: dict, # noqa: ARG004
|
|
79
79
|
info: GraphQLResolveInfo,
|
|
80
80
|
pool_id: str,
|
|
81
81
|
resource_id: str,
|
|
82
82
|
offset: int = 0,
|
|
83
83
|
limit: int = 10,
|
|
84
84
|
) -> dict:
|
|
85
|
-
|
|
86
|
-
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
|
+
)
|
|
87
89
|
|
|
88
90
|
fields = await extract_fields_first_node(info=info)
|
|
89
91
|
|
|
@@ -92,14 +94,19 @@ class PoolAllocated(ObjectType):
|
|
|
92
94
|
match pool.get_kind():
|
|
93
95
|
case InfrahubKind.NUMBERPOOL:
|
|
94
96
|
return await resolve_number_pool_allocation(
|
|
95
|
-
db=
|
|
97
|
+
db=graphql_context.db,
|
|
98
|
+
graphql_context=graphql_context,
|
|
99
|
+
pool=pool,
|
|
100
|
+
fields=fields,
|
|
101
|
+
offset=offset,
|
|
102
|
+
limit=limit,
|
|
96
103
|
)
|
|
97
104
|
case InfrahubKind.IPPREFIXPOOL:
|
|
98
105
|
allocated_kinds.append(InfrahubKind.IPPREFIX)
|
|
99
106
|
case InfrahubKind.IPADDRESSPOOL:
|
|
100
107
|
allocated_kinds.append(InfrahubKind.IPADDRESS)
|
|
101
108
|
|
|
102
|
-
resources = await pool.resources.get_peers(db=
|
|
109
|
+
resources = await pool.resources.get_peers(db=graphql_context.db) # type: ignore[attr-defined,union-attr]
|
|
103
110
|
if resource_id not in resources:
|
|
104
111
|
raise ValidationError(
|
|
105
112
|
input_value=f"The selected pool_id={pool_id} doesn't contain the requested resource_id={resource_id}"
|
|
@@ -108,8 +115,8 @@ class PoolAllocated(ObjectType):
|
|
|
108
115
|
resource = resources[resource_id]
|
|
109
116
|
|
|
110
117
|
query = await IPPrefixUtilization.init(
|
|
111
|
-
db=
|
|
112
|
-
at=
|
|
118
|
+
db=graphql_context.db,
|
|
119
|
+
at=graphql_context.at,
|
|
113
120
|
ip_prefixes=[resource],
|
|
114
121
|
allocated_kinds=allocated_kinds,
|
|
115
122
|
offset=offset,
|
|
@@ -117,10 +124,10 @@ class PoolAllocated(ObjectType):
|
|
|
117
124
|
)
|
|
118
125
|
response: dict[str, Any] = {}
|
|
119
126
|
if "count" in fields:
|
|
120
|
-
response["count"] = await query.count(db=
|
|
127
|
+
response["count"] = await query.count(db=graphql_context.db)
|
|
121
128
|
|
|
122
129
|
if edges := fields.get("edges"):
|
|
123
|
-
await query.execute(db=
|
|
130
|
+
await query.execute(db=graphql_context.db)
|
|
124
131
|
|
|
125
132
|
node_fields = edges.get("node", {})
|
|
126
133
|
|
|
@@ -148,9 +155,9 @@ class PoolAllocated(ObjectType):
|
|
|
148
155
|
if not identifier_query_class:
|
|
149
156
|
raise ValidationError(input_value=f"This query doesn't get support {pool.get_kind()}")
|
|
150
157
|
identifier_query = await identifier_query_class.init(
|
|
151
|
-
db=
|
|
158
|
+
db=graphql_context.db, at=graphql_context.at, pool_id=pool_id, allocated=allocated_ids
|
|
152
159
|
)
|
|
153
|
-
await identifier_query.execute(db=
|
|
160
|
+
await identifier_query.execute(db=graphql_context.db)
|
|
154
161
|
|
|
155
162
|
reservations = {}
|
|
156
163
|
for result in identifier_query.get_results():
|
|
@@ -173,20 +180,22 @@ class PoolUtilization(ObjectType):
|
|
|
173
180
|
utilization_default_branch = Field(
|
|
174
181
|
Float, required=True, description="The overall utilization of the pool isolated to the default branch."
|
|
175
182
|
)
|
|
176
|
-
edges = Field(List(of_type=IPPrefixUtilizationEdge, required=True), required=True)
|
|
183
|
+
edges = Field(List(of_type=NonNull(IPPrefixUtilizationEdge), required=True), required=True)
|
|
177
184
|
|
|
178
185
|
@staticmethod
|
|
179
|
-
async def resolve(
|
|
180
|
-
root: dict,
|
|
186
|
+
async def resolve(
|
|
187
|
+
root: dict, # noqa: ARG004
|
|
181
188
|
info: GraphQLResolveInfo,
|
|
182
189
|
pool_id: str,
|
|
183
190
|
) -> dict:
|
|
184
|
-
|
|
185
|
-
db: InfrahubDatabase =
|
|
186
|
-
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)
|
|
187
194
|
pool = _validate_pool_type(pool_id=pool_id, pool=pool)
|
|
188
195
|
if pool.get_kind() == "CoreNumberPool":
|
|
189
|
-
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
|
+
)
|
|
190
199
|
|
|
191
200
|
resources_map: dict[str, Node] = {}
|
|
192
201
|
|
|
@@ -195,7 +204,9 @@ class PoolUtilization(ObjectType):
|
|
|
195
204
|
except SchemaNotFoundError:
|
|
196
205
|
pass
|
|
197
206
|
|
|
198
|
-
utilization_getter = PrefixUtilizationGetter(
|
|
207
|
+
utilization_getter = PrefixUtilizationGetter(
|
|
208
|
+
db=db, ip_prefixes=list(resources_map.values()), at=graphql_context.at
|
|
209
|
+
)
|
|
199
210
|
fields = await extract_fields_first_node(info=info)
|
|
200
211
|
response: dict[str, Any] = {}
|
|
201
212
|
total_utilization = None
|
|
@@ -264,11 +275,11 @@ class PoolUtilization(ObjectType):
|
|
|
264
275
|
|
|
265
276
|
|
|
266
277
|
async def resolve_number_pool_allocation(
|
|
267
|
-
db: InfrahubDatabase,
|
|
278
|
+
db: InfrahubDatabase, graphql_context: GraphqlContext, pool: CoreNode, fields: dict, offset: int, limit: int
|
|
268
279
|
) -> dict:
|
|
269
280
|
response: dict[str, Any] = {}
|
|
270
281
|
query = await NumberPoolGetAllocated.init(
|
|
271
|
-
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
|
|
272
283
|
)
|
|
273
284
|
|
|
274
285
|
if "count" in fields:
|
|
@@ -326,9 +337,10 @@ InfrahubResourcePoolAllocated = Field(
|
|
|
326
337
|
limit=Int(required=False),
|
|
327
338
|
offset=Int(required=False),
|
|
328
339
|
resolver=PoolAllocated.resolve,
|
|
340
|
+
required=True,
|
|
329
341
|
)
|
|
330
342
|
|
|
331
343
|
|
|
332
344
|
InfrahubResourcePoolUtilization = Field(
|
|
333
|
-
PoolUtilization, pool_id=String(required=True), resolver=PoolUtilization.resolve
|
|
345
|
+
PoolUtilization, pool_id=String(required=True), resolver=PoolUtilization.resolve, required=True
|
|
334
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
|
)
|