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
infrahub/git/tasks.py CHANGED
@@ -1,30 +1,22 @@
1
- from datetime import timedelta
2
-
3
1
  from infrahub_sdk import InfrahubClient
4
2
  from infrahub_sdk.protocols import CoreArtifact, CoreArtifactDefinition, CoreRepository
5
3
  from prefect import flow, task
6
- from prefect.automations import AutomationCore
7
4
  from prefect.cache_policies import NONE
8
- from prefect.client.orchestration import get_client
9
- from prefect.client.schemas.filters import DeploymentFilter, DeploymentFilterName
10
- from prefect.events.actions import RunDeployment
11
- from prefect.events.schemas.automations import EventTrigger, Posture
12
5
  from prefect.logging import get_run_logger
13
6
 
14
7
  from infrahub import lock
8
+ from infrahub.context import InfrahubContext
15
9
  from infrahub.core.constants import InfrahubKind, RepositoryInternalStatus
16
10
  from infrahub.core.registry import registry
17
11
  from infrahub.exceptions import RepositoryError
18
12
  from infrahub.message_bus import Meta, messages
19
- from infrahub.services import services
13
+ from infrahub.services import InfrahubServices
20
14
  from infrahub.worker import WORKER_IDENTITY
21
- from infrahub.workflows.catalogue import COMPUTED_ATTRIBUTE_SETUP_PYTHON
22
15
 
23
16
  from ..log import get_log_data
24
17
  from ..tasks.artifact import define_artifact
25
18
  from ..workflows.catalogue import REQUEST_ARTIFACT_DEFINITION_GENERATE, REQUEST_ARTIFACT_GENERATE
26
19
  from ..workflows.utils import add_branch_tag, add_tags
27
- from .constants import AUTOMATION_NAME
28
20
  from .models import (
29
21
  GitDiffNamesOnly,
30
22
  GitDiffNamesOnlyResponse,
@@ -43,8 +35,7 @@ from .repository import InfrahubReadOnlyRepository, InfrahubRepository, get_init
43
35
  name="git-repository-add-read-write",
44
36
  flow_run_name="Adding repository {model.repository_name} in branch {model.infrahub_branch_name}",
45
37
  )
46
- async def add_git_repository(model: GitRepositoryAdd) -> None:
47
- service = services.service
38
+ async def add_git_repository(model: GitRepositoryAdd, service: InfrahubServices) -> None:
48
39
  await add_tags(branches=[model.infrahub_branch_name], nodes=[model.repository_id])
49
40
 
50
41
  async with lock.registry.get(name=model.repository_name, namespace="repository"):
@@ -56,8 +47,9 @@ async def add_git_repository(model: GitRepositoryAdd) -> None:
56
47
  infrahub_branch_name=model.infrahub_branch_name,
57
48
  internal_status=model.internal_status,
58
49
  default_branch_name=model.default_branch_name,
50
+ service=service,
59
51
  )
60
- await repo.import_objects_from_files(
52
+ await repo.import_objects_from_files( # type: ignore[call-overload]
61
53
  infrahub_branch_name=model.infrahub_branch_name, git_branch_name=model.default_branch_name
62
54
  )
63
55
  if model.internal_status == RepositoryInternalStatus.ACTIVE.value:
@@ -73,15 +65,14 @@ async def add_git_repository(model: GitRepositoryAdd) -> None:
73
65
  infrahub_branch_name=model.infrahub_branch_name,
74
66
  infrahub_branch_id=model.infrahub_branch_id,
75
67
  )
76
- await service.send(message=notification)
68
+ await service.message_bus.send(message=notification)
77
69
 
78
70
 
79
71
  @flow(
80
72
  name="git-repository-add-read-only",
81
73
  flow_run_name="Adding read only repository {model.repository_name} in branch {model.infrahub_branch_name}",
82
74
  )
83
- async def add_git_repository_read_only(model: GitRepositoryAddReadOnly) -> None:
84
- service = services.service
75
+ async def add_git_repository_read_only(model: GitRepositoryAddReadOnly, service: InfrahubServices) -> None:
85
76
  await add_tags(branches=[model.infrahub_branch_name], nodes=[model.repository_id])
