infrahub-server 1.1.6__py3-none-any.whl → 1.2.0rc0__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 (346) hide show
  1. infrahub/api/artifact.py +16 -4
  2. infrahub/api/dependencies.py +8 -0
  3. infrahub/api/oauth2.py +0 -1
  4. infrahub/api/oidc.py +0 -1
  5. infrahub/api/query.py +18 -7
  6. infrahub/api/schema.py +32 -6
  7. infrahub/api/transformation.py +12 -5
  8. infrahub/{message_bus/messages/check_artifact_create.py → artifacts/models.py} +2 -4
  9. infrahub/{message_bus/operations/check/artifact.py → artifacts/tasks.py} +26 -25
  10. infrahub/cli/__init__.py +0 -2
  11. infrahub/cli/db.py +6 -7
  12. infrahub/cli/events.py +8 -3
  13. infrahub/cli/git_agent.py +9 -7
  14. infrahub/cli/tasks.py +4 -6
  15. infrahub/computed_attribute/tasks.py +63 -17
  16. infrahub/computed_attribute/triggers.py +90 -0
  17. infrahub/config.py +1 -1
  18. infrahub/context.py +39 -0
  19. infrahub/core/account.py +5 -8
  20. infrahub/core/attribute.py +53 -21
  21. infrahub/core/branch/models.py +4 -4
  22. infrahub/core/branch/tasks.py +89 -130
  23. infrahub/core/changelog/__init__.py +0 -0
  24. infrahub/core/changelog/diff.py +232 -0
  25. infrahub/core/changelog/models.py +488 -0
  26. infrahub/core/constants/__init__.py +19 -2
  27. infrahub/core/constants/infrahubkind.py +1 -0
  28. infrahub/core/diff/combiner.py +12 -8
  29. infrahub/core/diff/coordinator.py +49 -70
  30. infrahub/core/diff/data_check_synchronizer.py +86 -7
  31. infrahub/core/diff/enricher/aggregated.py +3 -3
  32. infrahub/core/diff/enricher/cardinality_one.py +2 -7
  33. infrahub/core/diff/enricher/hierarchy.py +5 -3
  34. infrahub/core/diff/enricher/labels.py +14 -4
  35. infrahub/core/diff/enricher/path_identifier.py +3 -9
  36. infrahub/core/diff/enricher/summary_counts.py +3 -1
  37. infrahub/core/diff/merger/merger.py +8 -4
  38. infrahub/core/diff/model/path.py +47 -29
  39. infrahub/core/diff/query/all_conflicts.py +6 -3
  40. infrahub/core/diff/query/artifact.py +1 -1
  41. infrahub/core/diff/query/delete_query.py +1 -1
  42. infrahub/core/diff/query/diff_get.py +3 -2
  43. infrahub/core/diff/query/diff_summary.py +1 -1
  44. infrahub/core/diff/query/field_specifiers.py +3 -1
  45. infrahub/core/diff/query/field_summary.py +3 -2
  46. infrahub/core/diff/query/filters.py +12 -1
  47. infrahub/core/diff/query/get_conflict_query.py +1 -1
  48. infrahub/core/diff/query/has_conflicts_query.py +6 -3
  49. infrahub/core/diff/query/merge.py +3 -3
  50. infrahub/core/diff/query/{drop_tracking_id.py → merge_tracking_id.py} +4 -4
  51. infrahub/core/diff/query/roots_metadata.py +9 -2
  52. infrahub/core/diff/query/save.py +151 -66
  53. infrahub/core/diff/query/summary_counts_enricher.py +220 -0
  54. infrahub/core/diff/query/time_range_query.py +3 -2
  55. infrahub/core/diff/query/update_conflict_query.py +1 -1
  56. infrahub/core/diff/query_parser.py +49 -24
  57. infrahub/core/diff/repository/deserializer.py +24 -25
  58. infrahub/core/diff/repository/repository.py +76 -20
  59. infrahub/core/diff/tasks.py +9 -8
  60. infrahub/core/enums.py +1 -1
  61. infrahub/core/integrity/object_conflict/conflict_recorder.py +1 -1
  62. infrahub/core/ipam/reconciler.py +1 -1
  63. infrahub/core/ipam/tasks.py +2 -3
  64. infrahub/core/manager.py +18 -13
  65. infrahub/core/merge.py +5 -2
  66. infrahub/core/migrations/graph/m001_add_version_to_graph.py +1 -1
  67. infrahub/core/migrations/graph/m002_attribute_is_default.py +2 -2
  68. infrahub/core/migrations/graph/m003_relationship_parent_optional.py +2 -2
  69. infrahub/core/migrations/graph/m004_add_attr_documentation.py +1 -1
  70. infrahub/core/migrations/graph/m005_add_rel_read_only.py +1 -1
  71. infrahub/core/migrations/graph/m006_add_rel_on_delete.py +1 -1
  72. infrahub/core/migrations/graph/m007_add_rel_allow_override.py +1 -1
  73. infrahub/core/migrations/graph/m008_add_human_friendly_id.py +1 -1
  74. infrahub/core/migrations/graph/m009_add_generate_profile_attr.py +1 -1
  75. infrahub/core/migrations/graph/m010_add_generate_profile_attr_generic.py +1 -1
  76. infrahub/core/migrations/graph/m011_remove_profile_relationship_schema.py +2 -2
  77. infrahub/core/migrations/graph/m012_convert_account_generic.py +12 -23
  78. infrahub/core/migrations/graph/m013_convert_git_password_credential.py +7 -11
  79. infrahub/core/migrations/graph/m014_remove_index_attr_value.py +2 -2
  80. infrahub/core/migrations/graph/m015_diff_format_update.py +1 -1
  81. infrahub/core/migrations/graph/m016_diff_delete_bug_fix.py +1 -1
  82. infrahub/core/migrations/graph/m017_add_core_profile.py +1 -1
  83. infrahub/core/migrations/graph/m018_uniqueness_nulls.py +2 -2
  84. infrahub/core/migrations/query/attribute_add.py +1 -1
  85. infrahub/core/migrations/query/attribute_rename.py +1 -1
  86. infrahub/core/migrations/query/delete_element_in_schema.py +1 -1
  87. infrahub/core/migrations/query/node_duplicate.py +1 -1
  88. infrahub/core/migrations/query/relationship_duplicate.py +1 -1
  89. infrahub/core/migrations/query/schema_attribute_update.py +1 -1
  90. infrahub/core/migrations/schema/node_attribute_remove.py +1 -1
  91. infrahub/core/migrations/schema/node_remove.py +1 -1
  92. infrahub/core/migrations/schema/tasks.py +5 -5
  93. infrahub/core/migrations/shared.py +4 -4
  94. infrahub/core/models.py +7 -8
  95. infrahub/core/node/__init__.py +161 -40
  96. infrahub/core/node/base.py +1 -1
  97. infrahub/core/node/constraints/grouped_uniqueness.py +9 -2
  98. infrahub/core/node/delete_validator.py +4 -4
  99. infrahub/core/node/ipam.py +13 -8
  100. infrahub/core/node/permissions.py +4 -0
  101. infrahub/core/node/resource_manager/ip_prefix_pool.py +8 -5
  102. infrahub/core/node/standard.py +3 -5
  103. infrahub/core/property.py +1 -1
  104. infrahub/core/protocols.py +4 -0
  105. infrahub/core/protocols_base.py +4 -2
  106. infrahub/core/query/__init__.py +2 -5
  107. infrahub/core/query/attribute.py +9 -9
  108. infrahub/core/query/branch.py +5 -5
  109. infrahub/core/query/delete.py +1 -1
  110. infrahub/core/query/diff.py +45 -7
  111. infrahub/core/query/ipam.py +4 -4
  112. infrahub/core/query/node.py +19 -14
  113. infrahub/core/query/relationship.py +10 -11
  114. infrahub/core/query/resource_manager.py +13 -11
  115. infrahub/core/query/standard_node.py +6 -6
  116. infrahub/core/query/task.py +3 -3
  117. infrahub/core/query/task_log.py +1 -1
  118. infrahub/core/query/utils.py +5 -5
  119. infrahub/core/registry.py +0 -2
  120. infrahub/core/relationship/constraints/count.py +1 -1
  121. infrahub/core/relationship/constraints/peer_kind.py +1 -1
  122. infrahub/core/relationship/model.py +66 -26
  123. infrahub/core/schema/__init__.py +6 -4
  124. infrahub/core/schema/basenode_schema.py +1 -3
  125. infrahub/core/schema/definitions/core.py +14 -2
  126. infrahub/core/schema/definitions/internal.py +16 -0
  127. infrahub/core/schema/generated/genericnode_schema.py +5 -0
  128. infrahub/core/schema/generated/node_schema.py +5 -0
  129. infrahub/core/schema/generic_schema.py +5 -1
  130. infrahub/core/schema/manager.py +45 -42
  131. infrahub/core/schema/node_schema.py +4 -0
  132. infrahub/core/schema/profile_schema.py +4 -0
  133. infrahub/core/schema/relationship_schema.py +2 -2
  134. infrahub/core/schema/schema_branch.py +248 -14
  135. infrahub/core/schema/template_schema.py +36 -0
  136. infrahub/core/task/user_task.py +7 -5
  137. infrahub/core/timestamp.py +1 -1
  138. infrahub/core/utils.py +3 -2
  139. infrahub/core/validators/attribute/choices.py +1 -1
  140. infrahub/core/validators/attribute/enum.py +1 -1
  141. infrahub/core/validators/attribute/kind.py +1 -1
  142. infrahub/core/validators/attribute/length.py +1 -1
  143. infrahub/core/validators/attribute/optional.py +1 -1
  144. infrahub/core/validators/attribute/regex.py +1 -1
  145. infrahub/core/validators/attribute/unique.py +1 -1
  146. infrahub/core/validators/checks_runner.py +37 -0
  147. infrahub/core/validators/node/generate_profile.py +1 -1
  148. infrahub/core/validators/node/hierarchy.py +1 -1
  149. infrahub/core/validators/query.py +1 -1
  150. infrahub/core/validators/relationship/count.py +1 -1
  151. infrahub/core/validators/relationship/optional.py +1 -1
  152. infrahub/core/validators/relationship/peer.py +1 -1
  153. infrahub/core/validators/tasks.py +8 -6
  154. infrahub/core/validators/uniqueness/query.py +20 -17
  155. infrahub/database/__init__.py +15 -2
  156. infrahub/database/memgraph.py +1 -1
  157. infrahub/dependencies/builder/constraint/grouped/node_runner.py +0 -2
  158. infrahub/dependencies/builder/diff/combiner.py +1 -1
  159. infrahub/dependencies/builder/diff/conflicts_enricher.py +1 -1
  160. infrahub/dependencies/builder/diff/coordinator.py +0 -2
  161. infrahub/dependencies/builder/diff/deserializer.py +1 -1
  162. infrahub/dependencies/builder/diff/enricher/summary_counts.py +1 -1
  163. infrahub/events/branch_action.py +47 -21
  164. infrahub/events/group_action.py +73 -0
  165. infrahub/events/models.py +159 -51
  166. infrahub/events/node_action.py +74 -8
  167. infrahub/events/repository_action.py +8 -8
  168. infrahub/events/schema_action.py +21 -8
  169. infrahub/generators/tasks.py +12 -13
  170. infrahub/git/base.py +3 -5
  171. infrahub/git/constants.py +0 -1
  172. infrahub/git/integrator.py +36 -35
  173. infrahub/git/repository.py +7 -8
  174. infrahub/git/tasks.py +43 -107
  175. infrahub/git_credential/helper.py +2 -3
  176. infrahub/graphql/analyzer.py +572 -11
  177. infrahub/graphql/app.py +34 -26
  178. infrahub/graphql/auth/query_permission_checker/anonymous_checker.py +5 -5
  179. infrahub/graphql/auth/query_permission_checker/default_branch_checker.py +4 -4
  180. infrahub/graphql/auth/query_permission_checker/merge_operation_checker.py +4 -4
  181. infrahub/graphql/auth/query_permission_checker/object_permission_checker.py +28 -35
  182. infrahub/graphql/auth/query_permission_checker/super_admin_checker.py +5 -5
  183. infrahub/graphql/enums.py +1 -1
  184. infrahub/graphql/initialization.py +5 -1
  185. infrahub/graphql/loaders/node.py +2 -2
  186. infrahub/graphql/manager.py +59 -54
  187. infrahub/graphql/mutations/account.py +20 -13
  188. infrahub/graphql/mutations/artifact_definition.py +16 -12
  189. infrahub/graphql/mutations/branch.py +61 -40
  190. infrahub/graphql/mutations/computed_attribute.py +19 -13
  191. infrahub/graphql/mutations/diff.py +37 -9
  192. infrahub/graphql/mutations/diff_conflict.py +9 -8
  193. infrahub/graphql/mutations/graphql_query.py +19 -11
  194. infrahub/graphql/mutations/ipam.py +21 -19
  195. infrahub/graphql/mutations/main.py +197 -44
  196. infrahub/graphql/mutations/menu.py +8 -8
  197. infrahub/graphql/mutations/proposed_change.py +36 -28
  198. infrahub/graphql/mutations/relationship.py +302 -105
  199. infrahub/graphql/mutations/repository.py +41 -35
  200. infrahub/graphql/mutations/resource_manager.py +26 -26
  201. infrahub/graphql/mutations/schema.py +51 -33
  202. infrahub/graphql/mutations/tasks.py +16 -10
  203. infrahub/graphql/parser.py +1 -1
  204. infrahub/graphql/permissions.py +6 -4
  205. infrahub/graphql/queries/account.py +22 -18
  206. infrahub/graphql/queries/branch.py +6 -4
  207. infrahub/graphql/queries/diff/tree.py +48 -42
  208. infrahub/graphql/queries/event.py +112 -0
  209. infrahub/graphql/queries/internal.py +3 -3
  210. infrahub/graphql/queries/ipam.py +23 -18
  211. infrahub/graphql/queries/relationship.py +11 -10
  212. infrahub/graphql/queries/resource_manager.py +43 -27
  213. infrahub/graphql/queries/search.py +9 -8
  214. infrahub/graphql/queries/status.py +12 -9
  215. infrahub/graphql/queries/task.py +11 -9
  216. infrahub/graphql/resolvers/resolver.py +69 -43
  217. infrahub/graphql/resolvers/single_relationship.py +16 -10
  218. infrahub/graphql/schema.py +2 -0
  219. infrahub/graphql/subscription/__init__.py +1 -1
  220. infrahub/graphql/subscription/events.py +1 -1
  221. infrahub/graphql/subscription/graphql_query.py +8 -8
  222. infrahub/graphql/types/branch.py +2 -2
  223. infrahub/graphql/types/common.py +6 -1
  224. infrahub/graphql/types/enums.py +2 -0
  225. infrahub/graphql/types/event.py +100 -0
  226. infrahub/graphql/types/interface.py +2 -2
  227. infrahub/graphql/types/node.py +3 -3
  228. infrahub/graphql/types/permission.py +2 -2
  229. infrahub/graphql/types/relationship.py +3 -3
  230. infrahub/graphql/types/standard_node.py +9 -11
  231. infrahub/graphql/utils.py +28 -182
  232. infrahub/groups/tasks.py +2 -3
  233. infrahub/lock.py +1 -1
  234. infrahub/menu/constants.py +1 -0
  235. infrahub/menu/generator.py +14 -3
  236. infrahub/menu/menu.py +116 -127
  237. infrahub/menu/models.py +4 -4
  238. infrahub/message_bus/messages/__init__.py +0 -4
  239. infrahub/message_bus/messages/event_branch_merge.py +3 -0
  240. infrahub/message_bus/messages/request_proposedchange_pipeline.py +2 -0
  241. infrahub/message_bus/operations/__init__.py +3 -5
  242. infrahub/message_bus/operations/check/__init__.py +2 -2
  243. infrahub/message_bus/operations/check/generator.py +1 -3
  244. infrahub/message_bus/operations/check/repository.py +1 -1
  245. infrahub/message_bus/operations/event/branch.py +7 -3
  246. infrahub/message_bus/operations/event/schema.py +1 -1
  247. infrahub/message_bus/operations/finalize/validator.py +1 -1
  248. infrahub/message_bus/operations/git/file.py +2 -2
  249. infrahub/message_bus/operations/git/repository.py +1 -1
  250. infrahub/message_bus/operations/requests/__init__.py +0 -2
  251. infrahub/message_bus/operations/requests/generator_definition.py +1 -1
  252. infrahub/message_bus/operations/requests/proposed_change.py +26 -11
  253. infrahub/message_bus/operations/requests/repository.py +2 -2
  254. infrahub/message_bus/operations/send/echo.py +1 -1
  255. infrahub/message_bus/types.py +1 -1
  256. infrahub/permissions/__init__.py +2 -1
  257. infrahub/permissions/types.py +26 -0
  258. infrahub/pools/prefix.py +29 -165
  259. infrahub/prefect_server/__init__.py +0 -0
  260. infrahub/prefect_server/app.py +18 -0
  261. infrahub/prefect_server/database.py +20 -0
  262. infrahub/prefect_server/events.py +28 -0
  263. infrahub/prefect_server/models.py +46 -0
  264. infrahub/proposed_change/models.py +15 -1
  265. infrahub/proposed_change/tasks.py +173 -35
  266. infrahub/pytest_plugin.py +4 -4
  267. infrahub/server.py +12 -11
  268. infrahub/services/__init__.py +147 -62
  269. infrahub/services/adapters/cache/__init__.py +7 -5
  270. infrahub/services/adapters/cache/nats.py +40 -22
  271. infrahub/services/adapters/cache/redis.py +0 -4
  272. infrahub/services/adapters/event/__init__.py +10 -18
  273. infrahub/services/adapters/http/__init__.py +0 -5
  274. infrahub/services/adapters/http/httpx.py +22 -15
  275. infrahub/services/adapters/message_bus/__init__.py +23 -6
  276. infrahub/services/adapters/message_bus/local.py +8 -6
  277. infrahub/services/adapters/message_bus/nats.py +12 -6
  278. infrahub/services/adapters/message_bus/rabbitmq.py +22 -9
  279. infrahub/services/adapters/workflow/__init__.py +11 -8
  280. infrahub/services/adapters/workflow/local.py +28 -7
  281. infrahub/services/adapters/workflow/worker.py +23 -7
  282. infrahub/services/component.py +38 -35
  283. infrahub/services/scheduler.py +32 -29
  284. infrahub/storage.py +2 -4
  285. infrahub/task_manager/constants.py +1 -1
  286. infrahub/task_manager/event.py +182 -0
  287. infrahub/task_manager/models.py +125 -1
  288. infrahub/task_manager/task.py +1 -1
  289. infrahub/tasks/artifact.py +14 -16
  290. infrahub/tasks/registry.py +1 -1
  291. infrahub/tasks/telemetry.py +13 -14
  292. infrahub/transformations/tasks.py +3 -5
  293. infrahub/trigger/__init__.py +0 -0
  294. infrahub/trigger/catalogue.py +15 -0
  295. infrahub/trigger/constants.py +9 -0
  296. infrahub/trigger/models.py +69 -0
  297. infrahub/trigger/tasks.py +85 -0
  298. infrahub/types.py +1 -1
  299. infrahub/utils.py +1 -1
  300. infrahub/webhook/constants.py +0 -2
  301. infrahub/webhook/models.py +8 -2
  302. infrahub/webhook/tasks.py +20 -73
  303. infrahub/webhook/triggers.py +20 -0
  304. infrahub/workers/infrahub_async.py +36 -25
  305. infrahub/workers/utils.py +63 -0
  306. infrahub/workflows/catalogue.py +13 -37
  307. infrahub/workflows/initialization.py +6 -8
  308. infrahub/workflows/models.py +3 -5
  309. infrahub/workflows/utils.py +1 -1
  310. infrahub_sdk/ctl/check.py +3 -3
  311. infrahub_sdk/ctl/cli_commands.py +11 -10
  312. infrahub_sdk/ctl/exceptions.py +0 -6
  313. infrahub_sdk/ctl/exporter.py +1 -1
  314. infrahub_sdk/ctl/generator.py +5 -5
  315. infrahub_sdk/ctl/importer.py +3 -2
  316. infrahub_sdk/ctl/menu.py +1 -1
  317. infrahub_sdk/ctl/object.py +1 -1
  318. infrahub_sdk/ctl/repository.py +23 -15
  319. infrahub_sdk/ctl/schema.py +2 -2
  320. infrahub_sdk/ctl/utils.py +4 -3
  321. infrahub_sdk/ctl/validate.py +2 -1
  322. infrahub_sdk/exceptions.py +6 -0
  323. infrahub_sdk/generator.py +3 -0
  324. infrahub_sdk/node.py +2 -2
  325. infrahub_sdk/schema/__init__.py +14 -2
  326. infrahub_sdk/schema/main.py +7 -0
  327. infrahub_sdk/utils.py +11 -1
  328. infrahub_sdk/yaml.py +2 -3
  329. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/METADATA +46 -12
  330. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/RECORD +338 -321
  331. infrahub_testcontainers/container.py +14 -6
  332. infrahub_testcontainers/docker-compose.test.yml +24 -5
  333. infrahub_testcontainers/haproxy.cfg +43 -0
  334. infrahub_testcontainers/helpers.py +85 -1
  335. infrahub/core/branch/constants.py +0 -2
  336. infrahub/graphql/query.py +0 -52
  337. infrahub/message_bus/messages/request_artifactdefinition_check.py +0 -17
  338. infrahub/message_bus/operations/requests/artifact_definition.py +0 -148
  339. infrahub/schema/constants.py +0 -1
  340. infrahub/schema/tasks.py +0 -76
  341. infrahub/services/adapters/database/__init__.py +0 -9
  342. infrahub_sdk/ctl/_file.py +0 -13
  343. /infrahub/{schema → artifacts}/__init__.py +0 -0
  344. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/LICENSE.txt +0 -0
  345. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/WHEEL +0 -0
  346. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0rc0.dist-info}/entry_points.txt +0 -0
