infrahub-server 1.4.0rc0__py3-none-any.whl → 1.4.2__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/core/diff/model/path.py +0 -39
- infrahub/core/schema/node_schema.py +0 -5
- infrahub/core/schema/schema_branch.py +2 -2
- infrahub/core/validators/attribute/choices.py +28 -3
- infrahub/graphql/app.py +2 -1
- infrahub/graphql/queries/diff/tree.py +53 -2
- infrahub/tasks/registry.py +13 -7
- infrahub_sdk/client.py +2 -2
- infrahub_sdk/ctl/repository.py +51 -0
- infrahub_sdk/ctl/schema.py +9 -9
- infrahub_sdk/node/node.py +2 -2
- infrahub_sdk/pytest_plugin/items/graphql_query.py +1 -1
- infrahub_sdk/schema/repository.py +1 -1
- infrahub_sdk/testing/docker.py +1 -1
- infrahub_sdk/utils.py +2 -2
- {infrahub_server-1.4.0rc0.dist-info → infrahub_server-1.4.2.dist-info}/METADATA +1 -1
- {infrahub_server-1.4.0rc0.dist-info → infrahub_server-1.4.2.dist-info}/RECORD +20 -20
- {infrahub_server-1.4.0rc0.dist-info → infrahub_server-1.4.2.dist-info}/LICENSE.txt +0 -0
- {infrahub_server-1.4.0rc0.dist-info → infrahub_server-1.4.2.dist-info}/WHEEL +0 -0
- {infrahub_server-1.4.0rc0.dist-info → infrahub_server-1.4.2.dist-info}/entry_points.txt +0 -0
infrahub/core/diff/model/path.py
CHANGED
|
@@ -22,8 +22,6 @@ if TYPE_CHECKING:
|
|
|
22
22
|
from neo4j.graph import Relationship as Neo4jRelationship
|
|
23
23
|
from whenever import TimeDelta
|
|
24
24
|
|
|
25
|
-
from infrahub.graphql.initialization import GraphqlContext
|
|
26
|
-
|
|
27
25
|
|
|
28
26
|
@dataclass
|
|
29
27
|
class TimeRange:
|
|
@@ -314,12 +312,6 @@ class EnrichedDiffRelationship(BaseSummary):
|
|
|
314
312
|
)
|
|
315
313
|
|
|
316
314
|
|
|
317
|
-
@dataclass
|
|
318
|
-
class ParentNodeInfo:
|
|
319
|
-
node: EnrichedDiffNode
|
|
320
|
-
relationship_name: str = "undefined"
|
|
321
|
-
|
|
322
|
-
|
|
323
315
|
@dataclass
|
|
324
316
|
class EnrichedDiffNode(BaseSummary):
|
|
325
317
|
identifier: NodeIdentifier
|
|
@@ -364,37 +356,6 @@ class EnrichedDiffNode(BaseSummary):
|
|
|
364
356
|
rel.clear_conflicts()
|
|
365
357
|
self.conflict = None
|
|
366
358
|
|
|
367
|
-
def get_parent_info(self, graphql_context: GraphqlContext | None = None) -> ParentNodeInfo | None:
|
|
368
|
-
for r in self.relationships:
|
|
369
|
-
for n in r.nodes:
|
|
370
|
-
relationship_name: str = "undefined"
|
|
371
|
-
|
|
372
|
-
if not graphql_context:
|
|
373
|
-
return ParentNodeInfo(node=n, relationship_name=relationship_name)
|
|
374
|
-
|
|
375
|
-
node_schema = graphql_context.db.schema.get(name=self.kind)
|
|
376
|
-
rel_schema = node_schema.get_relationship(name=r.name)
|
|
377
|
-
|
|
378
|
-
parent_schema = graphql_context.db.schema.get(name=n.kind)
|
|
379
|
-
rels_parent = parent_schema.get_relationships_by_identifier(id=rel_schema.get_identifier())
|
|
380
|
-
|
|
381
|
-
if rels_parent and len(rels_parent) == 1:
|
|
382
|
-
relationship_name = rels_parent[0].name
|
|
383
|
-
elif rels_parent and len(rels_parent) > 1:
|
|
384
|
-
for rel_parent in rels_parent:
|
|
385
|
-
if (
|
|
386
|
-
rel_schema.direction == RelationshipDirection.INBOUND
|
|
387
|
-
and rel_parent.direction == RelationshipDirection.OUTBOUND
|
|
388
|
-
) or (
|
|
389
|
-
rel_schema.direction == RelationshipDirection.OUTBOUND
|
|
390
|
-
and rel_parent.direction == RelationshipDirection.INBOUND
|
|
391
|
-
):
|
|
392
|
-
relationship_name = rel_parent.name
|
|
393
|
-
break
|
|
394
|
-
|
|
395
|
-
return ParentNodeInfo(node=n, relationship_name=relationship_name)
|
|
396
|
-
return None
|
|
397
|
-
|
|
398
359
|
def get_all_child_nodes(self) -> set[EnrichedDiffNode]:
|
|
399
360
|
all_children = set()
|
|
400
361
|
for r in self.relationships:
|
|
@@ -63,11 +63,6 @@ class NodeSchema(GeneratedNodeSchema):
|
|
|
63
63
|
f"{self.kind}.{attribute.name} inherited from {interface.namespace}{interface.name} must be the same kind "
|
|
64
64
|
f'["{interface_attr.kind}", "{attribute.kind}"]'
|
|
65
65
|
)
|
|
66
|
-
if attribute.optional != interface_attr.optional:
|
|
67
|
-
raise ValueError(
|
|
68
|
-
f"{self.kind}.{attribute.name} inherited from {interface.namespace}{interface.name} must have the same value for property "
|
|
69
|
-
f'"optional" ["{interface_attr.optional}", "{attribute.optional}"]'
|
|
70
|
-
)
|
|
71
66
|
|
|
72
67
|
for relationship in self.relationships:
|
|
73
68
|
if relationship.name in interface.relationship_names and not relationship.inherited:
|
|
@@ -226,8 +226,8 @@ class SchemaBranch:
|
|
|
226
226
|
def update(self, schema: SchemaBranch) -> None:
|
|
227
227
|
"""Update another SchemaBranch into this one."""
|
|
228
228
|
|
|
229
|
-
local_kinds =
|
|
230
|
-
other_kinds =
|
|
229
|
+
local_kinds = self.all_names
|
|
230
|
+
other_kinds = schema.all_names
|
|
231
231
|
|
|
232
232
|
in_both, _, other_only = compare_lists(list1=local_kinds, list2=other_kinds)
|
|
233
233
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, Any
|
|
3
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
4
4
|
|
|
5
5
|
from infrahub.core.constants import NULL_VALUE, PathType
|
|
6
6
|
from infrahub.core.path import DataPath, GroupedDataPaths
|
|
7
|
+
from infrahub.core.schema.generic_schema import GenericSchema
|
|
7
8
|
|
|
8
9
|
from ..interface import ConstraintCheckerInterface
|
|
9
10
|
from ..shared import AttributeSchemaValidatorQuery
|
|
@@ -18,6 +19,14 @@ if TYPE_CHECKING:
|
|
|
18
19
|
class AttributeChoicesUpdateValidatorQuery(AttributeSchemaValidatorQuery):
|
|
19
20
|
name: str = "attribute_constraints_choices_validator"
|
|
20
21
|
|
|
22
|
+
def __init__(
|
|
23
|
+
self,
|
|
24
|
+
excluded_kinds: list[str] | None = None,
|
|
25
|
+
**kwargs: Any,
|
|
26
|
+
) -> None:
|
|
27
|
+
self.excluded_kinds: list[str] = excluded_kinds or []
|
|
28
|
+
super().__init__(**kwargs)
|
|
29
|
+
|
|
21
30
|
async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
|
|
22
31
|
if self.attribute_schema.choices is None:
|
|
23
32
|
return
|
|
@@ -28,9 +37,11 @@ class AttributeChoicesUpdateValidatorQuery(AttributeSchemaValidatorQuery):
|
|
|
28
37
|
self.params["attr_name"] = self.attribute_schema.name
|
|
29
38
|
self.params["allowed_values"] = [choice.name for choice in self.attribute_schema.choices]
|
|
30
39
|
self.params["null_value"] = NULL_VALUE
|
|
40
|
+
self.params["excluded_kinds"] = self.excluded_kinds
|
|
31
41
|
|
|
32
42
|
query = """
|
|
33
|
-
MATCH
|
|
43
|
+
MATCH (n:%(node_kind)s)
|
|
44
|
+
WHERE size($excluded_kinds) = 0 OR NOT n.kind IN $excluded_kinds
|
|
34
45
|
CALL (n) {
|
|
35
46
|
MATCH path = (root:Root)<-[rr:IS_PART_OF]-(n)-[ra:HAS_ATTRIBUTE]-(:Attribute { name: $attr_name } )-[rv:HAS_VALUE]-(av:AttributeValue)
|
|
36
47
|
WHERE all(
|
|
@@ -92,10 +103,24 @@ class AttributeChoicesChecker(ConstraintCheckerInterface):
|
|
|
92
103
|
if attribute_schema.choices is None:
|
|
93
104
|
return grouped_data_paths_list
|
|
94
105
|
|
|
106
|
+
# skip inheriting schemas that override the attribute being checked
|
|
107
|
+
excluded_kinds: list[str] = []
|
|
108
|
+
if request.node_schema.is_generic_schema:
|
|
109
|
+
request.node_schema = cast(GenericSchema, request.node_schema)
|
|
110
|
+
for inheriting_kind in request.node_schema.used_by:
|
|
111
|
+
inheriting_schema = request.schema_branch.get_node(name=inheriting_kind, duplicate=False)
|
|
112
|
+
inheriting_schema_attribute = inheriting_schema.get_attribute(name=request.schema_path.field_name)
|
|
113
|
+
if not inheriting_schema_attribute.inherited:
|
|
114
|
+
excluded_kinds.append(inheriting_kind)
|
|
115
|
+
|
|
95
116
|
for query_class in self.query_classes:
|
|
96
117
|
# TODO add exception handling
|
|
97
118
|
query = await query_class.init(
|
|
98
|
-
db=self.db,
|
|
119
|
+
db=self.db,
|
|
120
|
+
branch=self.branch,
|
|
121
|
+
node_schema=request.node_schema,
|
|
122
|
+
schema_path=request.schema_path,
|
|
123
|
+
excluded_kinds=excluded_kinds,
|
|
99
124
|
)
|
|
100
125
|
await query.execute(db=self.db)
|
|
101
126
|
grouped_data_paths_list.append(await query.get_paths())
|
infrahub/graphql/app.py
CHANGED
|
@@ -231,6 +231,7 @@ class InfrahubGraphQLApp:
|
|
|
231
231
|
operation_name=operation_name,
|
|
232
232
|
branch=branch,
|
|
233
233
|
)
|
|
234
|
+
impacted_models = analyzed_query.query_report.impacted_models
|
|
234
235
|
|
|
235
236
|
await self._evaluate_permissions(
|
|
236
237
|
db=db,
|
|
@@ -282,7 +283,7 @@ class InfrahubGraphQLApp:
|
|
|
282
283
|
GRAPHQL_QUERY_HEIGHT_METRICS.labels(**labels).observe(await analyzed_query.calculate_height())
|
|
283
284
|
# GRAPHQL_QUERY_VARS_METRICS.labels(**labels).observe(len(analyzed_query.variables))
|
|
284
285
|
GRAPHQL_TOP_LEVEL_QUERIES_METRICS.labels(**labels).observe(analyzed_query.nbr_queries)
|
|
285
|
-
GRAPHQL_QUERY_OBJECTS_METRICS.labels(**labels).observe(len(
|
|
286
|
+
GRAPHQL_QUERY_OBJECTS_METRICS.labels(**labels).observe(len(impacted_models))
|
|
286
287
|
|
|
287
288
|
_, errors = analyzed_query.is_valid
|
|
288
289
|
if errors:
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from dataclasses import dataclass
|
|
3
4
|
from typing import TYPE_CHECKING, Any
|
|
4
5
|
|
|
5
6
|
from graphene import Argument, Boolean, DateTime, Field, InputObjectType, Int, List, NonNull, ObjectType, String
|
|
6
7
|
from graphene import Enum as GrapheneEnum
|
|
7
8
|
|
|
8
9
|
from infrahub.core import registry
|
|
9
|
-
from infrahub.core.constants import DiffAction, RelationshipCardinality
|
|
10
|
+
from infrahub.core.constants import DiffAction, RelationshipCardinality, RelationshipDirection
|
|
10
11
|
from infrahub.core.constants.database import DatabaseEdgeType
|
|
11
12
|
from infrahub.core.diff.model.path import NameTrackingId
|
|
12
13
|
from infrahub.core.diff.query.filters import EnrichedDiffQueryFilters
|
|
@@ -38,6 +39,12 @@ GrapheneDiffActionEnum = GrapheneEnum.from_enum(DiffAction)
|
|
|
38
39
|
GrapheneCardinalityEnum = GrapheneEnum.from_enum(RelationshipCardinality)
|
|
39
40
|
|
|
40
41
|
|
|
42
|
+
@dataclass
|
|
43
|
+
class ParentNodeInfo:
|
|
44
|
+
node: EnrichedDiffNode
|
|
45
|
+
relationship_name: str
|
|
46
|
+
|
|
47
|
+
|
|
41
48
|
class ConflictDetails(ObjectType):
|
|
42
49
|
uuid = String(required=True)
|
|
43
50
|
base_branch_action = Field(GrapheneDiffActionEnum, required=True)
|
|
@@ -145,9 +152,16 @@ class DiffTreeSummary(DiffSummaryCounts):
|
|
|
145
152
|
|
|
146
153
|
|
|
147
154
|
class DiffTreeResolver:
|
|
155
|
+
def __init__(self) -> None:
|
|
156
|
+
self.source_branch_name: str | None = None
|
|
157
|
+
|
|
158
|
+
def initialize(self, enriched_diff_root: EnrichedDiffRoot) -> None:
|
|
159
|
+
self.source_branch_name = enriched_diff_root.diff_branch_name
|
|
160
|
+
|
|
148
161
|
async def to_diff_tree(
|
|
149
162
|
self, enriched_diff_root: EnrichedDiffRoot, graphql_context: GraphqlContext | None = None
|
|
150
163
|
) -> DiffTree:
|
|
164
|
+
self.initialize(enriched_diff_root=enriched_diff_root)
|
|
151
165
|
all_nodes = list(enriched_diff_root.nodes)
|
|
152
166
|
tree_nodes = [self.to_diff_node(enriched_node=e_node, graphql_context=graphql_context) for e_node in all_nodes]
|
|
153
167
|
name = None
|
|
@@ -166,6 +180,43 @@ class DiffTreeResolver:
|
|
|
166
180
|
num_conflicts=enriched_diff_root.num_conflicts,
|
|
167
181
|
)
|
|
168
182
|
|
|
183
|
+
def _get_parent_info(
|
|
184
|
+
self, diff_node: EnrichedDiffNode, graphql_context: GraphqlContext | None = None
|
|
185
|
+
) -> ParentNodeInfo | None:
|
|
186
|
+
for r in diff_node.relationships:
|
|
187
|
+
for n in r.nodes:
|
|
188
|
+
relationship_name: str = "undefined"
|
|
189
|
+
|
|
190
|
+
if not graphql_context or not self.source_branch_name:
|
|
191
|
+
return ParentNodeInfo(node=n, relationship_name=relationship_name)
|
|
192
|
+
|
|
193
|
+
node_schema = graphql_context.db.schema.get(
|
|
194
|
+
name=diff_node.kind, branch=self.source_branch_name, duplicate=False
|
|
195
|
+
)
|
|
196
|
+
rel_schema = node_schema.get_relationship(name=r.name)
|
|
197
|
+
|
|
198
|
+
parent_schema = graphql_context.db.schema.get(
|
|
199
|
+
name=n.kind, branch=self.source_branch_name, duplicate=False
|
|
200
|
+
)
|
|
201
|
+
rels_parent = parent_schema.get_relationships_by_identifier(id=rel_schema.get_identifier())
|
|
202
|
+
|
|
203
|
+
if rels_parent and len(rels_parent) == 1:
|
|
204
|
+
relationship_name = rels_parent[0].name
|
|
205
|
+
elif rels_parent and len(rels_parent) > 1:
|
|
206
|
+
for rel_parent in rels_parent:
|
|
207
|
+
if (
|
|
208
|
+
rel_schema.direction == RelationshipDirection.INBOUND
|
|
209
|
+
and rel_parent.direction == RelationshipDirection.OUTBOUND
|
|
210
|
+
) or (
|
|
211
|
+
rel_schema.direction == RelationshipDirection.OUTBOUND
|
|
212
|
+
and rel_parent.direction == RelationshipDirection.INBOUND
|
|
213
|
+
):
|
|
214
|
+
relationship_name = rel_parent.name
|
|
215
|
+
break
|
|
216
|
+
|
|
217
|
+
return ParentNodeInfo(node=n, relationship_name=relationship_name)
|
|
218
|
+
return None
|
|
219
|
+
|
|
169
220
|
def to_diff_node(self, enriched_node: EnrichedDiffNode, graphql_context: GraphqlContext | None = None) -> DiffNode:
|
|
170
221
|
diff_attributes = [
|
|
171
222
|
self.to_diff_attribute(enriched_attribute=e_attr, graphql_context=graphql_context)
|
|
@@ -181,7 +232,7 @@ class DiffTreeResolver:
|
|
|
181
232
|
conflict = self.to_diff_conflict(enriched_conflict=enriched_node.conflict, graphql_context=graphql_context)
|
|
182
233
|
|
|
183
234
|
parent = None
|
|
184
|
-
if parent_info :=
|
|
235
|
+
if parent_info := self._get_parent_info(diff_node=enriched_node, graphql_context=graphql_context):
|
|
185
236
|
parent = DiffNodeParent(
|
|
186
237
|
uuid=parent_info.node.uuid,
|
|
187
238
|
kind=parent_info.node.kind,
|
infrahub/tasks/registry.py
CHANGED
|
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING
|
|
|
4
4
|
|
|
5
5
|
from infrahub import lock
|
|
6
6
|
from infrahub.core import registry
|
|
7
|
+
from infrahub.core.constants import GLOBAL_BRANCH_NAME
|
|
7
8
|
from infrahub.log import get_logger
|
|
8
9
|
from infrahub.worker import WORKER_IDENTITY
|
|
9
10
|
|
|
@@ -81,16 +82,21 @@ async def refresh_branches(db: InfrahubDatabase) -> None:
|
|
|
81
82
|
from infrahub.graphql.manager import GraphQLSchemaManager
|
|
82
83
|
|
|
83
84
|
async with lock.registry.local_schema_lock():
|
|
84
|
-
|
|
85
|
-
for
|
|
86
|
-
if
|
|
87
|
-
|
|
85
|
+
active_branches = await registry.branch_object.get_list(db=db)
|
|
86
|
+
for active_branch in active_branches:
|
|
87
|
+
if active_branch.name == GLOBAL_BRANCH_NAME:
|
|
88
|
+
# Avoid processing updates for the global branch as it doesn't
|
|
89
|
+
# have an associated schema
|
|
90
|
+
continue
|
|
91
|
+
|
|
92
|
+
if active_branch.name in registry.branch:
|
|
93
|
+
await update_branch_registry(db=db, branch=active_branch)
|
|
88
94
|
else:
|
|
89
|
-
await create_branch_registry(db=db, branch=
|
|
95
|
+
await create_branch_registry(db=db, branch=active_branch)
|
|
90
96
|
|
|
91
|
-
purged_branches = await registry.purge_inactive_branches(db=db, active_branches=
|
|
97
|
+
purged_branches = await registry.purge_inactive_branches(db=db, active_branches=active_branches)
|
|
92
98
|
purged_branches.update(
|
|
93
|
-
GraphQLSchemaManager.purge_inactive(active_branches=[branch.name for branch in
|
|
99
|
+
GraphQLSchemaManager.purge_inactive(active_branches=[branch.name for branch in active_branches])
|
|
94
100
|
)
|
|
95
101
|
for branch_name in sorted(purged_branches):
|
|
96
102
|
log.info(f"Removed branch {branch_name!r} from the registry", branch=branch_name, worker=WORKER_IDENTITY)
|
infrahub_sdk/client.py
CHANGED
|
@@ -790,7 +790,7 @@ class InfrahubClient(BaseClient):
|
|
|
790
790
|
async def process_page(page_offset: int, page_number: int) -> tuple[dict, ProcessRelationsNode]:
|
|
791
791
|
"""Process a single page of results."""
|
|
792
792
|
query_data = await InfrahubNode(client=self, schema=schema, branch=branch).generate_query_data(
|
|
793
|
-
offset=offset
|
|
793
|
+
offset=page_offset if offset is None else offset,
|
|
794
794
|
limit=limit or pagination_size,
|
|
795
795
|
filters=filters,
|
|
796
796
|
include=include,
|
|
@@ -1954,7 +1954,7 @@ class InfrahubClientSync(BaseClient):
|
|
|
1954
1954
|
def process_page(page_offset: int, page_number: int) -> tuple[dict, ProcessRelationsNodeSync]:
|
|
1955
1955
|
"""Process a single page of results."""
|
|
1956
1956
|
query_data = InfrahubNodeSync(client=self, schema=schema, branch=branch).generate_query_data(
|
|
1957
|
-
offset=offset
|
|
1957
|
+
offset=page_offset if offset is None else offset,
|
|
1958
1958
|
limit=limit or pagination_size,
|
|
1959
1959
|
filters=filters,
|
|
1960
1960
|
include=include,
|
infrahub_sdk/ctl/repository.py
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
from typing import Optional
|
|
5
6
|
|
|
6
7
|
import typer
|
|
7
8
|
import yaml
|
|
9
|
+
from copier import run_copy
|
|
8
10
|
from pydantic import ValidationError
|
|
9
11
|
from rich.console import Console
|
|
10
12
|
from rich.table import Table
|
|
@@ -165,3 +167,52 @@ async def list(
|
|
|
165
167
|
)
|
|
166
168
|
|
|
167
169
|
console.print(table)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
@app.command()
|
|
173
|
+
async def init(
|
|
174
|
+
directory: Path = typer.Argument(help="Directory path for the new project."),
|
|
175
|
+
template: str = typer.Option(
|
|
176
|
+
default="https://github.com/opsmill/infrahub-template.git",
|
|
177
|
+
help="Template to use for the new repository. Can be a local path or a git repository URL.",
|
|
178
|
+
),
|
|
179
|
+
data: Optional[Path] = typer.Option(default=None, help="Path to YAML file containing answers to CLI prompt."),
|
|
180
|
+
vcs_ref: Optional[str] = typer.Option(
|
|
181
|
+
default="HEAD",
|
|
182
|
+
help="VCS reference to use for the template. Defaults to HEAD.",
|
|
183
|
+
),
|
|
184
|
+
trust: Optional[bool] = typer.Option(
|
|
185
|
+
default=False,
|
|
186
|
+
help="Trust the template repository. If set, the template will be cloned without verification.",
|
|
187
|
+
),
|
|
188
|
+
_: str = CONFIG_PARAM,
|
|
189
|
+
) -> None:
|
|
190
|
+
"""Initialize a new Infrahub repository."""
|
|
191
|
+
|
|
192
|
+
config_data = None
|
|
193
|
+
if data:
|
|
194
|
+
try:
|
|
195
|
+
with Path.open(data, encoding="utf-8") as file:
|
|
196
|
+
config_data = yaml.safe_load(file)
|
|
197
|
+
typer.echo(f"Loaded config: {config_data}")
|
|
198
|
+
except Exception as exc:
|
|
199
|
+
typer.echo(f"Error loading YAML file: {exc}", err=True)
|
|
200
|
+
raise typer.Exit(code=1)
|
|
201
|
+
|
|
202
|
+
# Allow template to be a local path or a URL
|
|
203
|
+
template_source = template or ""
|
|
204
|
+
if template and Path(template).exists():
|
|
205
|
+
template_source = str(Path(template).resolve())
|
|
206
|
+
|
|
207
|
+
try:
|
|
208
|
+
await asyncio.to_thread(
|
|
209
|
+
run_copy,
|
|
210
|
+
template_source,
|
|
211
|
+
str(directory),
|
|
212
|
+
data=config_data,
|
|
213
|
+
vcs_ref=vcs_ref,
|
|
214
|
+
unsafe=trust,
|
|
215
|
+
)
|
|
216
|
+
except Exception as e:
|
|
217
|
+
typer.echo(f"Error running copier: {e}", err=True)
|
|
218
|
+
raise typer.Exit(code=1)
|
infrahub_sdk/ctl/schema.py
CHANGED
|
@@ -36,7 +36,7 @@ def validate_schema_content_and_exit(client: InfrahubClient, schemas: list[Schem
|
|
|
36
36
|
has_error: bool = False
|
|
37
37
|
for schema_file in schemas:
|
|
38
38
|
try:
|
|
39
|
-
client.schema.validate(data=schema_file.
|
|
39
|
+
client.schema.validate(data=schema_file.payload)
|
|
40
40
|
except ValidationError as exc:
|
|
41
41
|
console.print(f"[red]Schema not valid, found '{len(exc.errors())}' error(s) in {schema_file.location}")
|
|
42
42
|
has_error = True
|
|
@@ -48,7 +48,7 @@ def validate_schema_content_and_exit(client: InfrahubClient, schemas: list[Schem
|
|
|
48
48
|
raise typer.Exit(1)
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
def display_schema_load_errors(response: dict[str, Any], schemas_data: list[
|
|
51
|
+
def display_schema_load_errors(response: dict[str, Any], schemas_data: list[SchemaFile]) -> None:
|
|
52
52
|
console.print("[red]Unable to load the schema:")
|
|
53
53
|
if "detail" not in response:
|
|
54
54
|
handle_non_detail_errors(response=response)
|
|
@@ -87,7 +87,7 @@ def handle_non_detail_errors(response: dict[str, Any]) -> None:
|
|
|
87
87
|
if "error" in response:
|
|
88
88
|
console.print(f" {response.get('error')}")
|
|
89
89
|
elif "errors" in response:
|
|
90
|
-
for error in response
|
|
90
|
+
for error in response["errors"]:
|
|
91
91
|
console.print(f" {error.get('message')}")
|
|
92
92
|
else:
|
|
93
93
|
console.print(f" '{response}'")
|
|
@@ -97,9 +97,9 @@ def valid_error_path(loc_path: list[Any]) -> bool:
|
|
|
97
97
|
return len(loc_path) >= 6 and loc_path[0] == "body" and loc_path[1] == "schemas"
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
def get_node(schemas_data: list[
|
|
101
|
-
if schema_index < len(schemas_data) and node_index < len(schemas_data[schema_index].
|
|
102
|
-
return schemas_data[schema_index].
|
|
100
|
+
def get_node(schemas_data: list[SchemaFile], schema_index: int, node_index: int) -> dict | None:
|
|
101
|
+
if schema_index < len(schemas_data) and node_index < len(schemas_data[schema_index].payload["nodes"]):
|
|
102
|
+
return schemas_data[schema_index].payload["nodes"][node_index]
|
|
103
103
|
return None
|
|
104
104
|
|
|
105
105
|
|
|
@@ -122,7 +122,7 @@ async def load(
|
|
|
122
122
|
validate_schema_content_and_exit(client=client, schemas=schemas_data)
|
|
123
123
|
|
|
124
124
|
start_time = time.time()
|
|
125
|
-
response = await client.schema.load(schemas=[item.
|
|
125
|
+
response = await client.schema.load(schemas=[item.payload for item in schemas_data], branch=branch)
|
|
126
126
|
loading_time = time.time() - start_time
|
|
127
127
|
|
|
128
128
|
if response.errors:
|
|
@@ -170,10 +170,10 @@ async def check(
|
|
|
170
170
|
client = initialize_client()
|
|
171
171
|
validate_schema_content_and_exit(client=client, schemas=schemas_data)
|
|
172
172
|
|
|
173
|
-
success, response = await client.schema.check(schemas=[item.
|
|
173
|
+
success, response = await client.schema.check(schemas=[item.payload for item in schemas_data], branch=branch)
|
|
174
174
|
|
|
175
175
|
if not success:
|
|
176
|
-
display_schema_load_errors(response=response, schemas_data=schemas_data)
|
|
176
|
+
display_schema_load_errors(response=response or {}, schemas_data=schemas_data)
|
|
177
177
|
else:
|
|
178
178
|
for schema_file in schemas_data:
|
|
179
179
|
console.print(f"[green] schema '{schema_file.location}' is Valid!")
|
infrahub_sdk/node/node.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Iterable
|
|
4
|
-
from copy import copy
|
|
4
|
+
from copy import copy, deepcopy
|
|
5
5
|
from typing import TYPE_CHECKING, Any
|
|
6
6
|
|
|
7
7
|
from ..constants import InfrahubClientMode
|
|
@@ -397,7 +397,7 @@ class InfrahubNodeBase:
|
|
|
397
397
|
"edges": {"node": {"id": None, "hfid": None, "display_label": None, "__typename": None}},
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
-
data["@filters"] = filters
|
|
400
|
+
data["@filters"] = deepcopy(filters) if filters is not None else {}
|
|
401
401
|
|
|
402
402
|
if order:
|
|
403
403
|
data["@filters"]["order"] = order
|
|
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
|
|
16
16
|
|
|
17
17
|
class InfrahubGraphQLQueryItem(InfrahubItem):
|
|
18
18
|
def validate_resource_config(self) -> None:
|
|
19
|
-
# Resource name does not need to match against
|
|
19
|
+
# Resource name does not need to match against Infrahub repository configuration
|
|
20
20
|
return
|
|
21
21
|
|
|
22
22
|
def execute_query(self) -> Any:
|
|
@@ -24,7 +24,7 @@ ResourceClass = TypeVar("ResourceClass")
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class InfrahubRepositoryConfigElement(BaseModel):
|
|
27
|
-
"""Class to regroup all elements of the
|
|
27
|
+
"""Class to regroup all elements of the Infrahub configuration for a repository for typing purpose."""
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class InfrahubRepositoryArtifactDefinitionConfig(InfrahubRepositoryConfigElement):
|
infrahub_sdk/testing/docker.py
CHANGED
|
@@ -13,7 +13,7 @@ INFRAHUB_VERSION = os.getenv("INFRAHUB_TESTING_IMAGE_VER")
|
|
|
13
13
|
|
|
14
14
|
def skip_version(min_infrahub_version: str | None = None, max_infrahub_version: str | None = None) -> bool:
|
|
15
15
|
"""
|
|
16
|
-
Check if a test should be skipped depending on
|
|
16
|
+
Check if a test should be skipped depending on Infrahub version.
|
|
17
17
|
"""
|
|
18
18
|
if INFRAHUB_VERSION is None:
|
|
19
19
|
return True
|
infrahub_sdk/utils.py
CHANGED
|
@@ -95,7 +95,7 @@ def decode_json(response: httpx.Response) -> dict:
|
|
|
95
95
|
try:
|
|
96
96
|
return response.json()
|
|
97
97
|
except json.decoder.JSONDecodeError as exc:
|
|
98
|
-
raise JsonDecodeError(content=response.text, url=response.url) from exc
|
|
98
|
+
raise JsonDecodeError(content=response.text, url=str(response.url)) from exc
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
def generate_uuid() -> str:
|
|
@@ -232,7 +232,7 @@ def get_branch(branch: str | None = None, directory: str | Path = ".") -> str:
|
|
|
232
232
|
if branch:
|
|
233
233
|
return branch
|
|
234
234
|
|
|
235
|
-
repo = GitRepoManager(directory)
|
|
235
|
+
repo = GitRepoManager(root_directory=str(directory))
|
|
236
236
|
return str(repo.active_branch)
|
|
237
237
|
|
|
238
238
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: infrahub-server
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.2
|
|
4
4
|
Summary: Infrahub is taking a new approach to Infrastructure Management by providing a new generation of datastore to organize and control all the data that defines how an infrastructure should run.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Author: OpsMill
|
|
@@ -110,7 +110,7 @@ infrahub/core/diff/merger/serializer.py,sha256=N5BJ5I2NkB5RtEMuhDfScM7v19PGCbuXC
|
|
|
110
110
|
infrahub/core/diff/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
111
111
|
infrahub/core/diff/model/diff.py,sha256=eS2TjZf9aWTZDvQ479t6C6iXXPtmBqulxA2jWxnEDuU,9501
|
|
112
112
|
infrahub/core/diff/model/field_specifiers_map.py,sha256=59zsMRuYyb9OJEpH9BZQ9kf2DUiDOM3VtuDGvSK6dJQ,2632
|
|
113
|
-
infrahub/core/diff/model/path.py,sha256=
|
|
113
|
+
infrahub/core/diff/model/path.py,sha256=lcKTS7hKvu3Rul0k_vxJTrz7G83HhPPedXlthKkr9ag,28844
|
|
114
114
|
infrahub/core/diff/models.py,sha256=wmOzW4xQ5YreDCr_i56YMFtxbM4-LRgZort49fGJ0BQ,441
|
|
115
115
|
infrahub/core/diff/parent_node_adder.py,sha256=AFq2KJHGgUVem4WCg-9Qi9h6TTwt-JID1uGYGBrIZxQ,2840
|
|
116
116
|
infrahub/core/diff/payload_builder.py,sha256=5R_QuPM5P_uQONmTDbtpIjhshs_OJCcXLnVYjWw-78Q,2094
|
|
@@ -300,10 +300,10 @@ infrahub/core/schema/generated/node_schema.py,sha256=PMgbQX1PC5ixQsjOFw_bcEfa4tx
|
|
|
300
300
|
infrahub/core/schema/generated/relationship_schema.py,sha256=F198_LNmQRV0xSEBPRA3vBAioEItpYZVNApOmdb8_E4,5851
|
|
301
301
|
infrahub/core/schema/generic_schema.py,sha256=KSd5fwMDR2hjrsb1vOaK83Lw5jJAob1FLoudgU5_E2Y,1594
|
|
302
302
|
infrahub/core/schema/manager.py,sha256=RAMox35C36eTELkfukVnQ5L9ob-RIZyDcvrHeVye1Ic,33123
|
|
303
|
-
infrahub/core/schema/node_schema.py,sha256=
|
|
303
|
+
infrahub/core/schema/node_schema.py,sha256=cWeQ2iu6Z9Ay6l2gYnPRnS0JAqYQccueYhpEcfep9Mo,6252
|
|
304
304
|
infrahub/core/schema/profile_schema.py,sha256=sV4lp1UyBye12M7BJcA2obb4tx3M9J5P89SLqkmFxJY,1237
|
|
305
305
|
infrahub/core/schema/relationship_schema.py,sha256=R-1iC1d70bBW0vWhgJhDB0_J3tRpOqcJmmLzh39NuYs,8501
|
|
306
|
-
infrahub/core/schema/schema_branch.py,sha256=
|
|
306
|
+
infrahub/core/schema/schema_branch.py,sha256=sqloV0TzPMoZopSqQpGP1RaZpRQ96N55KJjAvplzeLI,106245
|
|
307
307
|
infrahub/core/schema/schema_branch_computed.py,sha256=14UUsQJDLMHkYhg7QMqeLiTF3PO8c8rGa90ul3F2ZZo,10629
|
|
308
308
|
infrahub/core/schema/template_schema.py,sha256=cn7-qFUW_LNRfA5q6e1-PdzGSwubuCkLTL6uad2GhdQ,1229
|
|
309
309
|
infrahub/core/task/__init__.py,sha256=Ied1NvKGJUDmff27z_-yWW8ArenHxGvSvQTaQyx1iHs,128
|
|
@@ -315,7 +315,7 @@ infrahub/core/utils.py,sha256=SzOlfsV5Ebp6VeJXARDIm4C3UUNZsNlXerlQbLMappc,9146
|
|
|
315
315
|
infrahub/core/validators/__init__.py,sha256=0287h4i-oCL1seKlcQmZtSdepn-25JBKo5XkRrsiXL8,3189
|
|
316
316
|
infrahub/core/validators/aggregated_checker.py,sha256=KA23ewrwOz8EsezsvF8cY4U0js_d5YPbeqESjG5sWl0,4719
|
|
317
317
|
infrahub/core/validators/attribute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
318
|
-
infrahub/core/validators/attribute/choices.py,sha256=
|
|
318
|
+
infrahub/core/validators/attribute/choices.py,sha256=YFTt3pM5WzgtXpTLJVniWH-SG2784J07zy4elKNT4r4,5374
|
|
319
319
|
infrahub/core/validators/attribute/enum.py,sha256=3PzkYUuzbt8NqRH4IP4cMjoDxzUvJzbNYC5ZpW5zKZQ,4161
|
|
320
320
|
infrahub/core/validators/attribute/kind.py,sha256=uzMo4Qf-AyvSlwgURgALd7QVMEl6237tb148-wgTDjE,4611
|
|
321
321
|
infrahub/core/validators/attribute/length.py,sha256=H0nP2x2ynzcbMnc6neIje01wXipbt8Wr49iNTqIvWxI,4526
|
|
@@ -452,7 +452,7 @@ infrahub/graphql/analyzer.py,sha256=TAWo4AWMr33MFjK3YcYBxXSjdwRHxU2HzpIuY9tTHqU,
|
|
|
452
452
|
infrahub/graphql/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
453
453
|
infrahub/graphql/api/dependencies.py,sha256=-NMUA_N4tWcVpS6ksCebAyza-JTmHqyYY_QZizgBR1c,1690
|
|
454
454
|
infrahub/graphql/api/endpoints.py,sha256=wH9eO3CFT-eoSe1Y32BhU9mIf6smEnPeP3tAxZkdt4g,1510
|
|
455
|
-
infrahub/graphql/app.py,sha256=
|
|
455
|
+
infrahub/graphql/app.py,sha256=ZoxFravB96Ax3DrQZM0MaK-OsWkFk6Rb-bao7IEE6TI,21177
|
|
456
456
|
infrahub/graphql/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
457
457
|
infrahub/graphql/auth/query_permission_checker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
458
458
|
infrahub/graphql/auth/query_permission_checker/anonymous_checker.py,sha256=ibsmGyOelLJbN2Kfkmffv-5D79h7tRc1Fez5tauFY8w,1377
|
|
@@ -510,7 +510,7 @@ infrahub/graphql/queries/account.py,sha256=s9re9mSJqfSzQkThdvM9l61sI33EvzXJrihQh
|
|
|
510
510
|
infrahub/graphql/queries/branch.py,sha256=-_gRZgEcjj7oWnguPPtELNUCkciPbEpuwST4AknOyws,794
|
|
511
511
|
infrahub/graphql/queries/convert_object_type_mapping.py,sha256=zLav6Eod0OqLgj4PY7q8fCUE-idYYHFQXf_G-siAgyI,1169
|
|
512
512
|
infrahub/graphql/queries/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
513
|
-
infrahub/graphql/queries/diff/tree.py,sha256=
|
|
513
|
+
infrahub/graphql/queries/diff/tree.py,sha256=QM4y7uQE-bP48bmfpWBfA22mcWEWTTrwZYCxIhBRz8Y,25256
|
|
514
514
|
infrahub/graphql/queries/event.py,sha256=m15JAgX5US70bn4INjwJ8UcGJgFCxlGGjHHCPzgorb0,4564
|
|
515
515
|
infrahub/graphql/queries/internal.py,sha256=pcGLpLrY1fC_HxHNs8NAFjr5FTFzcgRlS1F7b65gqfE,647
|
|
516
516
|
infrahub/graphql/queries/ipam.py,sha256=dXhzjMBusKDJTJ5gSK_RIVffrH3PVvlpCFdFJhxGFaU,5030
|
|
@@ -662,7 +662,7 @@ infrahub/tasks/check.py,sha256=37n1U1Knb3AV6kz2sw_IabL9pnlqceLVICWf9GdSxZE,687
|
|
|
662
662
|
infrahub/tasks/dummy.py,sha256=6SxlQqQXZqgTuwLaAsK-p1O1TYNKfdGmUYjNJFNHe9s,1209
|
|
663
663
|
infrahub/tasks/keepalive.py,sha256=D6yh3Vmlr1WCEpZibk2YLc2n0dCcX6tM62HCSxyGEu8,783
|
|
664
664
|
infrahub/tasks/recurring.py,sha256=RJO2zdzCU-38Kb81lmCUbFQOBhGui8qn2QizTV4vj9I,447
|
|
665
|
-
infrahub/tasks/registry.py,sha256=
|
|
665
|
+
infrahub/tasks/registry.py,sha256=zanLxRT_RFkYV2Y3OQedHu2-PTBwoExbAzgokT0TZjQ,3957
|
|
666
666
|
infrahub/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
667
667
|
infrahub/telemetry/constants.py,sha256=_5mJAZaT_wTCaF7Yzsd---Zn1N6GZkoP_954GK8K4-c,184
|
|
668
668
|
infrahub/telemetry/database.py,sha256=9UVPOxRionVF65jjo8slRIaNBOv-KMRzq7I-7fe3wZE,3111
|
|
@@ -710,7 +710,7 @@ infrahub_sdk/async_typer.py,sha256=Gj7E8EGdjA-XF404vr9cBt20mmbroQh7N68HXhWYx00,8
|
|
|
710
710
|
infrahub_sdk/batch.py,sha256=LRZ_04ic56ll9FBjgXCYrJRDJcwB3wR1yX4grrQutDQ,3795
|
|
711
711
|
infrahub_sdk/branch.py,sha256=hmtoIekQ1uusoJ6yEKlw6vrFMTAHJrXu-YsqqCQC_kc,12716
|
|
712
712
|
infrahub_sdk/checks.py,sha256=rFHlEY8XEYcjpLCg6gd9a0R8vPnkxNp0OnXk-odsZKY,5707
|
|
713
|
-
infrahub_sdk/client.py,sha256=
|
|
713
|
+
infrahub_sdk/client.py,sha256=0llKuTQFKRwtxjsWvavw2brOF5B0gJdxn8iIhxAcQzM,101611
|
|
714
714
|
infrahub_sdk/config.py,sha256=wnVRkaVO4Nd2IBLRVpLtrC-jjW399mgr1DprohTEzQQ,7936
|
|
715
715
|
infrahub_sdk/constants.py,sha256=Ca66r09eDzpmMhfFAspKFSehSxOmoflVongP-UuBDc4,138
|
|
716
716
|
infrahub_sdk/context.py,sha256=QgXZvtUrKolp6ML8TguVK87Wuu-3KyizZVV_N2F4oCw,400
|
|
@@ -729,8 +729,8 @@ infrahub_sdk/ctl/menu.py,sha256=A0NHvu48qbo9aWYNc3nGMNMeXr4LnOr_HNKL5arBWNA,2690
|
|
|
729
729
|
infrahub_sdk/ctl/object.py,sha256=OEbAx0Yb0zbXxS2ZnXedZRZDHITQd3iAk_cWUlTHLvg,2706
|
|
730
730
|
infrahub_sdk/ctl/parameters.py,sha256=aU2H41svfG309m2WdH6R9H5xgQ4gevn3ItOu5ltuVas,413
|
|
731
731
|
infrahub_sdk/ctl/render.py,sha256=zrIz_KXq3QafgNiqqNeYt2JtD2PGOa0D5ujW6NqZdz8,1948
|
|
732
|
-
infrahub_sdk/ctl/repository.py,sha256=
|
|
733
|
-
infrahub_sdk/ctl/schema.py,sha256=
|
|
732
|
+
infrahub_sdk/ctl/repository.py,sha256=ykvPGT5yuj1iGF_C6hFWS8UIP8p334weYRVBEhFWt_U,6672
|
|
733
|
+
infrahub_sdk/ctl/schema.py,sha256=6MZz36xwrT14eDeDyUG4EGWn-4Rv53DkaBJV1fqscvY,7070
|
|
734
734
|
infrahub_sdk/ctl/transform.py,sha256=5qRqiKeEefs0rda6RAFAAj1jkCKdbPYE_t8O-n436LQ,414
|
|
735
735
|
infrahub_sdk/ctl/utils.py,sha256=bvH5JfkLvN_84LeftM-GQU3s3fECbiHCVpBrrpRtJj4,7437
|
|
736
736
|
infrahub_sdk/ctl/validate.py,sha256=dknc4kMBIdysZNtEBYyvhlFPyUYyLmc2a4OI4cjGj2c,3910
|
|
@@ -744,7 +744,7 @@ infrahub_sdk/jinja2.py,sha256=lTfV9E_P5gApaX6RW9M8U8oixQi-0H3U8wcs8fdGVaU,1150
|
|
|
744
744
|
infrahub_sdk/node/__init__.py,sha256=clAUZ9lNVPFguelR5Sg9PzklAZruTKEm2xk-BaO68l8,1262
|
|
745
745
|
infrahub_sdk/node/attribute.py,sha256=oEY1qxip8ETEx9Q33NhSQo013zmzrmpVIFzSkEMUY8M,4547
|
|
746
746
|
infrahub_sdk/node/constants.py,sha256=TJO4uxvv7sc3FjoLdQdV7Ccymqz8AqxDenARst8awb4,775
|
|
747
|
-
infrahub_sdk/node/node.py,sha256=
|
|
747
|
+
infrahub_sdk/node/node.py,sha256=LPl9w9CySrZSEXuTn6jXuSshQCzAPyehc8Kyzpsq5dE,73518
|
|
748
748
|
infrahub_sdk/node/parsers.py,sha256=sLDdT6neoYSZIjOCmq8Bgd0LK8FFoasjvJLuSz0whSU,543
|
|
749
749
|
infrahub_sdk/node/property.py,sha256=8Mjkc8bp3kLlHyllwxDJlpJTuOA1ciMgY8mtH3dFVLM,728
|
|
750
750
|
infrahub_sdk/node/related_node.py,sha256=fPMnZ83OZnnbimaPC14MdE3lR-kumAA6hbOhRlo1gms,10093
|
|
@@ -763,7 +763,7 @@ infrahub_sdk/pytest_plugin/exceptions.py,sha256=ek2WyTBPuZdxhJClOhLo4EcFdvgE4BP0
|
|
|
763
763
|
infrahub_sdk/pytest_plugin/items/__init__.py,sha256=Au90dLk6lbSgRAoqrZOdYJ6m0lwFJYHFiAQHrcc6_rI,1026
|
|
764
764
|
infrahub_sdk/pytest_plugin/items/base.py,sha256=-S7Xp3Zf7oQkw8EuqUI9lWWBzhKTfNdkn0UUjSqX9Zc,3068
|
|
765
765
|
infrahub_sdk/pytest_plugin/items/check.py,sha256=cEF9jC61EJzlYCf1YUGF241XO7F7zhkHAg2T_EPmIN8,3364
|
|
766
|
-
infrahub_sdk/pytest_plugin/items/graphql_query.py,sha256=
|
|
766
|
+
infrahub_sdk/pytest_plugin/items/graphql_query.py,sha256=_OdF5BosbvAuH0b8-CiAFmcYpXGA_Ssnuvb1X6oX9GA,2353
|
|
767
767
|
infrahub_sdk/pytest_plugin/items/jinja2_transform.py,sha256=N0zzrJ0Dar-ZHF-MQB-rDU8qtoFGfOB2GcnNgl_4I1Q,4694
|
|
768
768
|
infrahub_sdk/pytest_plugin/items/python_transform.py,sha256=ToIrTiAOYSJLyQh7exPrjnkpSWyx4BHhKhmF4F16M2E,4175
|
|
769
769
|
infrahub_sdk/pytest_plugin/loader.py,sha256=x9sOKGYQeDewx_y5RlGPF2C-ZV44eolfC0c6BOjDAug,4248
|
|
@@ -776,7 +776,7 @@ infrahub_sdk/recorder.py,sha256=_NPtSLX3-Dam6BHt7daLzv-IAVxvU-35GIGu7YtA08Y,2285
|
|
|
776
776
|
infrahub_sdk/repository.py,sha256=PbSHHl6ajIeZu1t4pH1j7qzR-DPOkGuzubcNM02NuV0,1011
|
|
777
777
|
infrahub_sdk/schema/__init__.py,sha256=26pGrfI5fiz5nq9uYxNYuTGWw6zYJCGuWaqJhSPsAiQ,28928
|
|
778
778
|
infrahub_sdk/schema/main.py,sha256=Cph933k_b20PZEYlLdYcSmXtb4jL5vwxNCO8TTn_7vE,12182
|
|
779
|
-
infrahub_sdk/schema/repository.py,sha256=
|
|
779
|
+
infrahub_sdk/schema/repository.py,sha256=oxACAok7fQbwdPhpzZJ8JMwMvHuMG1sNauf5-2cRQCU,12279
|
|
780
780
|
infrahub_sdk/spec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
781
781
|
infrahub_sdk/spec/menu.py,sha256=KG8KpDYqlVWsCQXCUlAX7P7Jbw3bB60hlTMRs0cohOk,1078
|
|
782
782
|
infrahub_sdk/spec/object.py,sha256=yUgQYfvztpWyn9D8wTQfKmUIxM0jh12dYcy_C5Li9ME,24597
|
|
@@ -791,7 +791,7 @@ infrahub_sdk/template/exceptions.py,sha256=mpO09MUZpEhb8OcYGb9MstyAQ16v2f5WA8MzH
|
|
|
791
791
|
infrahub_sdk/template/filters.py,sha256=YfNkeJnbBz6Qvi6VmEjctVVifk2cYZPqswrDAEAKhA8,10179
|
|
792
792
|
infrahub_sdk/template/models.py,sha256=azSXHtKB7qL7m9Z1ckjC99ezwdkxOd-HK_9Cid8SBnM,176
|
|
793
793
|
infrahub_sdk/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
794
|
-
infrahub_sdk/testing/docker.py,sha256=
|
|
794
|
+
infrahub_sdk/testing/docker.py,sha256=G6PvarAOBjVfBp_y8FUGd8g9AQlzCO2pDPBufXfclIM,1808
|
|
795
795
|
infrahub_sdk/testing/repository.py,sha256=9s4MMaMljbJe97Ua4bJgc64giQ2UMC0bD5qIqYd4YNk,3571
|
|
796
796
|
infrahub_sdk/testing/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
797
797
|
infrahub_sdk/testing/schemas/animal.py,sha256=a1vydXPttoPvsGbSHY5H89AEoi7AWE2JiCGRBE9LJS8,7403
|
|
@@ -810,7 +810,7 @@ infrahub_sdk/transfer/importer/json.py,sha256=-Tlmg22TiBrEqXOSLMnUzlCFOZ2M0Q8lWy
|
|
|
810
810
|
infrahub_sdk/transfer/schema_sorter.py,sha256=ZoBjJGFT-6jQoKOLaoOPMAWzs7vGOeo7x6zOOP4LNv0,1244
|
|
811
811
|
infrahub_sdk/transforms.py,sha256=RLiB_CkM-JQSfyifChxxQVl2FrHKOGEf_YynSMKeFZU,2340
|
|
812
812
|
infrahub_sdk/types.py,sha256=UeZ1rDp4eyH12ApTcUD9a1OOtCp3IL1YZUeeZ06qF-I,1726
|
|
813
|
-
infrahub_sdk/utils.py,sha256=
|
|
813
|
+
infrahub_sdk/utils.py,sha256=263i-xkGkPMpSH8n6G6IF8Yt54pHSoTjo5ef30MSWOw,11906
|
|
814
814
|
infrahub_sdk/uuidt.py,sha256=Tz-4nHkJwbi39UT3gaIe2wJeZNAoBqf6tm3sw7LZbXc,2155
|
|
815
815
|
infrahub_sdk/yaml.py,sha256=PRsS7BEM-Xn5wRLAAG-YLTGRBEJy5Dnyim2YskFfe8I,5539
|
|
816
816
|
infrahub_testcontainers/__init__.py,sha256=oPpmesGgYBSdKTg1L37FGwYBeao1EHury5SJGul-CT8,216
|
|
@@ -826,8 +826,8 @@ infrahub_testcontainers/models.py,sha256=ASYyvl7d_WQz_i7y8-3iab9hwwmCl3OCJavqVbe
|
|
|
826
826
|
infrahub_testcontainers/performance_test.py,sha256=hvwiy6tc_lWniYqGkqfOXVGAmA_IV15VOZqbiD9ezno,6149
|
|
827
827
|
infrahub_testcontainers/plugin.py,sha256=I3RuZQ0dARyKHuqCf0y1Yj731P2Mwf3BJUehRJKeWrs,5645
|
|
828
828
|
infrahub_testcontainers/prometheus.yml,sha256=610xQEyj3xuVJMzPkC4m1fRnCrjGpiRBrXA2ytCLa54,599
|
|
829
|
-
infrahub_server-1.4.
|
|
830
|
-
infrahub_server-1.4.
|
|
831
|
-
infrahub_server-1.4.
|
|
832
|
-
infrahub_server-1.4.
|
|
833
|
-
infrahub_server-1.4.
|
|
829
|
+
infrahub_server-1.4.2.dist-info/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
|
|
830
|
+
infrahub_server-1.4.2.dist-info/METADATA,sha256=d-zSV3_9JrWJwJRhXIxjvryRmMyxZO_HQiRc4-A_T84,8271
|
|
831
|
+
infrahub_server-1.4.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
832
|
+
infrahub_server-1.4.2.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
|
|
833
|
+
infrahub_server-1.4.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|