infrahub-server 1.1.6__py3-none-any.whl → 1.2.0b1__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 (407) 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} +5 -3
  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/models.py +1 -1
  16. infrahub/computed_attribute/tasks.py +64 -17
  17. infrahub/computed_attribute/triggers.py +90 -0
  18. infrahub/config.py +1 -1
  19. infrahub/context.py +39 -0
  20. infrahub/core/account.py +5 -8
  21. infrahub/core/attribute.py +54 -22
  22. infrahub/core/branch/models.py +4 -4
  23. infrahub/core/branch/tasks.py +137 -129
  24. infrahub/core/changelog/__init__.py +0 -0
  25. infrahub/core/changelog/diff.py +283 -0
  26. infrahub/core/changelog/models.py +499 -0
  27. infrahub/core/constants/__init__.py +43 -2
  28. infrahub/core/constants/infrahubkind.py +1 -0
  29. infrahub/core/constants/schema.py +2 -0
  30. infrahub/core/diff/combiner.py +12 -8
  31. infrahub/core/diff/coordinator.py +49 -70
  32. infrahub/core/diff/data_check_synchronizer.py +86 -7
  33. infrahub/core/diff/enricher/aggregated.py +3 -3
  34. infrahub/core/diff/enricher/cardinality_one.py +7 -7
  35. infrahub/core/diff/enricher/hierarchy.py +22 -7
  36. infrahub/core/diff/enricher/labels.py +19 -4
  37. infrahub/core/diff/enricher/path_identifier.py +7 -9
  38. infrahub/core/diff/enricher/summary_counts.py +3 -1
  39. infrahub/core/diff/merger/merger.py +8 -4
  40. infrahub/core/diff/model/path.py +76 -35
  41. infrahub/core/diff/parent_node_adder.py +78 -0
  42. infrahub/core/diff/payload_builder.py +13 -2
  43. infrahub/core/diff/query/all_conflicts.py +6 -3
  44. infrahub/core/diff/query/artifact.py +1 -1
  45. infrahub/core/diff/query/delete_query.py +1 -1
  46. infrahub/core/diff/query/diff_get.py +3 -2
  47. infrahub/core/diff/query/diff_summary.py +1 -1
  48. infrahub/core/diff/query/field_specifiers.py +3 -1
  49. infrahub/core/diff/query/field_summary.py +3 -2
  50. infrahub/core/diff/query/filters.py +14 -3
  51. infrahub/core/diff/query/get_conflict_query.py +1 -1
  52. infrahub/core/diff/query/has_conflicts_query.py +6 -3
  53. infrahub/core/diff/query/merge.py +3 -3
  54. infrahub/core/diff/query/{drop_tracking_id.py → merge_tracking_id.py} +4 -4
  55. infrahub/core/diff/query/roots_metadata.py +9 -2
  56. infrahub/core/diff/query/save.py +233 -142
  57. infrahub/core/diff/query/summary_counts_enricher.py +267 -0
  58. infrahub/core/diff/query/time_range_query.py +3 -2
  59. infrahub/core/diff/query/update_conflict_query.py +1 -1
  60. infrahub/core/diff/query_parser.py +49 -24
  61. infrahub/core/diff/repository/deserializer.py +32 -28
  62. infrahub/core/diff/repository/repository.py +215 -41
  63. infrahub/core/diff/tasks.py +13 -12
  64. infrahub/core/enums.py +1 -1
  65. infrahub/core/graph/__init__.py +1 -1
  66. infrahub/core/graph/index.py +3 -0
  67. infrahub/core/integrity/object_conflict/conflict_recorder.py +1 -1
  68. infrahub/core/ipam/reconciler.py +1 -1
  69. infrahub/core/ipam/tasks.py +2 -3
  70. infrahub/core/manager.py +20 -15
  71. infrahub/core/merge.py +5 -2
  72. infrahub/core/migrations/graph/__init__.py +4 -0
  73. infrahub/core/migrations/graph/m001_add_version_to_graph.py +1 -1
  74. infrahub/core/migrations/graph/m002_attribute_is_default.py +2 -2
  75. infrahub/core/migrations/graph/m003_relationship_parent_optional.py +2 -2
  76. infrahub/core/migrations/graph/m004_add_attr_documentation.py +1 -1
  77. infrahub/core/migrations/graph/m005_add_rel_read_only.py +1 -1
  78. infrahub/core/migrations/graph/m006_add_rel_on_delete.py +1 -1
  79. infrahub/core/migrations/graph/m007_add_rel_allow_override.py +1 -1
  80. infrahub/core/migrations/graph/m008_add_human_friendly_id.py +1 -1
  81. infrahub/core/migrations/graph/m009_add_generate_profile_attr.py +1 -1
  82. infrahub/core/migrations/graph/m010_add_generate_profile_attr_generic.py +1 -1
  83. infrahub/core/migrations/graph/m011_remove_profile_relationship_schema.py +2 -2
  84. infrahub/core/migrations/graph/m012_convert_account_generic.py +12 -23
  85. infrahub/core/migrations/graph/m013_convert_git_password_credential.py +7 -11
  86. infrahub/core/migrations/graph/m014_remove_index_attr_value.py +2 -2
  87. infrahub/core/migrations/graph/m015_diff_format_update.py +1 -1
  88. infrahub/core/migrations/graph/m016_diff_delete_bug_fix.py +1 -1
  89. infrahub/core/migrations/graph/m017_add_core_profile.py +1 -1
  90. infrahub/core/migrations/graph/m018_uniqueness_nulls.py +2 -2
  91. infrahub/core/migrations/graph/m019_restore_rels_to_time.py +256 -0
  92. infrahub/core/migrations/graph/m020_add_generate_template_attr.py +48 -0
  93. infrahub/core/migrations/query/attribute_add.py +1 -1
  94. infrahub/core/migrations/query/attribute_rename.py +1 -1
  95. infrahub/core/migrations/query/delete_element_in_schema.py +1 -1
  96. infrahub/core/migrations/query/node_duplicate.py +39 -19
  97. infrahub/core/migrations/query/relationship_duplicate.py +1 -1
  98. infrahub/core/migrations/query/schema_attribute_update.py +1 -1
  99. infrahub/core/migrations/schema/node_attribute_remove.py +1 -1
  100. infrahub/core/migrations/schema/node_remove.py +27 -13
  101. infrahub/core/migrations/schema/tasks.py +5 -5
  102. infrahub/core/migrations/shared.py +4 -4
  103. infrahub/core/models.py +7 -8
  104. infrahub/core/node/__init__.py +170 -46
  105. infrahub/core/node/base.py +1 -1
  106. infrahub/core/node/constraints/grouped_uniqueness.py +9 -2
  107. infrahub/core/node/delete_validator.py +4 -4
  108. infrahub/core/node/ipam.py +13 -8
  109. infrahub/core/node/permissions.py +4 -0
  110. infrahub/core/node/resource_manager/ip_prefix_pool.py +8 -5
  111. infrahub/core/node/standard.py +3 -5
  112. infrahub/core/property.py +1 -1
  113. infrahub/core/protocols.py +6 -0
  114. infrahub/core/protocols_base.py +4 -2
  115. infrahub/core/query/__init__.py +2 -5
  116. infrahub/core/query/attribute.py +9 -9
  117. infrahub/core/query/branch.py +5 -5
  118. infrahub/core/query/delete.py +1 -1
  119. infrahub/core/query/diff.py +45 -7
  120. infrahub/core/query/ipam.py +4 -4
  121. infrahub/core/query/node.py +19 -14
  122. infrahub/core/query/relationship.py +213 -26
  123. infrahub/core/query/resource_manager.py +13 -11
  124. infrahub/core/query/standard_node.py +6 -6
  125. infrahub/core/query/task.py +3 -3
  126. infrahub/core/query/task_log.py +1 -1
  127. infrahub/core/query/utils.py +5 -5
  128. infrahub/core/registry.py +0 -2
  129. infrahub/core/relationship/constraints/count.py +1 -1
  130. infrahub/core/relationship/constraints/peer_kind.py +1 -1
  131. infrahub/core/relationship/model.py +76 -38
  132. infrahub/core/schema/__init__.py +6 -4
  133. infrahub/core/schema/attribute_schema.py +8 -0
  134. infrahub/core/schema/basenode_schema.py +13 -3
  135. infrahub/core/schema/definitions/core/__init__.py +153 -0
  136. infrahub/core/schema/definitions/core/account.py +168 -0
  137. infrahub/core/schema/definitions/core/artifact.py +127 -0
  138. infrahub/core/schema/definitions/core/builtin.py +21 -0
  139. infrahub/core/schema/definitions/core/check.py +60 -0
  140. infrahub/core/schema/definitions/core/generator.py +96 -0
  141. infrahub/core/schema/definitions/core/graphql_query.py +77 -0
  142. infrahub/core/schema/definitions/core/group.py +105 -0
  143. infrahub/core/schema/definitions/core/ipam.py +252 -0
  144. infrahub/core/schema/definitions/core/lineage.py +17 -0
  145. infrahub/core/schema/definitions/core/menu.py +46 -0
  146. infrahub/core/schema/definitions/core/permission.py +161 -0
  147. infrahub/core/schema/definitions/core/profile.py +29 -0
  148. infrahub/core/schema/definitions/core/propose_change.py +88 -0
  149. infrahub/core/schema/definitions/core/propose_change_comment.py +188 -0
  150. infrahub/core/schema/definitions/core/propose_change_validator.py +326 -0
  151. infrahub/core/schema/definitions/core/repository.py +280 -0
  152. infrahub/core/schema/definitions/core/resource_pool.py +180 -0
  153. infrahub/core/schema/definitions/core/template.py +12 -0
  154. infrahub/core/schema/definitions/core/transform.py +87 -0
  155. infrahub/core/schema/definitions/core/webhook.py +108 -0
  156. infrahub/core/schema/definitions/internal.py +16 -0
  157. infrahub/core/schema/generated/genericnode_schema.py +5 -0
  158. infrahub/core/schema/generated/node_schema.py +5 -0
  159. infrahub/core/schema/generic_schema.py +5 -1
  160. infrahub/core/schema/manager.py +45 -42
  161. infrahub/core/schema/node_schema.py +4 -0
  162. infrahub/core/schema/profile_schema.py +4 -0
  163. infrahub/core/schema/relationship_schema.py +10 -2
  164. infrahub/core/schema/schema_branch.py +260 -16
  165. infrahub/core/schema/template_schema.py +36 -0
  166. infrahub/core/task/user_task.py +7 -5
  167. infrahub/core/timestamp.py +3 -3
  168. infrahub/core/utils.py +3 -2
  169. infrahub/core/validators/attribute/choices.py +1 -1
  170. infrahub/core/validators/attribute/enum.py +1 -1
  171. infrahub/core/validators/attribute/kind.py +1 -1
  172. infrahub/core/validators/attribute/length.py +1 -1
  173. infrahub/core/validators/attribute/optional.py +1 -1
  174. infrahub/core/validators/attribute/regex.py +1 -1
  175. infrahub/core/validators/attribute/unique.py +1 -1
  176. infrahub/core/validators/checks_runner.py +37 -0
  177. infrahub/core/validators/node/generate_profile.py +1 -1
  178. infrahub/core/validators/node/hierarchy.py +1 -1
  179. infrahub/core/validators/query.py +1 -1
  180. infrahub/core/validators/relationship/count.py +1 -1
  181. infrahub/core/validators/relationship/optional.py +1 -1
  182. infrahub/core/validators/relationship/peer.py +1 -1
  183. infrahub/core/validators/tasks.py +8 -6
  184. infrahub/core/validators/uniqueness/query.py +20 -17
  185. infrahub/database/__init__.py +16 -2
  186. infrahub/database/memgraph.py +1 -1
  187. infrahub/dependencies/builder/constraint/grouped/node_runner.py +0 -2
  188. infrahub/dependencies/builder/diff/combiner.py +1 -1
  189. infrahub/dependencies/builder/diff/conflicts_enricher.py +1 -1
  190. infrahub/dependencies/builder/diff/coordinator.py +0 -2
  191. infrahub/dependencies/builder/diff/deserializer.py +4 -2
  192. infrahub/dependencies/builder/diff/enricher/hierarchy.py +3 -1
  193. infrahub/dependencies/builder/diff/enricher/summary_counts.py +1 -1
  194. infrahub/dependencies/builder/diff/parent_node_adder.py +8 -0
  195. infrahub/events/artifact_action.py +76 -0
  196. infrahub/events/branch_action.py +50 -21
  197. infrahub/events/group_action.py +117 -0
  198. infrahub/events/models.py +164 -51
  199. infrahub/events/node_action.py +70 -8
  200. infrahub/events/repository_action.py +8 -8
  201. infrahub/events/schema_action.py +21 -8
  202. infrahub/exceptions.py +9 -0
  203. infrahub/generators/models.py +1 -0
  204. infrahub/generators/tasks.py +34 -15
  205. infrahub/git/base.py +3 -5
  206. infrahub/git/constants.py +0 -1
  207. infrahub/git/integrator.py +60 -36
  208. infrahub/git/models.py +80 -1
  209. infrahub/git/repository.py +7 -8
  210. infrahub/git/tasks.py +432 -112
  211. infrahub/git_credential/helper.py +2 -3
  212. infrahub/graphql/analyzer.py +572 -11
  213. infrahub/graphql/app.py +34 -26
  214. infrahub/graphql/auth/query_permission_checker/anonymous_checker.py +5 -5
  215. infrahub/graphql/auth/query_permission_checker/default_branch_checker.py +4 -4
  216. infrahub/graphql/auth/query_permission_checker/merge_operation_checker.py +4 -4
  217. infrahub/graphql/auth/query_permission_checker/object_permission_checker.py +28 -35
  218. infrahub/graphql/auth/query_permission_checker/super_admin_checker.py +5 -5
  219. infrahub/graphql/context.py +33 -0
  220. infrahub/graphql/enums.py +1 -1
  221. infrahub/graphql/initialization.py +5 -1
  222. infrahub/graphql/loaders/node.py +2 -2
  223. infrahub/graphql/manager.py +63 -63
  224. infrahub/graphql/mutations/account.py +20 -13
  225. infrahub/graphql/mutations/artifact_definition.py +16 -12
  226. infrahub/graphql/mutations/branch.py +86 -40
  227. infrahub/graphql/mutations/computed_attribute.py +24 -13
  228. infrahub/graphql/mutations/diff.py +54 -14
  229. infrahub/graphql/mutations/diff_conflict.py +14 -8
  230. infrahub/graphql/mutations/generator.py +83 -0
  231. infrahub/graphql/mutations/graphql_query.py +19 -11
  232. infrahub/graphql/mutations/ipam.py +25 -23
  233. infrahub/graphql/mutations/main.py +243 -50
  234. infrahub/graphql/mutations/menu.py +10 -10
  235. infrahub/graphql/mutations/proposed_change.py +36 -28
  236. infrahub/graphql/mutations/relationship.py +343 -104
  237. infrahub/graphql/mutations/repository.py +41 -35
  238. infrahub/graphql/mutations/resource_manager.py +26 -26
  239. infrahub/graphql/mutations/schema.py +66 -33
  240. infrahub/graphql/mutations/tasks.py +16 -10
  241. infrahub/graphql/parser.py +1 -1
  242. infrahub/graphql/permissions.py +3 -10
  243. infrahub/graphql/queries/account.py +22 -18
  244. infrahub/graphql/queries/branch.py +6 -4
  245. infrahub/graphql/queries/diff/tree.py +63 -52
  246. infrahub/graphql/queries/event.py +115 -0
  247. infrahub/graphql/queries/internal.py +3 -3
  248. infrahub/graphql/queries/ipam.py +23 -18
  249. infrahub/graphql/queries/relationship.py +11 -10
  250. infrahub/graphql/queries/resource_manager.py +43 -27
  251. infrahub/graphql/queries/search.py +9 -8
  252. infrahub/graphql/queries/status.py +12 -9
  253. infrahub/graphql/queries/task.py +11 -9
  254. infrahub/graphql/resolvers/resolver.py +69 -43
  255. infrahub/graphql/resolvers/single_relationship.py +16 -10
  256. infrahub/graphql/schema.py +4 -0
  257. infrahub/graphql/subscription/__init__.py +1 -1
  258. infrahub/graphql/subscription/events.py +1 -1
  259. infrahub/graphql/subscription/graphql_query.py +8 -8
  260. infrahub/graphql/types/branch.py +2 -2
  261. infrahub/graphql/types/common.py +6 -1
  262. infrahub/graphql/types/context.py +12 -0
  263. infrahub/graphql/types/enums.py +2 -0
  264. infrahub/graphql/types/event.py +158 -0
  265. infrahub/graphql/types/interface.py +2 -2
  266. infrahub/graphql/types/node.py +3 -3
  267. infrahub/graphql/types/permission.py +2 -2
  268. infrahub/graphql/types/relationship.py +3 -3
  269. infrahub/graphql/types/standard_node.py +9 -11
  270. infrahub/graphql/utils.py +28 -182
  271. infrahub/groups/tasks.py +2 -3
  272. infrahub/lock.py +21 -21
  273. infrahub/menu/generator.py +0 -1
  274. infrahub/menu/menu.py +116 -138
  275. infrahub/menu/models.py +4 -4
  276. infrahub/message_bus/__init__.py +11 -13
  277. infrahub/message_bus/messages/__init__.py +0 -14
  278. infrahub/message_bus/messages/check_generator_run.py +1 -3
  279. infrahub/message_bus/messages/event_branch_merge.py +3 -0
  280. infrahub/message_bus/messages/proposed_change/request_proposedchange_refreshartifacts.py +6 -0
  281. infrahub/message_bus/messages/request_proposedchange_pipeline.py +2 -0
  282. infrahub/message_bus/messages/send_echo_request.py +1 -1
  283. infrahub/message_bus/operations/__init__.py +4 -13
  284. infrahub/message_bus/operations/check/__init__.py +2 -2
  285. infrahub/message_bus/operations/check/generator.py +1 -3
  286. infrahub/message_bus/operations/event/branch.py +7 -3
  287. infrahub/message_bus/operations/event/schema.py +1 -1
  288. infrahub/message_bus/operations/event/worker.py +0 -3
  289. infrahub/message_bus/operations/finalize/validator.py +1 -1
  290. infrahub/message_bus/operations/git/file.py +2 -2
  291. infrahub/message_bus/operations/git/repository.py +1 -1
  292. infrahub/message_bus/operations/requests/__init__.py +0 -4
  293. infrahub/message_bus/operations/requests/generator_definition.py +2 -4
  294. infrahub/message_bus/operations/requests/proposed_change.py +37 -20
  295. infrahub/message_bus/operations/send/echo.py +1 -1
  296. infrahub/message_bus/types.py +1 -1
  297. infrahub/permissions/__init__.py +2 -1
  298. infrahub/permissions/globals.py +15 -0
  299. infrahub/permissions/types.py +26 -0
  300. infrahub/pools/prefix.py +29 -165
  301. infrahub/prefect_server/__init__.py +0 -0
  302. infrahub/prefect_server/app.py +18 -0
  303. infrahub/prefect_server/database.py +20 -0
  304. infrahub/prefect_server/events.py +28 -0
  305. infrahub/prefect_server/models.py +46 -0
  306. infrahub/proposed_change/models.py +18 -1
  307. infrahub/proposed_change/tasks.py +195 -53
  308. infrahub/pytest_plugin.py +4 -4
  309. infrahub/server.py +13 -12
  310. infrahub/services/__init__.py +148 -63
  311. infrahub/services/adapters/cache/__init__.py +11 -11
  312. infrahub/services/adapters/cache/nats.py +42 -25
  313. infrahub/services/adapters/cache/redis.py +3 -11
  314. infrahub/services/adapters/event/__init__.py +10 -18
  315. infrahub/services/adapters/http/__init__.py +0 -5
  316. infrahub/services/adapters/http/httpx.py +22 -15
  317. infrahub/services/adapters/message_bus/__init__.py +25 -8
  318. infrahub/services/adapters/message_bus/local.py +9 -7
  319. infrahub/services/adapters/message_bus/nats.py +14 -8
  320. infrahub/services/adapters/message_bus/rabbitmq.py +23 -10
  321. infrahub/services/adapters/workflow/__init__.py +11 -8
  322. infrahub/services/adapters/workflow/local.py +27 -6
  323. infrahub/services/adapters/workflow/worker.py +23 -7
  324. infrahub/services/component.py +43 -40
  325. infrahub/services/protocols.py +7 -7
  326. infrahub/services/scheduler.py +30 -29
  327. infrahub/storage.py +2 -4
  328. infrahub/task_manager/constants.py +1 -1
  329. infrahub/task_manager/event.py +261 -0
  330. infrahub/task_manager/models.py +147 -3
  331. infrahub/task_manager/task.py +1 -1
  332. infrahub/tasks/artifact.py +19 -18
  333. infrahub/tasks/registry.py +1 -1
  334. infrahub/tasks/telemetry.py +13 -14
  335. infrahub/transformations/tasks.py +3 -5
  336. infrahub/trigger/__init__.py +0 -0
  337. infrahub/trigger/catalogue.py +16 -0
  338. infrahub/trigger/constants.py +9 -0
  339. infrahub/trigger/models.py +105 -0
  340. infrahub/trigger/tasks.py +91 -0
  341. infrahub/types.py +1 -1
  342. infrahub/utils.py +1 -1
  343. infrahub/webhook/constants.py +0 -2
  344. infrahub/webhook/models.py +161 -40
  345. infrahub/webhook/tasks.py +123 -202
  346. infrahub/webhook/triggers.py +27 -0
  347. infrahub/workers/infrahub_async.py +36 -25
  348. infrahub/workers/utils.py +63 -0
  349. infrahub/workflows/catalogue.py +71 -52
  350. infrahub/workflows/initialization.py +14 -8
  351. infrahub/workflows/models.py +28 -4
  352. infrahub/workflows/utils.py +1 -1
  353. infrahub_sdk/client.py +8 -0
  354. infrahub_sdk/ctl/branch.py +3 -2
  355. infrahub_sdk/ctl/check.py +3 -3
  356. infrahub_sdk/ctl/cli_commands.py +16 -11
  357. infrahub_sdk/ctl/exceptions.py +0 -6
  358. infrahub_sdk/ctl/exporter.py +1 -1
  359. infrahub_sdk/ctl/generator.py +5 -5
  360. infrahub_sdk/ctl/importer.py +3 -2
  361. infrahub_sdk/ctl/menu.py +1 -1
  362. infrahub_sdk/ctl/object.py +1 -1
  363. infrahub_sdk/ctl/repository.py +23 -15
  364. infrahub_sdk/ctl/schema.py +2 -2
  365. infrahub_sdk/ctl/utils.py +4 -19
  366. infrahub_sdk/ctl/validate.py +2 -1
  367. infrahub_sdk/exceptions.py +12 -0
  368. infrahub_sdk/generator.py +3 -0
  369. infrahub_sdk/node.py +4 -4
  370. infrahub_sdk/protocols.py +21 -8
  371. infrahub_sdk/schema/__init__.py +14 -2
  372. infrahub_sdk/schema/main.py +7 -0
  373. infrahub_sdk/task/__init__.py +1 -0
  374. infrahub_sdk/task/constants.py +3 -0
  375. infrahub_sdk/task/exceptions.py +25 -0
  376. infrahub_sdk/task/manager.py +545 -0
  377. infrahub_sdk/task/models.py +74 -0
  378. infrahub_sdk/timestamp.py +134 -33
  379. infrahub_sdk/utils.py +39 -1
  380. infrahub_sdk/yaml.py +2 -3
  381. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/METADATA +47 -12
  382. infrahub_server-1.2.0b1.dist-info/RECORD +725 -0
  383. infrahub_testcontainers/container.py +14 -6
  384. infrahub_testcontainers/docker-compose.test.yml +24 -5
  385. infrahub_testcontainers/haproxy.cfg +43 -0
  386. infrahub_testcontainers/helpers.py +85 -1
  387. infrahub/core/branch/constants.py +0 -2
  388. infrahub/core/schema/definitions/core.py +0 -2274
  389. infrahub/graphql/query.py +0 -52
  390. infrahub/message_bus/messages/check_repository_checkdefinition.py +0 -20
  391. infrahub/message_bus/messages/check_repository_mergeconflicts.py +0 -16
  392. infrahub/message_bus/messages/check_repository_usercheck.py +0 -26
  393. infrahub/message_bus/messages/request_artifactdefinition_check.py +0 -17
  394. infrahub/message_bus/messages/request_repository_checks.py +0 -12
  395. infrahub/message_bus/messages/request_repository_userchecks.py +0 -18
  396. infrahub/message_bus/operations/check/repository.py +0 -293
  397. infrahub/message_bus/operations/requests/artifact_definition.py +0 -148
  398. infrahub/message_bus/operations/requests/repository.py +0 -133
  399. infrahub/schema/constants.py +0 -1
  400. infrahub/schema/tasks.py +0 -76
  401. infrahub/services/adapters/database/__init__.py +0 -9
  402. infrahub_sdk/ctl/_file.py +0 -13
  403. infrahub_server-1.1.6.dist-info/RECORD +0 -681
  404. /infrahub/{schema → artifacts}/__init__.py +0 -0
  405. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/LICENSE.txt +0 -0
  406. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/WHEEL +0 -0
  407. {infrahub_server-1.1.6.dist-info → infrahub_server-1.2.0b1.dist-info}/entry_points.txt +0 -0