@@ -38,10 +38,12 @@ from pydantic import ValidationError as PydanticValidationError
38
38
  from typing_extensions import Self
39
39
 
40
40
  from infrahub.core.constants import ArtifactStatus, ContentType, InfrahubKind, RepositorySyncStatus
41
+ from infrahub.core.registry import registry
42
+ from infrahub.events.models import EventMeta
41
43
  from infrahub.events.repository_action import CommitUpdatedEvent
42
44
  from infrahub.exceptions import CheckError, RepositoryInvalidFileSystemError, TransformError
43
45
  from infrahub.git.base import InfrahubRepositoryBase, extract_repo_file_information
44
- from infrahub.services import InfrahubServices
46
+ from infrahub.log import get_logger
45
47
  from infrahub.workflows.utils import add_tags
46
48
 
47
49
  if TYPE_CHECKING:
@@ -52,10 +54,9 @@ if TYPE_CHECKING:
52
54
  from infrahub_sdk.schema.repository import InfrahubRepositoryArtifactDefinitionConfig
53
55
  from infrahub_sdk.transforms import InfrahubTransform
54
56
 
57
+ from infrahub.core.checks.models import CheckArtifactCreate
55
58
  from infrahub.git.models import RequestArtifactGenerate
56
- from infrahub.message_bus import messages
57
-
58
- # pylint: disable=too-many-lines
59
+ from infrahub.services import InfrahubServices
59
60
 