86
77
 
87
78
  async with lock.registry.get(name=model.repository_name, namespace="repository"):
@@ -92,8 +83,9 @@ async def add_git_repository_read_only(model: GitRepositoryAddReadOnly) -> None:
92
83
  client=service.client,
93
84
  ref=model.ref,
94
85
  infrahub_branch_name=model.infrahub_branch_name,
86
+ service=service,
95
87
  )
96
- await repo.import_objects_from_files(infrahub_branch_name=model.infrahub_branch_name)
88
+ await repo.import_objects_from_files(infrahub_branch_name=model.infrahub_branch_name) # type: ignore[call-overload]
97
89
  if model.internal_status == RepositoryInternalStatus.ACTIVE.value:
98
90
  await repo.sync_from_remote()
99
91
 
@@ -107,13 +99,12 @@ async def add_git_repository_read_only(model: GitRepositoryAddReadOnly) -> None:
107
99
  infrahub_branch_name=model.infrahub_branch_name,
108
100
  infrahub_branch_id=model.infrahub_branch_id,
109
101
  )
110
- await service.send(message=notification)
102
+ await service.message_bus.send(message=notification)
111
103
 
112
104
 
113
105
  @flow(name="git-repositories-create-branch", flow_run_name="Create branch '{branch}' in Git Repositories")
114
- async def create_branch(branch: str, branch_id: str) -> None:
106
+ async def create_branch(branch: str, branch_id: str, service: InfrahubServices) -> None:
115
107
  """Request to the creation of git branches in available repositories."""
116
- service = services.service
117
108
  await add_tags(branches=[branch])
118
109
  repositories: list[CoreRepository] = await service.client.filters(kind=CoreRepository)
119
110
  batch = await service.client.create_batch()
@@ -126,6 +117,7 @@ async def create_branch(branch: str, branch_id: str) -> None:
126
117
  repository_name=repository.name.value,
127
118
  repository_id=repository.id,
128
119
  repository_location=repository.location.value,
120
+ service=service,
129
121
  )
130
122
 
131
123
  async for _, _ in batch.execute():
@@ -133,9 +125,7 @@ async def create_branch(branch: str, branch_id: str) -> None:
133
125
 
134
126
 
135
127
  @flow(name="git_repositories_sync", flow_run_name="Sync Git Repositories")
136
- async def sync_remote_repositories() -> None:
137
- service = services.service
138
-
128
+ async def sync_remote_repositories(service: InfrahubServices) -> None:
139
129
  log = get_run_logger()
140
130
 
141
131
  branches = await service.client.branch.all()
@@ -178,7 +168,7 @@ async def sync_remote_repositories() -> None:
178
168
  internal_status=active_internal_status,
179
169
  default_branch_name=repository_data.repository.default_branch.value,
180
170
  )
181
- await repo.import_objects_from_files(
171
+ await repo.import_objects_from_files( # type: ignore[call-overload]
182
172
  git_branch_name=registry.default_branch, infrahub_branch_name=infrahub_branch
183
173
  )
184
174
  except RepositoryError as exc:
@@ -197,12 +187,12 @@ async def sync_remote_repositories() -> None:
197
187
  infrahub_branch_name=infrahub_branch,
198
188
  infrahub_branch_id=branches[infrahub_branch].id,
199
189
  )
200
- await service.send(message=message)
190
+ await service.message_bus.send(message=message)
201
191
  except RepositoryError as exc:
202
192
  log.info(exc.message)
203
193
 
204
194
 
