infrahub-server 1.2.0rc0__py3-none-any.whl → 1.2.1__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/dependencies.py +6 -6
- infrahub/api/diff/validation_models.py +7 -7
- infrahub/api/schema.py +1 -1
- infrahub/artifacts/models.py +5 -3
- infrahub/artifacts/tasks.py +3 -5
- infrahub/cli/__init__.py +13 -9
- infrahub/cli/constants.py +3 -0
- infrahub/cli/db.py +165 -183
- infrahub/cli/upgrade.py +146 -0
- infrahub/computed_attribute/gather.py +185 -0
- infrahub/computed_attribute/models.py +240 -12
- infrahub/computed_attribute/tasks.py +77 -441
- infrahub/computed_attribute/triggers.py +13 -47
- infrahub/config.py +43 -32
- infrahub/context.py +14 -0
- infrahub/core/account.py +4 -4
- infrahub/core/attribute.py +58 -58
- infrahub/core/branch/tasks.py +74 -22
- infrahub/core/changelog/diff.py +95 -36
- infrahub/core/changelog/models.py +217 -43
- infrahub/core/constants/__init__.py +28 -0
- infrahub/core/constants/infrahubkind.py +2 -0
- infrahub/core/constants/schema.py +2 -0
- infrahub/core/constraint/node/runner.py +9 -8
- infrahub/core/diff/branch_differ.py +10 -10
- infrahub/core/diff/enricher/cardinality_one.py +5 -0
- infrahub/core/diff/enricher/hierarchy.py +17 -4
- infrahub/core/diff/enricher/labels.py +5 -0
- infrahub/core/diff/enricher/path_identifier.py +4 -0
- infrahub/core/diff/ipam_diff_parser.py +4 -5
- infrahub/core/diff/model/diff.py +27 -27
- infrahub/core/diff/model/path.py +32 -9
- infrahub/core/diff/parent_node_adder.py +78 -0
- infrahub/core/diff/payload_builder.py +13 -2
- infrahub/core/diff/query/filters.py +2 -2
- infrahub/core/diff/query/merge.py +20 -17
- infrahub/core/diff/query/save.py +188 -182
- infrahub/core/diff/query/summary_counts_enricher.py +51 -4
- infrahub/core/diff/query_parser.py +4 -4
- infrahub/core/diff/repository/deserializer.py +8 -3
- infrahub/core/diff/repository/repository.py +156 -38
- infrahub/core/diff/tasks.py +4 -4
- infrahub/core/graph/__init__.py +1 -1
- infrahub/core/graph/index.py +3 -0
- infrahub/core/initialization.py +1 -10
- infrahub/core/ipam/constants.py +3 -4
- infrahub/core/ipam/reconciler.py +12 -12
- infrahub/core/ipam/utilization.py +10 -13
- infrahub/core/manager.py +36 -36
- infrahub/core/merge.py +7 -7
- infrahub/core/migrations/__init__.py +2 -3
- infrahub/core/migrations/graph/__init__.py +12 -3
- infrahub/core/migrations/graph/m017_add_core_profile.py +1 -5
- infrahub/core/migrations/graph/m018_uniqueness_nulls.py +4 -4
- infrahub/core/migrations/graph/m019_restore_rels_to_time.py +256 -0
- infrahub/core/migrations/graph/m020_duplicate_edges.py +160 -0
- infrahub/core/migrations/graph/m021_missing_hierarchy_merge.py +51 -0
- infrahub/core/migrations/graph/m022_add_generate_template_attr.py +48 -0
- infrahub/core/migrations/graph/m023_deduplicate_cardinality_one_relationships.py +96 -0
- infrahub/core/migrations/query/attribute_add.py +2 -2
- infrahub/core/migrations/query/node_duplicate.py +43 -26
- infrahub/core/migrations/query/schema_attribute_update.py +2 -2
- infrahub/core/migrations/schema/models.py +19 -4
- infrahub/core/migrations/schema/node_remove.py +26 -12
- infrahub/core/migrations/schema/tasks.py +2 -2
- infrahub/core/migrations/shared.py +16 -16
- infrahub/core/models.py +15 -6
- infrahub/core/node/__init__.py +43 -39
- infrahub/core/node/base.py +2 -4
- infrahub/core/node/constraints/attribute_uniqueness.py +2 -2
- infrahub/core/node/constraints/grouped_uniqueness.py +99 -47
- infrahub/core/node/constraints/interface.py +1 -2
- infrahub/core/node/delete_validator.py +3 -5
- infrahub/core/node/ipam.py +4 -4
- infrahub/core/node/permissions.py +7 -7
- infrahub/core/node/resource_manager/ip_address_pool.py +6 -6
- infrahub/core/node/resource_manager/ip_prefix_pool.py +6 -6
- infrahub/core/node/resource_manager/number_pool.py +3 -3
- infrahub/core/path.py +12 -12
- infrahub/core/property.py +11 -11
- infrahub/core/protocols.py +7 -0
- infrahub/core/protocols_base.py +21 -21
- infrahub/core/query/__init__.py +33 -33
- infrahub/core/query/attribute.py +6 -4
- infrahub/core/query/diff.py +3 -3
- infrahub/core/query/node.py +82 -32
- infrahub/core/query/relationship.py +228 -40
- infrahub/core/query/resource_manager.py +2 -0
- infrahub/core/query/standard_node.py +3 -3
- infrahub/core/query/subquery.py +9 -9
- infrahub/core/registry.py +13 -15
- infrahub/core/relationship/constraints/count.py +3 -4
- infrahub/core/relationship/constraints/peer_kind.py +3 -4
- infrahub/core/relationship/constraints/profiles_kind.py +2 -2
- infrahub/core/relationship/model.py +51 -59
- infrahub/core/schema/attribute_schema.py +16 -8
- infrahub/core/schema/basenode_schema.py +105 -44
- infrahub/core/schema/computed_attribute.py +3 -3
- infrahub/core/schema/definitions/core/__init__.py +147 -0
- infrahub/core/schema/definitions/core/account.py +171 -0
- infrahub/core/schema/definitions/core/artifact.py +136 -0
- infrahub/core/schema/definitions/core/builtin.py +24 -0
- infrahub/core/schema/definitions/core/check.py +68 -0
- infrahub/core/schema/definitions/core/core.py +17 -0
- infrahub/core/schema/definitions/core/generator.py +100 -0
- infrahub/core/schema/definitions/core/graphql_query.py +79 -0
- infrahub/core/schema/definitions/core/group.py +108 -0
- infrahub/core/schema/definitions/core/ipam.py +193 -0
- infrahub/core/schema/definitions/core/lineage.py +19 -0
- infrahub/core/schema/definitions/core/menu.py +48 -0
- infrahub/core/schema/definitions/core/permission.py +163 -0
- infrahub/core/schema/definitions/core/profile.py +18 -0
- infrahub/core/schema/definitions/core/propose_change.py +97 -0
- infrahub/core/schema/definitions/core/propose_change_comment.py +193 -0
- infrahub/core/schema/definitions/core/propose_change_validator.py +328 -0
- infrahub/core/schema/definitions/core/repository.py +286 -0
- infrahub/core/schema/definitions/core/resource_pool.py +170 -0
- infrahub/core/schema/definitions/core/template.py +27 -0
- infrahub/core/schema/definitions/core/transform.py +96 -0
- infrahub/core/schema/definitions/core/webhook.py +134 -0
- infrahub/core/schema/definitions/internal.py +16 -16
- infrahub/core/schema/dropdown.py +3 -4
- infrahub/core/schema/generated/attribute_schema.py +15 -18
- infrahub/core/schema/generated/base_node_schema.py +12 -14
- infrahub/core/schema/generated/node_schema.py +3 -5
- infrahub/core/schema/generated/relationship_schema.py +9 -11
- infrahub/core/schema/generic_schema.py +2 -2
- infrahub/core/schema/manager.py +20 -9
- infrahub/core/schema/node_schema.py +4 -2
- infrahub/core/schema/relationship_schema.py +14 -6
- infrahub/core/schema/schema_branch.py +292 -144
- infrahub/core/schema/schema_branch_computed.py +41 -4
- infrahub/core/task/task.py +3 -3
- infrahub/core/task/user_task.py +15 -15
- infrahub/core/timestamp.py +3 -3
- infrahub/core/utils.py +20 -18
- infrahub/core/validators/__init__.py +1 -3
- infrahub/core/validators/aggregated_checker.py +2 -2
- infrahub/core/validators/attribute/choices.py +2 -2
- infrahub/core/validators/attribute/enum.py +2 -2
- infrahub/core/validators/attribute/kind.py +2 -2
- infrahub/core/validators/attribute/length.py +2 -2
- infrahub/core/validators/attribute/optional.py +2 -2
- infrahub/core/validators/attribute/regex.py +2 -2
- infrahub/core/validators/attribute/unique.py +2 -2
- infrahub/core/validators/checks_runner.py +25 -2
- infrahub/core/validators/determiner.py +1 -3
- infrahub/core/validators/interface.py +6 -2
- infrahub/core/validators/model.py +22 -3
- infrahub/core/validators/models/validate_migration.py +17 -4
- infrahub/core/validators/node/attribute.py +2 -2
- infrahub/core/validators/node/generate_profile.py +2 -2
- infrahub/core/validators/node/hierarchy.py +3 -5
- infrahub/core/validators/node/inherit_from.py +27 -5
- infrahub/core/validators/node/relationship.py +2 -2
- infrahub/core/validators/relationship/count.py +4 -4
- infrahub/core/validators/relationship/optional.py +2 -2
- infrahub/core/validators/relationship/peer.py +2 -2
- infrahub/core/validators/shared.py +2 -2
- infrahub/core/validators/tasks.py +8 -0
- infrahub/core/validators/uniqueness/checker.py +22 -21
- infrahub/core/validators/uniqueness/index.py +2 -2
- infrahub/core/validators/uniqueness/model.py +11 -11
- infrahub/database/__init__.py +27 -22
- infrahub/database/metrics.py +7 -1
- infrahub/dependencies/builder/constraint/grouped/node_runner.py +1 -3
- infrahub/dependencies/builder/diff/deserializer.py +3 -1
- infrahub/dependencies/builder/diff/enricher/hierarchy.py +3 -1
- infrahub/dependencies/builder/diff/parent_node_adder.py +8 -0
- infrahub/dependencies/component/registry.py +2 -2
- infrahub/events/__init__.py +25 -2
- infrahub/events/artifact_action.py +64 -0
- infrahub/events/branch_action.py +33 -22
- infrahub/events/generator.py +71 -0
- infrahub/events/group_action.py +51 -21
- infrahub/events/models.py +18 -19
- infrahub/events/node_action.py +88 -37
- infrahub/events/repository_action.py +5 -18
- infrahub/events/schema_action.py +4 -9
- infrahub/events/utils.py +16 -0
- infrahub/events/validator_action.py +55 -0
- infrahub/exceptions.py +32 -24
- infrahub/generators/models.py +2 -3
- infrahub/generators/tasks.py +24 -4
- infrahub/git/base.py +7 -7
- infrahub/git/integrator.py +48 -24
- infrahub/git/models.py +101 -9
- infrahub/git/repository.py +3 -3
- infrahub/git/tasks.py +408 -6
- infrahub/git/utils.py +48 -0
- infrahub/git/worktree.py +1 -2
- infrahub/git_credential/askpass.py +1 -2
- infrahub/graphql/analyzer.py +12 -0
- infrahub/graphql/app.py +13 -15
- infrahub/graphql/context.py +39 -0
- infrahub/graphql/initialization.py +3 -0
- infrahub/graphql/loaders/node.py +2 -12
- infrahub/graphql/loaders/peers.py +77 -0
- infrahub/graphql/loaders/shared.py +13 -0
- infrahub/graphql/manager.py +17 -19
- infrahub/graphql/mutations/artifact_definition.py +5 -5
- infrahub/graphql/mutations/branch.py +26 -1
- infrahub/graphql/mutations/computed_attribute.py +9 -5
- infrahub/graphql/mutations/diff.py +23 -11
- infrahub/graphql/mutations/diff_conflict.py +5 -0
- infrahub/graphql/mutations/generator.py +83 -0
- infrahub/graphql/mutations/graphql_query.py +5 -5
- infrahub/graphql/mutations/ipam.py +54 -74
- infrahub/graphql/mutations/main.py +195 -132
- infrahub/graphql/mutations/menu.py +7 -7
- infrahub/graphql/mutations/models.py +2 -4
- infrahub/graphql/mutations/node_getter/by_default_filter.py +10 -10
- infrahub/graphql/mutations/node_getter/by_hfid.py +1 -3
- infrahub/graphql/mutations/node_getter/by_id.py +1 -3
- infrahub/graphql/mutations/node_getter/interface.py +1 -2
- infrahub/graphql/mutations/proposed_change.py +7 -7
- infrahub/graphql/mutations/relationship.py +93 -19
- infrahub/graphql/mutations/repository.py +8 -8
- infrahub/graphql/mutations/resource_manager.py +3 -3
- infrahub/graphql/mutations/schema.py +19 -4
- infrahub/graphql/mutations/webhook.py +137 -0
- infrahub/graphql/parser.py +4 -4
- infrahub/graphql/permissions.py +1 -10
- infrahub/graphql/queries/diff/tree.py +19 -14
- infrahub/graphql/queries/event.py +5 -2
- infrahub/graphql/queries/ipam.py +2 -2
- infrahub/graphql/queries/relationship.py +2 -2
- infrahub/graphql/queries/search.py +2 -2
- infrahub/graphql/resolvers/many_relationship.py +264 -0
- infrahub/graphql/resolvers/resolver.py +13 -110
- infrahub/graphql/schema.py +2 -0
- infrahub/graphql/subscription/graphql_query.py +2 -0
- infrahub/graphql/types/context.py +12 -0
- infrahub/graphql/types/event.py +84 -17
- infrahub/graphql/types/node.py +2 -2
- infrahub/graphql/utils.py +2 -2
- infrahub/groups/ancestors.py +29 -0
- infrahub/groups/parsers.py +107 -0
- infrahub/lock.py +20 -20
- infrahub/menu/constants.py +0 -1
- infrahub/menu/generator.py +9 -21
- infrahub/menu/menu.py +17 -38
- infrahub/menu/models.py +117 -16
- infrahub/menu/repository.py +111 -0
- infrahub/menu/utils.py +5 -8
- infrahub/message_bus/__init__.py +11 -13
- infrahub/message_bus/messages/__init__.py +1 -21
- infrahub/message_bus/messages/check_generator_run.py +3 -3
- infrahub/message_bus/messages/finalize_validator_execution.py +3 -0
- infrahub/message_bus/messages/proposed_change/request_proposedchange_refreshartifacts.py +6 -0
- infrahub/message_bus/messages/request_generatordefinition_check.py +2 -0
- infrahub/message_bus/messages/send_echo_request.py +1 -1
- infrahub/message_bus/operations/__init__.py +1 -10
- infrahub/message_bus/operations/check/__init__.py +2 -2
- infrahub/message_bus/operations/check/generator.py +1 -0
- infrahub/message_bus/operations/event/__init__.py +2 -2
- infrahub/message_bus/operations/event/worker.py +0 -3
- infrahub/message_bus/operations/finalize/validator.py +51 -1
- infrahub/message_bus/operations/requests/__init__.py +0 -2
- infrahub/message_bus/operations/requests/generator_definition.py +21 -23
- infrahub/message_bus/operations/requests/proposed_change.py +14 -10
- infrahub/permissions/globals.py +15 -0
- infrahub/pools/number.py +2 -4
- infrahub/proposed_change/models.py +3 -0
- infrahub/proposed_change/tasks.py +58 -45
- infrahub/pytest_plugin.py +13 -10
- infrahub/server.py +2 -3
- infrahub/services/__init__.py +2 -2
- infrahub/services/adapters/cache/__init__.py +4 -6
- infrahub/services/adapters/cache/nats.py +4 -5
- infrahub/services/adapters/cache/redis.py +3 -7
- infrahub/services/adapters/event/__init__.py +1 -1
- infrahub/services/adapters/message_bus/__init__.py +3 -3
- infrahub/services/adapters/message_bus/local.py +2 -2
- infrahub/services/adapters/message_bus/nats.py +4 -4
- infrahub/services/adapters/message_bus/rabbitmq.py +4 -4
- infrahub/services/adapters/workflow/local.py +2 -2
- infrahub/services/component.py +5 -5
- infrahub/services/protocols.py +7 -7
- infrahub/services/scheduler.py +1 -3
- infrahub/task_manager/event.py +102 -9
- infrahub/task_manager/models.py +27 -7
- infrahub/tasks/artifact.py +7 -6
- infrahub/telemetry/__init__.py +0 -0
- infrahub/telemetry/constants.py +9 -0
- infrahub/telemetry/database.py +86 -0
- infrahub/telemetry/models.py +65 -0
- infrahub/telemetry/task_manager.py +77 -0
- infrahub/{tasks/telemetry.py → telemetry/tasks.py} +49 -56
- infrahub/telemetry/utils.py +11 -0
- infrahub/trace.py +4 -4
- infrahub/transformations/tasks.py +2 -2
- infrahub/trigger/catalogue.py +4 -6
- infrahub/trigger/constants.py +0 -8
- infrahub/trigger/models.py +54 -5
- infrahub/trigger/setup.py +90 -0
- infrahub/trigger/tasks.py +35 -84
- infrahub/utils.py +11 -1
- infrahub/validators/__init__.py +0 -0
- infrahub/validators/events.py +42 -0
- infrahub/validators/tasks.py +41 -0
- infrahub/webhook/gather.py +17 -0
- infrahub/webhook/models.py +176 -44
- infrahub/webhook/tasks.py +154 -155
- infrahub/webhook/triggers.py +31 -7
- infrahub/workers/infrahub_async.py +2 -2
- infrahub/workers/utils.py +2 -2
- infrahub/workflows/catalogue.py +86 -35
- infrahub/workflows/initialization.py +8 -2
- infrahub/workflows/models.py +27 -1
- infrahub/workflows/utils.py +10 -1
- infrahub_sdk/client.py +35 -8
- infrahub_sdk/config.py +3 -0
- infrahub_sdk/context.py +13 -0
- infrahub_sdk/ctl/branch.py +3 -2
- infrahub_sdk/ctl/cli_commands.py +5 -1
- infrahub_sdk/ctl/utils.py +0 -16
- infrahub_sdk/exceptions.py +12 -0
- infrahub_sdk/generator.py +4 -1
- infrahub_sdk/graphql.py +45 -13
- infrahub_sdk/node.py +71 -22
- infrahub_sdk/protocols.py +21 -8
- infrahub_sdk/protocols_base.py +32 -11
- infrahub_sdk/query_groups.py +6 -35
- infrahub_sdk/schema/__init__.py +55 -26
- infrahub_sdk/schema/main.py +8 -0
- infrahub_sdk/task/__init__.py +11 -0
- infrahub_sdk/task/constants.py +3 -0
- infrahub_sdk/task/exceptions.py +25 -0
- infrahub_sdk/task/manager.py +551 -0
- infrahub_sdk/task/models.py +74 -0
- infrahub_sdk/testing/schemas/animal.py +9 -0
- infrahub_sdk/timestamp.py +142 -33
- infrahub_sdk/utils.py +29 -1
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/METADATA +8 -6
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/RECORD +349 -293
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/entry_points.txt +1 -0
- infrahub_testcontainers/constants.py +2 -0
- infrahub_testcontainers/container.py +157 -12
- infrahub_testcontainers/docker-compose.test.yml +31 -6
- infrahub_testcontainers/helpers.py +18 -73
- infrahub_testcontainers/host.py +41 -0
- infrahub_testcontainers/measurements.py +93 -0
- infrahub_testcontainers/models.py +38 -0
- infrahub_testcontainers/performance_test.py +166 -0
- infrahub_testcontainers/plugin.py +136 -0
- infrahub_testcontainers/prometheus.yml +30 -0
- infrahub/core/schema/definitions/core.py +0 -2286
- 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/event_branch_create.py +0 -11
- infrahub/message_bus/messages/event_branch_delete.py +0 -11
- infrahub/message_bus/messages/event_branch_rebased.py +0 -9
- infrahub/message_bus/messages/event_node_mutated.py +0 -15
- infrahub/message_bus/messages/event_schema_update.py +0 -9
- 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/event/node.py +0 -20
- infrahub/message_bus/operations/event/schema.py +0 -17
- infrahub/message_bus/operations/requests/repository.py +0 -133
- infrahub/webhook/constants.py +0 -1
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.2.0rc0.dist-info → infrahub_server-1.2.1.dist-info}/WHEEL +0 -0
infrahub/git/integrator.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import hashlib
|
|
4
4
|
import importlib
|
|
5
5
|
import sys
|
|
6
|
-
from typing import TYPE_CHECKING, Any
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
7
|
|
|
8
8
|
import jinja2
|
|
9
9
|
import ujson
|
|
@@ -39,6 +39,7 @@ from typing_extensions import Self
|
|
|
39
39
|
|
|
40
40
|
from infrahub.core.constants import ArtifactStatus, ContentType, InfrahubKind, RepositorySyncStatus
|
|
41
41
|
from infrahub.core.registry import registry
|
|
42
|
+
from infrahub.events.artifact_action import ArtifactCreatedEvent, ArtifactUpdatedEvent
|
|
42
43
|
from infrahub.events.models import EventMeta
|
|
43
44
|
from infrahub.events.repository_action import CommitUpdatedEvent
|
|
44
45
|
from infrahub.exceptions import CheckError, RepositoryInvalidFileSystemError, TransformError
|
|
@@ -54,7 +55,7 @@ if TYPE_CHECKING:
|
|
|
54
55
|
from infrahub_sdk.schema.repository import InfrahubRepositoryArtifactDefinitionConfig
|
|
55
56
|
from infrahub_sdk.transforms import InfrahubTransform
|
|
56
57
|
|
|
57
|
-
from infrahub.
|
|
58
|
+
from infrahub.artifacts.models import CheckArtifactCreate
|
|
58
59
|
from infrahub.git.models import RequestArtifactGenerate
|
|
59
60
|
from infrahub.services import InfrahubServices
|
|
60
61
|
|
|
@@ -92,10 +93,10 @@ class CheckDefinitionInformation(BaseModel):
|
|
|
92
93
|
timeout: int
|
|
93
94
|
"""Timeout for the Check."""
|
|
94
95
|
|
|
95
|
-
parameters:
|
|
96
|
+
parameters: dict | None = None
|
|
96
97
|
"""Additional Parameters to extract from each target (if targets is provided)"""
|
|
97
98
|
|
|
98
|
-
targets:
|
|
99
|
+
targets: str | None = Field(default=None, description="Targets if not a global check")
|
|
99
100
|
|
|
100
101
|
|
|
101
102
|
class TransformPythonInformation(BaseModel):
|
|
@@ -160,7 +161,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
160
161
|
|
|
161
162
|
@flow(name="import-object-from-file", flow_run_name="Import objects")
|
|
162
163
|
async def import_objects_from_files(
|
|
163
|
-
self, infrahub_branch_name: str, git_branch_name:
|
|
164
|
+
self, infrahub_branch_name: str, git_branch_name: str | None = None, commit: str | None = None
|
|
164
165
|
) -> None:
|
|
165
166
|
if not commit:
|
|
166
167
|
commit = self.get_commit_value(branch_name=git_branch_name or infrahub_branch_name)
|
|
@@ -170,27 +171,27 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
170
171
|
self.create_commit_worktree(commit)
|
|
171
172
|
await self._update_sync_status(branch_name=infrahub_branch_name, status=RepositorySyncStatus.SYNCING)
|
|
172
173
|
|
|
173
|
-
config_file = await self.get_repository_config(branch_name=infrahub_branch_name, commit=commit)
|
|
174
|
+
config_file = await self.get_repository_config(branch_name=infrahub_branch_name, commit=commit) # type: ignore[misc]
|
|
174
175
|
sync_status = RepositorySyncStatus.IN_SYNC if config_file else RepositorySyncStatus.ERROR_IMPORT
|
|
175
176
|
error: Exception | None = None
|
|
176
177
|
|
|
177
178
|
try:
|
|
178
179
|
if config_file:
|
|
179
|
-
await self.import_schema_files(branch_name=infrahub_branch_name, commit=commit, config_file=config_file)
|
|
180
|
+
await self.import_schema_files(branch_name=infrahub_branch_name, commit=commit, config_file=config_file) # type: ignore[misc]
|
|
180
181
|
|
|
181
182
|
await self.import_all_graphql_query(
|
|
182
183
|
branch_name=infrahub_branch_name, commit=commit, config_file=config_file
|
|
183
|
-
)
|
|
184
|
+
) # type: ignore[misc]
|
|
184
185
|
|
|
185
186
|
await self.import_all_python_files( # type: ignore[call-overload]
|
|
186
187
|
branch_name=infrahub_branch_name, commit=commit, config_file=config_file
|
|
187
|
-
)
|
|
188
|
+
) # type: ignore[misc]
|
|
188
189
|
await self.import_jinja2_transforms(
|
|
189
190
|
branch_name=infrahub_branch_name, commit=commit, config_file=config_file
|
|
190
|
-
)
|
|
191
|
+
) # type: ignore[misc]
|
|
191
192
|
await self.import_artifact_definitions(
|
|
192
193
|
branch_name=infrahub_branch_name, commit=commit, config_file=config_file
|
|
193
|
-
)
|
|
194
|
+
) # type: ignore[misc]
|
|
194
195
|
|
|
195
196
|
except Exception as exc:
|
|
196
197
|
sync_status = RepositorySyncStatus.ERROR_IMPORT
|
|
@@ -442,7 +443,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
442
443
|
await existing_artifact_definition.save()
|
|
443
444
|
|
|
444
445
|
@task(name="repository-get-config", task_run_name="get repository config", cache_policy=NONE) # type: ignore[arg-type]
|
|
445
|
-
async def get_repository_config(self, branch_name: str, commit: str) ->
|
|
446
|
+
async def get_repository_config(self, branch_name: str, commit: str) -> InfrahubRepositoryConfig | None:
|
|
446
447
|
branch_wt = self.get_worktree(identifier=commit or branch_name)
|
|
447
448
|
log = get_run_logger()
|
|
448
449
|
|
|
@@ -635,7 +636,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
635
636
|
module=module,
|
|
636
637
|
file_path=file_info.relative_path_file,
|
|
637
638
|
check_definition=check,
|
|
638
|
-
)
|
|
639
|
+
) # type: ignore[misc]
|
|
639
640
|
)
|
|
640
641
|
|
|
641
642
|
local_check_definitions = {check.name: check for check in checks}
|
|
@@ -796,7 +797,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
796
797
|
module=module,
|
|
797
798
|
file_path=file_info.relative_path_file,
|
|
798
799
|
transform=transform,
|
|
799
|
-
)
|
|
800
|
+
) # type: ignore[misc]
|
|
800
801
|
)
|
|
801
802
|
|
|
802
803
|
local_transform_definitions = {transform.name: transform for transform in transforms}
|
|
@@ -1069,9 +1070,9 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1069
1070
|
) -> None:
|
|
1070
1071
|
await add_tags(branches=[branch_name], nodes=[str(self.id)])
|
|
1071
1072
|
|
|
1072
|
-
await self.import_python_check_definitions(branch_name=branch_name, commit=commit, config_file=config_file)
|
|
1073
|
-
await self.import_python_transforms(branch_name=branch_name, commit=commit, config_file=config_file)
|
|
1074
|
-
await self.import_generator_definitions(branch_name=branch_name, commit=commit, config_file=config_file)
|
|
1073
|
+
await self.import_python_check_definitions(branch_name=branch_name, commit=commit, config_file=config_file) # type: ignore[misc]
|
|
1074
|
+
await self.import_python_transforms(branch_name=branch_name, commit=commit, config_file=config_file) # type: ignore[misc]
|
|
1075
|
+
await self.import_generator_definitions(branch_name=branch_name, commit=commit, config_file=config_file) # type: ignore[misc]
|
|
1075
1076
|
|
|
1076
1077
|
@task(name="jinja2-template-render", task_run_name="Render Jinja2 template", cache_policy=NONE) # type: ignore[arg-type]
|
|
1077
1078
|
async def render_jinja2_template(self, commit: str, location: str, data: dict) -> str:
|
|
@@ -1097,7 +1098,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1097
1098
|
location: str,
|
|
1098
1099
|
class_name: str,
|
|
1099
1100
|
client: InfrahubClient,
|
|
1100
|
-
params:
|
|
1101
|
+
params: dict | None = None,
|
|
1101
1102
|
) -> InfrahubCheck:
|
|
1102
1103
|
"""Execute A Python Check stored in the repository."""
|
|
1103
1104
|
log = get_run_logger()
|
|
@@ -1150,7 +1151,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1150
1151
|
|
|
1151
1152
|
@task(name="python-transform-execute", task_run_name="Execute Python Transform", cache_policy=NONE) # type: ignore[arg-type]
|
|
1152
1153
|
async def execute_python_transform(
|
|
1153
|
-
self, branch_name: str, commit: str, location: str, client: InfrahubClient, data:
|
|
1154
|
+
self, branch_name: str, commit: str, location: str, client: InfrahubClient, data: dict | None = None
|
|
1154
1155
|
) -> Any:
|
|
1155
1156
|
"""Execute A Python Transform stored in the repository."""
|
|
1156
1157
|
log = get_run_logger()
|
|
@@ -1226,7 +1227,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1226
1227
|
if transformation.typename == InfrahubKind.TRANSFORMJINJA2:
|
|
1227
1228
|
artifact_content = await self.render_jinja2_template.with_options(
|
|
1228
1229
|
timeout_seconds=transformation.timeout.value
|
|
1229
|
-
)(commit=commit, location=transformation.template_path.value, data=response)
|
|
1230
|
+
)(commit=commit, location=transformation.template_path.value, data=response) # type: ignore[misc]
|
|
1230
1231
|
elif transformation.typename == InfrahubKind.TRANSFORMPYTHON:
|
|
1231
1232
|
transformation_location = f"{transformation.file_path.value}::{transformation.class_name.value}"
|
|
1232
1233
|
artifact_content = await self.execute_python_transform.with_options(
|
|
@@ -1237,7 +1238,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1237
1238
|
location=transformation_location,
|
|
1238
1239
|
data=response,
|
|
1239
1240
|
client=self.sdk,
|
|
1240
|
-
)
|
|
1241
|
+
) # type: ignore[misc]
|
|
1241
1242
|
|
|
1242
1243
|
if definition.content_type.value == ContentType.APPLICATION_JSON.value and isinstance(artifact_content, dict):
|
|
1243
1244
|
artifact_content_str = ujson.dumps(artifact_content, indent=2)
|
|
@@ -1266,7 +1267,10 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1266
1267
|
return ArtifactGenerateResult(changed=True, checksum=checksum, storage_id=storage_id, artifact_id=artifact.id)
|
|
1267
1268
|
|
|
1268
1269
|
async def render_artifact(
|
|
1269
|
-
self,
|
|
1270
|
+
self,
|
|
1271
|
+
artifact: CoreArtifact,
|
|
1272
|
+
artifact_created: bool,
|
|
1273
|
+
message: CheckArtifactCreate | RequestArtifactGenerate,
|
|
1270
1274
|
) -> ArtifactGenerateResult:
|
|
1271
1275
|
response = await self.sdk.query_gql_query(
|
|
1272
1276
|
name=message.query,
|
|
@@ -1277,11 +1281,15 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1277
1281
|
branch_name=message.branch_name,
|
|
1278
1282
|
timeout=message.timeout,
|
|
1279
1283
|
)
|
|
1284
|
+
branch = registry.get_branch_from_registry(branch=message.branch_name)
|
|
1285
|
+
|
|
1286
|
+
previous_checksum = artifact.checksum.value
|
|
1287
|
+
previous_storage_id = artifact.storage_id.value
|
|
1280
1288
|
|
|
1281
1289
|
if message.transform_type == InfrahubKind.TRANSFORMJINJA2:
|
|
1282
1290
|
artifact_content = await self.render_jinja2_template.with_options(timeout_seconds=message.timeout)(
|
|
1283
1291
|
commit=message.commit, location=message.transform_location, data=response
|
|
1284
|
-
)
|
|
1292
|
+
) # type: ignore[misc]
|
|
1285
1293
|
elif message.transform_type == InfrahubKind.TRANSFORMPYTHON:
|
|
1286
1294
|
artifact_content = await self.execute_python_transform.with_options(timeout_seconds=message.timeout)(
|
|
1287
1295
|
branch_name=message.branch_name,
|
|
@@ -1289,7 +1297,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1289
1297
|
location=message.transform_location,
|
|
1290
1298
|
data=response,
|
|
1291
1299
|
client=self.sdk,
|
|
1292
|
-
)
|
|
1300
|
+
) # type: ignore[misc]
|
|
1293
1301
|
|
|
1294
1302
|
if message.content_type == ContentType.APPLICATION_JSON.value and isinstance(artifact_content, dict):
|
|
1295
1303
|
artifact_content_str = ujson.dumps(artifact_content, indent=2)
|
|
@@ -1315,4 +1323,20 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
|
|
|
1315
1323
|
if artifact.name.value != message.artifact_name:
|
|
1316
1324
|
artifact.name.value = message.artifact_name
|
|
1317
1325
|
await artifact.save()
|
|
1326
|
+
|
|
1327
|
+
event_class = ArtifactCreatedEvent if artifact_created else ArtifactUpdatedEvent
|
|
1328
|
+
|
|
1329
|
+
event = event_class(
|
|
1330
|
+
node_id=artifact.id,
|
|
1331
|
+
target_id=message.target_id,
|
|
1332
|
+
target_kind=message.target_kind,
|
|
1333
|
+
artifact_definition_id=message.artifact_definition,
|
|
1334
|
+
meta=EventMeta.from_context(context=message.context, branch=branch),
|
|
1335
|
+
checksum=checksum,
|
|
1336
|
+
checksum_previous=previous_checksum,
|
|
1337
|
+
storage_id=storage_id,
|
|
1338
|
+
storage_id_previous=previous_storage_id,
|
|
1339
|
+
)
|
|
1340
|
+
|
|
1341
|
+
await self.service.event.send(event=event)
|
|
1318
1342
|
return ArtifactGenerateResult(changed=True, checksum=checksum, storage_id=storage_id, artifact_id=artifact.id)
|
infrahub/git/models.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from
|
|
1
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from infrahub.context import InfrahubContext
|
|
4
|
+
from infrahub.message_bus.types import ProposedChangeBranchDiff
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class RequestArtifactDefinitionGenerate(BaseModel):
|
|
@@ -29,11 +30,13 @@ class RequestArtifactGenerate(BaseModel):
|
|
|
29
30
|
repository_kind: str = Field(..., description="The kind of the Repository")
|
|
30
31
|
branch_name: str = Field(..., description="The branch where the check is run")
|
|
31
32
|
target_id: str = Field(..., description="The ID of the target object for this artifact")
|
|
33
|
+
target_kind: str = Field(..., description="The kind of the target object for this artifact")
|
|
32
34
|
target_name: str = Field(..., description="Name of the artifact target")
|
|
33
|
-
artifact_id:
|
|
35
|
+
artifact_id: str | None = Field(default=None, description="The id of the artifact if it previously existed")
|
|
34
36
|
query: str = Field(..., description="The name of the query to use when collecting data")
|
|
35
37
|
timeout: int = Field(..., description="Timeout for requests used to generate this artifact")
|
|
36
38
|
variables: dict = Field(..., description="Input variables when generating the artifact")
|
|
39
|
+
context: InfrahubContext = Field(..., description="The context of the task")
|
|
37
40
|
|
|
38
41
|
|
|
39
42
|
class GitRepositoryAdd(BaseModel):
|
|
@@ -42,8 +45,8 @@ class GitRepositoryAdd(BaseModel):
|
|
|
42
45
|
location: str = Field(..., description="The external URL of the repository")
|
|
43
46
|
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
44
47
|
repository_name: str = Field(..., description="The name of the repository")
|
|
45
|
-
created_by:
|
|
46
|
-
default_branch_name:
|
|
48
|
+
created_by: str | None = Field(default=None, description="The user ID of the user that created the repository")
|
|
49
|
+
default_branch_name: str | None = Field(None, description="Default branch for this repository")
|
|
47
50
|
infrahub_branch_name: str = Field(..., description="Infrahub branch on which to sync the remote repository")
|
|
48
51
|
infrahub_branch_id: str = Field(..., description="Id of the Infrahub branch on which to sync the remote repository")
|
|
49
52
|
internal_status: str = Field(..., description="Administrative status of the repository")
|
|
@@ -56,7 +59,7 @@ class GitRepositoryAddReadOnly(BaseModel):
|
|
|
56
59
|
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
57
60
|
repository_name: str = Field(..., description="The name of the repository")
|
|
58
61
|
ref: str = Field(..., description="Ref to track on the external repository")
|
|
59
|
-
created_by:
|
|
62
|
+
created_by: str | None = Field(default=None, description="The user ID of the user that created the repository")
|
|
60
63
|
infrahub_branch_name: str = Field(..., description="Infrahub branch on which to sync the remote repository")
|
|
61
64
|
infrahub_branch_id: str = Field(..., description="Id of the Infrahub branch on which to sync the remote repository")
|
|
62
65
|
internal_status: str = Field(..., description="Internal status of the repository")
|
|
@@ -68,8 +71,8 @@ class GitRepositoryPullReadOnly(BaseModel):
|
|
|
68
71
|
location: str = Field(..., description="The external URL of the repository")
|
|
69
72
|
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
70
73
|
repository_name: str = Field(..., description="The name of the repository")
|
|
71
|
-
ref:
|
|
72
|
-
commit:
|
|
74
|
+
ref: str | None = Field(None, description="Ref to track on the external repository")
|
|
75
|
+
commit: str | None = Field(None, description="Specific commit to pull")
|
|
73
76
|
infrahub_branch_name: str = Field(..., description="Infrahub branch on which to sync the remote repository")
|
|
74
77
|
infrahub_branch_id: str = Field(..., description="Infrahub branch on which to sync the remote repository")
|
|
75
78
|
|
|
@@ -103,10 +106,99 @@ class GitDiffNamesOnly(BaseModel):
|
|
|
103
106
|
repository_name: str = Field(..., description="The name of the repository")
|
|
104
107
|
repository_kind: str = Field(..., description="The kind of the repository")
|
|
105
108
|
first_commit: str = Field(..., description="The first commit")
|
|
106
|
-
second_commit:
|
|
109
|
+
second_commit: str | None = Field(None, description="The second commit")
|
|
107
110
|
|
|
108
111
|
|
|
109
112
|
class GitDiffNamesOnlyResponse(BaseModel):
|
|
110
113
|
files_added: list[str] = Field(..., description="Files added")
|
|
111
114
|
files_changed: list[str] = Field(..., description="Files changed")
|
|
112
115
|
files_removed: list[str] = Field(..., description="Files removed")
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class UserCheckDefinitionData(BaseModel):
|
|
119
|
+
"""Triggers user defined checks to run based on a Check Definition."""
|
|
120
|
+
|
|
121
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
122
|
+
|
|
123
|
+
check_definition_id: str = Field(..., description="The unique ID of the check definition")
|
|
124
|
+
commit: str = Field(..., description="The commit to target")
|
|
125
|
+
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
126
|
+
repository_name: str = Field(..., description="The name of the Repository")
|
|
127
|
+
branch_name: str = Field(..., description="The branch where the check is run")
|
|
128
|
+
file_path: str = Field(..., description="The path and filename of the check")
|
|
129
|
+
class_name: str = Field(..., description="The name of the class containing the check")
|
|
130
|
+
proposed_change: str = Field(..., description="The unique ID of the Proposed Change")
|
|
131
|
+
branch_diff: ProposedChangeBranchDiff = Field(..., description="The calculated diff between the two branches")
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class UserCheckData(BaseModel):
|
|
135
|
+
"""Runs a check as defined within a CoreCheckDefinition within a repository."""
|
|
136
|
+
|
|
137
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
138
|
+
|
|
139
|
+
validator_id: str = Field(..., description="The id of the validator associated with this check")
|
|
140
|
+
validator_execution_id: str = Field(..., description="The id of current execution of the associated validator")
|
|
141
|
+
check_execution_id: str = Field(..., description="The unique ID for the current execution of this check")
|
|
142
|
+
check_definition_id: str = Field(..., description="The unique ID of the check definition")
|
|
143
|
+
commit: str = Field(..., description="The commit to target")
|
|
144
|
+
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
145
|
+
repository_name: str = Field(..., description="The name of the Repository")
|
|
146
|
+
branch_name: str = Field(..., description="The branch where the check is run")
|
|
147
|
+
file_path: str = Field(..., description="The path and filename of the check")
|
|
148
|
+
class_name: str = Field(..., description="The name of the class containing the check")
|
|
149
|
+
proposed_change: str = Field(..., description="The unique ID of the Proposed Change")
|
|
150
|
+
variables: dict = Field(default_factory=dict, description="Input variables when running the check")
|
|
151
|
+
name: str = Field(..., description="The name of the check")
|
|
152
|
+
branch_diff: ProposedChangeBranchDiff = Field(..., description="The calculated diff between the two branches")
|
|
153
|
+
timeout: int = Field(..., description="The timeout for the check")
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class TriggerRepositoryUserChecks(BaseModel):
|
|
157
|
+
"""Sent to trigger the user defined checks on a repository."""
|
|
158
|
+
|
|
159
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
160
|
+
|
|
161
|
+
proposed_change: str = Field(..., description="The unique ID of the Proposed Change")
|
|
162
|
+
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
163
|
+
repository_name: str = Field(..., description="The name of the Repository")
|
|
164
|
+
source_branch: str = Field(..., description="The source branch")
|
|
165
|
+
source_branch_sync_with_git: bool = Field(..., description="Indicates if the source branch should sync with git")
|
|
166
|
+
target_branch: str = Field(..., description="The target branch")
|
|
167
|
+
branch_diff: ProposedChangeBranchDiff = Field(..., description="The calculated diff between the two branches")
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
class TriggerRepositoryInternalChecks(BaseModel):
|
|
171
|
+
"""Sent to trigger the checks for a repository to be executed."""
|
|
172
|
+
|
|
173
|
+
proposed_change: str = Field(..., description="The unique ID of the Proposed Change")
|
|
174
|
+
repository: str = Field(..., description="The unique ID of the Repository")
|
|
175
|
+
source_branch: str = Field(..., description="The source branch")
|
|
176
|
+
target_branch: str = Field(..., description="The target branch")
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class CheckRepositoryMergeConflicts(BaseModel):
|
|
180
|
+
"""Runs a check to validate if there are merge conflicts for a proposed change between two branches."""
|
|
181
|
+
|
|
182
|
+
validator_id: str = Field(..., description="The id of the validator associated with this check")
|
|
183
|
+
validator_execution_id: str = Field(..., description="The id of current execution of the associated validator")
|
|
184
|
+
check_execution_id: str = Field(..., description="The unique ID for the current execution of this check")
|
|
185
|
+
proposed_change: str = Field(..., description="The unique ID of the Proposed Change")
|
|
186
|
+
repository_id: str = Field(..., description="The unique ID of the Repository")
|
|
187
|
+
repository_name: str = Field(..., description="The name of the Repository")
|
|
188
|
+
source_branch: str = Field(..., description="The source branch")
|
|
189
|
+
target_branch: str = Field(..., description="The target branch")
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class RepositoryBranchInfo(BaseModel):
|
|
193
|
+
internal_status: str
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class RepositoryData(BaseModel):
|
|
197
|
+
repository_id: str = Field(..., description="Id of the repository")
|
|
198
|
+
repository_name: str = Field(..., description="Name of the repository")
|
|
199
|
+
branches: dict[str, str] = Field(
|
|
200
|
+
...,
|
|
201
|
+
description="Dictionary with the name of the branch as the key and the active commit id as the value",
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
branch_info: dict[str, RepositoryBranchInfo] = Field(default_factory=dict)
|
infrahub/git/repository.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, Any
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
4
|
|
|
5
5
|
from git.exc import BadName, GitCommandError
|
|
6
6
|
from infrahub_sdk.exceptions import GraphQLError
|
|
@@ -250,7 +250,7 @@ class InfrahubReadOnlyRepository(InfrahubRepositoryIntegrator):
|
|
|
250
250
|
|
|
251
251
|
async def get_initialized_repo(
|
|
252
252
|
repository_id: str, name: str, service: InfrahubServices, repository_kind: str, commit: str | None = None
|
|
253
|
-
) ->
|
|
253
|
+
) -> InfrahubReadOnlyRepository | InfrahubRepository:
|
|
254
254
|
if repository_kind == InfrahubKind.REPOSITORY:
|
|
255
255
|
return await InfrahubRepository.init(
|
|
256
256
|
id=repository_id, name=name, commit=commit, client=service._client, service=service
|
|
@@ -266,7 +266,7 @@ async def get_initialized_repo(
|
|
|
266
266
|
|
|
267
267
|
async def initialize_repo(
|
|
268
268
|
location: str, repository_id: str, name: str, service: InfrahubServices, repository_kind: str
|
|
269
|
-
) ->
|
|
269
|
+
) -> InfrahubReadOnlyRepository | InfrahubRepository:
|
|
270
270
|
if repository_kind == InfrahubKind.REPOSITORY:
|
|
271
271
|
return await InfrahubRepository.new(
|
|
272
272
|
location=location, id=repository_id, name=name, client=service._client, service=service
|