infrahub/core/merge.py CHANGED
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
19
19
  from infrahub.core.branch import Branch
20
20
  from infrahub.core.diff.coordinator import DiffCoordinator
21
21
  from infrahub.core.diff.merger.merger import DiffMerger
22
+ from infrahub.core.diff.model.path import EnrichedDiffRoot
22
23
  from infrahub.core.diff.repository.repository import DiffRepository
23
24
  from infrahub.core.models import SchemaUpdateConstraintInfo, SchemaUpdateMigrationInfo
24
25
  from infrahub.core.schema.manager import SchemaDiff
@@ -26,6 +27,7 @@ if TYPE_CHECKING:
26
27
  from infrahub.database import InfrahubDatabase
27
28
  from infrahub.services import InfrahubServices
28
29
 
30
+
29
31
  log = get_logger()
30
32
 
31
33
 
@@ -172,7 +174,7 @@ class BranchMerger:
172
174
  async def merge(
173
175
  self,
174
176
  at: Optional[Union[str, Timestamp]] = None,
175
- ) -> None:
177
+ ) -> EnrichedDiffRoot:
176
178
  """Merge the current branch into main."""
177
179
  if self.source_branch.name == registry.default_branch:
178
180
  raise ValidationError(f"Unable to merge the branch '{self.source_branch.name}' into itself")
