infrahub-server 1.4.3__py3-none-any.whl → 1.4.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.
infrahub/cli/__init__.py CHANGED
@@ -1,5 +1,3 @@
1
- from asyncio import run as aiorun
2
-
3
1
  import typer
4
2
  from infrahub_sdk.async_typer import AsyncTyper
5
3
 
@@ -43,18 +41,87 @@ async def _init_shell(config_file: str) -> None:
43
41
 
44
42
 
45
43
  @app.command()
46
- def shell(config_file: str = typer.Argument("infrahub.toml", envvar="INFRAHUB_CONFIG")) -> None:
47
- """Start a python shell within Infrahub context."""
48
- aiorun(_init_shell(config_file=config_file))
49
-
50
- # TODO add check to properly exit of ipython is not installed
51
- from IPython import embed
52
- from rich import pretty
53
- from traitlets.config import get_config
54
-
55
- pretty.install()
56
-
57
- c = get_config()
58
- c.InteractiveShellEmbed.colors = "Linux"
59
- c.InteractiveShellApp.extensions.append("rich")
60
- embed(config=c)
44
+ def shell() -> None:
45
+ """Start a python shell within Infrahub context (requires IPython)."""
46
+ from infrahub_sdk import InfrahubClient
47
+ from IPython import start_ipython
48
+ from traitlets.config import Config
49
+
50
+ from infrahub import config
51
+ from infrahub.components import ComponentType
52
+ from infrahub.core.branch import Branch
53
+ from infrahub.core.initialization import initialization
54
+ from infrahub.core.manager import NodeManager
55
+ from infrahub.core.registry import registry
56
+ from infrahub.dependencies.registry import build_component_registry
57
+ from infrahub.lock import initialize_lock
58
+ from infrahub.services import InfrahubServices
59
+ from infrahub.workers.dependencies import (
60
+ get_cache,
61
+ get_component,
62
+ get_database,
63
+ get_workflow,
64
+ set_component_type,
65
+ )
66
+
67
+ async def initialize_service() -> InfrahubServices:
68
+ config.load_and_exit()
69
+ client = InfrahubClient()
70
+
71
+ component_type = ComponentType.GIT_AGENT
72
+ set_component_type(component_type=component_type)
73
+
74
+ database = await get_database()
75
+
76
+ build_component_registry()
77
+
78
+ workflow = get_workflow()
79
+ cache = await get_cache()
80
+ component = await get_component()
81
+ service = await InfrahubServices.new(
82
+ cache=cache,
83
+ client=client,
84
+ database=database,
85
+ workflow=workflow,
86
+ component=component,
87
+ component_type=component_type,
88
+ )
89
+ initialize_lock(service=service)
90
+
91
+ async with service.database as db:
92
+ await initialization(db=db)
93
+ await service.component.refresh_schema_hash()
94
+
95
+ return service
96
+
97
+ def welcome() -> None:
98
+ print("--------------------------------------")
99
+ print("infrahub interactive shell initialized")
100
+ print("--------------------------------------")
101
+ print("Available objects:")
102
+ print("* db: InfrahubDatabase")
103
+ print("* Branch: Branch")
104
+ print("* NodeManager: NodeManager")
105
+ print("* registry: Registry")
106
+ print("* service: InfrahubServices")
107
+ print()
108
+ print("Example use:")
109
+ print("In [1] tags = await NodeManager.query(schema='BuiltinTag', db=db)")
110
+
111
+ c = Config()
112
+ c.InteractiveShellApp.exec_lines = [
113
+ "service = await initialize_service()",
114
+ "db = service.database",
115
+ "welcome()",
116
+ ]
117
+ c.TerminalInteractiveShell.colors = "Neutral"
118
+
119
+ user_ns = {
120
+ "initialize_service": initialize_service,
121
+ "welcome": welcome,
122
+ "NodeManager": NodeManager,
123
+ "Branch": Branch,
124
+ "registry": registry,
125
+ }
126
+
127
+ start_ipython(argv=[], config=c, user_ns=user_ns)
@@ -1 +1 @@
1
- GRAPH_VERSION = 37
1
+ GRAPH_VERSION = 38
@@ -39,6 +39,7 @@ from .m034_find_orphaned_schema_fields import Migration034
39
39
  from .m035_orphan_relationships import Migration035
