infrahub-server 1.4.6__py3-none-any.whl → 1.4.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
infrahub/api/oauth2.py CHANGED
@@ -11,7 +11,7 @@ from opentelemetry import trace
11
11
 
12
12
  from infrahub import config, models
13
13
  from infrahub.api.dependencies import get_db
14
- from infrahub.auth import signin_sso_account
14
+ from infrahub.auth import get_groups_from_provider, signin_sso_account
15
15
  from infrahub.exceptions import GatewayError, ProcessingError
16
16
  from infrahub.log import get_logger
17
17
  from infrahub.message_bus.types import KVTTL
@@ -109,7 +109,10 @@ async def token(
109
109
 
110
110
  _validate_response(response=userinfo_response)
111
111
  user_info = userinfo_response.json()
112
- sso_groups = user_info.get("groups", [])
112
+ sso_groups = user_info.get("groups", []) or await get_groups_from_provider(
113
+ provider=provider, service=service, payload=payload, user_info=user_info
114
+ )
115
+
113
116
  if not sso_groups and config.SETTINGS.security.sso_user_default_group:
114
117
  sso_groups = [config.SETTINGS.security.sso_user_default_group]
115
118
 
infrahub/api/oidc.py CHANGED
@@ -13,7 +13,7 @@ from pydantic import BaseModel, HttpUrl
13
13
 
14
14
  from infrahub import config, models
15
15
  from infrahub.api.dependencies import get_db
16
- from infrahub.auth import signin_sso_account
16
+ from infrahub.auth import get_groups_from_provider, signin_sso_account
17
17
  from infrahub.exceptions import GatewayError, ProcessingError
18
18
  from infrahub.log import get_logger
19
19
  from infrahub.message_bus.types import KVTTL
@@ -149,8 +149,12 @@ async def token(
149
149
 
150
150
  _validate_response(response=userinfo_response)
151
151
  user_info: dict[str, Any] = userinfo_response.json()
152
- sso_groups = user_info.get("groups") or await _get_id_token_groups(
153
- oidc_config=oidc_config, service=service, payload=payload, client_id=provider.client_id
152
+ sso_groups = (
153
+ user_info.get("groups")
154
+ or await _get_id_token_groups(
155
+ oidc_config=oidc_config, service=service, payload=payload, client_id=provider.client_id
156
+ )
157
+ or await get_groups_from_provider(provider=provider, service=service, payload=payload, user_info=user_info)
154
158
  )
155
159
 
156
160
  if not sso_groups and config.SETTINGS.security.sso_user_default_group:
@@ -7,7 +7,8 @@ class CheckArtifactCreate(BaseModel):
7
7
  """Runs a check to verify the creation of an artifact."""
8
8
 
9
9
  artifact_name: str = Field(..., description="Name of the artifact")
10
- artifact_definition: str = Field(..., description="The the ID of the artifact definition")
10
+ artifact_definition: str = Field(..., description="The ID of the artifact definition")
11
+ artifact_definition_name: str = Field(..., description="The name of the artifact definition")
11
12
  commit: str = Field(..., description="The commit to target")
12
13
  content_type: str = Field(..., description="Content type of the artifact")
13
14
  transform_type: str = Field(..., description="The type of transform associated with this artifact")
infrahub/auth.py CHANGED
@@ -10,6 +10,7 @@ import jwt
10
10
  from pydantic import BaseModel
11
11
 
12
12
  from infrahub import config, models
13
+ from infrahub.config import SecurityOAuth2Google, SecurityOAuth2Settings, SecurityOIDCGoogle, SecurityOIDCSettings
13
14
  from infrahub.core.account import validate_token
14
15
  from infrahub.core.constants import AccountStatus, InfrahubKind
15
16
  from infrahub.core.manager import NodeManager
@@ -21,6 +22,7 @@ from infrahub.exceptions import AuthorizationError, NodeNotFoundError
21
22
  if TYPE_CHECKING:
22
23
  from infrahub.core.protocols import CoreGenericAccount
23
24
  from infrahub.database import InfrahubDatabase
25
+ from infrahub.services import InfrahubServices
24
26
 
25
27
 
26
28
  class AuthType(str, Enum):
@@ -237,3 +239,20 @@ async def invalidate_refresh_token(db: InfrahubDatabase, token_id: str) -> None:
237
239
  refresh_token = await NodeManager.get_one(id=token_id, db=db)
238
240
  if refresh_token:
239
241
  await refresh_token.delete(db=db)
242
+
243
+
244
+ async def get_groups_from_provider(
245
+ provider: SecurityOAuth2Settings | SecurityOIDCSettings, service: InfrahubServices, payload: dict, user_info: dict
246
+ ) -> list[str]:
247
+ if isinstance(provider, (SecurityOAuth2Google, SecurityOIDCGoogle)):
248
+ # Poor man's workaround to fetch user groups from Google
249
+ if provider.fetch_groups:
250
+ groups_response = await service.http.get(
251
+ f"{provider.cloudidentity_url}?query=member_key_id == '{user_info['email']}'",
252
+ headers={"Authorization": f"{payload.get('token_type')} {payload.get('access_token')}"},
253
+ )
254
+ group_memberships = groups_response.json()
255
+ if "memberships" in group_memberships:
256
+ return [membership["groupKey"]["id"] for membership in group_memberships["memberships"]]
257
+
258
+ return []
infrahub/config.py CHANGED
@@ -545,6 +545,14 @@ class SecurityOIDCGoogle(SecurityOIDCSettings):
545
545
  discovery_url: str = Field(default="https://accounts.google.com/.well-known/openid-configuration")
546
546
  icon: str = Field(default="mdi:google")
547
547
  display_label: str = Field(default="Google")
548
+ fetch_groups: bool = Field(
549
+ default=False,
550
+ description="Whether to use Cloud Identity API to fetch user groups. Note: requires additional scope: https://www.googleapis.com/auth/cloud-identity.groups.readonly",
551
+ )
552
+ cloudidentity_url: str = Field(
553
+ default="https://cloudidentity.googleapis.com/v1/groups/-/memberships:searchDirectGroups",
554
+ description="Google Cloud endpoint for Cloud Identity. Using searchDirectGroups by default because it is available for the Free plan",
555
+ )
548
556
 
549
557
 
550
558
  class SecurityOIDCProvider1(SecurityOIDCSettings):
@@ -605,6 +613,14 @@ class SecurityOAuth2Google(SecurityOAuth2Settings):
605
613
  userinfo_url: str = Field(default="https://www.googleapis.com/oauth2/v3/userinfo")
606
614
  icon: str = Field(default="mdi:google")
607
615
  display_label: str = Field(default="Google")
616
+ fetch_groups: bool = Field(
617
+ default=False,
618
+ description="Whether to use Cloud Identity API to fetch user groups. Note: requires additional scopes: https://www.googleapis.com/auth/cloud-identity.groups.readonly",
619
+ )
620
+ cloudidentity_url: str = Field(
621
+ default="https://cloudidentity.googleapis.com/v1/groups/-/memberships:searchDirectGroups",
622
+ description="Google Cloud endpoint for Cloud Identity. Using searchDirectGroups by default because it is available for the Free plan",
623
+ )
608
624
 
609
625
 
610
626
  class SecurityOAuth2ProviderSettings(BaseModel):
@@ -11,6 +11,7 @@ class ArtifactEvent(InfrahubEvent):
11
11
 
12
12
  node_id: str = Field(..., description="The ID of the artifact")
13
13
  artifact_definition_id: str = Field(..., description="The ID of the artifact definition")
14
+ artifact_definition_name: str = Field(..., description="The name of the artifact definition")
14
15
  target_id: str = Field(..., description="The ID of the target of the artifact")
15
16
  target_kind: str = Field(..., description="The kind of the target of the artifact")
16
17
  checksum: str = Field(..., description="The current checksum of the artifact")
@@ -36,6 +37,7 @@ class ArtifactEvent(InfrahubEvent):
36
37
  "infrahub.artifact.storage_id": self.storage_id,
37
38
  "infrahub.artifact.storage_id_previous": self.storage_id_previous or "",
38
39
  "infrahub.artifact.artifact_definition_id": self.artifact_definition_id,
40
+ "infrahub.artifact.artifact_definition_name": self.artifact_definition_name,
39
41
  }
40
42
  )
41
43
 
infrahub/git/base.py CHANGED
@@ -393,7 +393,7 @@ class InfrahubRepositoryBase(BaseModel, ABC):
393
393
  repo = Repo.clone_from(self.location, self.directory_default)
394
394
  repo.git.checkout(checkout_ref or self.default_branch)
395
395
  except GitCommandError as exc:
396
- await self._raise_enriched_error(error=exc)
396
+ await self._raise_enriched_error(error=exc, branch_name=checkout_ref or self.default_branch)
397
397
 
398
398
  self.has_origin = True
399
399
 
@@ -1422,6 +1422,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
1422
1422
  target_id=message.target_id,
1423
1423
  target_kind=message.target_kind,
1424
1424
  artifact_definition_id=message.artifact_definition,
1425
+ artifact_definition_name=message.artifact_definition_name,
1425
1426
  meta=EventMeta.from_context(context=message.context, branch=branch),
1426
1427
  checksum=checksum,
1427
1428
  checksum_previous=previous_checksum,
infrahub/git/models.py CHANGED
@@ -21,6 +21,7 @@ class RequestArtifactGenerate(BaseModel):
21
21
 
22
22
  artifact_name: str = Field(..., description="Name of the artifact")
23
23
  artifact_definition: str = Field(..., description="The ID of the artifact definition")
24
+ artifact_definition_name: str = Field(..., description="The name of the artifact definition")
24
25
  commit: str = Field(..., description="The commit to target")
25
26
  content_type: str = Field(..., description="Content type of the artifact")
26
27
  transform_type: str = Field(..., description="The type of transform associated with this artifact")
infrahub/git/tasks.py CHANGED
@@ -366,6 +366,7 @@ async def generate_request_artifact_definition(
366
366
  artifact_name=artifact_definition.artifact_name.value,
367
367
  artifact_id=artifact_id,
368
368
  artifact_definition=model.artifact_definition_id,
369
+ artifact_definition_name=model.artifact_definition_name,
369
370
  commit=repository.commit.value,
370
371
  content_type=artifact_definition.content_type.value,
371
372
  transform_type=str(transform.typename),
infrahub/groups/models.py CHANGED
@@ -1,3 +1,5 @@
1
+ from typing import Any
2
+
1
3
  from pydantic import BaseModel, Field
2
4
 
3
5
 
@@ -9,4 +11,4 @@ class RequestGraphQLQueryGroupUpdate(BaseModel):
9
11
  query_id: str = Field(..., description="The ID of the GraphQLQuery that should be associated with the group")
10
12
  related_node_ids: list[str] = Field(..., description="List of nodes related to the GraphQLQuery")
11
13
  subscribers: list[str] = Field(..., description="List of subscribers to add to the group")
12
- params: dict[str, str] = Field(..., description="Params sent with the query")
14
+ params: dict[str, Any] = Field(..., description="Params sent with the query")
@@ -683,6 +683,7 @@ async def validate_artifacts_generation(model: RequestArtifactDefinitionCheck, c
683
683
  artifact_name=model.artifact_definition.artifact_name,
684
684
  artifact_id=artifact_id,
685
685
  artifact_definition=model.artifact_definition.definition_id,
686
+ artifact_definition_name=model.artifact_definition.definition_name,
686
687
  commit=repository.source_commit,
687
688
  content_type=model.artifact_definition.content_type,
688
689
  transform_type=model.artifact_definition.transform_kind,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: infrahub-server
3
- Version: 1.4.6
3
+ Version: 1.4.7
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
@@ -19,8 +19,8 @@ infrahub/api/exceptions.py,sha256=EjTAN2wawBRyxMWgmafdk2CUdmzAqNokP3QNobifQQI,29
19
19
  infrahub/api/file.py,sha256=FnjXkQdSBThnNNYk8CMboEx_935pR1U6aHT0jxA0AdU,2258
20
20
  infrahub/api/internal.py,sha256=ZlE5BkdGcrmLq1RZOCvv8OBBL7iT7wHKGG9Kqc-TTKg,5339
21
21
  infrahub/api/menu.py,sha256=xp5bj5JXQZA6ZEPWoTSGGSfTXZ1sVmehMxr3VSG7FlQ,1216
22
- infrahub/api/oauth2.py,sha256=wFsWrwfyoNBC1JYzbt1nzU-OjjxWPARIBbE_14jzFmI,5493
23
- infrahub/api/oidc.py,sha256=3fU-fNOoMkqEzoLuTmlhCVaZvL6M3sAub8RP1_LvCO8,8299
22
+ infrahub/api/oauth2.py,sha256=OwJEsASnQGptn5Aa-LN7_VqEEP4YeXYGOqfq71pD3u8,5642
23
+ infrahub/api/oidc.py,sha256=HVbkLszrhLia6XUbeCnwWs97rehLYKwNN5yTFJ255rs,8473
24
24
  infrahub/api/query.py,sha256=xc5aAY0TLHnswdjiIpvThG974EKGVIXvZCbtdiiZkPw,7312
25
25
  infrahub/api/schema.py,sha256=dUSB51YXaWELZuXYI7UNemd60MJPPBv4m6-MexXOE0k,17450
26
26
  infrahub/api/static/redoc.standalone.js,sha256=77kGx7mVN9EcdER2ZM4gQ-E-ra_N6AZq9QseAeD6kt0,1042008
@@ -29,9 +29,9 @@ infrahub/api/static/swagger-ui.css,sha256=QBcPDuhZ0X-SExunBzKaiKBw5PZodNETZemnfS
29
29
  infrahub/api/storage.py,sha256=yWo7qsDn4SrX89wDsTKOfGTMdWYNsptAdt7Fhfzw1C0,2179
30
30
  infrahub/api/transformation.py,sha256=xGTLxh3gvohzpORLZy_MY2ZkUuFtKhVKR4ygWy8RYWg,5932
31
31
  infrahub/artifacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- infrahub/artifacts/models.py,sha256=hbU1kbPrRgwuCiFPTdGJp3XICr77_61vgqy7e_ckzSk,2039
32
+ infrahub/artifacts/models.py,sha256=QMGEhEEUGE5cvNdSeJpq9G6u1Yw-bL6V0GwB18B2Tow,2133
33
33
  infrahub/artifacts/tasks.py,sha256=L2DOSvUB5ezcxLpy5cFKGzkLtNBjkRqo2Igs1n8eRUQ,3487
34
- infrahub/auth.py,sha256=g4pQX4kI1k-iWIQNduXODhpeZXIjY3XqLslh7QFRBq4,9194
34
+ infrahub/auth.py,sha256=TItFIxrPDcZGWq2w0lBdnmMrXy1Wrf5uzHuTk3urm2A,10199
35
35
  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
@@ -55,7 +55,7 @@ infrahub/computed_attribute/gather.py,sha256=xhH4dsgCjRFyFshns4Iu3sloe5m1bVMRdeQ
55
55
  infrahub/computed_attribute/models.py,sha256=P_MijLwCVd7394oyTTfYQ3HmX5wIF966jdchuZaLRbs,17361
56
56
  infrahub/computed_attribute/tasks.py,sha256=FMNJYPuLp2tBKP-ENNUlZhc6nkq78yl7817mCKTBt2g,17415
57
57
  infrahub/computed_attribute/triggers.py,sha256=ve1cUj0CZ7dU1VtZkxET9LD8StszKIL9mCkTZpCeUaI,2304
58
- infrahub/config.py,sha256=E207uq69Zzp2u4BHbZk4DZDL27kZtW1ODdTuu2QC_A8,37935
58
+ infrahub/config.py,sha256=nRGw9pTxRnfDgXh54tRTdHbatiOF8CuX-_MP2fpAuOI,38976
59
59
  infrahub/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  infrahub/constants/database.py,sha256=WmV1iuOk4xulxZHOVvO3sS_VF1eTf7fKh0TPe_RnfV4,507
61
61
  infrahub/constants/environment.py,sha256=ry-6qsBzSumOjjiq1D3XNoquf1LWqFKiQSJj8t6nET4,32
@@ -419,7 +419,7 @@ infrahub/dependencies/component/registry.py,sha256=E1K5uK7LU5MK6SxrUjajBw4K1I7dC
419
419
  infrahub/dependencies/interface.py,sha256=pVNdGYVeGlJgmBBlnv-3UYPXeZqZT8mx9Sg4SsqME40,446
420
420
  infrahub/dependencies/registry.py,sha256=YNv73l66EIYDBLaxeeWfGStl8MY6Xz_HpQY1osXVoug,4520
421
421
  infrahub/events/__init__.py,sha256=6BtpkdstvgnMYvUWc-q2dqiA08ZRaU-Xs4vmhWpOJXs,1702
422
- infrahub/events/artifact_action.py,sha256=05R-idXAA_JMWi4KrICKyyLTfIVANHg5WZ9uxsivbt8,2632
422
+ infrahub/events/artifact_action.py,sha256=-j_Sh-_NdJIGJhUDYm5DoZS--eIYsaMsejj36OUE6yk,2823
423
423
  infrahub/events/branch_action.py,sha256=73j9oWwSLg65WAjpq_d2QcOKfcy8Y9kAjP8A2YrOOIM,4692
424
424
  infrahub/events/constants.py,sha256=VCbUeHSWRT308We7vDVYkopGlkQQ23UEIGzv9a8kyf0,121
425
425
  infrahub/events/generator.py,sha256=J3G2-lixFVgrNqcEX2GiPz2nj6TTiUHs12za07U8NZg,3958
@@ -436,13 +436,13 @@ infrahub/generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
436
436
  infrahub/generators/models.py,sha256=9qhSfsoG-uYux35HClAxSq7TRfkosqN3i_eQkeTokLs,1916
437
437
  infrahub/generators/tasks.py,sha256=Ci6lIbnUS6faGzbUjw1ggROpv17guZ-Z9HH9f6cAZv4,9563
438
438
  infrahub/git/__init__.py,sha256=KeQ9U8UI5jDj6KB6j00Oal7MZmtOD9vKqVgiezG_EQA,281
439
- infrahub/git/base.py,sha256=RNXow4RzTBJyjTmT1vZO9_DZSx4Dyv12M-bK_xTBTbg,38657
439
+ infrahub/git/base.py,sha256=5zfBUDY9s7nZJsSw0LOFItVDZBep9Z0LmIsbvd_47IE,38706
440
440
  infrahub/git/constants.py,sha256=XpzcAkXbsgXZgrXey74id1sXV8Q6EHb_4FNw7BndxyY,106
441
441
  infrahub/git/directory.py,sha256=fozxLXXJPweHG95yQwQkR5yy3sfTdmHiczCAJnsUX54,861
442
- infrahub/git/integrator.py,sha256=C9h1qo8EVE8FjwzGWHhTD50I8TuCTH9asgC8-z5eK-g,62818
443
- infrahub/git/models.py,sha256=ozk9alxQ8Ops1lw1g8iR3O7INuw1VPsEUr5Wceh9HQY,12152
442
+ infrahub/git/integrator.py,sha256=fpeOC1ycVYZixPcrR-TwmZXHgaAvXpPd50ys04GFXdg,62889
443
+ infrahub/git/models.py,sha256=tu-YRNZ4nlYZ6QbBWhydFRcVa0nlN7Cl3k5U0yLi53Y,12250
444
444
  infrahub/git/repository.py,sha256=wPsJAA9aHTHdfw0gqCfkNHvcivs7JabsDf-uazptZt0,10928
445
- infrahub/git/tasks.py,sha256=aBFN7yV72UshcxFljrmHAKGSDoe0e1eVjrnyPDXQEM8,37515
445
+ infrahub/git/tasks.py,sha256=QRBqmGODtuDJyHoL8wFOBeE0_cY-m5xRGaPbKn1-CzQ,37584
446
446
  infrahub/git/utils.py,sha256=xhWxlu_FbMqbrwanpPkex4hKRS_d2AFzlxI_6kVQllw,1741
447
447
  infrahub/git/worktree.py,sha256=8IYJWOBytKUWwhMmMVehR4ceeO9e13nV-mvn3iVEgZY,1727
448
448
  infrahub/git_credential/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -547,7 +547,7 @@ infrahub/graphql/types/task_log.py,sha256=jqB2SzIDVaVHRKbe10IFOvbzUv4pbTv-lb0ydw
547
547
  infrahub/graphql/utils.py,sha256=cVnF_FNR2-R8TnxxgKVgwjC6N1tXSChg5A8sKeMvE9g,3859
548
548
  infrahub/groups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
549
549
  infrahub/groups/ancestors.py,sha256=ORNXupyZLOhtuQ-TxToONqJn-2OHFBPGubz-2cQpSwc,981
550
- infrahub/groups/models.py,sha256=eOiNtmJapT4zRQ3XbUf8TVb_bhzG2lUfVPhIBZv3Wz0,759
550
+ infrahub/groups/models.py,sha256=YAeaJR01oJdUhhnll9sUvXcK1367hzclqzjd-CScY1s,783
551
551
  infrahub/groups/parsers.py,sha256=A60n-JmT-8F-7ATugV97R-mPWpRhNVNxqEbpibxiiUs,4260
552
552
  infrahub/groups/tasks.py,sha256=yg-VNj37iWdBHyPE9BhN2QzjVo2D8glnlO37pwGcdsU,1563
553
553
  infrahub/helpers.py,sha256=KchbQqgipU4VjfwnDbzCGjnEv-4espw_g63Zw4KAhbo,251
@@ -622,7 +622,7 @@ infrahub/proposed_change/branch_diff.py,sha256=IdMxf5zPmhybQKPPz7AlruNmLCKf5VISP
622
622
  infrahub/proposed_change/checker.py,sha256=ZhNEVJKsQbHH2UE1O35MfOVa8cK1QGEqGyn6MsOuqSQ,1558
623
623
  infrahub/proposed_change/constants.py,sha256=auifG94Oo2cJ4RwZx4P-XDPDpKYPtEVxh013KPfiEdU,2080
624
624
  infrahub/proposed_change/models.py,sha256=ivWJmEAihprKmwgaBGDJ4Koq4ETciE5GfDp86KHDnns,5892
625
- infrahub/proposed_change/tasks.py,sha256=M1vdCE1J_IBxGwSnQLWwobxhOSDaaxuvEScgZuYbus8,63991
625
+ infrahub/proposed_change/tasks.py,sha256=8KCZ33DZFESfCVOlLzTiK5DY7SiPtWn4AU1lzN0_MyM,64075
626
626
  infrahub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
627
627
  infrahub/pytest_plugin.py,sha256=u3t0WgLMo9XmuQYeb28mccQ3xbnyv2Fv173YWl1zBiM,6678
628
628
  infrahub/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -827,8 +827,8 @@ infrahub_testcontainers/models.py,sha256=ASYyvl7d_WQz_i7y8-3iab9hwwmCl3OCJavqVbe
827
827
  infrahub_testcontainers/performance_test.py,sha256=hvwiy6tc_lWniYqGkqfOXVGAmA_IV15VOZqbiD9ezno,6149
828
828
  infrahub_testcontainers/plugin.py,sha256=I3RuZQ0dARyKHuqCf0y1Yj731P2Mwf3BJUehRJKeWrs,5645
829
829
  infrahub_testcontainers/prometheus.yml,sha256=610xQEyj3xuVJMzPkC4m1fRnCrjGpiRBrXA2ytCLa54,599
830
- infrahub_server-1.4.6.dist-info/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
831
- infrahub_server-1.4.6.dist-info/METADATA,sha256=O5wCV3t2TuX9o4kj49ujsXIigL20YFpkMBU6-PWY7kE,8277
832
- infrahub_server-1.4.6.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
833
- infrahub_server-1.4.6.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
834
- infrahub_server-1.4.6.dist-info/RECORD,,
830
+ infrahub_server-1.4.7.dist-info/LICENSE.txt,sha256=7GQO7kxVoQYnZtFrjZBKLRXbrGwwwimHPPOJtqXsozQ,11340
831
+ infrahub_server-1.4.7.dist-info/METADATA,sha256=JDolBgNRWQnhM2j2I-v1sINa1PVuDN3YUX58Zd6PB1A,8277
832
+ infrahub_server-1.4.7.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
833
+ infrahub_server-1.4.7.dist-info/entry_points.txt,sha256=UXIeFWDsrV-4IllNvUEd6KieYGzQfn9paga2YyABOQI,393
834
+ infrahub_server-1.4.7.dist-info/RECORD,,