60
61
 
61
62
  class ArtifactGenerateResult(BaseModel):
@@ -120,7 +121,7 @@ class TransformPythonInformation(BaseModel):
120
121
  """Timeout for the function."""
121
122
 
122
123
 
123
- class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=too-many-public-methods
124
+ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase):
124
125
  """
125
126
  This class provides interfaces to read and process information from .infrahub.yml files and can perform
126
127
  actions for objects defined within those files.
@@ -130,20 +131,20 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
130
131
  """
131
132
 
132
133
  @classmethod
133
- async def init(cls, commit: str | None = None, service: InfrahubServices | None = None, **kwargs: Any) -> Self:
134
- service = service or InfrahubServices()
134
+ async def init(cls, service: InfrahubServices, commit: str | None = None, **kwargs: Any) -> Self:
135
135
  self = cls(service=service, **kwargs)
136
+ log = get_logger()
136
137
  try:
137
138
  self.validate_local_directories()
138
139
  except RepositoryInvalidFileSystemError:
139
140
  await self.ensure_location_is_defined()
140
141
  await self.create_locally(infrahub_branch_name=self.infrahub_branch_name, update_commit_value=False)
141
- service.log.info(f"Initialized the local directory for {self.name} because it was missing.")
142
+ log.info(f"Initialized the local directory for {self.name} because it was missing.")
142
143
 
