infrahub-server 1.6.3__py3-none-any.whl → 1.7.0b0__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 (161) hide show
  1. infrahub/actions/tasks.py +4 -2
  2. infrahub/api/schema.py +3 -1
  3. infrahub/artifacts/tasks.py +1 -0
  4. infrahub/auth.py +2 -2
  5. infrahub/cli/db.py +6 -6
  6. infrahub/computed_attribute/gather.py +3 -4
  7. infrahub/computed_attribute/tasks.py +23 -6
  8. infrahub/config.py +8 -0
  9. infrahub/constants/enums.py +12 -0
  10. infrahub/core/account.py +5 -8
  11. infrahub/core/attribute.py +106 -108
  12. infrahub/core/branch/models.py +44 -71
  13. infrahub/core/branch/tasks.py +5 -3
  14. infrahub/core/changelog/diff.py +1 -20
  15. infrahub/core/changelog/models.py +0 -7
  16. infrahub/core/constants/__init__.py +17 -0
  17. infrahub/core/constants/database.py +0 -1
  18. infrahub/core/constants/schema.py +0 -1
  19. infrahub/core/convert_object_type/repository_conversion.py +3 -4
  20. infrahub/core/diff/data_check_synchronizer.py +3 -2
  21. infrahub/core/diff/enricher/cardinality_one.py +1 -1
  22. infrahub/core/diff/merger/merger.py +27 -1
  23. infrahub/core/diff/merger/serializer.py +3 -10
  24. infrahub/core/diff/model/diff.py +1 -1
  25. infrahub/core/diff/query/merge.py +376 -135
  26. infrahub/core/graph/__init__.py +1 -1
  27. infrahub/core/graph/constraints.py +2 -2
  28. infrahub/core/graph/schema.py +2 -12
  29. infrahub/core/manager.py +132 -126
  30. infrahub/core/metadata/__init__.py +0 -0
  31. infrahub/core/metadata/interface.py +37 -0
  32. infrahub/core/metadata/model.py +31 -0
  33. infrahub/core/metadata/query/__init__.py +0 -0
  34. infrahub/core/metadata/query/node_metadata.py +301 -0
  35. infrahub/core/migrations/graph/__init__.py +4 -0
  36. infrahub/core/migrations/graph/m013_convert_git_password_credential.py +3 -8
  37. infrahub/core/migrations/graph/m017_add_core_profile.py +5 -2
  38. infrahub/core/migrations/graph/m018_uniqueness_nulls.py +2 -1
  39. infrahub/core/migrations/graph/m019_restore_rels_to_time.py +0 -10
  40. infrahub/core/migrations/graph/m020_duplicate_edges.py +0 -8
  41. infrahub/core/migrations/graph/m025_uniqueness_nulls.py +2 -1
  42. infrahub/core/migrations/graph/m026_0000_prefix_fix.py +2 -1
  43. infrahub/core/migrations/graph/m029_duplicates_cleanup.py +0 -1
  44. infrahub/core/migrations/graph/m031_check_number_attributes.py +2 -2
  45. infrahub/core/migrations/graph/m038_redo_0000_prefix_fix.py +2 -1
  46. infrahub/core/migrations/graph/m049_remove_is_visible_relationship.py +38 -0
  47. infrahub/core/migrations/graph/m050_backfill_vertex_metadata.py +168 -0
  48. infrahub/core/migrations/query/attribute_add.py +17 -6
  49. infrahub/core/migrations/query/attribute_remove.py +19 -5
  50. infrahub/core/migrations/query/attribute_rename.py +21 -5
  51. infrahub/core/migrations/query/node_duplicate.py +19 -4
  52. infrahub/core/migrations/schema/attribute_kind_update.py +25 -7
  53. infrahub/core/migrations/schema/attribute_supports_profile.py +3 -1
  54. infrahub/core/migrations/schema/models.py +3 -0
  55. infrahub/core/migrations/schema/node_attribute_add.py +4 -1
  56. infrahub/core/migrations/schema/node_remove.py +24 -2
  57. infrahub/core/migrations/schema/tasks.py +4 -1
  58. infrahub/core/migrations/shared.py +13 -6
  59. infrahub/core/models.py +6 -6
  60. infrahub/core/node/__init__.py +156 -57
  61. infrahub/core/node/create.py +7 -3
  62. infrahub/core/node/standard.py +100 -14
  63. infrahub/core/property.py +0 -1
  64. infrahub/core/protocols_base.py +6 -2
  65. infrahub/core/query/__init__.py +6 -7
  66. infrahub/core/query/attribute.py +161 -46
  67. infrahub/core/query/branch.py +57 -69
  68. infrahub/core/query/diff.py +4 -4
  69. infrahub/core/query/node.py +618 -180
  70. infrahub/core/query/relationship.py +449 -300
  71. infrahub/core/query/standard_node.py +25 -5
  72. infrahub/core/query/utils.py +2 -4
  73. infrahub/core/relationship/constraints/profiles_removal.py +168 -0
  74. infrahub/core/relationship/model.py +293 -139
  75. infrahub/core/schema/attribute_parameters.py +1 -28
  76. infrahub/core/schema/attribute_schema.py +17 -11
  77. infrahub/core/schema/manager.py +63 -43
  78. infrahub/core/schema/relationship_schema.py +6 -2
  79. infrahub/core/schema/schema_branch.py +48 -76
  80. infrahub/core/task/task.py +4 -2
  81. infrahub/core/utils.py +0 -22
  82. infrahub/core/validators/attribute/kind.py +2 -5
  83. infrahub/core/validators/determiner.py +3 -3
  84. infrahub/database/__init__.py +3 -3
  85. infrahub/dependencies/builder/constraint/grouped/node_runner.py +2 -0
  86. infrahub/dependencies/builder/constraint/relationship_manager/profiles_removal.py +8 -0
  87. infrahub/dependencies/registry.py +2 -0
  88. infrahub/display_labels/tasks.py +12 -3
  89. infrahub/git/integrator.py +18 -18
  90. infrahub/git/tasks.py +1 -1
  91. infrahub/graphql/app.py +2 -2
  92. infrahub/graphql/constants.py +3 -0
  93. infrahub/graphql/context.py +1 -1
  94. infrahub/graphql/initialization.py +11 -0
  95. infrahub/graphql/loaders/account.py +134 -0
  96. infrahub/graphql/loaders/node.py +5 -12
  97. infrahub/graphql/loaders/peers.py +5 -7
  98. infrahub/graphql/manager.py +158 -18
  99. infrahub/graphql/metadata.py +91 -0
  100. infrahub/graphql/models.py +33 -3
  101. infrahub/graphql/mutations/account.py +5 -5
  102. infrahub/graphql/mutations/attribute.py +0 -2
  103. infrahub/graphql/mutations/branch.py +9 -5
  104. infrahub/graphql/mutations/computed_attribute.py +1 -1
  105. infrahub/graphql/mutations/display_label.py +1 -1
  106. infrahub/graphql/mutations/hfid.py +1 -1
  107. infrahub/graphql/mutations/ipam.py +4 -6
  108. infrahub/graphql/mutations/main.py +9 -4
  109. infrahub/graphql/mutations/profile.py +16 -22
  110. infrahub/graphql/mutations/proposed_change.py +4 -4
  111. infrahub/graphql/mutations/relationship.py +40 -10
  112. infrahub/graphql/mutations/repository.py +14 -12
  113. infrahub/graphql/mutations/schema.py +2 -2
  114. infrahub/graphql/queries/branch.py +62 -6
  115. infrahub/graphql/queries/diff/tree.py +5 -5
  116. infrahub/graphql/resolvers/account_metadata.py +84 -0
  117. infrahub/graphql/resolvers/ipam.py +6 -8
  118. infrahub/graphql/resolvers/many_relationship.py +77 -35
  119. infrahub/graphql/resolvers/resolver.py +16 -12
  120. infrahub/graphql/resolvers/single_relationship.py +87 -23
  121. infrahub/graphql/subscription/graphql_query.py +2 -0
  122. infrahub/graphql/types/__init__.py +0 -1
  123. infrahub/graphql/types/attribute.py +10 -5
  124. infrahub/graphql/types/branch.py +40 -53
  125. infrahub/graphql/types/enums.py +3 -0
  126. infrahub/graphql/types/metadata.py +28 -0
  127. infrahub/graphql/types/node.py +22 -2
  128. infrahub/graphql/types/relationship.py +10 -2
  129. infrahub/graphql/types/standard_node.py +4 -3
  130. infrahub/hfid/tasks.py +12 -3
  131. infrahub/profiles/gather.py +56 -0
  132. infrahub/profiles/mandatory_fields_checker.py +116 -0
  133. infrahub/profiles/models.py +66 -0
  134. infrahub/profiles/node_applier.py +153 -12
  135. infrahub/profiles/queries/get_profile_data.py +143 -31
  136. infrahub/profiles/tasks.py +79 -27
  137. infrahub/profiles/triggers.py +22 -0
  138. infrahub/proposed_change/tasks.py +4 -1
  139. infrahub/tasks/artifact.py +1 -0
  140. infrahub/transformations/tasks.py +2 -2
  141. infrahub/trigger/catalogue.py +2 -0
  142. infrahub/trigger/models.py +1 -0
  143. infrahub/trigger/setup.py +3 -3
  144. infrahub/trigger/tasks.py +3 -0
  145. infrahub/validators/tasks.py +1 -0
  146. infrahub/webhook/models.py +1 -1
  147. infrahub/webhook/tasks.py +1 -1
  148. infrahub/workers/dependencies.py +9 -3
  149. infrahub/workers/infrahub_async.py +13 -4
  150. infrahub/workflows/catalogue.py +19 -0
  151. infrahub_sdk/node/constants.py +1 -0
  152. infrahub_sdk/node/related_node.py +13 -4
  153. infrahub_sdk/node/relationship.py +8 -0
  154. {infrahub_server-1.6.3.dist-info → infrahub_server-1.7.0b0.dist-info}/METADATA +17 -16
  155. {infrahub_server-1.6.3.dist-info → infrahub_server-1.7.0b0.dist-info}/RECORD +161 -143
  156. infrahub_testcontainers/container.py +3 -3
  157. infrahub_testcontainers/docker-compose-cluster.test.yml +7 -7
  158. infrahub_testcontainers/docker-compose.test.yml +13 -5
  159. {infrahub_server-1.6.3.dist-info → infrahub_server-1.7.0b0.dist-info}/WHEEL +0 -0
  160. {infrahub_server-1.6.3.dist-info → infrahub_server-1.7.0b0.dist-info}/entry_points.txt +0 -0
  161. {infrahub_server-1.6.3.dist-info → infrahub_server-1.7.0b0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -101,6 +101,7 @@ class TriggerType(StrEnum):
101
101
  COMPUTED_ATTR_PYTHON_QUERY = "computed_attr_python_query"
102
102
  DISPLAY_LABEL_JINJA2 = "display_label_jinja2"
103
103
  HUMAN_FRIENDLY_ID = "human_friendly_id"
104
+ PROFILE = "profile"
104
105
  # OBJECT = "object"
105
106
 
106
107
  @property
infrahub/trigger/setup.py CHANGED
@@ -1,4 +1,4 @@
1
- from typing import TYPE_CHECKING, Awaitable, Callable
1
+ from typing import TYPE_CHECKING, Awaitable, Callable, Sequence
2
2
 
3
3
  from prefect import get_run_logger, task
4
4
  from prefect.automations import AutomationCore
@@ -46,7 +46,7 @@ def compare_automations(
46
46
 
47
47
  @task(name="trigger-setup-specific", task_run_name="Setup triggers of a specific kind", cache_policy=NONE) # type: ignore[arg-type]
48
48
  async def setup_triggers_specific(
49
- gatherer: Callable[[InfrahubDatabase | None], Awaitable[list[TriggerDefinition]]],
49
+ gatherer: Callable[[InfrahubDatabase | None], Awaitable[Sequence[TriggerDefinition]]],
50
50
  trigger_type: TriggerType,
51
51
  db: InfrahubDatabase | None = None,
52
52
  ) -> TriggerSetupReport:
@@ -69,7 +69,7 @@ async def setup_triggers_specific(
69
69
  @task(name="trigger-setup", task_run_name="Setup triggers", cache_policy=NONE)
70
70
  async def setup_triggers(
71
71
  client: PrefectClient,
72
- triggers: list[TriggerDefinition],
72
+ triggers: Sequence[TriggerDefinition],
73
73
  trigger_type: TriggerType | None = None,
74
74
  force_update: bool = False,
75
75
  ) -> TriggerSetupReport:
infrahub/trigger/tasks.py CHANGED
@@ -8,6 +8,7 @@ from infrahub.computed_attribute.gather import (
8
8
  )
9
9
  from infrahub.display_labels.gather import gather_trigger_display_labels_jinja2
10
10
  from infrahub.hfid.gather import gather_trigger_hfid
11
+ from infrahub.profiles.gather import gather_trigger_profile_refresh
11
12
  from infrahub.trigger.catalogue import builtin_triggers
12
13
  from infrahub.webhook.gather import gather_trigger_webhook
13
14
  from infrahub.workers.dependencies import get_database
@@ -28,6 +29,7 @@ async def trigger_configure_all() -> None:
28
29
  computed_attribute_python_query_triggers,
29
30
  ) = await gather_trigger_computed_attribute_python(db=db)
30
31
  action_rules = await gather_trigger_action_rules(db=db)
32
+ profile_refresh_triggers = await gather_trigger_profile_refresh()
31
33
  triggers = (
32
34
  computed_attribute_j2_triggers
33
35
  + computed_attribute_python_triggers
@@ -35,6 +37,7 @@ async def trigger_configure_all() -> None:
35
37
  + display_label_triggers
36
38
  + human_friendly_id_triggers
37
39
  + builtin_triggers
40
+ + profile_refresh_triggers
38
41
  + webhook_trigger
39
42
  + action_rules
40
43
  )
@@ -29,6 +29,7 @@ async def start_validator[ValidatorType: CoreValidator](
29
29
  validator = cast("ValidatorType", validator)
30
30
  else:
31
31
  data["proposed_change"] = proposed_change
32
+ client.request_context = context.to_request_context()
32
33
  validator = await client.create(kind=validator_type, data=data)
33
34
  await validator.save()
34
35
 
@@ -233,7 +233,7 @@ class TransformWebhook(Webhook):
233
233
  convert_query_response=self.convert_query_response,
234
234
  data={"data": {"data": data, **context.model_dump()}},
235
235
  client=client,
236
- ) # type: ignore[misc]
236
+ ) # type: ignore[call-overload]
237
237
 
238
238
  @classmethod
239
239
  def from_object(cls, obj: CoreCustomWebhook, transform: CoreTransformPython) -> Self:
infrahub/webhook/tasks.py CHANGED
@@ -118,7 +118,7 @@ async def configure_webhook_all() -> None:
118
118
  triggers = await gather_trigger_webhook(db=db)
119
119
 
120
120
  log.info(f"{len(triggers)} Webhooks automation configuration completed")
121
- await setup_triggers_specific(gatherer=gather_trigger_webhook, db=database, trigger_type=TriggerType.WEBHOOK) # type: ignore[misc]
121
+ await setup_triggers_specific(gatherer=gather_trigger_webhook, db=database, trigger_type=TriggerType.WEBHOOK) # type: ignore[arg-type]
122
122
 
123
123
 
124
124
  @flow(name="webhook-setup-automation-one", flow_run_name="Configurate webhook for {webhook_name}")
@@ -60,9 +60,15 @@ def get_installation_type(installation_type: str = Depends(build_installation_ty
60
60
  return installation_type
61
61
 
62
62
 
63
- async def build_database() -> InfrahubDatabase:
64
- if "database" not in _singletons:
65
- _singletons["database"] = InfrahubDatabase(driver=await get_db(retry=5))
63
+ async def build_database(singleton: bool = True) -> InfrahubDatabase:
64
+ if not singleton or "database" not in _singletons:
65
+ db = InfrahubDatabase(driver=await get_db(retry=5))
66
+
67
+ if singleton:
68
+ _singletons["database"] = db
69
+
70
+ return db
71
+
66
72
  return _singletons["database"]
67
73
 
68
74
 
@@ -24,6 +24,7 @@ from infrahub.core import registry
24
24
  from infrahub.core.initialization import initialization
25
25
  from infrahub.database.graph import validate_graph_version
26
26
  from infrahub.dependencies.registry import build_component_registry
27
+ from infrahub.exceptions import InitializationError
27
28
  from infrahub.git import initialize_repositories_directory
28
29
  from infrahub.lock import initialize_lock
29
30
  from infrahub.services import InfrahubServices
@@ -182,9 +183,17 @@ class InfrahubWorkerAsync(BaseWorker):
182
183
  async def _init_infrahub_client(self, client: InfrahubClient | None = None) -> InfrahubClient:
183
184
  if not client:
184
185
  self._logger.debug(f"Using Infrahub API at {config.SETTINGS.main.internal_address}")
185
- client = InfrahubClient(
186
- config=Config(address=config.SETTINGS.main.internal_address, retry_on_failure=True, log=self._logger)
187
- )
186
+ try:
187
+ client = InfrahubClient(
188
+ config=Config(
189
+ address=config.SETTINGS.main.infrahub_address, retry_on_failure=True, log=self._logger
190
+ )
191
+ )
192
+ except InitializationError as err:
193
+ self._logger.error(
194
+ "Infrahub client initialization failed due to missing configuration for internal_address."
195
+ )
196
+ raise typer.Exit(1) from err
188
197
 
189
198
  try:
190
199
  await client.branch.all()
@@ -194,7 +203,7 @@ class InfrahubWorkerAsync(BaseWorker):
194
203
 
195
204
  return client
196
205
 
197
- async def _init_services(self, client: InfrahubClient) -> None:
206
+ async def _init_services(self, client: InfrahubClient | None) -> None:
198
207
  client = await self._init_infrahub_client(client=client)
199
208
 
200
209
  service = await InfrahubServices.new(
@@ -623,6 +623,23 @@ PROFILE_REFRESH = WorkflowDefinition(
623
623
  )
624
624
 
625
625
 
626
+ PROFILE_REFRESH_SETUP = WorkflowDefinition(
627
+ name="profile-refresh-setup",
628
+ type=WorkflowType.CORE,
629
+ module="infrahub.profiles.tasks",
630
+ function="profile_refresh_setup",
631
+ )
632
+
633
+
634
+ PROFILE_REFRESH_PROCESS = WorkflowDefinition(
635
+ name="profile-refresh-process",
636
+ type=WorkflowType.CORE,
637
+ module="infrahub.profiles.tasks",
638
+ function="profile_refresh_process",
639
+ tags=[WorkflowTag.DATABASE_CHANGE],
640
+ )
641
+
642
+
626
643
  CLEAN_UP_DEADLOCKS = WorkflowDefinition(
627
644
  name="clean-up-deadlocks",
628
645
  type=WorkflowType.INTERNAL,
@@ -685,6 +702,8 @@ WORKFLOWS = [
685
702
  IPAM_RECONCILIATION,
686
703
  PROFILE_REFRESH,
687
704
  PROFILE_REFRESH_MULTIPLE,
705
+ PROFILE_REFRESH_PROCESS,
706
+ PROFILE_REFRESH_SETUP,
688
707
  PROPOSED_CHANGE_MERGE,
689
708
  QUERY_COMPUTED_ATTRIBUTE_TRANSFORM_TARGETS,
690
709
  REMOVE_ADD_NODE_FROM_GROUP,
@@ -20,3 +20,4 @@ ARTIFACT_DEFINITION_GENERATE_FEATURE_NOT_SUPPORTED_MESSAGE = (
20
20
  HIERARCHY_FETCH_FEATURE_NOT_SUPPORTED_MESSAGE = "Hierarchical fields are not supported for this node."
21
21
 
22
22
  HFID_STR_SEPARATOR = "__"
23
+ PROFILE_KIND_PREFIX = "Profile"
@@ -1,12 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from typing import TYPE_CHECKING, Any
4
5
 
5
- from ..exceptions import (
6
- Error,
7
- )
6
+ from ..exceptions import Error
8
7
  from ..protocols_base import CoreNodeBase
9
- from .constants import PROPERTIES_FLAG, PROPERTIES_OBJECT
8
+ from .constants import PROFILE_KIND_PREFIX, PROPERTIES_FLAG, PROPERTIES_OBJECT
10
9
 
11
10
  if TYPE_CHECKING:
12
11
  from ..client import InfrahubClient, InfrahubClientSync
@@ -40,6 +39,7 @@ class RelatedNodeBase:
40
39
  self._display_label: str | None = None
41
40
  self._typename: str | None = None
42
41
  self._kind: str | None = None
42
+ self._source_typename: str | None = None
43
43
 
44
44
  if isinstance(data, (CoreNodeBase)):
45
45
  self._peer = data
@@ -74,6 +74,8 @@ class RelatedNodeBase:
74
74
  prop_data = properties_data.get(prop, properties_data.get(f"_relation__{prop}", None))
75
75
  if prop_data and isinstance(prop_data, dict) and "id" in prop_data:
76
76
  setattr(self, prop, prop_data["id"])
77
+ if prop == "source" and "__typename" in prop_data:
78
+ self._source_typename = prop_data["__typename"]
77
79
  elif prop_data and isinstance(prop_data, (str, bool)):
78
80
  setattr(self, prop, prop_data)
79
81
  else:
@@ -125,6 +127,13 @@ class RelatedNodeBase:
125
127
  return self._peer.get_kind()
126
128
  return self._kind
127
129
 
130
+ @property
131
+ def is_from_profile(self) -> bool:
132
+ """Return whether this relationship was set from a profile. Done by checking if the source is of a profile kind."""
133
+ if not self._source_typename:
134
+ return False
135
+ return bool(re.match(rf"^{PROFILE_KIND_PREFIX}[A-Z]", self._source_typename))
136
+
128
137
  def _generate_input_data(self, allocate_from_pool: bool = False) -> dict[str, Any]:
129
138
  data: dict[str, Any] = {}
130
139
 
@@ -56,6 +56,14 @@ class RelationshipManagerBase:
56
56
  def has_update(self) -> bool:
57
57
  return self._has_update
58
58
 
59
+ @property
60
+ def is_from_profile(self) -> bool:
61
+ """Return whether this relationship was set from a profile. All its peers must be from a profile."""
62
+ if not self.peers:
63
+ return False
64
+ all_profiles = [p.is_from_profile for p in self.peers]
65
+ return bool(all_profiles) and all(all_profiles)
66
+
59
67
  def _generate_input_data(self, allocate_from_pool: bool = False) -> list[dict]:
60
68
  return [peer._generate_input_data(allocate_from_pool=allocate_from_pool) for peer in self.peers]
61
69
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: infrahub-server
3
- Version: 1.6.3
3
+ Version: 1.7.0b0
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
@@ -11,9 +11,10 @@ License-File: LICENSE.txt
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.12
14
- Requires-Python: <3.13,>=3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Requires-Python: <3.14,>=3.12
15
16
  Requires-Dist: aio-pika<9.5,>=9.4
16
- Requires-Dist: aiodataloader==0.4.0
17
+ Requires-Dist: aiodataloader==0.4.3
17
18
  Requires-Dist: ariadne-codegen==0.15.3
18
19
  Requires-Dist: asgi-correlation-id==4.2.0
19
20
  Requires-Dist: authlib==1.6.5
@@ -24,7 +25,7 @@ Requires-Dist: click==8.1.7
24
25
  Requires-Dist: deepdiff==8.6.1
25
26
  Requires-Dist: dulwich==0.22.7
26
27
  Requires-Dist: email-validator<2.2,>=2.1
27
- Requires-Dist: fast-depends==2.4.12
28
+ Requires-Dist: fast-depends==3.0.5
28
29
  Requires-Dist: fastapi-storages<0.4,>=0.3
29
30
  Requires-Dist: fastapi==0.121.1
30
31
  Requires-Dist: gitpython<4,>=3
@@ -33,22 +34,22 @@ Requires-Dist: gunicorn<24,>=23.0.0
33
34
  Requires-Dist: jinja2<4,>=3
34
35
  Requires-Dist: lunr<0.8,>=0.7.0.post1
35
36
  Requires-Dist: nats-py==2.7.2
36
- Requires-Dist: neo4j-rust-ext<5.29,>=5.28
37
- Requires-Dist: neo4j<5.29,>=5.28
37
+ Requires-Dist: neo4j-rust-ext==6.0.3.0
38
+ Requires-Dist: neo4j==6.0.3
38
39
  Requires-Dist: netaddr==1.3.0
39
40
  Requires-Dist: netutils==1.12.0
40
- Requires-Dist: numpy==1.26.2
41
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.28.1
42
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.28.1
43
- Requires-Dist: opentelemetry-instrumentation-aio-pika==0.49b1
44
- Requires-Dist: opentelemetry-instrumentation-fastapi==0.49b1
45
- Requires-Dist: prefect-redis==0.2.6
46
- Requires-Dist: prefect==3.5.0
47
- Requires-Dist: pyarrow<15,>=14
41
+ Requires-Dist: numpy>=1.26.2
42
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.39.0
43
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.39.0
44
+ Requires-Dist: opentelemetry-instrumentation-aio-pika==0.60b0
45
+ Requires-Dist: opentelemetry-instrumentation-fastapi==0.60b0
46
+ Requires-Dist: prefect-redis==0.2.8
47
+ Requires-Dist: prefect==3.6.7
48
+ Requires-Dist: pyarrow>=14
48
49
  Requires-Dist: pydantic-settings<2.9,>=2.8
49
- Requires-Dist: pydantic<2.11,>=2.10
50
+ Requires-Dist: pydantic<2.13,>=2.12
50
51
  Requires-Dist: pyjwt<2.9,>=2.8
51
- Requires-Dist: pytest<7.5,>=7.4
52
+ Requires-Dist: pytest<9.1,>=9.0
52
53
  Requires-Dist: python-multipart==0.0.18
53
54
  Requires-Dist: pyyaml<7,>=6
54
55
  Requires-Dist: redis[hiredis]==6.0.0