205
- @task(
195
+ @task( # type: ignore[arg-type]
206
196
  name="git-branch-create",
207
197
  task_run_name="Create branch '{branch}' in repository {repository_name}",
208
198
  cache_policy=NONE,
@@ -214,11 +204,11 @@ async def git_branch_create(
214
204
  repository_id: str,
215
205
  repository_name: str,
216
206
  repository_location: str,
207
+ service: InfrahubServices,
217
208
  ) -> None:
218
- service = services.service
219
209
  log = get_run_logger()
220
210
  repo = await InfrahubRepository.init(
221
- id=repository_id, name=repository_name, location=repository_location, client=client
211
+ id=repository_id, name=repository_name, location=repository_location, client=client, service=service
222
212
  )
223
213
 
224
214
  async with lock.registry.get(name=repository_name, namespace="repository"):
@@ -234,13 +224,12 @@ async def git_branch_create(
234
224
  infrahub_branch_name=branch,
235
225
  infrahub_branch_id=branch_id,
236
226
  )
237
- await service.send(message=message)
227
+ await service.message_bus.send(message=message)
238
228
  log.debug("Sent message to all workers to fetch the latest version of the repository (RefreshGitFetch)")
239
229
 
240
230
 
241
231
  @flow(name="artifact-definition-generate", flow_run_name="Generate all artifacts")
242
- async def generate_artifact_definition(branch: str) -> None:
243
- service = services.service
232
+ async def generate_artifact_definition(branch: str, context: InfrahubContext, service: InfrahubServices) -> None:
244
233
  await add_branch_tag(branch_name=branch)
245
234
 
246
235
  artifact_definitions = await service.client.all(kind=CoreArtifactDefinition, branch=branch, include=["id"])
@@ -252,14 +241,12 @@ async def generate_artifact_definition(branch: str) -> None:
252
241
  artifact_definition_name=artifact_definition.name.value,
253
242
  )
254
243
  await service.workflow.submit_workflow(
255
- workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model}
244
+ workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE, context=context, parameters={"model": model}
256
245
  )
257
246
 
258
247
 
259
248
  @flow(name="artifact-generate", flow_run_name="Generate artifact {model.artifact_name}")
260
- async def generate_artifact(model: RequestArtifactGenerate) -> None:
261
- service = services.service
262
-
249
+ async def generate_artifact(model: RequestArtifactGenerate, service: InfrahubServices) -> None:
263
250
  await add_tags(branches=[model.branch_name], nodes=[model.target_id])
264
251
  log = get_run_logger()
265
252
  repo = await get_initialized_repo(
@@ -270,14 +257,14 @@ async def generate_artifact(model: RequestArtifactGenerate) -> None:
270
257
  commit=model.commit,
271
258
  )
272
259
 
273
- artifact = await define_artifact(message=model, service=service)
260
+ artifact = await define_artifact(model=model, service=service)
274
261
 
275
262
  try:
276
263
  result = await repo.render_artifact(artifact=artifact, message=model)
277
264
  log.debug(
278
265
  f"Generated artifact | changed: {result.changed} | {result.checksum} | {result.storage_id}",
279
266
  )
280
- except Exception: # pylint: disable=broad-except
267
+ except Exception:
281
268
  log.exception("Failed to generate artifact")
282
269
  artifact.status.value = "Error"
283
270
  await artifact.save()
@@ -288,9 +275,10 @@ async def generate_artifact(model: RequestArtifactGenerate) -> None:
288
275
  name="request_artifact_definitions_generate",
289
276
  flow_run_name="Trigger Generation of Artifacts for {model.artifact_definition_name}",
290
277
  )
291
- async def generate_request_artifact_definition(model: RequestArtifactDefinitionGenerate) -> None:
292
- service = services.service
293
- await add_tags(branches=[model.branch], nodes=[model.artifact_definition_id])
278
+ async def generate_request_artifact_definition(
279
+ model: RequestArtifactDefinitionGenerate, context: InfrahubContext, service: InfrahubServices
280
+ ) -> None:
281
+ await add_tags(branches=[model.branch])
294
282
 