143
144
  if commit:
144
145
  self.get_commit_worktree(commit=commit)
145
146
 
146
- service.log.debug(
147
+ log.debug(
147
148
  f"Initiated the object on an existing directory for {self.name}",
148
149
  )
149
150
  return self
@@ -181,7 +182,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
181
182
  branch_name=infrahub_branch_name, commit=commit, config_file=config_file
182
183
  )
183
184
 
184
- await self.import_all_python_files(
185
+ await self.import_all_python_files( # type: ignore[call-overload]
185
186
  branch_name=infrahub_branch_name, commit=commit, config_file=config_file
186
187
  )
187
188
  await self.import_jinja2_transforms(
@@ -191,7 +192,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
191
192
  branch_name=infrahub_branch_name, commit=commit, config_file=config_file
192
193
  )
193
194
 
194
- except Exception as exc: # pylint: disable=broad-exception-caught
195
+ except Exception as exc:
195
196
  sync_status = RepositorySyncStatus.ERROR_IMPORT
196
197
  error = exc
197
198
 
@@ -200,9 +201,13 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
200
201
  if error:
201
202
  raise error
202
203
 
204
+ infrahub_branch = registry.get_branch_from_registry(branch=infrahub_branch_name)
203
205
  await self.service.event.send(
204
206
  CommitUpdatedEvent(
205
- branch=infrahub_branch_name, commit=commit, repository_name=self.name, repository_id=str(self.id)
207
+ commit=commit,
208
+ repository_name=self.name,
209
+ repository_id=str(self.id),
210
+ meta=EventMeta.with_dummy_context(branch=infrahub_branch),
206
211
  )
207
212
  )
208
213
 
@@ -230,11 +235,11 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
230
235
  tracker="mutation-repository-update-admin-status",
231
236
  )