@@ -198,8 +200,9 @@ class BranchMerger:
198
200
  # TODO need to find a way to properly communicate back to the user any issue that could come up during the merge
199
201
  # From the Graph or From the repositories
200
202
  self._merge_at = Timestamp(at)
201
- await self.diff_merger.merge_graph(at=self._merge_at)
203
+ branch_diff = await self.diff_merger.merge_graph(at=self._merge_at)
202
204
  await self.merge_repositories()
205
+ return branch_diff
203
206
 
204
207
  async def rollback(self) -> None:
205
208
  await self.diff_merger.rollback(at=self._merge_at)
@@ -20,6 +20,8 @@ from .m015_diff_format_update import Migration015
20
20
  from .m016_diff_delete_bug_fix import Migration016
21
21
  from .m017_add_core_profile import Migration017
22
22
  from .m018_uniqueness_nulls import Migration018
23
+ from .m019_restore_rels_to_time import Migration019
24
+ from .m020_add_generate_template_attr import Migration020
23
25
 
24
26
  if TYPE_CHECKING:
25
27
  from infrahub.core.root import Root
@@ -45,6 +47,8 @@ MIGRATIONS: list[type[Union[GraphMigration, InternalSchemaMigration, ArbitraryMi
45
47
  Migration016,
46
48
  Migration017,
47
49
  Migration018,
50
+ Migration019,
51
+ Migration020,
48
52
  ]
49
53
 
50
54
 
@@ -16,7 +16,7 @@ class Migration001Query01(Query):
16
16
  name = "migration_001_01"
17
17
  type: QueryType = QueryType.WRITE
18
18
 
19
- async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None:
19
+ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
20
20
  query = """
21
21
  MATCH (root:Root)
22
22
  SET root.graph_version = 1
@@ -15,7 +15,7 @@ class Migration002Query01(Query):
15
15
  name = "migration_002_01"
16
16
  type: QueryType = QueryType.WRITE
17
17
 
18
- async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None:
18
+ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
19
19
  query = """
20
20
  MATCH (a:AttributeValue)
21
21
  WHERE a.is_default IS NULL
@@ -30,7 +30,7 @@ class Migration002(GraphMigration):
30
30
  queries: Sequence[type[Query]] = [Migration002Query01]
31
31
  minimum_version: int = 1
32
32
 
33
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
33
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
34
34
  result = MigrationResult()
35
35
 
36
36
  return result
@@ -16,7 +16,7 @@ class Migration003Query01(Query):
16
16
  name = "migration_003_01"
17
17
  type: QueryType = QueryType.WRITE
18
18
 
19
- async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None:
19
+ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
20
20
  at = Timestamp()
21
21
  filters, params = at.get_query_filter_path()
22
22
 
@@ -49,7 +49,7 @@ class Migration003(GraphMigration):
49
49
  queries: Sequence[type[Query]] = [Migration003Query01]
50
50
  minimum_version: int = 2
51
51
 
52
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
52
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
53
53
  result = MigrationResult()
54
54
 
55
55
  return result
@@ -43,6 +43,6 @@ class Migration004(InternalSchemaMigration):
43
43
  ]
44
44
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
45
45
 
46
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
46
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
47
47
  result = MigrationResult()
48
48
  return result
@@ -35,6 +35,6 @@ class Migration005(InternalSchemaMigration):
35
35
  ]