295
283
  artifact_definition = await service.client.get(
296
284
  kind=CoreArtifactDefinition, id=model.artifact_definition_id, branch=model.branch
@@ -359,14 +347,12 @@ async def generate_request_artifact_definition(model: RequestArtifactDefinitionG
359
347
  )
360
348
 
361
349
  await service.workflow.submit_workflow(
362
- workflow=REQUEST_ARTIFACT_GENERATE, parameters={"model": request_artifact_generate_model}
350
+ workflow=REQUEST_ARTIFACT_GENERATE, context=context, parameters={"model": request_artifact_generate_model}
363
351
  )
364
352
 
365
353
 
366
354
  @flow(name="git-repository-pull-read-only", flow_run_name="Pull latest commit on {model.repository_name}")
367
- async def pull_read_only(model: GitRepositoryPullReadOnly) -> None:
368
- service = services.service
369
-
355
+ async def pull_read_only(model: GitRepositoryPullReadOnly, service: InfrahubServices) -> None:
370
356
  await add_tags(branches=[model.infrahub_branch_name], nodes=[model.repository_id])
371
357
  log = get_run_logger()
372
358
 
@@ -383,6 +369,7 @@ async def pull_read_only(model: GitRepositoryPullReadOnly) -> None:
383
369
  client=service.client,
384
370
  ref=model.ref,
385
371
  infrahub_branch_name=model.infrahub_branch_name,
372
+ service=service,
386
373
  )
387
374
  except RepositoryError:
388
375
  init_failed = True
@@ -395,9 +382,10 @@ async def pull_read_only(model: GitRepositoryPullReadOnly) -> None:
395
382
  client=service.client,
396
383
  ref=model.ref,
397
384
  infrahub_branch_name=model.infrahub_branch_name,
385
+ service=service,
398
386
  )
399
387
 
400
- await repo.import_objects_from_files(infrahub_branch_name=model.infrahub_branch_name, commit=model.commit)
388
+ await repo.import_objects_from_files(infrahub_branch_name=model.infrahub_branch_name, commit=model.commit) # type: ignore[call-overload]
401
389
  await repo.sync_from_remote(commit=model.commit)
402
390
 
403
391
  # Tell workers to fetch to stay in sync
@@ -410,16 +398,14 @@ async def pull_read_only(model: GitRepositoryPullReadOnly) -> None:
410
398
  infrahub_branch_name=model.infrahub_branch_name,
411
399
  infrahub_branch_id=model.infrahub_branch_id,
412
400
  )
413
- await service.send(message=message)
401
+ await service.message_bus.send(message=message)
414
402
 
415
403
 
416
404
  @flow(
417
405
  name="git-repository-merge",
418
406
  flow_run_name="Merge {model.source_branch} > {model.destination_branch} in git repository",
419
407
  )
420
- async def merge_git_repository(model: GitRepositoryMerge) -> None:
421
- service = services.service
422
-
408
+ async def merge_git_repository(model: GitRepositoryMerge, service: InfrahubServices) -> None:
423
409
  await add_tags(branches=[model.source_branch, model.destination_branch], nodes=[model.repository_id])
424
410
 
425
411
  repo = await InfrahubRepository.init(
@@ -427,6 +413,7 @@ async def merge_git_repository(model: GitRepositoryMerge) -> None:
427
413
  name=model.repository_name,
428
414
  client=service.client,
429
415
  default_branch_name=model.default_branch,
416
+ service=service,
430
417
  )
431
418
 
432
419
  if model.internal_status == RepositoryInternalStatus.STAGING.value:
@@ -455,71 +442,20 @@ async def merge_git_repository(model: GitRepositoryMerge) -> None:
455
442
  infrahub_branch_name=model.destination_branch,
456
443
  infrahub_branch_id=model.destination_branch_id,
457
444
  )
