infrahub-server 1.7.2__py3-none-any.whl → 1.7.4__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.
@@ -166,7 +166,9 @@ async def gather_trigger_computed_attribute_python(
166
166
  branches_with_diff_from_main = list(branches.keys())
167
167
 
168
168
  branches_to_process: list[tuple[str, list[str]]] = [(branch, []) for branch in branches_with_diff_from_main]
169
- branches_to_process.append((registry.default_branch, branches_with_diff_from_main))
169
+
170
+ if registry.default_branch in branches.keys():
171
+ branches_to_process.append((registry.default_branch, branches_with_diff_from_main))
170
172
 
171
173
  for branch_scope, branches_out_of_scope in branches_to_process:
172
174
  trigger_python = ComputedAttrPythonTriggerDefinition.from_object(
@@ -39,6 +39,7 @@ class DiffMergeQuery(Query):
39
39
  "branch_level": self.target_branch.hierarchy_level,
40
40
  "target_branch": self.target_branch.name,
41
41
  "source_branch": self.source_branch_name,
42
+ "global_branch": GLOBAL_BRANCH_NAME,
42
43
  "migrated_kinds_id_map": self.migrated_kinds_id_map,
43
44
  "migrated_kinds_uuids": list(self.migrated_kinds_id_map.keys()),
44
45
  }
@@ -270,7 +271,7 @@ CALL (n, node_diff_map, is_node_kind_migration) {
270
271
  CALL (rel_peer_id, rel_peer_db_id) {
271
272
  MATCH (rel_peer:Node {uuid: rel_peer_id})-[target_is_part_of:IS_PART_OF]->(:Root)
272
273
  WHERE (rel_peer_db_id IS NULL OR elementId(rel_peer) = rel_peer_db_id)
273
- AND target_is_part_of.branch IN [$source_branch, $target_branch]
274
+ AND target_is_part_of.branch IN [$source_branch, $target_branch, $global_branch]
274
275
  RETURN rel_peer
275
276
  ORDER BY target_is_part_of.branch_level DESC, target_is_part_of.from DESC, target_is_part_of.status ASC
276
277
  LIMIT 1
@@ -1 +1 @@
1
- GRAPH_VERSION = 55
1
+ GRAPH_VERSION = 56
@@ -57,6 +57,7 @@ from .m052_fix_global_branch_level import Migration052
57
57
  from .m053_fix_branch_level_zero import Migration053
58
58
  from .m054_cleanup_orphaned_nodes import Migration054
59
59
  from .m055_remove_webhook_validate_certificates_default import Migration055
60
+ from .m056_update_schema_node_generic_constraints import Migration056
60
61
 
61
62
  if TYPE_CHECKING:
62
63
  from ..shared import MigrationTypes
@@ -118,6 +119,7 @@ MIGRATIONS: list[type[MigrationTypes]] = [
118
119
  Migration053,
119
120
  Migration054,
120
121
  Migration055,
122
+ Migration056,
121
123
  ]
122
124
 
123
125
 
@@ -0,0 +1,106 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from infrahub.core import registry
6
+ from infrahub.core.branch import Branch
7
+ from infrahub.core.migrations.shared import MigrationInput, MigrationResult, get_migration_console
8
+ from infrahub.core.schema import SchemaRoot, internal_schema
9
+ from infrahub.core.schema.definitions.internal import (
10
+ generic_schema as internal_generic_schema,
11
+ )
12
+ from infrahub.core.schema.definitions.internal import (
13
+ node_schema as internal_node_schema,
14
+ )
15
+ from infrahub.core.schema.manager import SchemaManager
16
+ from infrahub.log import get_logger
17
+
18
+ from ..shared import ArbitraryMigration
19
+
20
+ if TYPE_CHECKING:
21
+ from infrahub.core.timestamp import Timestamp
22
+ from infrahub.database import InfrahubDatabase
23
+
24
+ log = get_logger()
25
+ console = get_migration_console()
26
+
27
+
28
+ async def update_schema_on_branch(db: InfrahubDatabase, branch: Branch, at: Timestamp, user_id: str) -> None:
29
+ """Update SchemaNode and SchemaGeneric on a specific branch."""
30
+ # Load schema for this branch
31
+ manager = SchemaManager()
32
+ registry.schema = manager
33
+ internal_schema_root = SchemaRoot(**internal_schema)
34
+ manager.register_schema(schema=internal_schema_root)
35
+ schema_branch = await manager.load_schema_from_db(db=db, branch=branch)
36
+
37
+ node_kind = "SchemaNode"
38
+ node_schema = schema_branch.get_node(name=node_kind, duplicate=False)
39
+ node_schema_node = await manager.get_one(db=db, branch=branch, id=node_schema.get_id(), prefetch_relationships=True)
40
+ current_node_schema = await manager.convert_node_schema_to_schema(db=db, schema_node=node_schema_node)
41
+
42
+ generic_kind = "SchemaGeneric"
43
+ generic_schema = schema_branch.get_node(name=generic_kind, duplicate=False)
44
+ generic_schema_node = await manager.get_one(
45
+ db=db, branch=branch, id=generic_schema.get_id(), prefetch_relationships=True
46
+ )
47
+ current_generic_schema = await manager.convert_node_schema_to_schema(db=db, schema_node=generic_schema_node)
48
+
49
+ for current_schema, internal_schema_spec in [
50
+ (current_node_schema, internal_node_schema),
51
+ (current_generic_schema, internal_generic_schema),
52
+ ]:
53
+ # Update SchemaNode
54
+ changed = False
55
+ if current_schema.human_friendly_id != internal_schema_spec.human_friendly_id:
56
+ current_schema.human_friendly_id = internal_schema_spec.human_friendly_id
57
+ changed = True
58
+ if current_schema.uniqueness_constraints != internal_schema_spec.uniqueness_constraints:
59
+ current_schema.uniqueness_constraints = internal_schema_spec.uniqueness_constraints
60
+ changed = True
61
+
62
+ # Update the name attribute to be unique = False
63
+ name_attr = current_schema.get_attribute(name="name")
64
+ if name_attr.unique:
65
+ name_attr.unique = False
66
+ changed = True
67
+
68
+ if changed:
69
+ # Save SchemaNode back to DB
70
+ await manager.update_node_in_db(
71
+ db=db,
72
+ node=current_schema,
73
+ user_id=user_id,
74
+ at=at,
75
+ branch=branch,
76
+ )
77
+
78
+
79
+ class Migration056(ArbitraryMigration):
80
+ name: str = "056_update_schema_node_generic_constraints"
81
+ minimum_version: int = 55
82
+
83
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
84
+ return MigrationResult()
85
+
86
+ async def execute(self, migration_input: MigrationInput) -> MigrationResult:
87
+ db = migration_input.db
88
+ at = migration_input.at
89
+ user_id = migration_input.user_id
90
+
91
+ console.log("[bold]Updating SchemaNode and SchemaGeneric constraints[/bold]")
92
+
93
+ # Get default branch
94
+ default_branch = registry.get_branch_from_registry()
95
+ console.log(f"Updating on default branch: {default_branch.name}")
96
+ await update_schema_on_branch(db=db, branch=default_branch, at=at, user_id=user_id)
97
+
98
+ branches = await Branch.get_list(db=db)
99
+ branches = [b for b in branches if not b.is_default and not b.is_global]
100
+ console.log(f"Found {len(branches)} branches to update")
101
+ for branch in branches:
102
+ console.log(f"Updating on branch: {branch.name}")
103
+ await update_schema_on_branch(db=db, branch=branch, at=at, user_id=user_id)
104
+
105
+ console.log("[bold green]Migration completed successfully[/bold green]")
106
+ return MigrationResult()
@@ -31,7 +31,6 @@ if TYPE_CHECKING:
31
31
  from infrahub.core.schema import NodeSchema, RelationshipSchema
32
32
  from infrahub.database import InfrahubDatabase
33
33
 
34
- # pylint: disable=redefined-builtin,too-many-lines
35
34
 
36
35
  log = get_logger()
37
36
 
@@ -6,10 +6,10 @@ import os
6
6
  from collections import defaultdict
7
7
  from dataclasses import asdict, dataclass
8
8
  from enum import Enum
9
- from typing import TYPE_CHECKING, Any, Callable, Iterable, Literal, overload
9
+ from typing import TYPE_CHECKING, Any, Callable, Iterable, Literal, NoReturn, overload
10
10
 
11
11
  from infrahub_sdk.utils import compare_lists, intersection
12
- from pydantic import ConfigDict, field_validator
12
+ from pydantic import ConfigDict, ValidationError, field_validator
13
13
 
14
14
  from infrahub.core.constants import HashableModelState, RelationshipCardinality, RelationshipKind
15
15
  from infrahub.core.models import HashableModel, HashableModelDiff
@@ -73,6 +73,19 @@ class BaseNodeSchema(GeneratedBaseNodeSchema):
73
73
 
74
74
  model_config = ConfigDict(extra="forbid", json_schema_extra=_json_schema_extra)
75
75
 
76
+ @staticmethod
77
+ def _enhance_attribute_validation_error(exc: ValidationError, attr_name: str, idx: int) -> NoReturn:
78
+ """Enhance validation error with attribute name and correct index in location path."""
79
+ errors = []
80
+ for error in exc.errors():
81
+ error_copy = error.copy()
82
+ # Insert the correct list index at the start of the location path
83
+ error_copy["loc"] = (idx,) + error["loc"]
84
+ nested_path = ".".join(str(item) for item in error["loc"])
85
+ error_copy["input"] = f"[{attr_name}.{nested_path}]: {error.get('input', 'N/A')}"
86
+ errors.append(error_copy)
87
+ raise ValidationError.from_exception_data(title=exc.title, line_errors=errors) from exc
88
+
76
89
  @property
77
90
  def is_schema_node(self) -> bool:
78
91
  """Tell if this node represent a part of the schema. Not to confuse this with `is_node_schema`."""
@@ -124,19 +137,27 @@ class BaseNodeSchema(GeneratedBaseNodeSchema):
124
137
  if not isinstance(raw_attributes, list):
125
138
  return raw_attributes
126
139
  attribute_schemas_with_types: list[Any] = []
127
- for raw_attr in raw_attributes:
140
+ for idx, raw_attr in enumerate(raw_attributes):
128
141
  if not isinstance(raw_attr, (dict, AttributeSchema)):
129
142
  attribute_schemas_with_types.append(raw_attr)
130
143
  continue
131
144
  if isinstance(raw_attr, dict):
132
- kind = raw_attr.get("kind")
145
+ kind = raw_attr["kind"]
146
+ attr_name = raw_attr["name"]
133
147
  attribute_type_class = get_attribute_schema_class_for_kind(kind=kind)
134
- attribute_schemas_with_types.append(attribute_type_class(**raw_attr))
148
+ try:
149
+ attribute_schemas_with_types.append(attribute_type_class(**raw_attr))
150
+ except ValidationError as exc:
151
+ cls._enhance_attribute_validation_error(exc, attr_name, idx)
135
152
  continue
136
153
 
154
+ attr_name = raw_attr.name
137
155
  expected_attr_schema_class = get_attribute_schema_class_for_kind(kind=raw_attr.kind)
138
156
  if not isinstance(raw_attr, expected_attr_schema_class):
139
- final_attr = expected_attr_schema_class(**raw_attr.model_dump())
157
+ try:
158
+ final_attr = expected_attr_schema_class(**raw_attr.model_dump())
159
+ except ValidationError as exc:
160
+ cls._enhance_attribute_validation_error(exc, attr_name, idx)
140
161
  else:
141
162
  final_attr = raw_attr
142
163
  attribute_schemas_with_types.append(final_attr)
@@ -804,7 +804,7 @@ relationship_schema = SchemaNode(
804
804
  name="branch",
805
805
  kind="Text",
806
806
  internal_kind=BranchSupportType,
807
- description="Type of branch support for the relatioinship, if not defined it will be determine based both peers.",
807
+ description="Type of branch support for the relationship. If not defined, it will be determined based on both peers.",
808
808
  enum=BranchSupportType.available_types(),
809
809
  optional=True,
810
810
  extra={"update": UpdateSupport.NOT_SUPPORTED}, # https://github.com/opsmill/infrahub/issues/2476
@@ -378,7 +378,8 @@ class SchemaManager(NodeManager):
378
378
 
379
379
  schema_dict = node.model_dump(exclude=IGNORE_FOR_NODE)
380
380
  for key, value in schema_dict.items():
381
- getattr(obj, key).value = value
381
+ if obj_attr := getattr(obj, key, None):
382
+ obj_attr.value = value
382
383
 
383
384
  attribute_schema = self.get_node_schema(name="SchemaAttribute", branch=branch)
384
385
  relationship_schema = self.get_node_schema(name="SchemaRelationship", branch=branch)
@@ -90,7 +90,7 @@ async def run_generator(model: RequestGeneratorRun) -> None:
90
90
  )
91
91
  await generator.run(identifier=generator_definition.name)
92
92
  generator_instance.status.value = GeneratorInstanceStatus.READY.value
93
- except (ModuleImportError, Exception): # pylint: disable=broad-exception-caught
93
+ except (ModuleImportError, Exception):
94
94
  generator_instance.status.value = GeneratorInstanceStatus.ERROR.value
95
95
  await generator_instance.update(do_full_update=True)
96
96
  raise
@@ -53,7 +53,7 @@ class PeerRelationshipsDataLoader(DataLoader[str, list[Relationship]]):
53
53
  self.query_params = query_params
54
54
  self.db = db
55
55
 
56
- async def batch_load_fn(self, keys: list[Any]) -> list[list[Relationship]]: # pylint: disable=method-hidden
56
+ async def batch_load_fn(self, keys: list[Any]) -> list[list[Relationship]]:
57
57
  async with self.db.start_session(read_only=True) as db:
58
58
  peer_rels = await NodeManager.query_peers(
59
59
  db=db,
infrahub/workers/utils.py CHANGED
@@ -20,7 +20,7 @@ def inject_service_parameter(func: Flow, parameters: dict[str, Any], service: In
20
20
  """
21
21
 
22
22
  # avoid circular imports
23
- from infrahub.services import InfrahubServices # pylint: disable=C0415
23
+ from infrahub.services import InfrahubServices
24
24
 
25
25
  if service_parameter_name := get_parameter_name(func=func, types=[InfrahubServices.__name__, InfrahubServices]):
26
26
  if any(isinstance(param_value, InfrahubServices) for param_value in parameters):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: infrahub-server
3
- Version: 1.7.2
3
+ Version: 1.7.4
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
  Project-URL: Homepage, https://opsmill.com
6
6
  Project-URL: Repository, https://github.com/opsmill/infrahub
@@ -71,7 +71,7 @@ infrahub/cli/db_commands/check_inheritance.py,sha256=a9aRg6yW0K5364Crqp_U9VDZjT9
71
71
  infrahub/cli/db_commands/clean_duplicate_schema_fields.py,sha256=JFYIcCBB4pEE3R8SioFNV9hhqycRr1QJMqhOrF-IlMk,8044
72
72
  infrahub/computed_attribute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  infrahub/computed_attribute/constants.py,sha256=oTMPEfRuf2mcfCkBpRLWRALO6nsLHpFm9jJGu0lowS4,446
74
- infrahub/computed_attribute/gather.py,sha256=YLcHoj-cmY2iYRtwoytq5jgHCZD4f6TPEXASwHgqQyQ,8237
74
+ infrahub/computed_attribute/gather.py,sha256=_XFN9U04HmAF-CR1kDGctSJI4UwUvhKlpL5wccVmEOA,8297
75
75
  infrahub/computed_attribute/models.py,sha256=U2zM2cGpGWAmRpVEp28hFauCNQYaDdI332thj_65zvE,17658
76
76
  infrahub/computed_attribute/tasks.py,sha256=hPC7S4boHq9Ihx2s54WifF5iL_p9dwzRI8hj0ZyVZzU,19824
77
77
  infrahub/computed_attribute/triggers.py,sha256=ve1cUj0CZ7dU1VtZkxET9LD8StszKIL9mCkTZpCeUaI,2304
@@ -163,7 +163,7 @@ infrahub/core/diff/query/field_summary.py,sha256=nQ2WHF4TIc-UWHwstXyFRPnuokyjDu8
163
163
  infrahub/core/diff/query/filters.py,sha256=McTtRNGg8fmnqTtNH-msfzH-8eKCBsM6-fitxTp5T8w,4324
164
164
  infrahub/core/diff/query/get_conflict_query.py,sha256=kpGZA4QZrXxv_vnoAP5oa9-347VzsNWUIBWcg7rg03U,892
165
165
  infrahub/core/diff/query/has_conflicts_query.py,sha256=kt0Z606vP2r1g7OqW2RrYj9LbiVkrzGfQ0AKCHx21XI,2547
166
- infrahub/core/diff/query/merge.py,sha256=e7ggx7VA3ZF9zx0d5VKhnxIEt153QavjfqOib8eQTTg,46443
166
+ infrahub/core/diff/query/merge.py,sha256=PM3VcSVoGKEvUtHhUk1bDw7X7NKEGC86A2cxFfaWMJs,46508
167
167
  infrahub/core/diff/query/merge_tracking_id.py,sha256=VLGsKuOCIMYe0I-0r01YHF5iaLYIkfSCVQatHM-ybFA,833
168
168
  infrahub/core/diff/query/roots_metadata.py,sha256=FT-48amqoR2RS4CkfnnXGI7Z5uOL4hm7IdZiz3SFHRo,2182
169
169
  infrahub/core/diff/query/save.py,sha256=xBKWpWfRWfaP7g523xKMK82ogg0AfVQTTMeyz8oe-o0,22956
@@ -173,7 +173,7 @@ infrahub/core/diff/query/update_conflict_query.py,sha256=kQkFazz88wnApr8UU_qb0ru
173
173
  infrahub/core/diff/repository/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
174
  infrahub/core/diff/repository/deserializer.py,sha256=bhN9ao8HxqKyRz273QGLNV9z9_SS4EQnM9JoY5ptx78,21337
175
175
  infrahub/core/diff/repository/repository.py,sha256=k7oUcEDO6Yzmwue_Civ6EYEs2kGa_SQ1odmbaRZsRV4,25603
176
- infrahub/core/graph/__init__.py,sha256=oWncAdmTeA5ElX1IGEgpcnlLxp3NzPl97jd5IPg4o4c,19
176
+ infrahub/core/graph/__init__.py,sha256=S0RrlA_BTgNNJbf5k6t1uPLBY-CuUtBNn2Lh-e_G1NM,19
177
177
  infrahub/core/graph/constraints.py,sha256=Ze3JASivU--QI2mLqheN52O06R-FPqc9Fd474BBT3gI,10417
178
178
  infrahub/core/graph/index.py,sha256=BNK6v56Ulx1pvovRArlUDHjRsrHOcFvzKS1We5kzkzY,1948
179
179
  infrahub/core/graph/schema.py,sha256=YRfus_CgOGjAlQlp2dYI2e60ISdlWa1l9caDrelKoUI,10287
@@ -198,7 +198,7 @@ infrahub/core/migrations/__init__.py,sha256=ttA1YkKhiG9Zc0fwIIcMLIDCrIhN5xVOIh6o
198
198
  infrahub/core/migrations/exceptions.py,sha256=gEAkWzjvN-IXr0YPqUrEqnu_GsR-uqucsu1QUaWhEmM,147
199
199
  infrahub/core/migrations/runner.py,sha256=r7pz_YB1HNbGo-rHFaXm_1oKJJo01YhaY0eWskiWftI,2295
200
200
  infrahub/core/migrations/shared.py,sha256=C-JNzjYSUNSLA0NqktibZ-5k5VuVZgUqLET004uPjMo,10382
201
- infrahub/core/migrations/graph/__init__.py,sha256=xg-D15pmy8ju9Ny8GpCJ99d249-mhbKP0cBp30TLfM0,5254
201
+ infrahub/core/migrations/graph/__init__.py,sha256=Q4QETCXNNjIl9sZ9Sgr7ExgDUKSy8YiNbgteyeT1Gpk,5342
202
202
  infrahub/core/migrations/graph/load_schema_branch.py,sha256=OvjowaeDnx4djD1aGPjE7Rqyh1p843LSodOf_Frdt9U,1008
203
203
  infrahub/core/migrations/graph/m001_add_version_to_graph.py,sha256=YcLN6cFjE6IGheXR4Ujb6CcyY8bJ7WE289hcKJaENOc,1515
204
204
  infrahub/core/migrations/graph/m002_attribute_is_default.py,sha256=wB6f2N_ChTvGajqHD-OWCG5ahRMDhhXZuwo79ieq_II,1036
@@ -255,6 +255,7 @@ infrahub/core/migrations/graph/m052_fix_global_branch_level.py,sha256=DX0BAIsN5h
255
255
  infrahub/core/migrations/graph/m053_fix_branch_level_zero.py,sha256=mPOzsE18u9NvhY7sgcjdy6114RS884EfZcl1ZRbJz-4,2177
256
256
  infrahub/core/migrations/graph/m054_cleanup_orphaned_nodes.py,sha256=phEFTOpkFt7gFStxhalXc7JjA1zpUlNYgRVhBi45nRU,2715
257
257
  infrahub/core/migrations/graph/m055_remove_webhook_validate_certificates_default.py,sha256=6lGRAqsLirs8R-KaJ_zJxMALsm3PHO-GxlEnvWzKuUU,3115
258
+ infrahub/core/migrations/graph/m056_update_schema_node_generic_constraints.py,sha256=wupG_sFWRq0Rh6hIaQOlvX9ftAsX_8GuC0B-gSDib-I,4392
258
259
  infrahub/core/migrations/query/__init__.py,sha256=uMfOD0Bb4k2yOcYk_4oKT3PxxhdPfHJBT0w6rUbRJJQ,866
259
260
  infrahub/core/migrations/query/attribute_add.py,sha256=AobAoXAwQu8c3X0Pcz7-3Al2U2l2kBk27cjgaS5Do6A,5422
260
261
  infrahub/core/migrations/query/attribute_remove.py,sha256=me_DUc8GYimhJALYgM6lUtnWZfkTx9LDbrFOyjAIceU,6058
@@ -299,7 +300,7 @@ infrahub/core/query/delete.py,sha256=CzD5qayFuHv_fRY-5wyl_EuDejcMvjpJN8M0JdvQ5AM
299
300
  infrahub/core/query/diff.py,sha256=mVoDBWqhojKR2ExGqxrYesYTIBDvzTtZIcY69wHw3Do,38563
300
301
  infrahub/core/query/ipam.py,sha256=x1tA0iufyjqxWv4ZCRIL8TwQTKxACMAqja8uthYMhPU,64625
301
302
  infrahub/core/query/node.py,sha256=fmlp5uPJfso4h0h3iA8LWL9LtI-r6XTwVO0XxS8dFoQ,99790
302
- infrahub/core/query/relationship.py,sha256=VITglhoKuMxJyU9RBmIsdjT56lFIqObapsy0UdzWTUc,57910
303
+ infrahub/core/query/relationship.py,sha256=YAQLZGC67cDc2PQJ1-bIAb_8B0BYbQvBS3A1hEAtm7s,57859
303
304
  infrahub/core/query/resource_manager.py,sha256=-2b2YGxGxYIsIc-Nyb597wLSMHSxgzz2i6PcYCRQraw,24179
304
305
  infrahub/core/query/standard_node.py,sha256=5m4przBJAoiTxDxjF8SYoc7gxJlgRgllsTgsmSI0O-s,5855
305
306
  infrahub/core/query/subquery.py,sha256=VAxY8wwkzrFQIGdQlxXUZ_iJZEtmTSru4sfs8hMNU7g,7215
@@ -319,12 +320,12 @@ infrahub/core/relationship/constraints/profiles_removal.py,sha256=P1fD2tYpduDqt5
319
320
  infrahub/core/schema/__init__.py,sha256=_vOy96uKjAxj8nvTR0qzHcnIYUzdVAAcUIk2kyUKjCQ,6641
320
321
  infrahub/core/schema/attribute_parameters.py,sha256=EMkjs7x0Rakxqu-ckXJ0VZCPzRGrRt2DBoKX6OWrJWM,7477
321
322
  infrahub/core/schema/attribute_schema.py,sha256=XbQOyWG1EVzOSUx6uQ9RjnP782DtJPqHjs7rIKeKh94,10058
322
- infrahub/core/schema/basenode_schema.py,sha256=m9SWsxHgufHYsEiJ7CAgF6OL-whwDCQV-OulLcfF798,29860
323
+ infrahub/core/schema/basenode_schema.py,sha256=3XgZVFgZPM3SAUaZcME3vOhLFWu68WxFywt2WlgJonw,31031
323
324
  infrahub/core/schema/computed_attribute.py,sha256=9rznZJpGqX8fxLx0EguPmww8LoHsadMtQQUKaMoJPcI,1809
324
325
  infrahub/core/schema/constants.py,sha256=KtFrvwNckyKZSGIMD4XfxI5eFTZqBRiw54R7BE5h39Q,374
325
326
  infrahub/core/schema/dropdown.py,sha256=Vj4eGg9q3OLy3RZm7rjORifURntIMY9GHM7G4t-0Rcs,605
326
327
  infrahub/core/schema/generic_schema.py,sha256=VzniSE6hH6ew3-gIODVe37l1TlF7u4iXHB0sbJfW_JA,1588
327
- infrahub/core/schema/manager.py,sha256=70VUn5OPFi5LPvdFJhUku_qkLL9_5BlFQKbt8npWQn4,36017
328
+ infrahub/core/schema/manager.py,sha256=UkSZlHY0K7ZCpDz4lvHHzQTVWyFf66dUIXutkRHGWfU,36064
328
329
  infrahub/core/schema/node_schema.py,sha256=W2Jx5QXrQ5ygUEyTKnIHhj6Xe7jJ6Y-iQArEo05cWRI,6341
329
330
  infrahub/core/schema/profile_schema.py,sha256=sV4lp1UyBye12M7BJcA2obb4tx3M9J5P89SLqkmFxJY,1237
330
331
  infrahub/core/schema/relationship_schema.py,sha256=Ixrt6j7mWa5XrLJlq_8szEohrpqE2dLzlPjSxHRGp-o,8639
@@ -335,7 +336,7 @@ infrahub/core/schema/schema_branch_hfid.py,sha256=XcNV2nNbpOhif5HHN6wvXXuM-nY8eM
335
336
  infrahub/core/schema/template_schema.py,sha256=cn7-qFUW_LNRfA5q6e1-PdzGSwubuCkLTL6uad2GhdQ,1229
336
337
  infrahub/core/schema/definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
338
  infrahub/core/schema/definitions/deprecated.py,sha256=PUXfRupaxNT3R_a6eFnvAcvXKOZenVb7VnuLAskZfT0,829
338
- infrahub/core/schema/definitions/internal.py,sha256=FYChSLC-AoX9T1SCdJIP7N8i0a5eokaIYVpKiDjYtVw,35389
339
+ infrahub/core/schema/definitions/internal.py,sha256=rYN4jYUJs2EL4jYFUJPFz5-TR9elfCFQuFah7_AbTqc,35393
339
340
  infrahub/core/schema/definitions/core/__init__.py,sha256=s90SEZ8HYgxFM1Bfn0s3vyXskpWoRRVdiwt0GxT76uc,5770
340
341
  infrahub/core/schema/definitions/core/account.py,sha256=YJ1y-lvHavohoJtEfebHJkgteWaCmB5rTW_fM0Sfcnc,5631
341
342
  infrahub/core/schema/definitions/core/artifact.py,sha256=aPO2KoNhFoLOpU1AQVpm1EvM8pOmcGLYxSnsW4rhEAc,4553
@@ -490,7 +491,7 @@ infrahub/events/validator_action.py,sha256=nQJH-RWcgr3-tzmIldvPmu5O7dUAmv1qQnuxx
490
491
  infrahub/generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
491
492
  infrahub/generators/constants.py,sha256=T_GuUuqzRwn7akkAD58TquJBU6EOzGmj1PC8q0yyRo8,150
492
493
  infrahub/generators/models.py,sha256=TjTz9tOAXHHFS51CtGPp_CrTE7Hv6RN5rvOxSee4s38,3682
493
- infrahub/generators/tasks.py,sha256=tVH2J_Hsf53T3Hl5kh8sKt3A_hiyo6L-FnKMFG45U6M,10725
494
+ infrahub/generators/tasks.py,sha256=TOLnQW-rd3XSDvdNWOEdS6MdA1kKRcfzhOh8zVXC8NM,10683
494
495
  infrahub/git/__init__.py,sha256=KeQ9U8UI5jDj6KB6j00Oal7MZmtOD9vKqVgiezG_EQA,281
495
496
  infrahub/git/base.py,sha256=xFehur-mffuRuzARMjBtoBp2-LB99lO9_dItDY7HHQ4,42015
496
497
  infrahub/git/constants.py,sha256=XpzcAkXbsgXZgrXey74id1sXV8Q6EHb_4FNw7BndxyY,106
@@ -540,7 +541,7 @@ infrahub/graphql/auth/query_permission_checker/super_admin_checker.py,sha256=2Rl
540
541
  infrahub/graphql/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
541
542
  infrahub/graphql/loaders/account.py,sha256=uq9eAu6MY-aKVl3y7vYt2IS39UvM7FVOcEV6kJmRSxQ,5336
542
543
  infrahub/graphql/loaders/node.py,sha256=A-iKJdJy6CWX-UeKYzpw_f0e3qL6Ap6k5BCTKU5l3-Q,2353
543
- infrahub/graphql/loaders/peers.py,sha256=ZGEYom6taYMH_ilg28rpf44I74sVW5nuLvn3EVsnYNs,3076
544
+ infrahub/graphql/loaders/peers.py,sha256=2pqiEC-8lZuwcACtVcw-DF6JKg9yDdFxm6YYEB3Uod4,3043
544
545
  infrahub/graphql/loaders/shared.py,sha256=hUxLy8iVgfpEZiUMKNkUAeshPKKzEVSDMDsuaBbjJW4,389
545
546
  infrahub/graphql/mutations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
546
547
  infrahub/graphql/mutations/account.py,sha256=fz2fZqAzYQSDNPbIEJMBXzPbaxOKyq2cUcICBVkkZxw,5896
@@ -768,7 +769,7 @@ infrahub/webhook/triggers.py,sha256=v1dzFV4wX0GO2n5hft_qzp-oJOA2P_9Q2eTcSP-i0pk,
768
769
  infrahub/workers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
769
770
  infrahub/workers/dependencies.py,sha256=hbjq6BCBlWWR03vIYNQwtj2HxtNlQ6dvci4thPkKiKs,5373
770
771
  infrahub/workers/infrahub_async.py,sha256=HH-AwcEV4Q3SmVj52Qlxfo4Kd1v9vy-BlC0pJABYNMM,10628
771
- infrahub/workers/utils.py,sha256=m6FOKrYo53Aoj-JcEyQ7-J4Dc20R9JtHMDzTcqXiRpg,2407
772
+ infrahub/workers/utils.py,sha256=xZUw7ScZJ48l8gbHf83OvzHGvqUbXXScA8t_PcL3dyo,2382
772
773
  infrahub/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
773
774
  infrahub/workflows/catalogue.py,sha256=ObdGbwqQt9Llft1HjHDOwnp951D_SZ2LMgrQl7HD8Yo,21970
774
775
  infrahub/workflows/constants.py,sha256=7je2FF7tJH6x_ZNqHKZfQX91X7I5gmD8OECN3dE_eqI,651
@@ -916,8 +917,8 @@ infrahub_testcontainers/models.py,sha256=rEOe8SLcWV65U6pFT-5wl8NXdtGCPq9OtGzXcOn
916
917
  infrahub_testcontainers/performance_test.py,sha256=CUgoXBVMDUBlBPzh47YTUOnqXuSyUJesKxvJVS_lKGE,6190
917
918
  infrahub_testcontainers/plugin.py,sha256=I3RuZQ0dARyKHuqCf0y1Yj731P2Mwf3BJUehRJKeWrs,5645
918
919
  infrahub_testcontainers/prometheus.yml,sha256=610xQEyj3xuVJMzPkC4m1fRnCrjGpiRBrXA2ytCLa54,599
919
- infrahub_server-1.7.2.dist-info/METADATA,sha256=e7PLYenRDJ7huikmGASrmB8LQEroYctIIGxfbxhU67A,6025
920
- infrahub_server-1.7.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
921
- infrahub_server-1.7.2.dist-info/entry_points.txt,sha256=A5PUS8vmKTN4UstaQS-cQBXtPybBVcDk-n4sWtiy0bk,340
922
- infrahub_server-1.7.2.dist-info/licenses/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
923
- infrahub_server-1.7.2.dist-info/RECORD,,
920
+ infrahub_server-1.7.4.dist-info/METADATA,sha256=cBXRq_gme_Ct-S-89DV5Iex4NoXA9yNMcqn8h0aP6fY,6025
921
+ infrahub_server-1.7.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
922
+ infrahub_server-1.7.4.dist-info/entry_points.txt,sha256=A5PUS8vmKTN4UstaQS-cQBXtPybBVcDk-n4sWtiy0bk,340
923
+ infrahub_server-1.7.4.dist-info/licenses/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
924
+ infrahub_server-1.7.4.dist-info/RECORD,,