36
36
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
37
37
 
38
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
38
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
39
39
  result = MigrationResult()
40
40
  return result
@@ -35,6 +35,6 @@ class Migration006(InternalSchemaMigration):
35
35
  ]
36
36
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
37
37
 
38
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
38
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
39
39
  result = MigrationResult()
40
40
  return result
@@ -43,6 +43,6 @@ class Migration007(InternalSchemaMigration):
43
43
  ]
44
44
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
45
45
 
46
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
46
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
47
47
  result = MigrationResult()
48
48
  return result
@@ -43,6 +43,6 @@ class Migration008(InternalSchemaMigration):
43
43
  ]
44
44
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
45
45
 
46
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
46
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
47
47
  result = MigrationResult()
48
48
  return result
@@ -35,6 +35,6 @@ class Migration009(InternalSchemaMigration):
35
35
  ]
36
36
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
37
37
 
38
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
38
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
39
39
  result = MigrationResult()
40
40
  return result
@@ -35,6 +35,6 @@ class Migration010(InternalSchemaMigration):
35
35
  ]
36
36
  return cls(migrations=migrations, **kwargs) # type: ignore[arg-type]
37
37
 
38
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
38
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
39
39
  result = MigrationResult()
40
40
  return result
@@ -16,7 +16,7 @@ class Migration011Query01(Query):
16
16
  type: QueryType = QueryType.WRITE