232
237
 
233
- @task(name="import-jinja2-tansforms", task_run_name="Import Jinja2 transform", cache_policy=NONE)
238
+ @task(name="import-jinja2-tansforms", task_run_name="Import Jinja2 transform", cache_policy=NONE) # type: ignore[arg-type]
234
239
  async def import_jinja2_transforms(
235
240
  self,
236
241
  branch_name: str,
237
- commit: str, # pylint: disable=unused-argument
242
+ commit: str, # noqa: ARG002
238
243
  config_file: InfrahubRepositoryConfig,
239
244
  ) -> None:
240
245
  log = get_run_logger()
@@ -312,7 +317,6 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
312
317
  async def compare_jinja2_transform(
313
318
  cls, existing_transform: CoreTransformJinja2, local_transform: InfrahubRepositoryJinja2
314
319
  ) -> bool:
315
- # pylint: disable=no-member
316
320
  if (
317
321
  existing_transform.description.value != local_transform.description
318
322
  or existing_transform.template_path.value != local_transform.template_path
@@ -325,7 +329,6 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
325
329
  async def update_jinja2_transform(
326
330
  self, existing_transform: CoreTransformJinja2, local_transform: InfrahubRepositoryJinja2
327
331
  ) -> None:
328
- # pylint: disable=no-member
329
332
  if existing_transform.description.value != local_transform.description:
330
333
  existing_transform.description.value = local_transform.description
331
334
 
@@ -337,11 +340,11 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
337
340
 
338
341
  await existing_transform.save()
339
342
 
340
- @task(name="import-artifact-definitions", task_run_name="Import Artifact Definitions", cache_policy=NONE)
343
+ @task(name="import-artifact-definitions", task_run_name="Import Artifact Definitions", cache_policy=NONE) # type: ignore[arg-type]
341
344
  async def import_artifact_definitions(
342
345
  self,
343
346
  branch_name: str,
344
- commit: str, # pylint: disable=unused-argument
347
+ commit: str, # noqa: ARG002
345
348
  config_file: InfrahubRepositoryConfig,
346
349
  ) -> None:
347
350
  log = get_run_logger()
@@ -438,7 +441,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
438
441
 
439
442
  await existing_artifact_definition.save()
440
443
 
441
- @task(name="repository-get-config", task_run_name="get repository config", cache_policy=NONE)
444
+ @task(name="repository-get-config", task_run_name="get repository config", cache_policy=NONE) # type: ignore[arg-type]
442
445
  async def get_repository_config(self, branch_name: str, commit: str) -> Optional[InfrahubRepositoryConfig]:
443
446
  branch_wt = self.get_worktree(identifier=commit or branch_name)
444
447
  log = get_run_logger()
@@ -467,9 +470,8 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
467
470
  log.error(f"Unable to load the configuration file {config_file_name}, the format is not valid : {exc}")
468
471
  return None
469
472
 
470
- @task(name="import-schema-files", task_run_name="Import schema files", cache_policy=NONE)
473
+ @task(name="import-schema-files", task_run_name="Import schema files", cache_policy=NONE) # type: ignore[arg-type]
471
474
  async def import_schema_files(self, branch_name: str, commit: str, config_file: InfrahubRepositoryConfig) -> None:
472
- # pylint: disable=too-many-branches
473
475
  log = get_run_logger()
474
476
  branch_wt = self.get_worktree(identifier=commit or branch_name)
475
477
 
@@ -540,7 +542,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
540
542
  for schema_file in schemas_data:
541
543
  log.info(f"schema '{schema_file.identifier}' loaded successfully!")
542
544
 
543
- @task(name="import-graphql-queries", task_run_name="Import GraphQL Queries", cache_policy=NONE)
545
+ @task(name="import-graphql-queries", task_run_name="Import GraphQL Queries", cache_policy=NONE) # type: ignore[arg-type]
544
546
  async def import_all_graphql_query(
545
547
  self, branch_name: str, commit: str, config_file: InfrahubRepositoryConfig
546
548
  ) -> None:
@@ -598,7 +600,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
598
600
  await obj.save()
599
601
  return obj
600
602
 
601
- @task(name="import-python-check-definitions", task_run_name="Import Python Check Definitions", cache_policy=NONE)
603
+ @task(name="import-python-check-definitions", task_run_name="Import Python Check Definitions", cache_policy=NONE) # type: ignore[arg-type]
602
604
  async def import_python_check_definitions(
603
605
  self, branch_name: str, commit: str, config_file: InfrahubRepositoryConfig
604
606
  ) -> None:
@@ -669,7 +671,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
669
671
  log.info(f"CheckDefinition '{check_name!r}' not found locally, deleting")
670
672
  await check_definition_in_graph[check_name].delete()
671
673
 
672
- @task(name="import-generator-definitions", task_run_name="Import Generator Definitions", cache_policy=NONE)
674
+ @task(name="import-generator-definitions", task_run_name="Import Generator Definitions", cache_policy=NONE) # type: ignore[arg-type]
673
675
  async def import_generator_definitions(
674
676
  self, branch_name: str, commit: str, config_file: InfrahubRepositoryConfig
675
677
  ) -> None:
@@ -748,7 +750,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
748
750
  if targets:
749
751
  generator.targets = targets[0].id
750
752
 
751
- if ( # pylint: disable=too-many-boolean-expressions
753
+ if (
752
754
  existing_generator.query.id != generator.query
753
755
  or existing_generator.file_path.value != str(generator.file_path)
754
756
  or existing_generator.class_name.value != generator.class_name
@@ -759,7 +761,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
759
761
  return True
760
762
  return False
761
763
 
762
- @task(name="import-python-transforms", task_run_name="Import Python Transforms", cache_policy=NONE)
764
+ @task(name="import-python-transforms", task_run_name="Import Python Transforms", cache_policy=NONE) # type: ignore[arg-type]
763
765
  async def import_python_transforms(
764
766
  self, branch_name: str, commit: str, config_file: InfrahubRepositoryConfig
765
767
  ) -> None:
@@ -830,7 +832,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
830
832
  log.info(f"TransformPython {transform_name!r} not found locally, deleting")
831
833
  await transform_definition_in_graph[transform_name].delete()
832
834
 
833
- @task(name="check-definition-get", task_run_name="Get Check Definition", cache_policy=NONE)
835
+ @task(name="check-definition-get", task_run_name="Get Check Definition", cache_policy=NONE) # type: ignore[arg-type]
834
836
  async def get_check_definition(
835
837
  self,
836
838
  branch_name: str,
@@ -863,14 +865,14 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
863
865
  )
864
866
  )
865
867
 
866
- except Exception as exc: # pylint: disable=broad-exception-caught
868
+ except Exception as exc:
867
869
  log.error(
868
870
  f"An error occurred while processing the CheckDefinition {check_class.__name__} from {file_path} : {exc} "
869
871
  )
870
872
  raise
871
873
  return checks
872
874
 
873
- @task(name="python-transform-get", task_run_name="Get Python Transform", cache_policy=NONE)
875
+ @task(name="python-transform-get", task_run_name="Get Python Transform", cache_policy=NONE) # type: ignore[arg-type]
874
876
  async def get_python_transforms(
875
877
  self, branch_name: str, module: types.ModuleType, file_path: str, transform: InfrahubPythonTransformConfig
876
878
  ) -> list[TransformPythonInformation]:
@@ -896,7 +898,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
896
898
  )
897
899
  )
