infrahub-server 1.2.10__py3-none-any.whl → 1.2.12__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.
Files changed (53) hide show
  1. infrahub/config.py +9 -0
  2. infrahub/core/constants/database.py +1 -0
  3. infrahub/core/constants/infrahubkind.py +1 -0
  4. infrahub/core/constraint/node/runner.py +1 -1
  5. infrahub/core/diff/query/save.py +75 -45
  6. infrahub/core/diff/query_parser.py +5 -1
  7. infrahub/core/diff/tasks.py +3 -3
  8. infrahub/core/graph/__init__.py +1 -1
  9. infrahub/core/migrations/graph/__init__.py +6 -0
  10. infrahub/core/migrations/graph/m029_duplicates_cleanup.py +680 -0
  11. infrahub/core/migrations/graph/m030_illegal_edges.py +83 -0
  12. infrahub/core/migrations/query/attribute_add.py +13 -9
  13. infrahub/core/node/resource_manager/ip_address_pool.py +6 -2
  14. infrahub/core/node/resource_manager/ip_prefix_pool.py +6 -2
  15. infrahub/core/protocols.py +4 -0
  16. infrahub/core/query/diff.py +7 -0
  17. infrahub/core/schema/definitions/core/__init__.py +8 -1
  18. infrahub/core/schema/definitions/core/resource_pool.py +20 -0
  19. infrahub/core/schema/schema_branch.py +5 -3
  20. infrahub/core/validators/tasks.py +1 -1
  21. infrahub/database/__init__.py +5 -4
  22. infrahub/database/validation.py +101 -0
  23. infrahub/graphql/app.py +1 -1
  24. infrahub/graphql/loaders/node.py +1 -1
  25. infrahub/graphql/loaders/peers.py +1 -1
  26. infrahub/graphql/mutations/main.py +1 -1
  27. infrahub/graphql/mutations/proposed_change.py +1 -1
  28. infrahub/graphql/queries/relationship.py +1 -1
  29. infrahub/graphql/queries/task.py +10 -0
  30. infrahub/graphql/resolvers/many_relationship.py +4 -4
  31. infrahub/graphql/resolvers/resolver.py +4 -4
  32. infrahub/graphql/resolvers/single_relationship.py +2 -2
  33. infrahub/graphql/subscription/graphql_query.py +2 -2
  34. infrahub/graphql/types/branch.py +1 -1
  35. infrahub/graphql/types/task_log.py +3 -2
  36. infrahub/message_bus/operations/refresh/registry.py +4 -4
  37. infrahub/message_bus/operations/requests/proposed_change.py +4 -4
  38. infrahub/patch/queries/delete_duplicated_edges.py +40 -29
  39. infrahub/task_manager/task.py +44 -4
  40. infrahub/telemetry/database.py +1 -1
  41. infrahub/telemetry/tasks.py +1 -1
  42. infrahub/webhook/tasks.py +2 -1
  43. {infrahub_server-1.2.10.dist-info → infrahub_server-1.2.12.dist-info}/METADATA +3 -3
  44. {infrahub_server-1.2.10.dist-info → infrahub_server-1.2.12.dist-info}/RECORD +52 -49
  45. {infrahub_server-1.2.10.dist-info → infrahub_server-1.2.12.dist-info}/WHEEL +1 -1
  46. infrahub_testcontainers/container.py +239 -64
  47. infrahub_testcontainers/docker-compose-cluster.test.yml +321 -0
  48. infrahub_testcontainers/docker-compose.test.yml +1 -0
  49. infrahub_testcontainers/helpers.py +15 -1
  50. infrahub_testcontainers/plugin.py +9 -0
  51. infrahub/patch/queries/consolidate_duplicated_nodes.py +0 -109
  52. {infrahub_server-1.2.10.dist-info → infrahub_server-1.2.12.dist-info}/LICENSE.txt +0 -0
  53. {infrahub_server-1.2.10.dist-info → infrahub_server-1.2.12.dist-info}/entry_points.txt +0 -0
