infrahub-server 1.2.0b1__py3-none-any.whl → 1.2.1__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 (297) hide show
  1. infrahub/api/dependencies.py +6 -6
  2. infrahub/api/diff/validation_models.py +7 -7
  3. infrahub/api/schema.py +1 -1
  4. infrahub/artifacts/models.py +1 -3
  5. infrahub/artifacts/tasks.py +1 -3
  6. infrahub/cli/__init__.py +13 -9
  7. infrahub/cli/constants.py +3 -0
  8. infrahub/cli/db.py +165 -183
  9. infrahub/cli/upgrade.py +146 -0
  10. infrahub/computed_attribute/gather.py +185 -0
  11. infrahub/computed_attribute/models.py +239 -11
  12. infrahub/computed_attribute/tasks.py +77 -442
  13. infrahub/computed_attribute/triggers.py +11 -45
  14. infrahub/config.py +43 -32
  15. infrahub/context.py +14 -0
  16. infrahub/core/account.py +4 -4
  17. infrahub/core/attribute.py +57 -57
  18. infrahub/core/branch/tasks.py +12 -9
  19. infrahub/core/changelog/diff.py +16 -8
  20. infrahub/core/changelog/models.py +189 -26
  21. infrahub/core/constants/__init__.py +5 -1
  22. infrahub/core/constants/infrahubkind.py +2 -0
  23. infrahub/core/constraint/node/runner.py +9 -8
  24. infrahub/core/diff/branch_differ.py +10 -10
  25. infrahub/core/diff/ipam_diff_parser.py +4 -5
  26. infrahub/core/diff/model/diff.py +27 -27
  27. infrahub/core/diff/model/path.py +3 -3
  28. infrahub/core/diff/query/merge.py +20 -17
  29. infrahub/core/diff/query_parser.py +4 -4
  30. infrahub/core/graph/__init__.py +1 -1
  31. infrahub/core/initialization.py +1 -10
  32. infrahub/core/ipam/constants.py +3 -4
  33. infrahub/core/ipam/reconciler.py +12 -12
  34. infrahub/core/ipam/utilization.py +10 -13
  35. infrahub/core/manager.py +34 -34
  36. infrahub/core/merge.py +7 -7
  37. infrahub/core/migrations/__init__.py +2 -3
  38. infrahub/core/migrations/graph/__init__.py +9 -4
  39. infrahub/core/migrations/graph/m017_add_core_profile.py +1 -5
  40. infrahub/core/migrations/graph/m018_uniqueness_nulls.py +4 -4
  41. infrahub/core/migrations/graph/m020_duplicate_edges.py +160 -0
  42. infrahub/core/migrations/graph/m021_missing_hierarchy_merge.py +51 -0
  43. infrahub/core/migrations/graph/{m020_add_generate_template_attr.py → m022_add_generate_template_attr.py} +3 -3
  44. infrahub/core/migrations/graph/m023_deduplicate_cardinality_one_relationships.py +96 -0
  45. infrahub/core/migrations/query/attribute_add.py +2 -2
  46. infrahub/core/migrations/query/node_duplicate.py +18 -21
  47. infrahub/core/migrations/query/schema_attribute_update.py +2 -2
  48. infrahub/core/migrations/schema/models.py +19 -4
  49. infrahub/core/migrations/schema/tasks.py +2 -2
  50. infrahub/core/migrations/shared.py +16 -16
  51. infrahub/core/models.py +15 -6
  52. infrahub/core/node/__init__.py +29 -28
  53. infrahub/core/node/base.py +2 -4
  54. infrahub/core/node/constraints/attribute_uniqueness.py +2 -2
  55. infrahub/core/node/constraints/grouped_uniqueness.py +99 -47
  56. infrahub/core/node/constraints/interface.py +1 -2
  57. infrahub/core/node/delete_validator.py +3 -5
  58. infrahub/core/node/ipam.py +4 -4
  59. infrahub/core/node/permissions.py +7 -7
  60. infrahub/core/node/resource_manager/ip_address_pool.py +6 -6
  61. infrahub/core/node/resource_manager/ip_prefix_pool.py +6 -6
  62. infrahub/core/node/resource_manager/number_pool.py +3 -3
  63. infrahub/core/path.py +12 -12
  64. infrahub/core/property.py +11 -11
  65. infrahub/core/protocols.py +5 -0
  66. infrahub/core/protocols_base.py +21 -21
  67. infrahub/core/query/__init__.py +33 -33
  68. infrahub/core/query/attribute.py +6 -4
  69. infrahub/core/query/diff.py +3 -3
  70. infrahub/core/query/node.py +82 -32
  71. infrahub/core/query/relationship.py +24 -24
  72. infrahub/core/query/resource_manager.py +2 -0
  73. infrahub/core/query/standard_node.py +3 -3
  74. infrahub/core/query/subquery.py +9 -9
  75. infrahub/core/registry.py +13 -15
  76. infrahub/core/relationship/constraints/count.py +3 -4
  77. infrahub/core/relationship/constraints/peer_kind.py +3 -4
  78. infrahub/core/relationship/constraints/profiles_kind.py +2 -2
  79. infrahub/core/relationship/model.py +40 -46
  80. infrahub/core/schema/attribute_schema.py +9 -9
  81. infrahub/core/schema/basenode_schema.py +93 -44
  82. infrahub/core/schema/computed_attribute.py +3 -3
  83. infrahub/core/schema/definitions/core/__init__.py +13 -19
  84. infrahub/core/schema/definitions/core/account.py +151 -148
  85. infrahub/core/schema/definitions/core/artifact.py +122 -113
  86. infrahub/core/schema/definitions/core/builtin.py +19 -16
  87. infrahub/core/schema/definitions/core/check.py +61 -53
  88. infrahub/core/schema/definitions/core/core.py +17 -0
  89. infrahub/core/schema/definitions/core/generator.py +89 -85
  90. infrahub/core/schema/definitions/core/graphql_query.py +72 -70
  91. infrahub/core/schema/definitions/core/group.py +96 -93
  92. infrahub/core/schema/definitions/core/ipam.py +176 -235
  93. infrahub/core/schema/definitions/core/lineage.py +18 -16
  94. infrahub/core/schema/definitions/core/menu.py +42 -40
  95. infrahub/core/schema/definitions/core/permission.py +144 -142
  96. infrahub/core/schema/definitions/core/profile.py +16 -27
  97. infrahub/core/schema/definitions/core/propose_change.py +88 -79
  98. infrahub/core/schema/definitions/core/propose_change_comment.py +170 -165
  99. infrahub/core/schema/definitions/core/propose_change_validator.py +290 -288
  100. infrahub/core/schema/definitions/core/repository.py +231 -225
  101. infrahub/core/schema/definitions/core/resource_pool.py +156 -166
  102. infrahub/core/schema/definitions/core/template.py +27 -12
  103. infrahub/core/schema/definitions/core/transform.py +85 -76
  104. infrahub/core/schema/definitions/core/webhook.py +127 -101
  105. infrahub/core/schema/definitions/internal.py +16 -16
  106. infrahub/core/schema/dropdown.py +3 -4
  107. infrahub/core/schema/generated/attribute_schema.py +15 -18
  108. infrahub/core/schema/generated/base_node_schema.py +12 -14
  109. infrahub/core/schema/generated/node_schema.py +3 -5
  110. infrahub/core/schema/generated/relationship_schema.py +9 -11
  111. infrahub/core/schema/generic_schema.py +2 -2
  112. infrahub/core/schema/manager.py +20 -9
  113. infrahub/core/schema/node_schema.py +4 -2
  114. infrahub/core/schema/relationship_schema.py +7 -7
  115. infrahub/core/schema/schema_branch.py +276 -138
  116. infrahub/core/schema/schema_branch_computed.py +41 -4
  117. infrahub/core/task/task.py +3 -3
  118. infrahub/core/task/user_task.py +15 -15
  119. infrahub/core/utils.py +20 -18
  120. infrahub/core/validators/__init__.py +1 -3
  121. infrahub/core/validators/aggregated_checker.py +2 -2
  122. infrahub/core/validators/attribute/choices.py +2 -2
  123. infrahub/core/validators/attribute/enum.py +2 -2
  124. infrahub/core/validators/attribute/kind.py +2 -2
  125. infrahub/core/validators/attribute/length.py +2 -2
  126. infrahub/core/validators/attribute/optional.py +2 -2
  127. infrahub/core/validators/attribute/regex.py +2 -2
  128. infrahub/core/validators/attribute/unique.py +2 -2
  129. infrahub/core/validators/checks_runner.py +25 -2
  130. infrahub/core/validators/determiner.py +1 -3
  131. infrahub/core/validators/interface.py +6 -2
  132. infrahub/core/validators/model.py +22 -3
  133. infrahub/core/validators/models/validate_migration.py +17 -4
  134. infrahub/core/validators/node/attribute.py +2 -2
  135. infrahub/core/validators/node/generate_profile.py +2 -2
  136. infrahub/core/validators/node/hierarchy.py +3 -5
  137. infrahub/core/validators/node/inherit_from.py +27 -5
  138. infrahub/core/validators/node/relationship.py +2 -2
  139. infrahub/core/validators/relationship/count.py +4 -4
  140. infrahub/core/validators/relationship/optional.py +2 -2
  141. infrahub/core/validators/relationship/peer.py +2 -2
  142. infrahub/core/validators/shared.py +2 -2
  143. infrahub/core/validators/tasks.py +8 -0
  144. infrahub/core/validators/uniqueness/checker.py +22 -21
  145. infrahub/core/validators/uniqueness/index.py +2 -2
  146. infrahub/core/validators/uniqueness/model.py +11 -11
  147. infrahub/database/__init__.py +26 -22
  148. infrahub/database/metrics.py +7 -1
  149. infrahub/dependencies/builder/constraint/grouped/node_runner.py +1 -3
  150. infrahub/dependencies/component/registry.py +2 -2
  151. infrahub/events/__init__.py +25 -2
  152. infrahub/events/artifact_action.py +13 -25
  153. infrahub/events/branch_action.py +26 -18
  154. infrahub/events/generator.py +71 -0
  155. infrahub/events/group_action.py +10 -24
  156. infrahub/events/models.py +10 -16
  157. infrahub/events/node_action.py +87 -32
  158. infrahub/events/repository_action.py +5 -18
  159. infrahub/events/schema_action.py +4 -9
  160. infrahub/events/utils.py +16 -0
  161. infrahub/events/validator_action.py +55 -0
  162. infrahub/exceptions.py +23 -24
  163. infrahub/generators/models.py +1 -3
  164. infrahub/git/base.py +7 -7
  165. infrahub/git/integrator.py +26 -25
  166. infrahub/git/models.py +22 -9
  167. infrahub/git/repository.py +3 -3
  168. infrahub/git/tasks.py +67 -49
  169. infrahub/git/utils.py +48 -0
  170. infrahub/git/worktree.py +1 -2
  171. infrahub/git_credential/askpass.py +1 -2
  172. infrahub/graphql/analyzer.py +12 -0
  173. infrahub/graphql/app.py +13 -15
  174. infrahub/graphql/context.py +6 -0
  175. infrahub/graphql/initialization.py +3 -0
  176. infrahub/graphql/loaders/node.py +2 -12
  177. infrahub/graphql/loaders/peers.py +77 -0
  178. infrahub/graphql/loaders/shared.py +13 -0
  179. infrahub/graphql/manager.py +13 -10
  180. infrahub/graphql/mutations/artifact_definition.py +5 -5
  181. infrahub/graphql/mutations/computed_attribute.py +4 -5
  182. infrahub/graphql/mutations/graphql_query.py +5 -5
  183. infrahub/graphql/mutations/ipam.py +50 -70
  184. infrahub/graphql/mutations/main.py +164 -141
  185. infrahub/graphql/mutations/menu.py +5 -5
  186. infrahub/graphql/mutations/models.py +2 -4
  187. infrahub/graphql/mutations/node_getter/by_default_filter.py +10 -10
  188. infrahub/graphql/mutations/node_getter/by_hfid.py +1 -3
  189. infrahub/graphql/mutations/node_getter/by_id.py +1 -3
  190. infrahub/graphql/mutations/node_getter/interface.py +1 -2
  191. infrahub/graphql/mutations/proposed_change.py +7 -7
  192. infrahub/graphql/mutations/relationship.py +67 -35
  193. infrahub/graphql/mutations/repository.py +8 -8
  194. infrahub/graphql/mutations/resource_manager.py +3 -3
  195. infrahub/graphql/mutations/schema.py +4 -4
  196. infrahub/graphql/mutations/webhook.py +137 -0
  197. infrahub/graphql/parser.py +4 -4
  198. infrahub/graphql/queries/diff/tree.py +4 -4
  199. infrahub/graphql/queries/ipam.py +2 -2
  200. infrahub/graphql/queries/relationship.py +2 -2
  201. infrahub/graphql/queries/search.py +2 -2
  202. infrahub/graphql/resolvers/many_relationship.py +264 -0
  203. infrahub/graphql/resolvers/resolver.py +13 -110
  204. infrahub/graphql/subscription/graphql_query.py +2 -0
  205. infrahub/graphql/types/event.py +20 -11
  206. infrahub/graphql/types/node.py +2 -2
  207. infrahub/graphql/utils.py +2 -2
  208. infrahub/groups/ancestors.py +29 -0
  209. infrahub/groups/parsers.py +107 -0
  210. infrahub/menu/generator.py +7 -7
  211. infrahub/menu/menu.py +0 -10
  212. infrahub/menu/models.py +117 -16
  213. infrahub/menu/repository.py +111 -0
  214. infrahub/menu/utils.py +5 -8
  215. infrahub/message_bus/messages/__init__.py +1 -11
  216. infrahub/message_bus/messages/check_generator_run.py +2 -0
  217. infrahub/message_bus/messages/finalize_validator_execution.py +3 -0
  218. infrahub/message_bus/messages/request_generatordefinition_check.py +2 -0
  219. infrahub/message_bus/operations/__init__.py +0 -2
  220. infrahub/message_bus/operations/check/generator.py +1 -0
  221. infrahub/message_bus/operations/event/__init__.py +2 -2
  222. infrahub/message_bus/operations/finalize/validator.py +51 -1
  223. infrahub/message_bus/operations/requests/generator_definition.py +19 -19
  224. infrahub/message_bus/operations/requests/proposed_change.py +3 -1
  225. infrahub/pools/number.py +2 -4
  226. infrahub/proposed_change/tasks.py +37 -28
  227. infrahub/pytest_plugin.py +13 -10
  228. infrahub/server.py +1 -2
  229. infrahub/services/adapters/event/__init__.py +1 -1
  230. infrahub/task_manager/event.py +23 -9
  231. infrahub/tasks/artifact.py +2 -4
  232. infrahub/telemetry/__init__.py +0 -0
  233. infrahub/telemetry/constants.py +9 -0
  234. infrahub/telemetry/database.py +86 -0
  235. infrahub/telemetry/models.py +65 -0
  236. infrahub/telemetry/task_manager.py +77 -0
  237. infrahub/{tasks/telemetry.py → telemetry/tasks.py} +49 -56
  238. infrahub/telemetry/utils.py +11 -0
  239. infrahub/trace.py +4 -4
  240. infrahub/transformations/tasks.py +2 -2
  241. infrahub/trigger/catalogue.py +2 -5
  242. infrahub/trigger/constants.py +0 -8
  243. infrahub/trigger/models.py +14 -1
  244. infrahub/trigger/setup.py +90 -0
  245. infrahub/trigger/tasks.py +35 -90
  246. infrahub/utils.py +11 -1
  247. infrahub/validators/__init__.py +0 -0
  248. infrahub/validators/events.py +42 -0
  249. infrahub/validators/tasks.py +41 -0
  250. infrahub/webhook/gather.py +17 -0
  251. infrahub/webhook/models.py +22 -5
  252. infrahub/webhook/tasks.py +44 -19
  253. infrahub/webhook/triggers.py +22 -5
  254. infrahub/workers/infrahub_async.py +2 -2
  255. infrahub/workers/utils.py +2 -2
  256. infrahub/workflows/catalogue.py +28 -20
  257. infrahub/workflows/initialization.py +1 -3
  258. infrahub/workflows/models.py +1 -1
  259. infrahub/workflows/utils.py +10 -1
  260. infrahub_sdk/client.py +27 -8
  261. infrahub_sdk/config.py +3 -0
  262. infrahub_sdk/context.py +13 -0
  263. infrahub_sdk/exceptions.py +6 -0
  264. infrahub_sdk/generator.py +4 -1
  265. infrahub_sdk/graphql.py +45 -13
  266. infrahub_sdk/node.py +69 -20
  267. infrahub_sdk/protocols_base.py +32 -11
  268. infrahub_sdk/query_groups.py +6 -35
  269. infrahub_sdk/schema/__init__.py +55 -26
  270. infrahub_sdk/schema/main.py +8 -0
  271. infrahub_sdk/task/__init__.py +10 -0
  272. infrahub_sdk/task/manager.py +12 -6
  273. infrahub_sdk/testing/schemas/animal.py +9 -0
  274. infrahub_sdk/timestamp.py +12 -4
  275. {infrahub_server-1.2.0b1.dist-info → infrahub_server-1.2.1.dist-info}/METADATA +3 -2
  276. {infrahub_server-1.2.0b1.dist-info → infrahub_server-1.2.1.dist-info}/RECORD +289 -260
  277. {infrahub_server-1.2.0b1.dist-info → infrahub_server-1.2.1.dist-info}/entry_points.txt +1 -0
  278. infrahub_testcontainers/constants.py +2 -0
  279. infrahub_testcontainers/container.py +157 -12
  280. infrahub_testcontainers/docker-compose.test.yml +31 -6
  281. infrahub_testcontainers/helpers.py +18 -73
  282. infrahub_testcontainers/host.py +41 -0
  283. infrahub_testcontainers/measurements.py +93 -0
  284. infrahub_testcontainers/models.py +38 -0
  285. infrahub_testcontainers/performance_test.py +166 -0
  286. infrahub_testcontainers/plugin.py +136 -0
  287. infrahub_testcontainers/prometheus.yml +30 -0
  288. infrahub/message_bus/messages/event_branch_create.py +0 -11
  289. infrahub/message_bus/messages/event_branch_delete.py +0 -11
  290. infrahub/message_bus/messages/event_branch_rebased.py +0 -9
  291. infrahub/message_bus/messages/event_node_mutated.py +0 -15
  292. infrahub/message_bus/messages/event_schema_update.py +0 -9
  293. infrahub/message_bus/operations/event/node.py +0 -20
  294. infrahub/message_bus/operations/event/schema.py +0 -17
  295. infrahub/webhook/constants.py +0 -1
  296. {infrahub_server-1.2.0b1.dist-info → infrahub_server-1.2.1.dist-info}/LICENSE.txt +0 -0
  297. {infrahub_server-1.2.0b1.dist-info → infrahub_server-1.2.1.dist-info}/WHEEL +0 -0