17
17
  insert_return = False
18
18
 
19
- async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None:
19
+ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
20
20
  query = """
21
21
  // get all the SchemaRelationship nodes for 'profiles' relationships
22
22
  MATCH (sr_to_delete:SchemaRelationship)-[HAS_ATTRIBUTE]->(:Attribute {name: "name"})-[HAS_VALUE]->(av:AttributeValue {value: "profiles"})
@@ -42,7 +42,7 @@ class Migration011(GraphMigration):
42
42
  queries: Sequence[type[Query]] = [Migration011Query01]
43
43
  minimum_version: int = 10
44
44
 
45
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
45
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
46
46
  result = MigrationResult()
47
47
 
48
48
  return result
@@ -54,8 +54,7 @@ class Migration012RenameTypeAttributeData(AttributeRenameQuery):
54
54
  branch_support=BranchSupportType.AGNOSTIC.value,
55
55
  )
56
56
 
57
- if "branch" in kwargs:
58
- del kwargs["branch"]
57
+ kwargs.pop("branch", None)
59
58
 
60
59
  super().__init__(new_attr=new_attr, previous_attr=previous_attr, branch=global_branch, **kwargs)
61
60
 
@@ -113,8 +112,7 @@ class Migration012AddLabelData(NodeDuplicateQuery):
113
112
  sync_with_git=False,
114
113
  )
115
114
 
116
- if "branch" in kwargs:
117
- del kwargs["branch"]
115
+ kwargs.pop("branch", None)
118
116
 
119
117
  super().__init__(new_node=new_node, previous_node=previous_node, branch=branch, **kwargs)
120
118
 
@@ -165,8 +163,7 @@ class Migration012RenameRelationshipAccountTokenData(RelationshipDuplicateQuery)
165
163
  dst_peer=InfrahubKind.ACCOUNTTOKEN,
166
164
  )
167
165
 
168
- if "branch" in kwargs:
169
- del kwargs["branch"]
166
+ kwargs.pop("branch", None)
170
167
 
171
168
  super().__init__(new_rel=new_rel, previous_rel=previous_rel, branch=global_branch, **kwargs)
172
169
 
@@ -189,8 +186,7 @@ class Migration012RenameRelationshipRefreshTokenData(RelationshipDuplicateQuery)
189
186
  dst_peer=InfrahubKind.REFRESHTOKEN,
190
187
  )
191
188
 
192
- if "branch" in kwargs:
193
- del kwargs["branch"]
189
+ kwargs.pop("branch", None)
194
190
 
195
191
  super().__init__(new_rel=new_rel, previous_rel=previous_rel, branch=global_branch, **kwargs)
196
192
 
@@ -213,8 +209,7 @@ class Migration012RenameRelationshipThreadData(RelationshipDuplicateQuery):
213
209
  dst_peer=InfrahubKind.THREAD,
214
210
  )
215
211
 
216
- if "branch" in kwargs:
217
- del kwargs["branch"]
212
+ kwargs.pop("branch", None)
218
213
 
219
214
  super().__init__(new_rel=new_rel, previous_rel=previous_rel, branch=global_branch, **kwargs)
220
215
 
@@ -237,8 +232,7 @@ class Migration012RenameRelationshipCommentData(RelationshipDuplicateQuery):
237
232
  dst_peer=InfrahubKind.COMMENT,
238
233
  )
239
234
 
240
- if "branch" in kwargs:
241
- del kwargs["branch"]
235
+ kwargs.pop("branch", None)
242
236
 
243
237
  super().__init__(new_rel=new_rel, previous_rel=previous_rel, branch=default_branch, **kwargs)
244
238
 
@@ -249,8 +243,7 @@ class Migration012DeleteOldElementsSchema(DeleteElementInSchemaQuery):
249
243
  insert_return = False
250
244
 
251
245
  def __init__(self, **kwargs: Any):
252
- if "branch" in kwargs:
253
- del kwargs["branch"]
246
+ kwargs.pop("branch", None)
254
247
 
255
248
  super().__init__(
256
249
  element_names=["name", "password", "label", "description", "type", "role", "tokens"],
@@ -267,8 +260,7 @@ class Migration012UpdateDisplayLabels(SchemaAttributeUpdateQuery):
267
260
  insert_return = False
268
261
 
269
262
  def __init__(self, **kwargs: Any):
270
- if "branch" in kwargs:
271
- del kwargs["branch"]
263
+ kwargs.pop("branch", None)
272
264
 
273
265
  super().__init__(
274
266
  attribute_name="display_labels",
@@ -285,8 +277,7 @@ class Migration012UpdateOrderBy(SchemaAttributeUpdateQuery):
285
277
  insert_return = False
286
278
 
287
279
  def __init__(self, **kwargs: Any):
288
- if "branch" in kwargs:
289
- del kwargs["branch"]
280
+ kwargs.pop("branch", None)
290
281
 
291
282
  super().__init__(
292
283
  attribute_name="order_by",
@@ -303,8 +294,7 @@ class Migration012UpdateDefaultFilter(SchemaAttributeUpdateQuery):
303
294
  insert_return = False
304
295
 
305
296
  def __init__(self, **kwargs: Any):
306
- if "branch" in kwargs:
307
- del kwargs["branch"]
297
+ kwargs.pop("branch", None)
308
298
 
309
299
  super().__init__(
310
300
  attribute_name="default_filter",
@@ -321,8 +311,7 @@ class Migration012UpdateHFID(SchemaAttributeUpdateQuery):
321
311
  insert_return = False
322
312
 
323
313
  def __init__(self, **kwargs: Any):
324
- if "branch" in kwargs:
325
- del kwargs["branch"]
314
+ kwargs.pop("branch", None)
326
315
 
327
316
  super().__init__(
328
317
  attribute_name="human_friendly_id",
@@ -350,7 +339,7 @@ class Migration012(GraphMigration):
350
339
  ]
351
340
  minimum_version: int = 11
352
341
 
353
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
342
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
354
343
  result = MigrationResult()
355
344
 
356
345
  return result
@@ -36,7 +36,7 @@ class Migration013ConvertCoreRepositoryWithCred(Query):
36
36
  name = "migration_013_convert_repository_with_cred"
37
37
  type = QueryType.WRITE
38
38
 
39
- async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None:
39
+ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
40
40
  at = Timestamp()
41
41
  filters, params = at.get_query_filter_path()
42
42
 
@@ -172,7 +172,7 @@ class Migration013ConvertCoreRepositoryWithoutCred(Query):
172
172
  name = "migration_013_convert_repository_without_cred"
173
173
  type = QueryType.WRITE
174
174
 
175
- async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None:
175
+ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> None: # noqa: ARG002
176
176
  at = Timestamp()
177
177
  filters, params = at.get_query_filter_path()
178
178
 
@@ -237,8 +237,7 @@ class Migration013DeleteUsernamePasswordGenericSchema(DeleteElementInSchemaQuery
237
237
  insert_return = False
238
238
 
239
239
  def __init__(self, **kwargs: Any):
240
- if "branch" in kwargs:
241
- del kwargs["branch"]
240
+ kwargs.pop("branch", None)
242
241
 
243
242
  super().__init__(
244
243
  element_names=["username", "password"],
@@ -255,8 +254,7 @@ class Migration013DeleteUsernamePasswordReadWriteSchema(DeleteElementInSchemaQue
255
254
  insert_return = False
256
255
 
257
256
  def __init__(self, **kwargs: Any):
258
- if "branch" in kwargs:
259
- del kwargs["branch"]
257
+ kwargs.pop("branch", None)
260
258
 
261
259
  super().__init__(
262
260
  element_names=["username", "password"],
@@ -273,8 +271,7 @@ class Migration013DeleteUsernamePasswordReadOnlySchema(DeleteElementInSchemaQuer
273
271
  insert_return = False
274
272
 
275
273
  def __init__(self, **kwargs: Any):
276
- if "branch" in kwargs:
277
- del kwargs["branch"]
274
+ kwargs.pop("branch", None)
278
275
 
279
276
  super().__init__(
280
277
  element_names=["username", "password"],
@@ -289,8 +286,7 @@ class Migration013AddInternalStatusData(AttributeAddQuery):
289
286
  type = QueryType.WRITE
290
287
 
291
288
  def __init__(self, **kwargs: Any):
292
- if "branch" in kwargs:
293
- del kwargs["branch"]
289
+ kwargs.pop("branch", None)
294
290
 
295
291
  super().__init__(
296
292
  node_kind="CoreGenericRepository",
@@ -315,7 +311,7 @@ class Migration013(GraphMigration):
315
311
  ]
316
312
  minimum_version: int = 12
317
313
 
318
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
314
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
319
315
  result = MigrationResult()
320
316
 
321
317
  return result
@@ -33,12 +33,12 @@ class Migration014(GraphMigration):
33
33
  try:
34
34
  ts.manager.index.init(nodes=[INDEX_TO_DELETE], rels=[])
35
35
  await ts.manager.index.drop()
36
- except Exception as exc: # pylint: disable=broad-exception-caught
36
+ except Exception as exc:
37
37
  result.errors.append(str(exc))
38
38
  return result
39
39
 
40
40
  return result
41
41
 
42
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
42
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
43
43
  result = MigrationResult()
44
44
  return result
@@ -20,7 +20,7 @@ class Migration015(ArbitraryMigration):
20
20
  name: str = "015_diff_format_update"
21
21
  minimum_version: int = 14
22
22
 
23
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
23
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
24
24
  result = MigrationResult()
25
25
 
26
26
  return result
@@ -20,7 +20,7 @@ class Migration016(ArbitraryMigration):
20
20
  name: str = "016_diff_delete_bug_fix_update"
21
21
  minimum_version: int = 15
22
22
 
23
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
23
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
24
24
  result = MigrationResult()
25
25
 
26
26
  return result
@@ -22,7 +22,7 @@ class Migration017(InternalSchemaMigration):
22
22
  minimum_version: int = 16
23
23
  migrations: Sequence[SchemaMigration] = []
24
24
 
25
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
25
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
26
26
  result = MigrationResult()
27
27
 
28
28
  return result
@@ -26,7 +26,7 @@ class Migration018(InternalSchemaMigration):
26
26
  minimum_version: int = 17
27
27
  migrations: Sequence[SchemaMigration] = []
28
28
 
29
- async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult:
29
+ async def validate_migration(self, db: InfrahubDatabase) -> MigrationResult: # noqa: ARG002
30
30
  result = MigrationResult()
31
31
 
32
32
  return result
@@ -52,7 +52,7 @@ class Migration018(InternalSchemaMigration):
52
52
 
53
53
  for schema_kind in schema_branch.node_names + schema_branch.generic_names:
54
54
  schema = schema_branch.get(name=schema_kind, duplicate=False)
55
- if not isinstance(schema, (NodeSchema, GenericSchema)):
55
+ if not isinstance(schema, NodeSchema | GenericSchema):
56
56
  continue
57
57
 
58
58
  schema_constraint_path_groups = schema.get_unique_constraint_schema_attribute_paths(