@@ -11,7 +11,7 @@ async def branches(message: messages.RefreshRegistryBranches, service: InfrahubS
11
11
  service.log.info("Ignoring refresh registry refresh request originating from self", worker=WORKER_IDENTITY)
12
12
  return
13
13
 
14
- async with service.database.start_session() as db:
14
+ async with service.database.start_session(read_only=True) as db:
15
15
  await refresh_branches(db=db)
16
16
 
17
17
  await service.component.refresh_schema_hash()
@@ -26,6 +26,6 @@ async def rebased_branch(message: messages.RefreshRegistryRebasedBranch, service
26
26
 
27
27
  async with lock.registry.local_schema_lock():
28
28
  service.log.info("Refreshing rebased branch")
29
- registry.branch[message.branch] = await registry.branch_object.get_by_name(
30
- name=message.branch, db=service.database
31
- )
29
+
30
+ async with service.database.start_session(read_only=True) as db:
31
+ registry.branch[message.branch] = await registry.branch_object.get_by_name(name=message.branch, db=db)
@@ -105,11 +105,11 @@ async def pipeline(message: messages.RequestProposedChangePipeline, service: Inf
105
105
 
106
106
  await _gather_repository_repository_diffs(repositories=repositories, service=service)
107
107
 
108
- async with service.database.start_transaction() as dbt:
109
- destination_branch = await registry.get_branch(db=dbt, branch=message.destination_branch)
110
- source_branch = await registry.get_branch(db=dbt, branch=message.source_branch)
108
+ async with service.database.start_session() as dbs:
109
+ destination_branch = await registry.get_branch(db=dbs, branch=message.destination_branch)
110
+ source_branch = await registry.get_branch(db=dbs, branch=message.source_branch)
111
111
  component_registry = get_component_registry()
112
- diff_coordinator = await component_registry.get_component(DiffCoordinator, db=dbt, branch=source_branch)
112
+ diff_coordinator = await component_registry.get_component(DiffCoordinator, db=dbs, branch=source_branch)
113
113
  await diff_coordinator.update_branch_diff(base_branch=destination_branch, diff_branch=source_branch)
114
114
 
115
115
  diff_summary = await service.client.get_diff_summary(branch=message.source_branch)
@@ -4,7 +4,7 @@ from .base import PatchQuery
4
4
 
5
5
  class DeleteDuplicatedEdgesPatchQuery(PatchQuery):
6
6
  """
7
- Find duplicated or overlapping edges of the same status, type, and branch to update and delete
7
+ For all Node vertices, find duplicated or overlapping edges of the same status, type, and branch to update and delete
8
8
  - one edge will be kept for each pair of nodes and a given status, type, and branch. it will be
9
9
  updated to have the earliest "from" and "to" times in this group
10
10
  - all the other duplicate/overlapping edges will be deleted
@@ -17,9 +17,9 @@ class DeleteDuplicatedEdgesPatchQuery(PatchQuery):
17
17
  async def plan(self) -> PatchPlan:
18
18
  query = """
19
19
  // ------------
20
- // Find node pairs that have duplicate edges
20
+ // Find vertex pairs that have duplicate edges
21
21
  // ------------
22
- MATCH (node_with_dup_edges:Node)-[edge]->(peer)
22
+ MATCH (node_with_dup_edges:Node)-[edge]-(peer)
23
23
  WITH node_with_dup_edges, type(edge) AS edge_type, edge.status AS edge_status, edge.branch AS edge_branch, peer, count(*) AS num_dup_edges
24
24
  WHERE num_dup_edges > 1
25
25
  WITH DISTINCT node_with_dup_edges, edge_type, edge_branch, peer
@@ -28,12 +28,12 @@ CALL {
28
28
  // Get the earliest active and deleted edges for this branch
29
29
  // ------------
30
30
  WITH node_with_dup_edges, edge_type, edge_branch, peer
31
- MATCH (node_with_dup_edges)-[active_edge {branch: edge_branch, status: "active"}]->(peer)
31
+ OPTIONAL MATCH (node_with_dup_edges)-[active_edge {branch: edge_branch, status: "active"}]-(peer)
32
32
  WHERE type(active_edge) = edge_type
33
33
  WITH node_with_dup_edges, edge_type, edge_branch, peer, active_edge
34
34
  ORDER BY active_edge.from ASC
35
35
  WITH node_with_dup_edges, edge_type, edge_branch, peer, head(collect(active_edge.from)) AS active_from
36
- OPTIONAL MATCH (node_with_dup_edges)-[deleted_edge {branch: edge_branch, status: "deleted"}]->(peer)
36
+ OPTIONAL MATCH (node_with_dup_edges)-[deleted_edge {branch: edge_branch, status: "deleted"}]-(peer)
37
37
  WITH node_with_dup_edges, edge_type, edge_branch, peer, active_from, deleted_edge
38
38
  ORDER BY deleted_edge.from ASC
39
39
  WITH node_with_dup_edges, edge_type, edge_branch, peer, active_from, head(collect(deleted_edge.from)) AS deleted_from
@@ -42,74 +42,85 @@ CALL {
42
42
  // ------------
43
43
  CALL {
44
44
  WITH node_with_dup_edges, edge_type, edge_branch, peer, active_from, deleted_from
45
- MATCH (node_with_dup_edges)-[active_e {branch: edge_branch, status: "active"}]->(peer)
45
+ OPTIONAL MATCH (node_with_dup_edges)-[active_e {branch: edge_branch, status: "active"}]-(peer)
46
46
  WHERE type(active_e) = edge_type
47
47
  WITH node_with_dup_edges, edge_type, edge_branch, peer, active_from, deleted_from, active_e
48
48
  ORDER BY %(id_func_name)s(active_e)
49
49
  LIMIT 1
50
50
  WITH active_e, properties(active_e) AS before_props, {from: active_from, to: deleted_from} AS prop_updates
51
- RETURN [
52
- {
53
- db_id: %(id_func_name)s(active_e), before_props: before_props, prop_updates: prop_updates
54
- }
55
- ] AS active_edges_to_update
51
+ RETURN CASE
52
+ WHEN active_e IS NOT NULL THEN [
53
+ {
54
+ db_id: %(id_func_name)s(active_e), before_props: before_props, prop_updates: prop_updates
55
+ }
56
+ ]
57
+ ELSE []
58
+ END AS active_edges_to_update
56
59
  }
57
60
  // ------------
58
61
  // Plan deletes for all the other active edges of this type on this branch
59
62
  // ------------
60
63
  CALL {
61
64
  WITH node_with_dup_edges, edge_type, edge_branch, peer
62
- MATCH (node_with_dup_edges)-[active_e {branch: edge_branch, status: "active"}]->(peer)
65
+ OPTIONAL MATCH (node_with_dup_edges)-[active_e {branch: edge_branch, status: "active"}]-(peer)
63
66
  WHERE type(active_e) = edge_type
64
67
  WITH node_with_dup_edges, peer, active_e
65
68
  ORDER BY %(id_func_name)s(active_e)
66
69
  SKIP 1
67
- RETURN collect(
68
- {
70
+ WITH CASE
71
+ WHEN active_e IS NOT NULL THEN {
69
72
  db_id: %(id_func_name)s(active_e),
70
- from_id: %(id_func_name)s(node_with_dup_edges),
71
- to_id: %(id_func_name)s(peer),
73
+ from_id: %(id_func_name)s(startNode(active_e)),
74
+ to_id: %(id_func_name)s(endNode(active_e)),
72
75
  edge_type: type(active_e),
73
76
  before_props: properties(active_e)
74
77
  }
75
- ) AS active_edges_to_delete
78
+ ELSE NULL
79
+ END AS serialized_edge
80
+ RETURN collect(serialized_edge) AS active_edges_to_delete
76
81
  }
77
82
  // ------------
78
83
  // Plan one deleted edge update with correct from time
79
84
  // ------------
80
85
  CALL {
81
86
  WITH node_with_dup_edges, edge_type, edge_branch, peer, deleted_from
82
- MATCH (node_with_dup_edges)-[deleted_e {branch: edge_branch, status: "deleted"}]->(peer)
87
+ OPTIONAL MATCH (node_with_dup_edges)-[deleted_e {branch: edge_branch, status: "deleted"}]-(peer)
83
88
  WHERE type(deleted_e) = edge_type
84
89
  WITH node_with_dup_edges, edge_type, edge_branch, peer, deleted_from, deleted_e
85
90
  ORDER BY %(id_func_name)s(deleted_e)
86
91
  LIMIT 1
87
92
  WITH deleted_e, properties(deleted_e) AS before_props, {from: deleted_from} AS prop_updates
88
- RETURN [
89
- {
90
- db_id: %(id_func_name)s(deleted_e), before_props: before_props, prop_updates: prop_updates
91
- }
92
- ] AS deleted_edges_to_update
93
+ RETURN CASE
94
+ WHEN deleted_e IS NOT NULL THEN [
95
+ {
96
+ db_id: %(id_func_name)s(deleted_e), before_props: before_props, prop_updates: prop_updates
97
+ }
98
+ ]
99
+ ELSE []
100
+ END AS deleted_edges_to_update
93
101
  }
94
102
  // ------------
95
103
  // Plan deletes for all the other deleted edges of this type on this branch
96
104
  // ------------
97
105
  CALL {
98
106
  WITH node_with_dup_edges, edge_type, edge_branch, peer
99
- MATCH (node_with_dup_edges)-[deleted_e {branch: edge_branch, status: "deleted"}]->(peer)
107
+ OPTIONAL MATCH (node_with_dup_edges)-[deleted_e {branch: edge_branch, status: "deleted"}]-(peer)
100
108
  WHERE type(deleted_e) = edge_type
101
109
  WITH node_with_dup_edges, peer, deleted_e
102
110
  ORDER BY %(id_func_name)s(deleted_e)
103
111
  SKIP 1
104
- RETURN collect(
105
- {
112
+ WITH CASE
113
+ WHEN deleted_e IS NOT NULL THEN {
106
114
  db_id: %(id_func_name)s(deleted_e),
107
- from_id: %(id_func_name)s(node_with_dup_edges),
108
- to_id: %(id_func_name)s(peer),
115
+ from_id: %(id_func_name)s(startNode(deleted_e)),
116
+ to_id: %(id_func_name)s(endNode(deleted_e)),
109
117
  edge_type: type(deleted_e),
110
118
  before_props: properties(deleted_e)
111
119
  }
112
- ) AS deleted_edges_to_delete
120
+ ELSE NULL
121
+ END AS serialized_edge
122
+
123
+ RETURN collect(serialized_edge) AS deleted_edges_to_delete
113
124
  }
114
125
  RETURN
115
126
  active_edges_to_update + deleted_edges_to_update AS edges_to_update,
@@ -35,6 +35,9 @@ from .models import FlowLogs, FlowProgress, RelatedNodesInfo
35
35
 
36
36
  log = get_logger()
37
37
 
38
+ NB_LOGS_LIMIT = 10_000
39
+ PREFECT_MAX_LOGS_PER_CALL = 200
40
+
38
41
 
39
42
  class PrefectTask:
40
43
  @classmethod
@@ -83,9 +86,42 @@ class PrefectTask:
83
86
  return related_nodes
84
87
 
85
88
  @classmethod
86
- async def _get_logs(cls, client: PrefectClient, flow_ids: list[UUID]) -> FlowLogs:
89
+ async def _get_logs(
90
+ cls, client: PrefectClient, flow_ids: list[UUID], log_limit: int | None, log_offset: int | None
91
+ ) -> FlowLogs:
92
+ """
93
+ Return the logs for a flow run, based on log_limit and log_offset.
94
+ At most, NB_LOGS_LIMIT logs will be returned per flow.
95
+ """
96
+
87
97
  logs_flow = FlowLogs()
88
- all_logs = await client.read_logs(log_filter=LogFilter(flow_run_id=LogFilterFlowRunId(any_=flow_ids)))
98
+
99
+ log_limit = log_limit if log_limit is not None else NB_LOGS_LIMIT
100
+ log_offset = log_offset or 0
101
+ current_offset = log_offset
102
+
103
+ if log_limit > NB_LOGS_LIMIT:
104
+ raise ValueError(f"log_limit cannot be greater than {NB_LOGS_LIMIT}")
105
+
106
+ all_logs = []
107
+
108
+ # Fetch the logs in batches of PREFECT_MAX_LOGS_PER_CALL, as prefect does not allow to fetch more logs at once.
109
+ remaining = min(log_limit, NB_LOGS_LIMIT)
110
+ while remaining > 0:
111
+ batch_limit = min(PREFECT_MAX_LOGS_PER_CALL, remaining)
112
+ logs_batch = await client.read_logs(
113
+ log_filter=LogFilter(flow_run_id=LogFilterFlowRunId(any_=flow_ids)),
114
+ offset=current_offset,
115
+ limit=batch_limit,
116
+ )
117
+ all_logs.extend(logs_batch)
118
+ nb_fetched = len(logs_batch)
119
+ if nb_fetched < batch_limit:
120
+ break # No more logs to fetch
121
+
122
+ current_offset += nb_fetched
123
+ remaining -= nb_fetched
124
+
89
125
  for flow_log in all_logs:
90
126
  if flow_log.flow_run_id and flow_log.message not in ["Finished in state Completed()"]:
91
127
  logs_flow.logs[flow_log.flow_run_id].append(flow_log)
@@ -188,6 +224,8 @@ class PrefectTask:
188
224
  branch: str | None = None,
189
225
  limit: int | None = None,
190
226
  offset: int | None = None,
227
+ log_limit: int | None = None,
228
+ log_offset: int | None = None,
191
229
  ) -> dict[str, Any]:
192
230
  nodes: list[dict] = []
193
231
  count = None
@@ -219,7 +257,9 @@ class PrefectTask:
219
257
  sort=FlowRunSort.START_TIME_DESC,
220
258
  )
221
259
  if log_fields:
222
- logs_flow = await cls._get_logs(client=client, flow_ids=[flow.id for flow in flows])
260
+ logs_flow = await cls._get_logs(
261
+ client=client, flow_ids=[flow.id for flow in flows], log_limit=log_limit, log_offset=log_offset
262
+ )
223
263
 
224
264
  if "progress" in node_fields:
225
265
  progress_flow = await cls._get_progress(client=client, flow_ids=[flow.id for flow in flows])
@@ -265,7 +305,7 @@ class PrefectTask:
265
305
  "updated_at": flow.updated.to_iso8601_string(), # type: ignore
266
306
  "start_time": flow.start_time.to_iso8601_string() if flow.start_time else None,
267
307
  "id": flow.id,
268
- "logs": {"edges": logs},
308
+ "logs": {"edges": logs, "count": len(logs)},
269
309
  }
270
310
  }
271
311
  )
@@ -49,7 +49,7 @@ async def get_system_info(db: InfrahubDatabase) -> TelemetryDatabaseSystemInfoDa
49
49
 
50
50
  @task(name="telemetry-gather-db", task_run_name="Gather Database Information", cache_policy=NONE)
51
51
  async def gather_database_information(db: InfrahubDatabase) -> TelemetryDatabaseData:
52
- async with db.start_session() as dbs:
52
+ async with db.start_session(read_only=True) as dbs:
53
53
  server_info = []
54
54
  system_info = None
55
55
  database_type = db.db_type.value
@@ -38,7 +38,7 @@ async def gather_schema_information(branch: Branch) -> TelemetrySchemaData:
38
38
 
39
39
  @task(name="telemetry-feature-information", task_run_name="Gather Feature Information", cache_policy=NONE)
40
40
  async def gather_feature_information(service: InfrahubServices) -> dict[str, int]:
41
- async with service.database.start_session() as db:
41
+ async with service.database.start_session(read_only=True) as db:
42
42
  data = {}
43
43
  features_to_count = [
44
44
  InfrahubKind.ARTIFACT,
infrahub/webhook/tasks.py CHANGED
@@ -111,7 +111,8 @@ async def webhook_process(
111
111
  async def configure_webhook_all(service: InfrahubServices) -> None:
112
112
  log = get_run_logger()
113
113
 
114
- triggers = await gather_trigger_webhook(db=service.database)
114
+ async with service.database.start_session(read_only=True) as db:
115
+ triggers = await gather_trigger_webhook(db=db)
115
116
 
116
117
  async with get_client(sync_client=False) as prefect_client:
117
118
  await setup_triggers(
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: infrahub-server
3
- Version: 1.2.10
3
+ Version: 1.2.12
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
- Home-page: https://opsmill.com
6
5
  License: AGPL-3.0-only
7
6
  Author: OpsMill
8
7
  Author-email: info@opsmill.com
@@ -58,6 +57,7 @@ Requires-Dist: ujson (>=5,<6)
58
57
  Requires-Dist: uvicorn[standard] (>=0.32,<0.33)
59
58
  Requires-Dist: whenever (==0.7.2)
60
59
  Project-URL: Documentation, https://docs.infrahub.app/
60
+ Project-URL: Homepage, https://opsmill.com
61
61
  Project-URL: Repository, https://github.com/opsmill/infrahub
62
62
  Description-Content-Type: text/markdown
63
63
 
@@ -41,7 +41,7 @@ infrahub/computed_attribute/gather.py,sha256=TSv6_CWZH1DYRv430jzyJpFJWKzwPGka5wF
41
41
  infrahub/computed_attribute/models.py,sha256=P_MijLwCVd7394oyTTfYQ3HmX5wIF966jdchuZaLRbs,17361
42
42
  infrahub/computed_attribute/tasks.py,sha256=k3qNNKxF2lS9tZDRKrB_sKX552rpfM-Q-4yj6WJLvs4,17880
43
43
  infrahub/computed_attribute/triggers.py,sha256=ve1cUj0CZ7dU1VtZkxET9LD8StszKIL9mCkTZpCeUaI,2304
44
- infrahub/config.py,sha256=IXLp97Y2pxtGcQxwwuBSuBQotFGdHEtj1rf9EZ5z-_I,35255
44
+ infrahub/config.py,sha256=XxyVP8hT7zKxRRMkKzqgUargAqnsI2BRc8jBZqVYF5E,35665
45
45
  infrahub/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  infrahub/constants/database.py,sha256=WmV1iuOk4xulxZHOVvO3sS_VF1eTf7fKh0TPe_RnfV4,507
47
47
  infrahub/context.py,sha256=8SZRKSECkkcsNNzDaKEUJ7Nyr0EzUfToAy969LXjQVk,1554
@@ -55,13 +55,13 @@ infrahub/core/changelog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
55
55
  infrahub/core/changelog/diff.py,sha256=0BxCpsgJ-38x5BBz5XDtAvc9FPy82M0NlzXl8nQ-c70,13752
56
56
  infrahub/core/changelog/models.py,sha256=UgfJdOFUkMmjeUKe1mPCO7WE3jNENw0UJU3LWFf20HQ,29920
57
57
  infrahub/core/constants/__init__.py,sha256=Q2pEX_-Z1-TE5OM_PWKIPIvAOxuYzk2cWZnFjemkT2k,8618
58
- infrahub/core/constants/database.py,sha256=lxesWX2z6SZgGok1bAY6_pCBm5rFfu7k4ayMBr6w_Vo,336
59
- infrahub/core/constants/infrahubkind.py,sha256=08iJTK_RMMHbyF67bZLAIZFYiWaDv_IxU6Al53LPE6s,2492
58
+ infrahub/core/constants/database.py,sha256=x5tWaT3e0WfCxxrHMcSoHUBMfcUzStLi133CqHjSosU,368
59
+ infrahub/core/constants/infrahubkind.py,sha256=lrSae8gu4EOXaDHxX1jDkENkfr0fw5t32FP-vdXLrRs,2544
60
60
  infrahub/core/constants/relationship_label.py,sha256=AWbWghu5MoAKg2DBE-ysdzSOXnWoWdBn98zpIHzn_co,87
61
61
  infrahub/core/constants/schema.py,sha256=uuddQniyGlSlvKjM5mQ_V2VhgZmQ8fUCAHysbZLvTEU,2006
62
62
  infrahub/core/constraint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  infrahub/core/constraint/node/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- infrahub/core/constraint/node/runner.py,sha256=l60GfQxqn6OaLUvfVYddsWor9qy2NiMY_0avnIb_Heg,1848
64
+ infrahub/core/constraint/node/runner.py,sha256=43ngwnu6fvxzdX0ZUUCSTzGtKBc8fSRSGSX1sovZvxQ,1863
65
65
  infrahub/core/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
66
  infrahub/core/diff/artifacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  infrahub/core/diff/artifacts/calculator.py,sha256=qk1DspB3bkKeWJFesLbmziCALVnbRadjrez1kn_IZWU,4435
@@ -109,17 +109,17 @@ infrahub/core/diff/query/has_conflicts_query.py,sha256=kt0Z606vP2r1g7OqW2RrYj9Lb
109
109
  infrahub/core/diff/query/merge.py,sha256=g16_h5DRc0htTnmuPOujlQEEFpcjVeIAU2li5YrIxfs,33390
110
110
  infrahub/core/diff/query/merge_tracking_id.py,sha256=VLGsKuOCIMYe0I-0r01YHF5iaLYIkfSCVQatHM-ybFA,833
111
111
  infrahub/core/diff/query/roots_metadata.py,sha256=FT-48amqoR2RS4CkfnnXGI7Z5uOL4hm7IdZiz3SFHRo,2182
112
- infrahub/core/diff/query/save.py,sha256=j0YuT_V5kZUHIuD6CXT8bcIVv3fewAckqcuukDYn3EA,21972
112
+ infrahub/core/diff/query/save.py,sha256=fI9UXMLMF38ZyHINyKoD13J6Nlzsmi7gWQ5AW1XYoeI,23424
113
113
  infrahub/core/diff/query/summary_counts_enricher.py,sha256=dSmbmbvLx8SE1DyAAw4mbLyW5BWLbMrYOnEchA2uBZc,10239
114
114
  infrahub/core/diff/query/time_range_query.py,sha256=0pjsFBur8jcSU6su-iA4IMjnHw3RtNWI787wAPcyepI,3003
115
115
  infrahub/core/diff/query/update_conflict_query.py,sha256=kQkFazz88wnApr8UU_qb0ruzhmrhWiqhbErukSAMhLA,1212
116
- infrahub/core/diff/query_parser.py,sha256=RWA_noQ4Wm5Zhb-XvEe0UwFBI36lENgavCVqYOjNzms,37102
116
+ infrahub/core/diff/query_parser.py,sha256=6OWI_ynplysO6VH1vCfqiV_VmXvAfoa-bIRJ7heVTjY,37217
117
117
  infrahub/core/diff/repository/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  infrahub/core/diff/repository/deserializer.py,sha256=bhN9ao8HxqKyRz273QGLNV9z9_SS4EQnM9JoY5ptx78,21337
119
119
  infrahub/core/diff/repository/repository.py,sha256=b54YvGDaFg3FEDNjOTS-WC3Rvtq4bdpDb1NGEKURnqg,25851
120
- infrahub/core/diff/tasks.py,sha256=kHapEy7isn9zGsThYFauDkDnG-dIODanBaa-TaFD9EY,3278
120
+ infrahub/core/diff/tasks.py,sha256=7_k-ZNcJZsiDp-xCZvCQfPJjg0xRxpaGTiVVNuRPfBI,3322
121
121
  infrahub/core/enums.py,sha256=qGbhRVoH43Xi0iDkUfWdQiKapJbLT9UKsCobFk_paIk,491
122
- infrahub/core/graph/__init__.py,sha256=Oqh1AEiVhTvWd71qOpyM6Qfxj59fjCI5OQE4mxZgDlM,19
122
+ infrahub/core/graph/__init__.py,sha256=2EUPjmgYV1tf8ln4lfXK57uUCRFRuanN9SNHZmXdy24,19
123
123
  infrahub/core/graph/constraints.py,sha256=lmuzrKDFoeSKRiLtycB9PXi6zhMYghczKrPYvfWyy90,10396
124
124
  infrahub/core/graph/index.py,sha256=IHLP-zPRp7HJYLGHMRDRXQp8RC69ztP10Tr5NcL2j4Y,1736
125
125
  infrahub/core/graph/schema.py,sha256=FmEPPb1XOFv3nnS_XJCuUqlp8HsStX5A2frHjlhoqvE,10105
@@ -138,7 +138,7 @@ infrahub/core/ipam/utilization.py,sha256=d-zpXCaWsHgJxBLopCDd7y4sJYvHcIzzpYhbTMI
138
138
  infrahub/core/manager.py,sha256=G_5A2mYkRkxUnDGjdauVdrEX2ZX5HPaHbxEHxDyOb6U,47467
139
139
  infrahub/core/merge.py,sha256=bZvToLKyphJlWMbQAzGuSHcrG2DfeqL69KSfqb1wWdc,10430
140
140
  infrahub/core/migrations/__init__.py,sha256=syPb3-Irf11dXCHgbT0UdmTnEBbpf4wXJ3m8ADYXDpk,1175
141
- infrahub/core/migrations/graph/__init__.py,sha256=510-WYc9fi_DG2H1MgXXcs57QuKDmRyf26Sf87f6qRI,2679
141
+ infrahub/core/migrations/graph/__init__.py,sha256=e0OzJEAn1qvtPghPwan8kWrLzDXX9eaw7YgbFlAZevA,2872
142
142
  infrahub/core/migrations/graph/m001_add_version_to_graph.py,sha256=YcLN6cFjE6IGheXR4Ujb6CcyY8bJ7WE289hcKJaENOc,1515
143
143
  infrahub/core/migrations/graph/m002_attribute_is_default.py,sha256=wB6f2N_ChTvGajqHD-OWCG5ahRMDhhXZuwo79ieq_II,1036
144
144
  infrahub/core/migrations/graph/m003_relationship_parent_optional.py,sha256=fRMmcOmBdHgOEjlf-5TaWsZ1Rzs6op1s75-r_jE_tZ0,2345
@@ -167,8 +167,10 @@ infrahub/core/migrations/graph/m025_uniqueness_nulls.py,sha256=n_g09PDLs1yo3dMYL
167
167
  infrahub/core/migrations/graph/m026_0000_prefix_fix.py,sha256=7sP6nQZrqgzFyRUHKf5fKSX2LrzKEAAsiDsRSu9noJM,1944
168
168
  infrahub/core/migrations/graph/m027_delete_isolated_nodes.py,sha256=aAfDUdhsR05CpehVeyLWQ1tRstgrF0HY2V5V6X5ALxM,1589
169
169
  infrahub/core/migrations/graph/m028_delete_diffs.py,sha256=PwesD95KTTJsNbMX3NK6O_rGLR7hB-GEi7JIaXheiuQ,1397
170
+ infrahub/core/migrations/graph/m029_duplicates_cleanup.py,sha256=erCyHFBPCwRcJsSupZ2Be-JdXIbskTeufKxlFREnGAY,28997
171
+ infrahub/core/migrations/graph/m030_illegal_edges.py,sha256=Wyvn3w4PWw7i-9DyD49C2YeyTGebR7T1sa1HjxOufJU,2804
170
172
  infrahub/core/migrations/query/__init__.py,sha256=JoWOUWlV6IzwxWxObsfCnAAKUOHJkE7dZlOsfB64ZEo,876
171
- infrahub/core/migrations/query/attribute_add.py,sha256=zvOwd9afCtfBpR-rEWePEAnbpoeQorzkcSmD4t8myYA,3510
173
+ infrahub/core/migrations/query/attribute_add.py,sha256=iWZ6sRwvGLKckRWEFnrLphwQjkDF7r5AcIk9LTaltNc,3670
172
174
  infrahub/core/migrations/query/attribute_rename.py,sha256=-p3AInP1dWRO-v-i8MSajDeK5_2LcJwYr2jqLQ_vbgs,6971
173
175
  infrahub/core/migrations/query/delete_element_in_schema.py,sha256=F5m_AM_DGprRClKo_QnkYm49xZVvw_zCDIdNO0oM_QU,7051
174
176
  infrahub/core/migrations/query/node_duplicate.py,sha256=EbS4rvA5YDiX5uguXjBRrArEGnYGKK-6M3yPvrs4PWw,8232
@@ -195,19 +197,19 @@ infrahub/core/node/delete_validator.py,sha256=mj_HQXkTeP_A3po65-R5bCJnDM9CmFFmcU
195
197
  infrahub/core/node/ipam.py,sha256=NWb3TUlVQOGAzq1VvDwISLh61HML0jnalsJ7QojqGwQ,2669
196
198
  infrahub/core/node/permissions.py,sha256=uQzQ62IHcSly6fzPre0nQzlrkCIKzH4HyQkODKB3ZWM,2207
197
199
  infrahub/core/node/resource_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
- infrahub/core/node/resource_manager/ip_address_pool.py,sha256=M5Kgx56VvT61TTQaYf4NLSF1z6UGUxvKMhRYDhVkapU,4678
199
- infrahub/core/node/resource_manager/ip_prefix_pool.py,sha256=L7Psmcto5kHRd3AVt6JGUK-3-tQoG1gnAK3UUDi_dCs,4895
200
+ infrahub/core/node/resource_manager/ip_address_pool.py,sha256=-UQT5kaXSNK-sp7KnT0lsqOg1G3P1uFX0zX5OcHzj48,4831
201
+ infrahub/core/node/resource_manager/ip_prefix_pool.py,sha256=HRonATGel6Hk8svPv_I_OZx3VY33nx5jEkWsLbwpQaU,5048
200
202
  infrahub/core/node/resource_manager/number_pool.py,sha256=6mczrHTNd8jbXoW8Q6xHpBWi-JOSk5QSlwOegkMbNEQ,2479
201
203
  infrahub/core/node/standard.py,sha256=Niyc7mNxEGn6K7a1MXHkiLJhyTNR3uvTWLLbHvm6-Bo,7113
202
204
  infrahub/core/path.py,sha256=qHoC5cJwb3nwh-kUiuWqrCgkN2Dleatygn3KNid70sg,5844
203
205
  infrahub/core/property.py,sha256=rwsqeaIvCMkHfJYl4WfsNPAS7KS0POo5rAN7vAprXGA,5102
204
- infrahub/core/protocols.py,sha256=VvKNvfJxoQiaTF26Jam_6Yi_1GsGzGtuoZrFN5rxevA,11001
206
+ infrahub/core/protocols.py,sha256=iSw8cKxKo6EWapvnV5bG-D42kjI0zUu0Z7_HLTcLCgw,11084
205
207
  infrahub/core/protocols_base.py,sha256=IqX1C82C4skCJrNiVLSYCIwIviPfp2sP7bOS6rLxhTk,3296
206
208
  infrahub/core/query/__init__.py,sha256=ftH8xHCAo8DfdYEx3-CBPuU2xpGOc83_ITNxZ4q4sNg,23055
207
209
  infrahub/core/query/attribute.py,sha256=DzwbElgTaZs6-nBYGmnDpBr9n0lmUPK3p7eyI30Snh8,11783
208
210
  infrahub/core/query/branch.py,sha256=Fqycgk8kzhmc1H_-gfiw3c-ZjNjAHw64XU7OQUkhDi0,4976
209
211
  infrahub/core/query/delete.py,sha256=_PL97nz-ybF0JqDSYlTPhIa4oCxwPiFerwd8Wjw-x-8,1918
210
- infrahub/core/query/diff.py,sha256=7kIJjSUa4mBNdis5WhlYgwu37JEDEoXFXtjL93jkSTw,35899
212
+ infrahub/core/query/diff.py,sha256=9kur4wyab7XdI8bD3ff0gqVcA1TWIVRJex237JB_BA4,36138
211
213
  infrahub/core/query/ipam.py,sha256=66snB2ANAUcGk-Ke88Y1CIoXO7CCBOsOx8JZTFXnPfA,28384
212
214
  infrahub/core/query/node.py,sha256=AAO20pbFy_rk9RKRIQ1DCKrUEYr7yz1fCTcgiKEu22s,65411
213
215
  infrahub/core/query/relationship.py,sha256=Z9qlhqr-EfyQ8Mcg4SfqaTmngfVyj1RCjhTTGJXmkX0,46296
@@ -232,7 +234,7 @@ infrahub/core/schema/basenode_schema.py,sha256=4px_CJjhjT7m5eGVDXRT0VVLhJ9m3M85Z
232
234
  infrahub/core/schema/computed_attribute.py,sha256=9rznZJpGqX8fxLx0EguPmww8LoHsadMtQQUKaMoJPcI,1809
233
235
  infrahub/core/schema/constants.py,sha256=KtFrvwNckyKZSGIMD4XfxI5eFTZqBRiw54R7BE5h39Q,374
234
236
  infrahub/core/schema/definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
- infrahub/core/schema/definitions/core/__init__.py,sha256=4-26SV_yzXYgsgbn4DxiQQI6TN_BGfOuq8-RsnNr-_o,4640
237
+ infrahub/core/schema/definitions/core/__init__.py,sha256=RdrpFVFxprxvEfOIvffNgfju4W65QgadTW2QurJemJ0,4731
236
238
  infrahub/core/schema/definitions/core/account.py,sha256=5-yJJJRtAi1MyJZw88pyTqAklUPTsBzMa2LZkf4FtOs,5421
237
239
  infrahub/core/schema/definitions/core/artifact.py,sha256=6TX4zgK2j2vO7F0lCYLv6Bu7GTAKlD0P3rO7yuXX85o,3954
238
240
  infrahub/core/schema/definitions/core/builtin.py,sha256=eSGZXXV_caLm2WHvRsK6c88EfLjkMlm7VAZ-JVAaEPw,703
@@ -250,7 +252,7 @@ infrahub/core/schema/definitions/core/propose_change.py,sha256=zAmZuhKtTTTVfURkz
250
252
  infrahub/core/schema/definitions/core/propose_change_comment.py,sha256=tCYy0uazr4bOeQeuOHtN-v1ilLxaIO9T7fxkr4mLmDQ,5743
251
253
  infrahub/core/schema/definitions/core/propose_change_validator.py,sha256=IwrEQvutsxSFcDrcAFoevCzkwnPF3E6iyF0lUOi61RM,9947
252
254
  infrahub/core/schema/definitions/core/repository.py,sha256=SZDztZRCqdAOXgURaZk1X-OPGXqBMrVur8_DhPcwQ_E,9630
253
- infrahub/core/schema/definitions/core/resource_pool.py,sha256=Vr6CXpDInK4AlQCtwcWBAoZ5TDe3U_mruwEzT41iHZk,5411
255
+ infrahub/core/schema/definitions/core/resource_pool.py,sha256=1xE3xAc4wMJCutID4S_TOY6WlM4mCGsIUYZLqb8aYuM,6066
254
256
  infrahub/core/schema/definitions/core/template.py,sha256=rgYhpimxW0vhTmpo5cv_QA2I6MFT4r_ED7xA4BtzdKY,1037
255
257
  infrahub/core/schema/definitions/core/transform.py,sha256=UB2TaBjabIiErivBR16srxq7fgYoKjmjZaVun8vxXvY,3061
256
258
  infrahub/core/schema/definitions/core/webhook.py,sha256=YHeFMdsQDoG804iO6beozkfzln5cZnXKAsjB0Twlqw0,4224
@@ -268,7 +270,7 @@ infrahub/core/schema/manager.py,sha256=4lPjjtE_MtJ0acJdYAJEkuK4jap3NnTdxB5esEB71
268
270
  infrahub/core/schema/node_schema.py,sha256=ld_Wrqf-RsoEUVz_lKE0tcSf5n_oYZYtRI0lTqtd63o,6150
269
271
  infrahub/core/schema/profile_schema.py,sha256=cOPSOt5KLgQ0nbqrAN_o33hY_pUtrKmiwSbY_YpVolI,1092
270
272
  infrahub/core/schema/relationship_schema.py,sha256=lVbyQKMP2jPZZwZGK6DBvXdXfEQEsQGMbZ2WYxOZKTw,8261
271
- infrahub/core/schema/schema_branch.py,sha256=v9wZ92qBGJow6p6E3luD-nvge1FvQV5SvOgVj9Mxre0,97870
273
+ infrahub/core/schema/schema_branch.py,sha256=iEKPbXCbvjT9NOD-iRyYiaSEywy2FLEUt7iJA5VNU5M,97863
272
274
  infrahub/core/schema/schema_branch_computed.py,sha256=14UUsQJDLMHkYhg7QMqeLiTF3PO8c8rGa90ul3F2ZZo,10629
273
275
  infrahub/core/schema/template_schema.py,sha256=O-PBS9IRM4JX6PxeoyZKwqZ0u0SdQ2zxWMc01PJ2_EA,1084
274
276
  infrahub/core/task/__init__.py,sha256=Ied1NvKGJUDmff27z_-yWW8ArenHxGvSvQTaQyx1iHs,128
@@ -306,17 +308,18 @@ infrahub/core/validators/relationship/count.py,sha256=097U8nv52Txnx5fgWNiIX56-Lg
306
308
  infrahub/core/validators/relationship/optional.py,sha256=FFAUjS9TT-IM7qO6YhMQWLcI9S-CwtBSpoD0AdWsPls,4369
307
309
  infrahub/core/validators/relationship/peer.py,sha256=pg6dzv_aBvu2DOqKUXuyPa2IsoW0TYQU-tR2NMOJmAw,5609
308
310
  infrahub/core/validators/shared.py,sha256=dhCz2oTM5JxA3mpcQvN83KIKIv-VNPSiG0lh4ZiTAFw,1345
309
- infrahub/core/validators/tasks.py,sha256=6UkGxLo00UZm13_fIiDmOnuDT5r8M415AQTfEFZ4hsY,3471
311
+ infrahub/core/validators/tasks.py,sha256=2lnF1o5YfhST7n9DyFoCKYkiTaV1NzX5nVOlBJbeoPY,3485
310
312
  infrahub/core/validators/uniqueness/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
311
313
  infrahub/core/validators/uniqueness/checker.py,sha256=RpiLpIjbdkwwjivry-vjEkVim6ZoC-t2H5Bal7ngASQ,10375
312
314
  infrahub/core/validators/uniqueness/index.py,sha256=Jw1o-UVinQquNduZ5vCCzt8GUfIEdVzBo-1XyRti8F8,5068
313
315
  infrahub/core/validators/uniqueness/model.py,sha256=V2aejcuHPhgC5nTrS7xX0JFMzprVu90QAau-rUzruCY,5135
314
316
  infrahub/core/validators/uniqueness/query.py,sha256=NudW0JziATlCloFOFIyoABeu1IGvCl2ug9itEmXS500,11843
315
- infrahub/database/__init__.py,sha256=yDdkliw-BS7aj7akxvURIoaS_LCgBaz2vss_I9O0dH8,20544
317
+ infrahub/database/__init__.py,sha256=R-Hc5qOlWdPex_4mDTDPDw9N2_9prOXCP90mQDvk-VE,20564
316
318
  infrahub/database/index.py,sha256=ATLqw9Grqbq7haGGm14VSEPmcPniid--YATiffo4sA0,1676
317
319
  infrahub/database/memgraph.py,sha256=Fg3xHP9s0MiBBmMvcEmsJvuIUSq8U_XCS362HDE9d1s,1742
318
320
  infrahub/database/metrics.py,sha256=xU4OSKFbsxcw_yZlt_39PmGtF7S7yPbPuOIlSCu5sI0,739
319
321
  infrahub/database/neo4j.py,sha256=ou7PGE9rbcVD4keBEFCDFm30MEexnijbZOo3kqrfW3k,2337
322
+ infrahub/database/validation.py,sha256=lVB9qCCEHd0pEUylD-MmOHXyhRLg-b4wyIEhfAENFtk,4153
320
323
  infrahub/dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
324
  infrahub/dependencies/builder/constraint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
322
325
  infrahub/dependencies/builder/constraint/grouped/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -408,7 +411,7 @@ infrahub/graphql/analyzer.py,sha256=LNdNbgCKWc50rwO3VrmbchRgYy6GvSDcRFdZXXmM_pI,
408
411
  infrahub/graphql/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
409
412
  infrahub/graphql/api/dependencies.py,sha256=-NMUA_N4tWcVpS6ksCebAyza-JTmHqyYY_QZizgBR1c,1690
410
413
  infrahub/graphql/api/endpoints.py,sha256=wH9eO3CFT-eoSe1Y32BhU9mIf6smEnPeP3tAxZkdt4g,1510
411
- infrahub/graphql/app.py,sha256=hpOxYacCjq2E97zzhP4XJllkpUgN5vkf9Pe_X3LJnNs,20990
414
+ infrahub/graphql/app.py,sha256=4xKptosI6SXlBfQSNJHHGNrdCRAZQ2uMTpPPKY3_mzE,21004
412
415
  infrahub/graphql/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
413
416
  infrahub/graphql/auth/query_permission_checker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
414
417
  infrahub/graphql/auth/query_permission_checker/anonymous_checker.py,sha256=ibsmGyOelLJbN2Kfkmffv-5D79h7tRc1Fez5tauFY8w,1377
@@ -424,8 +427,8 @@ infrahub/graphql/directives.py,sha256=wyIkJFp7l0J4JqNl1Lqu7YfKXP7glrewlQFMDTUAPc
424
427
  infrahub/graphql/enums.py,sha256=9F0XWfjQpC__0YRccYG1T-3qL1V8_PmlRlVpU1-n7nQ,820
425
428
  infrahub/graphql/initialization.py,sha256=e97vYE7lQZm7OJxJrhKA6kdxKJ4QOcVbTpoNHq9fweM,4446
426
429
  infrahub/graphql/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
427
- infrahub/graphql/loaders/node.py,sha256=ciATamtiU1-yHrvqnScjYlLRJJX2lyxlaDZVIXlL-7E,2604
428
- infrahub/graphql/loaders/peers.py,sha256=fOdgaaPBtBiiLKg8Rws4zXvpyCzUhszgxhDAeXkzETA,2785
430
+ infrahub/graphql/loaders/node.py,sha256=p7qJxRpXSAddq2fcwJeaIRy-5ReSn2EUitQbDhlmdM4,2618
431
+ infrahub/graphql/loaders/peers.py,sha256=wsB-ZtaU-BlR99EvWUbf6_SFhFJYOspz5QaTln_MZ4Q,2799
429
432
  infrahub/graphql/loaders/shared.py,sha256=hUxLy8iVgfpEZiUMKNkUAeshPKKzEVSDMDsuaBbjJW4,389
430
433
  infrahub/graphql/manager.py,sha256=1q3HcaIcg82-t7dq0M3uIAihmVka-7w2KKsols5UMww,45222
431
434
  infrahub/graphql/metrics.py,sha256=viq_M57mDYd4DDK7suUttf1FJTgzQ3U50yOuSw_Nd-s,2267
@@ -441,7 +444,7 @@ infrahub/graphql/mutations/diff_conflict.py,sha256=JngQfyKXCVlmtlqQ_VyabmrOEDOEK
441
444
  infrahub/graphql/mutations/generator.py,sha256=Ulw4whZm8Gc8lJjwfUFoFSsR0cOUliFKl87Oca4B9O0,3579
442
445
  infrahub/graphql/mutations/graphql_query.py,sha256=mp_O2byChneCihUrEAFEiIAgJ1gW9WrgtwPetUQmkJw,3562
443
446
  infrahub/graphql/mutations/ipam.py,sha256=wIN8OcTNCHVy32YgatWZi2Of-snFYBd4wlxOAJvE-AY,15961
444
- infrahub/graphql/mutations/main.py,sha256=EgO0U8U0FmgwuTrDrKuafSOWjO7pNR5YZzYYZbQMfec,26611
447
+ infrahub/graphql/mutations/main.py,sha256=LxzNZQeSJ-03t6MZaVrw0bvwI5NlcGSeZGVdyqsuKbE,26590
445
448
  infrahub/graphql/mutations/menu.py,sha256=u2UbOA-TFDRcZRGFkgYTmpGxN2IAUgOvJXd7SnsufyI,3708
446
449
  infrahub/graphql/mutations/models.py,sha256=ilkSLr8OxVO9v3Ra_uDyUTJT9qPOmdPMqQbuWIydJMo,264
447
450
  infrahub/graphql/mutations/node_getter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -449,7 +452,7 @@ infrahub/graphql/mutations/node_getter/by_default_filter.py,sha256=_owbYHXWqJ6x4
449
452
  infrahub/graphql/mutations/node_getter/by_hfid.py,sha256=txpj4xPeL3eYOB9lRiHEFxxcRf6bb6lyIJnhVCHr3x8,3120
450
453
  infrahub/graphql/mutations/node_getter/by_id.py,sha256=azERy5XBUe4fYf4t1rhKEn64MlGfm_zH4k-tJU6W69s,856
451
454
  infrahub/graphql/mutations/node_getter/interface.py,sha256=3MVTz_3EQnI7REp-ytQvgJuEgWUmrmnRIqKpP8WHCyY,419
452
- infrahub/graphql/mutations/proposed_change.py,sha256=TyZF3adwbB517iVoOL5HC8ifGxddlcUciHxqJ9k55T0,10117
455
+ infrahub/graphql/mutations/proposed_change.py,sha256=i56UkD0URwLykiOQPcVSnhsjBaoLUaKJvWFzGBJsmU0,10123
453
456
  infrahub/graphql/mutations/relationship.py,sha256=b-zi8O0JZo52zVoGabIrWvIFh64PbhHzjF9klZ7p8ac,20139
454
457
  infrahub/graphql/mutations/repository.py,sha256=Whrt1uYWt7Ro6omJYN8zc3D-poZ6bOBrpBHIG4odAmo,11316
455
458
  infrahub/graphql/mutations/resource_manager.py,sha256=Nykdo4pIJ9BOossg24-dw_nU71qelYki896NIJk5O5I,8924
@@ -466,22 +469,22 @@ infrahub/graphql/queries/diff/tree.py,sha256=4XcHIMDtJLA6nDBzGNn2WR_HeY_7lrmIU38
466
469
  infrahub/graphql/queries/event.py,sha256=9kHi37WmM4bwGgnIPaPLVOaXp124tn10v60kNx5C7aU,4204
467
470
  infrahub/graphql/queries/internal.py,sha256=pcGLpLrY1fC_HxHNs8NAFjr5FTFzcgRlS1F7b65gqfE,647
468
471
  infrahub/graphql/queries/ipam.py,sha256=peN--58IhLgS06O44AEthefEkaVDc7f38Sib3JyGKu4,4106
469
- infrahub/graphql/queries/relationship.py,sha256=zeejoyxG4DD5hxfBKEpuxqMCrS9fNRZPNA48pU3XhPk,2568
472
+ infrahub/graphql/queries/relationship.py,sha256=QaSqr42NHW5wCbgHiYTI9Bgo7Qov9I0-jO8xcj-RBlU,2582
470
473
  infrahub/graphql/queries/resource_manager.py,sha256=VqULXcLZBgkisQOkuFRP-YtgAdkRxvifpcDyY9dzrNQ,14932
471
474
  infrahub/graphql/queries/search.py,sha256=0_yp6yxPSy8TQoTmp6zpc3u0b1TRuGgUOiMTfZo6LqU,4958
472
475
  infrahub/graphql/queries/status.py,sha256=4GtTKOUBsVSHdPoWbGAka52V99iz39fsrgmWgm8HoIY,2116
473
- infrahub/graphql/queries/task.py,sha256=i9OnZxa2dlMJ9T2aQzacCmsIE3eDrKlG1HdCXs2p-DU,3553
476
+ infrahub/graphql/queries/task.py,sha256=-b443BY8XlE03F-RUcH3mxX_veuQP8Jf2GLCWKrAtWc,3914
474
477
  infrahub/graphql/resolvers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
475
- infrahub/graphql/resolvers/many_relationship.py,sha256=Tq63gVz45iKnTT6Uj0-rVFuj7m8jnLcJzddZZWVnFzQ,9707
476
- infrahub/graphql/resolvers/resolver.py,sha256=ERHNGpXEUsGI3LVFRC4tNsHDJV48MIbvY6UWqQBmZNA,11874
477
- infrahub/graphql/resolvers/single_relationship.py,sha256=ncxRrl48uo1DAFjtL2QIJZTsqWSs0cMchsolzvVA-Po,6948
478
+ infrahub/graphql/resolvers/many_relationship.py,sha256=B9D0cXlVIFntp7tDeZsvMjq30dsJpVRMCdLbeK9sqdI,9763
479
+ infrahub/graphql/resolvers/resolver.py,sha256=CgCfeARqwp9khmqdyq5G0W9q1Xvr6XapnSdWr-IW404,11930
480
+ infrahub/graphql/resolvers/single_relationship.py,sha256=TODob8c54RJmtrDjel-KU9XUv-zncvdmvtYP2_AcjoU,6976
478
481
  infrahub/graphql/schema.py,sha256=ekON1ic2MVHSMG_yrHJ9Zfclo2dpVOpZ3IWdpgv4G_g,3691
479
482
  infrahub/graphql/subscription/__init__.py,sha256=rVgLryqg-kbzkd3Dywb1gMPsthR8wFqB7nluuRKKfrE,1154
480
483
  infrahub/graphql/subscription/events.py,sha256=tDg9fy66dLmbXaf_9YC-3LmC1sqsj-smbq_LOsHdZ5Y,1838
481
- infrahub/graphql/subscription/graphql_query.py,sha256=gXCVYmS4z419umnIJbwm2bNjy7E0XtSlQRF0OCqbpOE,2238
484
+ infrahub/graphql/subscription/graphql_query.py,sha256=U9PwREMghxbuIoGWh3_rV33wKPzDyMILZ8_tuniwukg,2266
482
485
  infrahub/graphql/types/__init__.py,sha256=oP4DhYAteHkc8LiQsIRHE1q2jaksfc-VvAO1urkmI4k,1895
483
486
  infrahub/graphql/types/attribute.py,sha256=bc2q44q8j5DTNdwBMe0SgG7Rbk8si1h-8SyqGIa-Rn0,6594
484
- infrahub/graphql/types/branch.py,sha256=8iaE3Zyo0PMIRm0Hcgwdli09po1YbIUFJBpZaFGZWJE,1409
487
+ infrahub/graphql/types/branch.py,sha256=CUYvw02AovhfJVi14QQvFMytB2zBSQqC_zJqmp5kv1Q,1423
485
488
  infrahub/graphql/types/common.py,sha256=3I3p1bPOorwWgTqKbHqcDB7AvNG0JMdRyzIGxUrrREA,401
486
489
  infrahub/graphql/types/context.py,sha256=PrgEOGq0ERAsbFFNDA40WMlids72StbL2q88nGW46cQ,405
487
490
  infrahub/graphql/types/enums.py,sha256=Va-39ysZXciR8arQGqRZo9piKb5b0oufUl6uiyijwNc,383
@@ -492,7 +495,7 @@ infrahub/graphql/types/permission.py,sha256=zptTaTR-ndIbcb8AEwBXm-TRxgr400T8untx
492
495
  infrahub/graphql/types/relationship.py,sha256=2Bs-cRbP4ihY8gelaLnNNgBUdY1SBFZkkwien-qWgOI,436
493
496
  infrahub/graphql/types/standard_node.py,sha256=6OnB0U2QW0PyCDV2cyvHye4-g7agnTuD4HyQ4Q6x_gw,1821
494
497
  infrahub/graphql/types/task.py,sha256=ozjcm24Qj81JmiR2scW5APlPGs__dhFIGjlqzYXSnoo,1439
495
- infrahub/graphql/types/task_log.py,sha256=Z3EFUpBM13QWZm8J8vCIlqr3qS9bmhUSIApsfw2SiIc,684
498
+ infrahub/graphql/types/task_log.py,sha256=jqB2SzIDVaVHRKbe10IFOvbzUv4pbTv-lb0ydwkdt7w,753
496
499
  infrahub/graphql/utils.py,sha256=cVnF_FNR2-R8TnxxgKVgwjC6N1tXSChg5A8sKeMvE9g,3859
497
500
  infrahub/groups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
498
501
  infrahub/groups/ancestors.py,sha256=ORNXupyZLOhtuQ-TxToONqJn-2OHFBPGubz-2cQpSwc,981
@@ -533,10 +536,10 @@ infrahub/message_bus/operations/git/__init__.py,sha256=0Fbz1AnU8lWKdX7PS_b0BvjiK
533
536
  infrahub/message_bus/operations/git/file.py,sha256=uW1dXVCMrQNC5-DFrVJ6PvfU47CQ2CQJec-bOXoBkjc,1472
534
537
  infrahub/message_bus/operations/git/repository.py,sha256=eQ6csfEoCbyOTAgoA5mzHerW8-TlbrQaZQ4Htj6qZu8,2432
535
538
  infrahub/message_bus/operations/refresh/__init__.py,sha256=vBuvTL4zRRpOMXATmckQ3bx2GnNwhxicFECA8-8ZZXk,47
536
- infrahub/message_bus/operations/refresh/registry.py,sha256=AWyIVoh7DvwqD_ihPAa6zbPogUGBZcz8tzTJpySoiUY,1301
539
+ infrahub/message_bus/operations/refresh/registry.py,sha256=JOR-71kiSgEpbEeLJAxcNv7JoV5ORahV_Gr6ytKgZSQ,1357
537
540
  infrahub/message_bus/operations/requests/__init__.py,sha256=7BWa2wc4XSNk13zySOEUdFfcaldSIZT6WXdR6eDxk-U,131
538
541
  infrahub/message_bus/operations/requests/generator_definition.py,sha256=AE2x0NiGoyqD5PYp7XmmjzD23SqNCTyzI8KwcTcVurg,6093
539
- infrahub/message_bus/operations/requests/proposed_change.py,sha256=fILCF3QnsU2c8UAhDyYBjXbfFvj0QF6xbF37A7lLUPM,23044
542
+ infrahub/message_bus/operations/requests/proposed_change.py,sha256=CFxtcoYdmsdt9lKebeD407wEJB-Qo_uR8BB-t3wp-Kk,23040
540
543
  infrahub/message_bus/operations/send/__init__.py,sha256=ivuUTAknLiWfArR44SxA40l0UKVkdHjtDIx0mg06IcE,39
541
544
  infrahub/message_bus/operations/send/echo.py,sha256=m2z_ij7Bucl8u1E1rLAfL3fsrhKZhk_vNIvLqNErIEI,652
542
545
  infrahub/message_bus/types.py,sha256=INOsBhOsPnTSB_6SvMWw1BrnRJZyDgG2c601IjSidgs,4418
@@ -552,8 +555,7 @@ infrahub/patch/plan_reader.py,sha256=uqHNYVBBkpmVIGwaxl2tlMNJd2tPVedNZoSmFSjTdow
552
555
  infrahub/patch/plan_writer.py,sha256=x2u5Oe3ME3zXTdkz5hRnvp2EaQwt-r4LyuSATc2LkKs,4822
553
556
  infrahub/patch/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
554
557
  infrahub/patch/queries/base.py,sha256=wXtv4I-7l_u0kXJFbmFZZJ0_2_5yvuAJwmwiLqRq7AY,338
555
- infrahub/patch/queries/consolidate_duplicated_nodes.py,sha256=R4n6XmACm_wJPd44ZD26VApCavTYtS2QblRvSIeJkDM,3961
556
- infrahub/patch/queries/delete_duplicated_edges.py,sha256=Td5LeNFASt8JH49ufaCZFHT3G8AocvYSw-ZfndqwP1A,6302
558
+ infrahub/patch/queries/delete_duplicated_edges.py,sha256=GjmdbkRTtZzsM2Pr53nm4AHM5MdI6oxhdaumZDcgUKU,6804
557
559
  infrahub/patch/runner.py,sha256=ZB4aOqlG77hJNtDyQtIXmi-2WgM07WSEFtWV2NItIqk,12594
558
560
  infrahub/patch/vertex_adder.py,sha256=lhWELYWlHwkopGOECSHRfj1mb0-COheibsu95r2Hwzs,2796
559
561
  infrahub/patch/vertex_deleter.py,sha256=czdb8T30k_-WSbcZUVS2-DvaN3Dp4j9ss2lAz8KN0mo,1302
@@ -609,7 +611,7 @@ infrahub/task_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
609
611
  infrahub/task_manager/constants.py,sha256=1t1BZRa8_y89gIDPNHzIbRKo63nHOP37-r5OvtHa56c,559
610
612
  infrahub/task_manager/event.py,sha256=Dx6LHRMsx1B1BFz9HIyPqhujAK2DR-JjRB7RJVAH3ik,11091
611
613
  infrahub/task_manager/models.py,sha256=98hoEqScfwQVc-Col_rZE5UISccYlb-1fgT3nKklZSk,8100
612
- infrahub/task_manager/task.py,sha256=yKZuQ8p6Q8dWECTH9jOITQdQb1RQlyAU3IG-8-ZO5Hc,11004
614
+ infrahub/task_manager/task.py,sha256=Rtb_v0D43jMRq7cmi0XMpMX-WHRPPMDmE67yqLXAJ3o,12390
613
615
  infrahub/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
614
616
  infrahub/tasks/artifact.py,sha256=AJTbD6hv2q0QIMkCvxUtC8L7n1-8Ka2nC5yo_rb7Rjo,1983
615
617
  infrahub/tasks/check.py,sha256=WEdktFP1XzahHtF6N782OnNFzkg5uX3KIeNFRy3NEUM,730
@@ -619,10 +621,10 @@ infrahub/tasks/recurring.py,sha256=RJO2zdzCU-38Kb81lmCUbFQOBhGui8qn2QizTV4vj9I,4
619
621
  infrahub/tasks/registry.py,sha256=o1ybJvkNOSpFBvqem6wkOrtxqm6nqnbDA7JcptP-aC8,3169
620
622
  infrahub/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
621
623
  infrahub/telemetry/constants.py,sha256=_5mJAZaT_wTCaF7Yzsd---Zn1N6GZkoP_954GK8K4-c,184
622
- infrahub/telemetry/database.py,sha256=0yqrfotO3lF-ij15v-tG1nxtoUJppXzHaKubN0Jw9CQ,3097
624
+ infrahub/telemetry/database.py,sha256=9UVPOxRionVF65jjo8slRIaNBOv-KMRzq7I-7fe3wZE,3111
623
625
  infrahub/telemetry/models.py,sha256=q3h_wSX0A2OZgDHo05TXTgcHrzDSxx8hSyqRKPGLvwc,1405
624
626
  infrahub/telemetry/task_manager.py,sha256=x7bUCQ2jXi93VWmrjKZHZTzR3JhD7r0OhhqK7ymCnAM,2864
625
- infrahub/telemetry/tasks.py,sha256=fqzDjgeluBuQY_3hO6BLxShQb59B6GzHu8GTg6LEcAk,4443
627
+ infrahub/telemetry/tasks.py,sha256=8-eB6lCUOKCmy5SWFD5GAEu0Mz0T41aQWmENwGQbSfA,4457
626
628
  infrahub/telemetry/utils.py,sha256=K-gmj4QilO3HXAqJRzUwVcpqdA9KcM4RYJPU_zUYpHA,308
627
629
  infrahub/trace.py,sha256=Hir9hMWx_6IKF_dhDnMxYjusJdy0ycjB5CHWge2wXNE,3759
628
630
  infrahub/transformations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -644,7 +646,7 @@ infrahub/visuals.py,sha256=N62G4oOOIYNFpvMjKq7uos-oZAZybGMp57uh5jsVX9w,627
644
646
  infrahub/webhook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
645
647
  infrahub/webhook/gather.py,sha256=XNaIGiHDiMjjtSjsVbswOze7cLaL0MKJmvSbZBS-WT0,691
646
648
  infrahub/webhook/models.py,sha256=c_6Ng8BeoyUDb4TZInVruB7e8Faq_QQ8-00IVcEBwJM,10031
647
- infrahub/webhook/tasks.py,sha256=kQz0BzOOKUGogHKN2X_tSKYk-7rpHMQ1FKjmGugzEc0,7235
649
+ infrahub/webhook/tasks.py,sha256=O1M60KuxXO_eDHSXMo-Y3w_F58aRQ34F6UlPPYApTfI,7294
648
650
  infrahub/webhook/triggers.py,sha256=v1dzFV4wX0GO2n5hft_qzp-oJOA2P_9Q2eTcSP-i0pk,1574
649
651
  infrahub/worker.py,sha256=JtTM-temURUbpEy-bkKJuTt-GKoiHFDrOe9SyVTIXEM,49
650
652
  infrahub/workers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -761,18 +763,19 @@ infrahub_sdk/uuidt.py,sha256=Tz-4nHkJwbi39UT3gaIe2wJeZNAoBqf6tm3sw7LZbXc,2155
761
763
  infrahub_sdk/yaml.py,sha256=512OKgxAYPt4QLBFlucUB4GgwKJ09dzgC86pO57YFFw,5018
762
764
  infrahub_testcontainers/__init__.py,sha256=oPpmesGgYBSdKTg1L37FGwYBeao1EHury5SJGul-CT8,216
763
765
  infrahub_testcontainers/constants.py,sha256=mZ4hLvcf4rKk9wC7EId4MQxAY0sk4V99deB04N0J2bg,85
764
- infrahub_testcontainers/container.py,sha256=-NccmHKJw8rnGY4nSgqIJdGBrX8eObi9kq7q7mQz1zs,12308
765
- infrahub_testcontainers/docker-compose.test.yml,sha256=dePNK3r5DWVysrFr-t838-9LercZQOIJ8ZYOBWv7Mok,8482
766
+ infrahub_testcontainers/container.py,sha256=CpRLoCQjN37Iv9DpMQX2WHgsDObT7_iNfE6OTWL90OE,19559
767
+ infrahub_testcontainers/docker-compose-cluster.test.yml,sha256=noKd7NLr6GQOn1X4qukvpsRvg15unGS7BfPDG4xkKdM,12057
768
+ infrahub_testcontainers/docker-compose.test.yml,sha256=NgQF0un3LNUWhY0-uKb56Ky9ZmCJP0dRssUPx4qZp-o,8562
766
769
  infrahub_testcontainers/haproxy.cfg,sha256=QUkG2Xu-hKoknPOeYKAkBT_xJH6U9CfIS0DTMFZJsnk,1305
767
- infrahub_testcontainers/helpers.py,sha256=zsvBOql5qM2OX1ybPcklqF-nzWYHkZI3Gk3KZhxWOtU,3578
770
+ infrahub_testcontainers/helpers.py,sha256=a6qRHjeFZetkq0zQj5pgz021AI7XhArMG3ze7ZQuEHk,4288
768
771
  infrahub_testcontainers/host.py,sha256=Z4_gGoGKKeM_HGVS7SdYL1FTNGyLBk8wzicdSKHpfmM,1486
769
772
  infrahub_testcontainers/measurements.py,sha256=gR-uTasSIFCXrwvnNpIpfsQIopKftT7pBiarCgIShaQ,2214
770
773
  infrahub_testcontainers/models.py,sha256=ASYyvl7d_WQz_i7y8-3iab9hwwmCl3OCJavqVbe8nXU,954
771
774
  infrahub_testcontainers/performance_test.py,sha256=hvwiy6tc_lWniYqGkqfOXVGAmA_IV15VOZqbiD9ezno,6149
772
- infrahub_testcontainers/plugin.py,sha256=g24SMg4EAqVe2N8i9F66EV34cNqIdDU4mRP7OeOJO1w,5381
775
+ infrahub_testcontainers/plugin.py,sha256=I3RuZQ0dARyKHuqCf0y1Yj731P2Mwf3BJUehRJKeWrs,5645
773
776
  infrahub_testcontainers/prometheus.yml,sha256=610xQEyj3xuVJMzPkC4m1fRnCrjGpiRBrXA2ytCLa54,599
774
- infrahub_server-1.2.10.dist-info/LICENSE.txt,sha256=TfPDBt3ar0uv_f9cqCDMZ5rIzW3CY8anRRd4PkL6ejs,34522
775
- infrahub_server-1.2.10.dist-info/METADATA,sha256=jIU3vIOb6nVuLMlEDps3sUh-jqgmD976HbR8g79bSiY,8194
776
- infrahub_server-1.2.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
777
- infrahub_server-1.2.10.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
778
- infrahub_server-1.2.10.dist-info/RECORD,,
777
+ infrahub_server-1.2.12.dist-info/LICENSE.txt,sha256=TfPDBt3ar0uv_f9cqCDMZ5rIzW3CY8anRRd4PkL6ejs,34522
778
+ infrahub_server-1.2.12.dist-info/METADATA,sha256=LB7mZe_ufD6CAEphVR-SojpySkkZd75NxwQ1n3AOVPw,8206
779
+ infrahub_server-1.2.12.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
780
+ infrahub_server-1.2.12.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
781
+ infrahub_server-1.2.12.dist-info/RECORD,,