458
- await service.send(message=message)
459
-
460
-
461
- @flow(name="git-commit-automation-setup", flow_run_name="Setup git commit updated event in task-manager")
462
- async def setup_commit_automation() -> None:
463
- log = get_run_logger()
464
-
465
- async with get_client(sync_client=False) as client:
466
- deployments = {
467
- item.name: item
468
- for item in await client.read_deployments(
469
- deployment_filter=DeploymentFilter(
470
- name=DeploymentFilterName(any_=[COMPUTED_ATTRIBUTE_SETUP_PYTHON.name])
471
- )
472
- )
473
- }
474
- if COMPUTED_ATTRIBUTE_SETUP_PYTHON.name not in deployments:
475
- raise ValueError("Unable to find the deployment for COMPUTED_ATTRIBUTE_SETUP_PYTHON")
476
-
477
- deployment_id_computed_attribute_setup_python = deployments[COMPUTED_ATTRIBUTE_SETUP_PYTHON.name].id
478
-
479
- schema_update_automation = await client.find_automation(id_or_name=AUTOMATION_NAME)
480
-
481
- automation = AutomationCore(
482
- name=AUTOMATION_NAME,
483
- description="Trigger actions on schema update event",
484
- enabled=True,
485
- trigger=EventTrigger(
486
- posture=Posture.Reactive,
487
- expect={"infrahub.repository.update_commit"},
488
- within=timedelta(0),
489
- threshold=1,
490
- ),
491
- actions=[
492
- RunDeployment(
493
- source="selected",
494
- deployment_id=deployment_id_computed_attribute_setup_python,
495
- parameters={
496
- "branch_name": "{{ event.resource['infrahub.branch.name'] }}",
497
- "commit": "{{ event.payload['commit'] }}",
498
- },
499
- job_variables={},
500
- ),
501
- ],
502
- )
503
-
504
- if schema_update_automation:
505
- await client.update_automation(automation_id=schema_update_automation.id, automation=automation)
506
- log.info(f"{AUTOMATION_NAME} Updated")
507
- else:
508
- await client.create_automation(automation=automation)
509
- log.info(f"{AUTOMATION_NAME} Created")
445
+ await service.message_bus.send(message=message)
510
446
 
511
447
 
512
448
  @flow(name="git-repository-import-object", flow_run_name="Import objects from git repository")
513
- async def import_objects_from_git_repository(model: GitRepositoryImportObjects) -> None:
449
+ async def import_objects_from_git_repository(model: GitRepositoryImportObjects, service: InfrahubServices) -> None:
514
450
  await add_branch_tag(model.infrahub_branch_name)
515
451
  repo = await get_initialized_repo(
516
452
  repository_id=model.repository_id,
517
453
  name=model.repository_name,
518
- service=services.service,
454
+ service=service,
519
455
  repository_kind=model.repository_kind,
520
456
  commit=model.commit,
521
457
  )
522
- await repo.import_objects_from_files(infrahub_branch_name=model.infrahub_branch_name, commit=model.commit)
458
+ await repo.import_objects_from_files(infrahub_branch_name=model.infrahub_branch_name, commit=model.commit) # type: ignore[call-overload]
523
459
 
524
460
 
525
461
  @flow(
@@ -527,9 +463,9 @@ async def import_objects_from_git_repository(model: GitRepositoryImportObjects)
527
463
  flow_run_name="Collecting modifications between commits {model.first_commit} and {model.second_commit}",
528
464
  persist_result=True,
529
465
  )
530
- async def git_repository_diff_names_only(model: GitDiffNamesOnly) -> GitDiffNamesOnlyResponse:
531
- service = services.service
532
-
466
+ async def git_repository_diff_names_only(
467
+ model: GitDiffNamesOnly, service: InfrahubServices
468
+ ) -> GitDiffNamesOnlyResponse:
533
469
  repo = await get_initialized_repo(
534
470
  repository_id=model.repository_id,
535
471
  name=model.repository_name,
@@ -67,10 +67,9 @@ def get(
67
67
  print(f"password={repo.credential.peer.password.value}")
68
68
 
69
69
 
70
- # pylint: disable=unused-argument
71
70
  @app.command()
72
71
  def store(
73
- input_str: str = typer.Argument(None),
74
- config_file: str = typer.Argument("infrahub.toml", envvar="INFRAHUB_CONFIG"),
72
+ input_str: str = typer.Argument(None), # noqa: ARG001
73
+ config_file: str = typer.Argument("infrahub.toml", envvar="INFRAHUB_CONFIG"), # noqa: ARG001
75
74
  ) -> None:
76
75
  raise typer.Exit()