40
40
  from .m036_drop_attr_value_index import Migration036
41
41
  from .m037_index_attr_vals import Migration037
42
+ from .m038_redo_0000_prefix_fix import Migration038
42
43
 
43
44
  if TYPE_CHECKING:
44
45
  from infrahub.core.root import Root
@@ -83,6 +84,7 @@ MIGRATIONS: list[type[GraphMigration | InternalSchemaMigration | ArbitraryMigrat
83
84
  Migration035,
84
85
  Migration036,
85
86
  Migration037,
87
+ Migration038,
86
88
  ]
87
89
 
88
90
 
@@ -0,0 +1,63 @@
1
+ from __future__ import annotations
2
+
3
+ import ipaddress
4
+ from typing import TYPE_CHECKING, Sequence
5
+
6
+ from infrahub.core.branch.models import Branch
7
+ from infrahub.core.initialization import initialization
8
+ from infrahub.core.ipam.reconciler import IpamReconciler
9
+ from infrahub.core.manager import NodeManager
10
+ from infrahub.core.migrations.shared import MigrationResult
11
+ from infrahub.core.timestamp import Timestamp
12
+ from infrahub.lock import initialize_lock
13
+ from infrahub.log import get_logger
14
+
15
+ from ..shared import InternalSchemaMigration, SchemaMigration
16
+
17
+ if TYPE_CHECKING:
18
+ from infrahub.database import InfrahubDatabase
19
+
20
+ log = get_logger()
21
+
22
+
23
+ class Migration038(InternalSchemaMigration):
24
+ """
25
+ Re-run migration 026 after Migration037 updates AttributeValueIndexed vertices correctly so that the call to
26
+ NodeManager.query will work
27
+
28
+ If someone is upgrading from 1.2.4 (release before migration 026) or earlier to 1.4.x or later, then migration 026
29
+ fail to find any 0.0.0.0 prefix nodes even if they exist. So we run it again here after migration 037 makes the
30
+ AttributeValueIndexed changes to be sure it completes correctly.
31
+ """
32
+
33
+ name: str = "038_prefix_0000_fix"
34
+ minimum_version: int = 37
35
+ migrations: Sequence[SchemaMigration] = []
36
+
37
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
38
+ return MigrationResult()
39
+
40
+ async def execute(self, db: InfrahubDatabase) -> MigrationResult:
41
+ # load schemas from database into registry
42
+ initialize_lock()
43
+ await initialization(db=db)
44
+
45
+ at = Timestamp()
46
+ for branch in await Branch.get_list(db=db):
47
+ prefix_0000s = await NodeManager.query(
48
+ db=db, schema="BuiltinIPPrefix", branch=branch, filters={"prefix__values": ["0.0.0.0/0", "::/0"]}
49
+ )
50
+ if not prefix_0000s:
51
+ continue
52
+ ipam_reconciler = IpamReconciler(db=db, branch=branch)
53
+ for prefix in prefix_0000s:
54
+ ip_namespace = await prefix.ip_namespace.get_peer(db=db)
55
+ ip_network = ipaddress.ip_network(prefix.prefix.value)
56
+ await ipam_reconciler.reconcile(
57
+ ip_value=ip_network,
58
+ namespace=ip_namespace,
59
+ node_uuid=prefix.get_id(),
60
+ at=at,
61
+ )
62
+
63
+ return MigrationResult()
@@ -7,7 +7,7 @@ from infrahub.core.constants import GLOBAL_BRANCH_NAME, GlobalPermissions, Infra
7
7
  from infrahub.core.manager import get_schema
8
8
  from infrahub.core.schema.node_schema import NodeSchema
9
9
  from infrahub.database import InfrahubDatabase
10
- from infrahub.graphql.analyzer import InfrahubGraphQLQueryAnalyzer
10
+ from infrahub.graphql.analyzer import GraphQLOperation, InfrahubGraphQLQueryAnalyzer
11
11
  from infrahub.graphql.initialization import GraphqlParams
12
12
  from infrahub.permissions.constants import PermissionDecisionFlag
13
13
  from infrahub.utils import extract_camelcase_words
@@ -119,34 +119,46 @@ class PermissionManagerPermissionChecker(GraphQLQueryPermissionCheckerInterface)
119
119
  permission_required = GlobalPermission(
120
120
  action=GlobalPermissions.MANAGE_PERMISSIONS.value, decision=PermissionDecision.ALLOW_ALL.value
121
121
  )
122
+ # Map kinds and the relationship to protect from being read
123
+ kind_relationship_to_check = {
124
+ InfrahubKind.ACCOUNTROLE: "permissions",
125
+ InfrahubKind.BASEPERMISSION: "roles",
126
+ InfrahubKind.GLOBALPERMISSION: "roles",
127
+ InfrahubKind.OBJECTPERMISSION: "roles",
128
+ }
122
129
 
123
130
  async def supports(self, db: InfrahubDatabase, account_session: AccountSession, branch: Branch) -> bool: # noqa: ARG002
124
131
  return config.SETTINGS.main.allow_anonymous_access or account_session.authenticated
125
132
 
126
133
  async def check(
127
134
  self,
128
- db: InfrahubDatabase,
135
+ db: InfrahubDatabase, # noqa: ARG002
129
136
  account_session: AccountSession, # noqa: ARG002
130
137
  analyzed_query: InfrahubGraphQLQueryAnalyzer,
131
138
  query_parameters: GraphqlParams,
132
- branch: Branch,
139
+ branch: Branch, # noqa: ARG002
133
140
  ) -> CheckerResolution:
134
- is_permission_operation = False
135
- kinds = analyzed_query.query_report.impacted_models
136
-
137
- for kind in kinds:
138
- schema = get_schema(db=db, branch=branch, node_schema=kind)
139
- if is_permission_operation := kind in (
140
- InfrahubKind.BASEPERMISSION,
141
- InfrahubKind.GLOBALPERMISSION,
142
- InfrahubKind.OBJECTPERMISSION,
143
- ) or (isinstance(schema, NodeSchema) and InfrahubKind.BASEPERMISSION in schema.inherit_from):
144
- break
145
-
146
- if not is_permission_operation:
147
- return CheckerResolution.NEXT_CHECKER
148
-
149
- query_parameters.context.active_permissions.raise_for_permission(permission=self.permission_required)
141
+ for kind, relationship in self.kind_relationship_to_check.items():
142
+ if (
143
+ kind in analyzed_query.query_report.requested_read
144
+ and relationship in analyzed_query.query_report.requested_read[kind].relationships
145
+ ):
146
+ query_parameters.context.active_permissions.raise_for_permission(permission=self.permission_required)
147
+
148
+ for query in analyzed_query.query_report.queries:
149
+ if not query.infrahub_model:
150
+ continue
151
+
152
+ # Prevent mutations on permissions and account roles
153
+ if (
154
+ query.operation == GraphQLOperation.MUTATION
155
+ and isinstance(query.infrahub_model, NodeSchema)
156
+ and (
157
+ InfrahubKind.BASEPERMISSION in query.infrahub_model.inherit_from
158
+ or query.infrahub_model.kind == InfrahubKind.ACCOUNTROLE
159
+ )
160
+ ):
161
+ query_parameters.context.active_permissions.raise_for_permission(permission=self.permission_required)
150
162
 
151
163
  return CheckerResolution.NEXT_CHECKER
152
164
 
infrahub/lock.py CHANGED
@@ -13,6 +13,7 @@ from redis.asyncio.lock import Lock as GlobalLock
13
13
 
14
14
  from infrahub import config
15
15
  from infrahub.core.timestamp import current_timestamp
16
+ from infrahub.worker import WORKER_IDENTITY
16
17
 
17
18
  if TYPE_CHECKING:
18
19
  from types import TracebackType
@@ -92,7 +93,7 @@ class NATSLock:
92
93
  await self.release()
93
94
 
94
95
  async def acquire(self) -> None:
95
- token = current_timestamp()
96
+ token = f"{current_timestamp()}::{WORKER_IDENTITY}"
96
97
  while True:
97
98
  if await self.do_acquire(token):
98
99
  self.token = token
@@ -138,9 +139,9 @@ class InfrahubLock:
138
139
  if self.use_local:
139
140
  self.local = LocalLock()
140
141
  elif config.SETTINGS.cache.driver == config.CacheDriver.Redis:
141
- self.remote = GlobalLock(redis=self.connection, name=self.name)
142
+ self.remote = GlobalLock(redis=self.connection, name=f"lock.{self.name}")
142
143
  else:
143
- self.remote = NATSLock(service=self.connection, name=self.name)
144
+ self.remote = NATSLock(service=self.connection, name=f"lock.{self.name}")
144
145
 
145
146
  async def __aenter__(self):
146
147
  await self.acquire()
@@ -156,7 +157,7 @@ class InfrahubLock:
156
157
  async def acquire(self) -> None:
157
158
  with LOCK_ACQUIRE_TIME_METRICS.labels(self.name, self.lock_type).time():
158
159
  if not self.use_local:
159
- await self.remote.acquire(token=current_timestamp())
160
+ await self.remote.acquire(token=f"{current_timestamp()}::{WORKER_IDENTITY}")
160
161
  else:
161
162
  await self.local.acquire()
162
163
  self.acquire_time = time.time_ns()
@@ -42,7 +42,7 @@ async def create_branch_registry(db: InfrahubDatabase, branch: Branch) -> None:
42
42
 
43
43
 
44
44
  async def update_branch_registry(db: InfrahubDatabase, branch: Branch) -> None:
45
- """Update the registry for a branch if the schema hash has changed."""
45
+ """Update the registry for a branch if the schema hash has changed or the branch was rebased."""
46
46
 
47
47
  existing_branch: Branch = registry.branch[branch.name]
48
48
 
@@ -50,13 +50,23 @@ async def update_branch_registry(db: InfrahubDatabase, branch: Branch) -> None:
50
50
  log.warning("Branch schema hash is not set, cannot update branch registry")
51
51
  return
52
52
 
53
- if existing_branch.schema_hash and existing_branch.schema_hash.main == branch.active_schema_hash.main:
53
+ if existing_branch.schema_hash.main == branch.active_schema_hash.main:
54
54
  log.debug(
55
- "Branch schema hash is the same, no need to update branch registry",
55
+ "Branch schema hash is the same, no need to refresh the GraphQL schema within the registry",
56
56
  branch=branch.name,
57
57
  hash=existing_branch.schema_hash.main,
58
58
  worker=WORKER_IDENTITY,
59
59
  )
60
+ if existing_branch.branched_from != branch.branched_from:
61
+ # If the hash is the same but the branched_from timestamp differs it means
62
+ # that the branch has been rebased and these timestamps need to be refreshed
63
+ # in the registry even though the schema doesn't need to be reloaded.
64
+ log.info(
65
+ "Updating branched_from property in registry for rebased branch",
66
+ branch=branch.name,
67
+ worker=WORKER_IDENTITY,
68
+ )
69
+ registry.branch[branch.name] = branch
60
70
  return
61
71
 
62
72
  log.info(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: infrahub-server
3
- Version: 1.4.3
3
+ Version: 1.4.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
  License: Apache-2.0
6
6
  Author: OpsMill
@@ -36,7 +36,7 @@ infrahub/branch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  infrahub/branch/merge_mutation_checker.py,sha256=bKiQEWEqUqjQEIBDaOKZ2LwA9kgWCEyss80B5yGhPX8,1147
37
37
  infrahub/branch/tasks.py,sha256=09AtjKpA5TC9NxsNt3oE--1pHeh1h1hRYvY41YfMt90,1059
38
38
  infrahub/branch/triggers.py,sha256=4sywoEX79fY2NkaGe6tTHnmytf4k6gXDm2FJHkkRJOw,793
39
- infrahub/cli/__init__.py,sha256=U0Ku6La8qpVpLdIkhCRqxQyvAFJG8WRZAh2yx6yzxCs,1781
39
+ infrahub/cli/__init__.py,sha256=d8x7c4CIq66zul2w9TdT82qjR5cMXV2zSujovJ4kV00,3948
40
40
  infrahub/cli/constants.py,sha256=CoCeTMnfsA3j7ArdLKLZK4VPxOM7ls17qpxGJmND0m8,129
41
41
  infrahub/cli/context.py,sha256=u2EYq9-vjzzfZdIYIbYmTG67nYSsyVFDPBtJ3KgE7KY,494
42
42
  infrahub/cli/db.py,sha256=hqZcklxTgAKuXWOthrltOdENsiiTthq6tqySxu4HPFE,37727
@@ -139,7 +139,7 @@ infrahub/core/diff/repository/deserializer.py,sha256=bhN9ao8HxqKyRz273QGLNV9z9_S
139
139
  infrahub/core/diff/repository/repository.py,sha256=u0QTMY1e2dknG_DuRAwzFt-Lp1_mdj5lqF2ymt77k9E,25581
140
140
  infrahub/core/diff/tasks.py,sha256=jSXlenTJ5Fc189Xvm971e3-gBDRnfN19cxNaWvEFwAE,3306
141
141
  infrahub/core/enums.py,sha256=qGbhRVoH43Xi0iDkUfWdQiKapJbLT9UKsCobFk_paIk,491
142
- infrahub/core/graph/__init__.py,sha256=ZYp8RkLFWRjTvuZPPtnGwr38etrRSIUJZiJjqVJdf3o,19
142
+ infrahub/core/graph/__init__.py,sha256=O8Xci_50VdpSOWWUsegCGQvL7gUWJAJNc1ompQbvhf0,19
143
143
  infrahub/core/graph/constraints.py,sha256=lmuzrKDFoeSKRiLtycB9PXi6zhMYghczKrPYvfWyy90,10396
144
144
  infrahub/core/graph/index.py,sha256=A9jzEE_wldBJsEsflODeMt4GM8sPmmbHAJRNdFioR1k,1736
145
145
  infrahub/core/graph/schema.py,sha256=o50Jcy6GBRk55RkDJSMIDDwHhLD7y_RWOirI9rCex4A,10776
@@ -158,7 +158,7 @@ infrahub/core/ipam/utilization.py,sha256=d-zpXCaWsHgJxBLopCDd7y4sJYvHcIzzpYhbTMI
158
158
  infrahub/core/manager.py,sha256=xMXPwlaGNnghkRUW0ILwJAUlBQJZqo9cGp9GVyqkqYk,47564
159
159
  infrahub/core/merge.py,sha256=TNZpxjNYcl3dnvE8eYXaWSXFDYeEa8DDsS9XbR2XKlA,11217
160
160
  infrahub/core/migrations/__init__.py,sha256=dIExw90CrdTByeJqpiWkaZBclpAfzatG2H6fXx54su0,1305
161
- infrahub/core/migrations/graph/__init__.py,sha256=RUaz8bfg8ifZjf6Hfl-J7F5qOP-UbOiFwlalzI9pSok,4091
161
+ infrahub/core/migrations/graph/__init__.py,sha256=8NNpXMWWxKbuliktUJg7JllIePGERZxOnumC-UmkpX0,4161
162
162
  infrahub/core/migrations/graph/m001_add_version_to_graph.py,sha256=YcLN6cFjE6IGheXR4Ujb6CcyY8bJ7WE289hcKJaENOc,1515
163
163
  infrahub/core/migrations/graph/m002_attribute_is_default.py,sha256=wB6f2N_ChTvGajqHD-OWCG5ahRMDhhXZuwo79ieq_II,1036
164
164
  infrahub/core/migrations/graph/m003_relationship_parent_optional.py,sha256=Aya-s98XfE9C7YluOwEjilwgnjaBnZxp27w_Xdv_NmU,2330
@@ -196,6 +196,7 @@ infrahub/core/migrations/graph/m034_find_orphaned_schema_fields.py,sha256=Fekohf
196
196
  infrahub/core/migrations/graph/m035_orphan_relationships.py,sha256=K0J5gzFF5gY-QMom0tRGDckqw19aN0uSV8AZ8KdKSMo,1371
197
197
  infrahub/core/migrations/graph/m036_drop_attr_value_index.py,sha256=z2BplzX0mue3lOxrM7xnWDNrs7N3TGdFKHZR-u0wDDY,1439
198
198
  infrahub/core/migrations/graph/m037_index_attr_vals.py,sha256=bJB4yPWE73XA_ErUcnY90CR09_jbtA0jW6tE5U0GvQ4,22730
199
+ infrahub/core/migrations/graph/m038_redo_0000_prefix_fix.py,sha256=8seWnXQhgEJDFLWxYHVcnMNDPcHq5C24c0RYrtn_WGE,2411
199
200
  infrahub/core/migrations/query/__init__.py,sha256=JoWOUWlV6IzwxWxObsfCnAAKUOHJkE7dZlOsfB64ZEo,876
200
201
  infrahub/core/migrations/query/attribute_add.py,sha256=oitzB-PPAclfyNtcwCWJY3RdI5Zi4oEnR62BDzn1UQk,4835
201
202
  infrahub/core/migrations/query/attribute_rename.py,sha256=onb9Nanht1Tz47JgneAcFsuhqqvPS6dvI2nNjRupLLo,6892
@@ -460,7 +461,7 @@ infrahub/graphql/auth/query_permission_checker/checker.py,sha256=OSJmoiqETvRtayY
460
461
  infrahub/graphql/auth/query_permission_checker/default_branch_checker.py,sha256=QiuZXFnaTPaILeIl7MoEu4e6EYexRJd-AZLgAHwaCQc,2173
461
462
  infrahub/graphql/auth/query_permission_checker/interface.py,sha256=p4IIicoD1QAM1Q_NiNqOMQqSAIkbNrSHJ-pAlrJfBfo,848
462
463
  infrahub/graphql/auth/query_permission_checker/merge_operation_checker.py,sha256=_cv3jSsIA3MXQcD2etCgKzvTKaKNAhwDNqPRIlIzUo4,1640
463
- infrahub/graphql/auth/query_permission_checker/object_permission_checker.py,sha256=5Af8bwtG5I-jxPQGOG_-qKV9bQFECn27e_gBoYDxXrs,8408
464
+ infrahub/graphql/auth/query_permission_checker/object_permission_checker.py,sha256=1IVUWIV-GOY_pc3zApii2WNdAG7xHhnw05mUUtXbN6A,9093
464
465
  infrahub/graphql/auth/query_permission_checker/super_admin_checker.py,sha256=2RlJ1G-BmJIQW33SletzK1gIQ3nyEB2edTiX0xAjR2E,1550
465
466
  infrahub/graphql/constants.py,sha256=iVvo3HK-ch7YmHw1Eg2E_ja3I45cNAwjpYahsnu85CI,37
466
467
  infrahub/graphql/context.py,sha256=ahp-MvX_0glg9mSPbPVhEwvbYzrIKtaEAGt7CVnAusE,1681
@@ -550,7 +551,7 @@ infrahub/groups/models.py,sha256=eOiNtmJapT4zRQ3XbUf8TVb_bhzG2lUfVPhIBZv3Wz0,759
550
551
  infrahub/groups/parsers.py,sha256=A60n-JmT-8F-7ATugV97R-mPWpRhNVNxqEbpibxiiUs,4260
551
552
  infrahub/groups/tasks.py,sha256=yg-VNj37iWdBHyPE9BhN2QzjVo2D8glnlO37pwGcdsU,1563
552
553
  infrahub/helpers.py,sha256=KchbQqgipU4VjfwnDbzCGjnEv-4espw_g63Zw4KAhbo,251
553
- infrahub/lock.py,sha256=M7HJMOBLGybhss0SVEJ6oDHY0O5a2A4ylWkG9EVHjMk,8542
554
+ infrahub/lock.py,sha256=EagMvKKPqWXKLvOpw2OXNPxNa1XLG0JNZgMzCU45EuA,8654
554
555
  infrahub/log.py,sha256=4FP80DGY5sk9R7CjcDpPiTfxuow-nfbhXWVpDByCVrw,2817
555
556
  infrahub/menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
556
557
  infrahub/menu/constants.py,sha256=z9aAxIBlAMXrjl3dXo0vZxBU0pcfh1FQOiqIussvpD0,195
@@ -662,7 +663,7 @@ infrahub/tasks/check.py,sha256=37n1U1Knb3AV6kz2sw_IabL9pnlqceLVICWf9GdSxZE,687
662
663
  infrahub/tasks/dummy.py,sha256=6SxlQqQXZqgTuwLaAsK-p1O1TYNKfdGmUYjNJFNHe9s,1209
663
664
  infrahub/tasks/keepalive.py,sha256=D6yh3Vmlr1WCEpZibk2YLc2n0dCcX6tM62HCSxyGEu8,783
664
665
  infrahub/tasks/recurring.py,sha256=RJO2zdzCU-38Kb81lmCUbFQOBhGui8qn2QizTV4vj9I,447
665
- infrahub/tasks/registry.py,sha256=zanLxRT_RFkYV2Y3OQedHu2-PTBwoExbAzgokT0TZjQ,3957
666
+ infrahub/tasks/registry.py,sha256=ncoiZ-GAkyeuKTy5gRkGzQhtx1rSLsMX4o9uZ1A0Kkk,4543
666
667
  infrahub/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
667
668
  infrahub/telemetry/constants.py,sha256=_5mJAZaT_wTCaF7Yzsd---Zn1N6GZkoP_954GK8K4-c,184
668
669
  infrahub/telemetry/database.py,sha256=9UVPOxRionVF65jjo8slRIaNBOv-KMRzq7I-7fe3wZE,3111
@@ -826,8 +827,8 @@ infrahub_testcontainers/models.py,sha256=ASYyvl7d_WQz_i7y8-3iab9hwwmCl3OCJavqVbe
826
827
  infrahub_testcontainers/performance_test.py,sha256=hvwiy6tc_lWniYqGkqfOXVGAmA_IV15VOZqbiD9ezno,6149
827
828
  infrahub_testcontainers/plugin.py,sha256=I3RuZQ0dARyKHuqCf0y1Yj731P2Mwf3BJUehRJKeWrs,5645
828
829
  infrahub_testcontainers/prometheus.yml,sha256=610xQEyj3xuVJMzPkC4m1fRnCrjGpiRBrXA2ytCLa54,599
829
- infrahub_server-1.4.3.dist-info/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
830
- infrahub_server-1.4.3.dist-info/METADATA,sha256=3sPnrG5a6lzgW83Theqmb2Ztk6JpquCmwM-AOHOS_4E,8277
831
- infrahub_server-1.4.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
832
- infrahub_server-1.4.3.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
833
- infrahub_server-1.4.3.dist-info/RECORD,,
830
+ infrahub_server-1.4.4.dist-info/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
831
+ infrahub_server-1.4.4.dist-info/METADATA,sha256=FO70Jv93bMA5iuHIz3mW36epeZJC6wHgKttC65vvzMU,8277
832
+ infrahub_server-1.4.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
833
+ infrahub_server-1.4.4.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
834
+ infrahub_server-1.4.4.dist-info/RECORD,,