@@ -9,318 +9,320 @@ from infrahub.core.constants import (
9
9
  ValidatorConclusion,
10
10
  ValidatorState,
11
11
  )
12
+ from infrahub.core.constants import RelationshipCardinality as Cardinality
13
+ from infrahub.core.constants import RelationshipKind as RelKind
12
14
 
13
- core_propose_change_validator = {
14
- "name": "Validator",
15
- "namespace": "Core",
16
- "description": "",
17
- "include_in_menu": False,
18
- "label": "Validator",
19
- "order_by": ["started_at__value"],
20
- "display_labels": ["label__value"],
21
- "branch": BranchSupportType.AGNOSTIC.value,
22
- "attributes": [
23
- {"name": "label", "kind": "Text", "optional": True},
24
- {
25
- "name": "state",
26
- "kind": "Text",
27
- "enum": ValidatorState.available_types(),
28
- "default_value": ValidatorState.QUEUED.value,
29
- },
30
- {
31
- "name": "conclusion",
32
- "kind": "Text",
33
- "enum": ValidatorConclusion.available_types(),
34
- "default_value": ValidatorConclusion.UNKNOWN.value,
35
- },
36
- {"name": "completed_at", "kind": "DateTime", "optional": True},
37
- {"name": "started_at", "kind": "DateTime", "optional": True},
15
+ from ...attribute_schema import AttributeSchema as Attr
16
+ from ...generic_schema import GenericSchema
17
+ from ...node_schema import NodeSchema
18
+ from ...relationship_schema import (
19
+ RelationshipSchema as Rel,
20
+ )
21
+
22
+ core_propose_change_validator = GenericSchema(
23
+ name="Validator",
24
+ namespace="Core",
25
+ description="",
26
+ include_in_menu=False,
27
+ label="Validator",
28
+ order_by=["started_at__value"],
29
+ display_labels=["label__value"],
30
+ branch=BranchSupportType.AGNOSTIC,
31
+ attributes=[
32
+ Attr(name="label", kind="Text", optional=True),
33
+ Attr(
34
+ name="state", kind="Text", enum=ValidatorState.available_types(), default_value=ValidatorState.QUEUED.value
35
+ ),
36
+ Attr(
37
+ name="conclusion",
38
+ kind="Text",
39
+ enum=ValidatorConclusion.available_types(),
40
+ default_value=ValidatorConclusion.UNKNOWN.value,
41
+ ),
42
+ Attr(name="completed_at", kind="DateTime", optional=True),
43
+ Attr(name="started_at", kind="DateTime", optional=True),
38
44
  ],
39
- "relationships": [
40
- {
41
- "name": "proposed_change",
42
- "peer": InfrahubKind.PROPOSEDCHANGE,
43
- "kind": "Parent",
44
- "optional": False,
45
- "cardinality": "one",
46
- "identifier": "proposed_change__validator",
47
- },
48
- {
49
- "name": "checks",
50
- "peer": "CoreCheck",
51
- "kind": "Component",
52
- "optional": True,
53
- "cardinality": "many",
54
- "identifier": "validator__check",
55
- "on_delete": RelationshipDeleteBehavior.CASCADE,
56
- },
45
+ relationships=[
46
+ Rel(
47
+ name="proposed_change",
48
+ peer=InfrahubKind.PROPOSEDCHANGE,
49
+ kind=RelKind.PARENT,
50
+ optional=False,
51
+ cardinality=Cardinality.ONE,
52
+ identifier="proposed_change__validator",
53
+ ),
54
+ Rel(
55
+ name="checks",
56
+ peer=InfrahubKind.CHECK,
57
+ kind=RelKind.COMPONENT,
58
+ optional=True,
59
+ cardinality=Cardinality.MANY,
60
+ identifier="validator__check",
61
+ on_delete=RelationshipDeleteBehavior.CASCADE,
62
+ ),
57
63
  ],
58
- }
64
+ )
59
65
 
60
- core_data_validator = {
61
- "name": "DataValidator",
62
- "namespace": "Core",
63
- "description": "A check to validate the data integrity between two branches",
64
- "include_in_menu": False,
65
- "label": "Data Validator",
66
- "display_labels": ["label__value"],
67
- "inherit_from": [InfrahubKind.VALIDATOR],
68
- "generate_profile": False,
69
- "branch": BranchSupportType.AGNOSTIC.value,
70
- }
66
+ core_data_validator = NodeSchema(
67
+ name="DataValidator",
68
+ namespace="Core",
69
+ description="A check to validate the data integrity between two branches",
70
+ include_in_menu=False,
71
+ label="Data Validator",
72
+ display_labels=["label__value"],
73
+ inherit_from=[InfrahubKind.VALIDATOR],
74
+ generate_profile=False,
75
+ branch=BranchSupportType.AGNOSTIC,
76
+ )
71
77
 
72
- core_repository_validator = {
73
- "name": "RepositoryValidator",
74
- "namespace": "Core",
75
- "description": "A Validator related to a specific repository",
76
- "include_in_menu": False,
77
- "label": "Repository Validator",
78
- "display_labels": ["label__value"],
79
- "inherit_from": [InfrahubKind.VALIDATOR],
80
- "generate_profile": False,
81
- "branch": BranchSupportType.AGNOSTIC.value,
82
- "relationships": [
83
- {
84
- "name": "repository",
85
- "peer": InfrahubKind.GENERICREPOSITORY,
86
- "kind": "Attribute",
87
- "optional": False,
88
- "cardinality": "one",
89
- "branch": BranchSupportType.AGNOSTIC.value,
90
- },
78
+ core_repository_validator = NodeSchema(
79
+ name="RepositoryValidator",
80
+ namespace="Core",
81
+ description="A Validator related to a specific repository",
82
+ include_in_menu=False,
83
+ label="Repository Validator",
84
+ display_labels=["label__value"],
85
+ inherit_from=[InfrahubKind.VALIDATOR],
86
+ generate_profile=False,
87
+ branch=BranchSupportType.AGNOSTIC,
88
+ relationships=[
89
+ Rel(
90
+ name="repository",
91
+ peer=InfrahubKind.GENERICREPOSITORY,
92
+ kind=RelKind.ATTRIBUTE,
93
+ optional=False,
94
+ cardinality=Cardinality.ONE,
95
+ branch=BranchSupportType.AGNOSTIC,
96
+ ),
91
97
  ],
92
- }
98
+ )
93
99
 
94
- core_user_validator = {
95
- "name": "UserValidator",
96
- "namespace": "Core",
97
- "description": "A Validator related to a user defined checks in a repository",
98
- "include_in_menu": False,
99
- "label": "User Validator",
100
- "display_labels": ["label__value"],
101
- "inherit_from": [InfrahubKind.VALIDATOR],
102
- "generate_profile": False,
103
- "branch": BranchSupportType.AGNOSTIC.value,
104
- "relationships": [
105
- {
106
- "name": "check_definition",
107
- "peer": InfrahubKind.CHECKDEFINITION,
108
- "kind": "Attribute",
109
- "optional": False,
110
- "cardinality": "one",
111
- "branch": BranchSupportType.AGNOSTIC.value,
112
- },
113
- {
114
- "name": "repository",
115
- "peer": InfrahubKind.GENERICREPOSITORY,
116
- "kind": "Attribute",
117
- "optional": False,
118
- "cardinality": "one",
119
- "branch": BranchSupportType.AGNOSTIC.value,
120
- },
100
+ core_user_validator = NodeSchema(
101
+ name="UserValidator",
102
+ namespace="Core",
103
+ description="A Validator related to a user defined checks in a repository",
104
+ include_in_menu=False,
105
+ label="User Validator",
106
+ display_labels=["label__value"],
107
+ inherit_from=[InfrahubKind.VALIDATOR],
108
+ generate_profile=False,
109
+ branch=BranchSupportType.AGNOSTIC,
110
+ relationships=[
111
+ Rel(
112
+ name="check_definition",
113
+ peer=InfrahubKind.CHECKDEFINITION,
114
+ kind=RelKind.ATTRIBUTE,
115
+ optional=False,
116
+ cardinality=Cardinality.ONE,
117
+ branch=BranchSupportType.AGNOSTIC,
118
+ ),
119
+ Rel(
120
+ name="repository",
121
+ peer=InfrahubKind.GENERICREPOSITORY,
122
+ kind=RelKind.ATTRIBUTE,
123
+ optional=False,
124
+ cardinality=Cardinality.ONE,
125
+ branch=BranchSupportType.AGNOSTIC,
126
+ ),
121
127
  ],
122
- }
128
+ )
123
129
 
124
- core_schema_validator = {
125
- "name": "SchemaValidator",
126
- "namespace": "Core",
127
- "description": "A validator related to the schema",
128
- "include_in_menu": False,
129
- "label": "Schema Validator",
130
- "display_labels": ["label__value"],
131
- "generate_profile": False,
132
- "inherit_from": [InfrahubKind.VALIDATOR],
133
- "branch": BranchSupportType.AGNOSTIC.value,
134
- }
130
+ core_schema_validator = NodeSchema(
131
+ name="SchemaValidator",
132
+ namespace="Core",
133
+ description="A validator related to the schema",
134
+ include_in_menu=False,
135
+ label="Schema Validator",
136
+ display_labels=["label__value"],
137
+ generate_profile=False,
138
+ inherit_from=[InfrahubKind.VALIDATOR],
139
+ branch=BranchSupportType.AGNOSTIC,
140
+ )
135
141
 
136
- core_artifact_validator = {
137
- "name": "ArtifactValidator",
138
- "namespace": "Core",
139
- "description": "A validator related to the artifacts",
140
- "include_in_menu": False,
141
- "label": "Artifact Validator",
142
- "display_labels": ["label__value"],
143
- "inherit_from": [InfrahubKind.VALIDATOR],
144
- "generate_profile": False,
145
- "branch": BranchSupportType.AGNOSTIC.value,
146
- "relationships": [
147
- {
148
- "name": "definition",
149
- "peer": InfrahubKind.ARTIFACTDEFINITION,
150
- "kind": "Attribute",
151
- "optional": False,
152
- "cardinality": "one",
153
- "branch": BranchSupportType.AGNOSTIC.value,
154
- },
142
+ core_artifact_validator = NodeSchema(
143
+ name="ArtifactValidator",
144
+ namespace="Core",
145
+ description="A validator related to the artifacts",
146
+ include_in_menu=False,
147
+ label="Artifact Validator",
148
+ display_labels=["label__value"],
149
+ inherit_from=[InfrahubKind.VALIDATOR],
150
+ generate_profile=False,
151
+ branch=BranchSupportType.AGNOSTIC,
152
+ relationships=[
153
+ Rel(
154
+ name="definition",
155
+ peer=InfrahubKind.ARTIFACTDEFINITION,
156
+ kind=RelKind.ATTRIBUTE,
157
+ optional=False,
158
+ cardinality=Cardinality.ONE,
159
+ branch=BranchSupportType.AGNOSTIC,
160
+ ),
155
161
  ],
156
- }
162
+ )
157
163
 
158
- core_generator_validator = {
159
- "name": "GeneratorValidator",
160
- "namespace": "Core",
161
- "description": "A validator related to generators",
162
- "include_in_menu": False,
163
- "label": "Generator Validator",
164
- "display_labels": ["label__value"],
165
- "inherit_from": [InfrahubKind.VALIDATOR],
166
- "generate_profile": False,
167
- "branch": BranchSupportType.AGNOSTIC.value,
168
- "relationships": [
169
- {
170
- "name": "definition",
171
- "peer": InfrahubKind.GENERATORDEFINITION,
172
- "kind": "Attribute",
173
- "optional": False,
174
- "cardinality": "one",
175
- "branch": BranchSupportType.AGNOSTIC.value,
176
- },
164
+ core_generator_validator = NodeSchema(
165
+ name="GeneratorValidator",
166
+ namespace="Core",
167
+ description="A validator related to generators",
168
+ include_in_menu=False,
169
+ label="Generator Validator",
170
+ display_labels=["label__value"],
171
+ inherit_from=[InfrahubKind.VALIDATOR],
172
+ generate_profile=False,
173
+ branch=BranchSupportType.AGNOSTIC,
174
+ relationships=[
175
+ Rel(
176
+ name="definition",
177
+ peer=InfrahubKind.GENERATORDEFINITION,
178
+ kind=RelKind.ATTRIBUTE,
179
+ optional=False,
180
+ cardinality=Cardinality.ONE,
181
+ branch=BranchSupportType.AGNOSTIC,
182
+ ),
177
183
  ],
178
- }
184
+ )
179
185
 
180
- core_check = {
181
- "name": "Check",
182
- "namespace": "Core",
183
- "description": "",
184
- "display_labels": ["label__value"],
185
- "include_in_menu": False,
186
- "label": "Check",
187
- "branch": BranchSupportType.AGNOSTIC.value,
188
- "attributes": [
189
- {"name": "name", "kind": "Text", "optional": True},
190
- {"name": "label", "kind": "Text", "optional": True},
191
- {"name": "origin", "kind": "Text", "optional": False},
192
- {
193
- "name": "kind",
194
- "kind": "Text",
195
- "regex": "^[A-Z][a-zA-Z0-9]+$",
196
- "optional": False,
197
- "min_length": DEFAULT_KIND_MIN_LENGTH,
198
- "max_length": DEFAULT_KIND_MAX_LENGTH,
199
- },
200
- {"name": "message", "kind": "TextArea", "optional": True},
201
- {
202
- "name": "conclusion",
203
- "kind": "Text",
204
- "enum": ValidatorConclusion.available_types(),
205
- "default_value": ValidatorConclusion.UNKNOWN.value,
206
- "optional": True,
207
- },
208
- {
209
- "name": "severity",
210
- "kind": "Text",
211
- "enum": Severity.available_types(),
212
- "default_value": Severity.INFO.value,
213
- "optional": True,
214
- },
215
- {"name": "created_at", "kind": "DateTime", "optional": True},
186
+ core_check = GenericSchema(
187
+ name="Check",
188
+ namespace="Core",
189
+ description="",
190
+ display_labels=["label__value"],
191
+ include_in_menu=False,
192
+ label="Check",
193
+ branch=BranchSupportType.AGNOSTIC,
194
+ attributes=[
195
+ Attr(name="name", kind="Text", optional=True),
196
+ Attr(name="label", kind="Text", optional=True),
197
+ Attr(name="origin", kind="Text", optional=False),
198
+ Attr(
199
+ name="kind",
200
+ kind="Text",
201
+ regex=r"^[A-Z][a-zA-Z0-9]+$",
202
+ optional=False,
203
+ min_length=DEFAULT_KIND_MIN_LENGTH,
204
+ max_length=DEFAULT_KIND_MAX_LENGTH,
205
+ ),
206
+ Attr(name="message", kind="TextArea", optional=True),
207
+ Attr(
208
+ name="conclusion",
209
+ kind="Text",
210
+ enum=ValidatorConclusion.available_types(),
211
+ default_value=ValidatorConclusion.UNKNOWN.value,
212
+ optional=True,
213
+ ),
214
+ Attr(
215
+ name="severity",
216
+ kind="Text",
217
+ enum=Severity.available_types(),
218
+ default_value=Severity.INFO.value,
219
+ optional=True,
220
+ ),
221
+ Attr(name="created_at", kind="DateTime", optional=True),
216
222
  ],
217
- "relationships": [
218
- {
219
- "name": "validator",
220
- "peer": InfrahubKind.VALIDATOR,
221
- "identifier": "validator__check",
222
- "kind": "Parent",
223
- "optional": False,
224
- "cardinality": "one",
225
- },
223
+ relationships=[
224
+ Rel(
225
+ name="validator",
226
+ peer=InfrahubKind.VALIDATOR,
227
+ identifier="validator__check",
228
+ kind=RelKind.PARENT,
229
+ optional=False,
230
+ cardinality=Cardinality.ONE,
231
+ ),
226
232
  ],
227
- }
233
+ )
228
234
 
229
- core_data_check = {
230
- "name": "DataCheck",
231
- "namespace": "Core",
232
- "description": "A check related to some Data",
233
- "include_in_menu": False,
234
- "label": "Data Check",
235
- "display_labels": ["label__value"],
236
- "inherit_from": ["CoreCheck"],
237
- "generate_profile": False,
238
- "branch": BranchSupportType.AGNOSTIC.value,
239
- "attributes": [
240
- {"name": "conflicts", "kind": "JSON"},
241
- {"name": "keep_branch", "enum": BranchConflictKeep.available_types(), "kind": "Text", "optional": True},
242
- {"name": "enriched_conflict_id", "kind": "Text", "optional": True},
235
+ core_data_check = NodeSchema(
236
+ name="DataCheck",
237
+ namespace="Core",
238
+ description="A check related to some Data",
239
+ include_in_menu=False,
240
+ label="Data Check",
241
+ display_labels=["label__value"],
242
+ inherit_from=[InfrahubKind.CHECK],
243
+ generate_profile=False,
244
+ branch=BranchSupportType.AGNOSTIC,
245
+ attributes=[
246
+ Attr(name="conflicts", kind="JSON"),
247
+ Attr(name="keep_branch", kind="Text", enum=BranchConflictKeep.available_types(), optional=True),
248
+ Attr(name="enriched_conflict_id", kind="Text", optional=True),
243
249
  ],
244
- }
250
+ )
245
251
 
246
- core_standard_check = {
247
- "name": "StandardCheck",
248
- "namespace": "Core",
249
- "description": "A standard check",
250
- "include_in_menu": False,
251
- "label": "Standard Check",
252
- "display_labels": ["label__value"],
253
- "inherit_from": ["CoreCheck"],
254
- "generate_profile": False,
255
- "branch": BranchSupportType.AGNOSTIC.value,
256
- }
252
+ core_standard_check = NodeSchema(
253
+ name="StandardCheck",
254
+ namespace="Core",
255
+ description="A standard check",
256
+ include_in_menu=False,
257
+ label="Standard Check",
258
+ display_labels=["label__value"],
259
+ inherit_from=[InfrahubKind.CHECK],
260
+ generate_profile=False,
261
+ branch=BranchSupportType.AGNOSTIC,
262
+ )
257
263
 
258
- core_schema_check = {
259
- "name": "SchemaCheck",
260
- "namespace": "Core",
261
- "description": "A check related to the schema",
262
- "include_in_menu": False,
263
- "label": "Schema Check",
264
- "display_labels": ["label__value"],
265
- "inherit_from": ["CoreCheck"],
266
- "generate_profile": False,
267
- "branch": BranchSupportType.AGNOSTIC.value,
268
- "attributes": [
269
- {"name": "conflicts", "kind": "JSON"},
270
- {"name": "enriched_conflict_id", "kind": "Text", "optional": True},
264
+ core_schema_check = NodeSchema(
265
+ name="SchemaCheck",
266
+ namespace="Core",
267
+ description="A check related to the schema",
268
+ include_in_menu=False,
269
+ label="Schema Check",
270
+ display_labels=["label__value"],
271
+ inherit_from=[InfrahubKind.CHECK],
272
+ generate_profile=False,
273
+ branch=BranchSupportType.AGNOSTIC,
274
+ attributes=[
275
+ Attr(name="conflicts", kind="JSON"),
276
+ Attr(name="enriched_conflict_id", kind="Text", optional=True),
271
277
  ],
272
- }
278
+ )
273
279
 
274
- core_file_check = {
275
- "name": "FileCheck",
276
- "namespace": "Core",
277
- "description": "A check related to a file in a Git Repository",
278
- "include_in_menu": False,
279
- "label": "File Check",
280
- "display_labels": ["label__value"],
281
- "inherit_from": ["CoreCheck"],
282
- "generate_profile": False,
283
- "branch": BranchSupportType.AGNOSTIC.value,
284
- "attributes": [
285
- {"name": "files", "kind": "List", "optional": True},
286
- {"name": "commit", "kind": "Text", "optional": True},
280
+ core_file_check = NodeSchema(
281
+ name="FileCheck",
282
+ namespace="Core",
283
+ description="A check related to a file in a Git Repository",
284
+ include_in_menu=False,
285
+ label="File Check",
286
+ display_labels=["label__value"],
287
+ inherit_from=[InfrahubKind.CHECK],
288
+ generate_profile=False,
289
+ branch=BranchSupportType.AGNOSTIC,
290
+ attributes=[
291
+ Attr(name="files", kind="List", optional=True),
292
+ Attr(name="commit", kind="Text", optional=True),
287
293
  ],
288
- }
294
+ )
289
295
 
290
- core_artifact_check = {
291
- "name": "ArtifactCheck",
292
- "namespace": "Core",
293
- "description": "A check related to an artifact",
294
- "include_in_menu": False,
295
- "label": "Artifact Check",
296
- "display_labels": ["label__value"],
297
- "inherit_from": ["CoreCheck"],
298
- "generate_profile": False,
299
- "branch": BranchSupportType.AGNOSTIC.value,
300
- "attributes": [
301
- {"name": "changed", "kind": "Boolean", "optional": True},
302
- {"name": "checksum", "kind": "Text", "optional": True},
303
- {"name": "artifact_id", "kind": "Text", "optional": True},
304
- {"name": "storage_id", "kind": "Text", "optional": True},
305
- {"name": "line_number", "kind": "Number", "optional": True},
296
+ core_artifact_check = NodeSchema(
297
+ name="ArtifactCheck",
298
+ namespace="Core",
299
+ description="A check related to an artifact",
300
+ include_in_menu=False,
301
+ label="Artifact Check",
302
+ display_labels=["label__value"],
303
+ inherit_from=[InfrahubKind.CHECK],
304
+ generate_profile=False,
305
+ branch=BranchSupportType.AGNOSTIC,
306
+ attributes=[
307
+ Attr(name="changed", kind="Boolean", optional=True),
308
+ Attr(name="checksum", kind="Text", optional=True),
309
+ Attr(name="artifact_id", kind="Text", optional=True),
310
+ Attr(name="storage_id", kind="Text", optional=True),
311
+ Attr(name="line_number", kind="Number", optional=True),
306
312
  ],
307
- }
313
+ )
308
314
 
309
- core_generator_check = {
310
- "name": "GeneratorCheck",
311
- "namespace": "Core",
312
- "description": "A check related to a Generator instance",
313
- "include_in_menu": False,
314
- "label": "Generator Check",
315
- "display_labels": ["label__value"],
316
- "inherit_from": ["CoreCheck"],
317
- "generate_profile": False,
318
- "branch": BranchSupportType.AGNOSTIC.value,
319
- "attributes": [
320
- {
321
- "name": "instance",
322
- "kind": "Text",
323
- "optional": False,
324
- },
315
+ core_generator_check = NodeSchema(
316
+ name="GeneratorCheck",
317
+ namespace="Core",
318
+ description="A check related to a Generator instance",
319
+ include_in_menu=False,
320
+ label="Generator Check",
321
+ display_labels=["label__value"],
322
+ inherit_from=[InfrahubKind.CHECK],
323
+ generate_profile=False,
324
+ branch=BranchSupportType.AGNOSTIC,
325
+ attributes=[
326
+ Attr(name="instance", kind="Text", optional=False),
325
327
  ],
326
- }
328
+ )