898
900
 
899
- except Exception as exc: # pylint: disable=broad-exception-caught
901
+ except Exception as exc:
900
902
  log.error(
901
903
  f"An error occurred while processing the PythonTransform {transform.name} from {file_path} : {exc} "
902
904
  )
@@ -1003,7 +1005,6 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
1003
1005
  ) -> bool:
1004
1006
  """Compare an existing Python Check Object with a Check Class
1005
1007
  and identify if we need to update the object in the database."""
1006
- # pylint: disable=too-many-boolean-expressions
1007
1008
  if (
1008
1009
  existing_check.query.id != check.query
1009
1010
  or existing_check.file_path.value != check.file_path
@@ -1072,7 +1073,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
1072
1073
  await self.import_python_transforms(branch_name=branch_name, commit=commit, config_file=config_file)
1073
1074
  await self.import_generator_definitions(branch_name=branch_name, commit=commit, config_file=config_file)
1074
1075
 
1075
- @task(name="jinja2-template-render", task_run_name="Render Jinja2 template", cache_policy=NONE)
1076
+ @task(name="jinja2-template-render", task_run_name="Render Jinja2 template", cache_policy=NONE) # type: ignore[arg-type]
1076
1077
  async def render_jinja2_template(self, commit: str, location: str, data: dict) -> str:
1077
1078
  log = get_run_logger()
1078
1079
  commit_worktree = self.get_commit_worktree(commit=commit)
@@ -1088,7 +1089,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
1088
1089
  log.error(str(exc), exc_info=True)
1089
1090
  raise TransformError(repository_name=self.name, commit=commit, location=location, message=str(exc)) from exc
1090
1091
 
1091
- @task(name="python-check-execute", task_run_name="Execute Python Check", cache_policy=NONE)
1092
+ @task(name="python-check-execute", task_run_name="Execute Python Check", cache_policy=NONE) # type: ignore[arg-type]
1092
1093
  async def execute_python_check(
1093
1094
  self,
1094
1095
  branch_name: str,
@@ -1147,7 +1148,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
1147
1148
  repository_name=self.name, class_name=class_name, commit=commit, location=location, message=str(exc)
1148
1149
  ) from exc
1149
1150
 
1150
- @task(name="python-transform-execute", task_run_name="Execute Python Transform", cache_policy=NONE)
1151
+ @task(name="python-transform-execute", task_run_name="Execute Python Transform", cache_policy=NONE) # type: ignore[arg-type]
1151
1152
  async def execute_python_transform(
1152
1153
  self, branch_name: str, commit: str, location: str, client: InfrahubClient, data: Optional[dict] = None
1153
1154
  ) -> Any:
@@ -1265,7 +1266,7 @@ class InfrahubRepositoryIntegrator(InfrahubRepositoryBase): # pylint: disable=t
1265
1266
  return ArtifactGenerateResult(changed=True, checksum=checksum, storage_id=storage_id, artifact_id=artifact.id)
1266
1267
 
1267
1268
  async def render_artifact(
1268
- self, artifact: CoreArtifact, message: Union[messages.CheckArtifactCreate, RequestArtifactGenerate]
1269
+ self, artifact: CoreArtifact, message: Union[CheckArtifactCreate, RequestArtifactGenerate]
1269
1270
  ) -> ArtifactGenerateResult:
1270
1271
  response = await self.sdk.query_gql_query(
1271
1272
  name=message.query,
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Union
3
+ from typing import TYPE_CHECKING, Any, Union
4
4
 
5
5
  from git.exc import BadName, GitCommandError
6
6
  from infrahub_sdk.exceptions import GraphQLError
@@ -10,7 +10,9 @@ from infrahub.core.constants import InfrahubKind, RepositoryInternalStatus
10
10
  from infrahub.exceptions import RepositoryError
11
11
  from infrahub.git.integrator import InfrahubRepositoryIntegrator
12
12
  from infrahub.log import get_logger
13
- from infrahub.services import InfrahubServices
13
+
14
+ if TYPE_CHECKING:
15
+ from infrahub.services import InfrahubServices
14
16
 
15
17
  log = get_logger()
16
18
 
@@ -24,9 +26,8 @@ class InfrahubRepository(InfrahubRepositoryIntegrator):
24
26
 
25
27
  @classmethod
26
28
  async def new(
27
- cls, service: InfrahubServices | None = None, update_commit_value: bool = True, **kwargs: Any
29
+ cls, service: InfrahubServices, update_commit_value: bool = True, **kwargs: Any
28
30
  ) -> InfrahubRepository:
29
- service = service or InfrahubServices()
30
31
  self = cls(service=service, **kwargs)
31
32
  await self.create_locally(
32
33
  infrahub_branch_name=self.infrahub_branch_name, update_commit_value=update_commit_value
@@ -208,9 +209,7 @@ class InfrahubReadOnlyRepository(InfrahubRepositoryIntegrator):
208
209
  ref: str | None = Field(None, description="Ref to track on the external repository")
209
210
 
210
211
  @classmethod
211
- async def new(cls, service: InfrahubServices | None = None, **kwargs: Any) -> InfrahubReadOnlyRepository:
212
- service = service or InfrahubServices()
213
-
212
+ async def new(cls, service: InfrahubServices, **kwargs: Any) -> InfrahubReadOnlyRepository:
214
213
  if "ref" not in kwargs or "infrahub_branch_name" not in kwargs:
215
214
  raise ValueError("ref and infrahub_branch_name are mandatory to initialize a new Read-Only repository")
216
215
 
@@ -219,7 +218,7 @@ class InfrahubReadOnlyRepository(InfrahubRepositoryIntegrator):
219
218
  log.info("Created new repository locally.", repository=self.name)
220
219
  return self
221
220
 
222
- def get_commit_value(self, branch_name: str, remote: bool = False) -> str:
221
+ def get_commit_value(self, branch_name: str, remote: bool = False) -> str: # noqa: ARG002
223
222
  """Always get the latest commit for this repository's ref on the remote"""
224
223
  git_repo = self.get_git_repo_main()
225
224
  git_repo.remotes.origin.fetch()