Skip to content

Commit 60b6163

Browse files
authored
Merge pull request #5956 from opsmill/dga-20250306-event-payload
Cleanup events payload
2 parents 2125843 + cfd1819 commit 60b6163

38 files changed

+364
-440
lines changed

backend/infrahub/computed_attribute/tasks.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from datetime import timedelta
44
from typing import TYPE_CHECKING, Any
55

6-
import ujson
76
from infrahub_sdk.protocols import (
87
CoreNode, # noqa: TC002
98
CoreTransformPython,
@@ -237,14 +236,12 @@ async def process_jinja2(
237236
computed_attribute_kind: str,
238237
context: InfrahubContext, # noqa: ARG001
239238
service: InfrahubServices,
240-
updated_fields: str | None = None,
239+
updated_fields: list[str] | None = None,
241240
) -> None:
242241
log = get_run_logger()
243242

244243
await add_tags(branches=[branch_name])
245-
updates: list[str] = []
246-
if isinstance(updated_fields, str):
247-
updates = ujson.loads(updated_fields)
244+
updates: list[str] = updated_fields or []
248245

249246
target_branch_schema = (
250247
branch_name if branch_name in registry.get_altered_schema_branches() else registry.default_branch
@@ -384,7 +381,13 @@ async def computed_attribute_setup(
384381
"object_id": "{{ event.resource['infrahub.node.id'] }}",
385382
"computed_attribute_name": computed_attribute.attribute.name,
386383
"computed_attribute_kind": computed_attribute.kind,
387-
"updated_fields": "{{ event.payload['fields'] | tojson }}",
384+
"updated_fields": {
385+
"__prefect_kind": "json",
386+
"value": {
387+
"__prefect_kind": "jinja",
388+
"template": "{{ event.payload['data']['fields'] | tojson }}",
389+
},
390+
},
388391
"context": {
389392
"__prefect_kind": "json",
390393
"value": {
@@ -457,7 +460,13 @@ async def computed_attribute_setup(
457460
"object_id": "{{ event.resource['infrahub.node.id'] }}",
458461
"computed_attribute_name": computed_attribute.attribute.name,
459462
"computed_attribute_kind": computed_attribute.kind,
460-
"updated_fields": "{{ event.payload['fields'] | tojson }}",
463+
"updated_fields": {
464+
"__prefect_kind": "json",
465+
"value": {
466+
"__prefect_kind": "jinja",
467+
"template": "{{ event.payload['data']['fields'] | tojson }}",
468+
},
469+
},
461470
"context": {
462471
"__prefect_kind": "json",
463472
"value": {

backend/infrahub/computed_attribute/triggers.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from infrahub.events.branch_action import BranchCreatedEvent, BranchDeletedEvent
2+
from infrahub.events.repository_action import CommitUpdatedEvent
3+
from infrahub.events.schema_action import SchemaUpdatedEvent
14
from infrahub.trigger.models import BuiltinTriggerDefinition, EventTrigger, ExecuteWorkflow
25
from infrahub.workflows.catalogue import (
36
COMPUTED_ATTRIBUTE_REMOVE_PYTHON,
@@ -9,7 +12,7 @@
912
name="computed-attribute-python-setup-on-branch-creation",
1013
previous_names={"Trigger-schema-update-event"},
1114
description="Trigger actions on branch create event",
12-
trigger=EventTrigger(events={"infrahub.branch.created"}),
15+
trigger=EventTrigger(events={BranchCreatedEvent.event_name}),
1316
actions=[
1417
ExecuteWorkflow(
1518
workflow=COMPUTED_ATTRIBUTE_SETUP_PYTHON,
@@ -28,7 +31,7 @@
2831
TRIGGER_COMPUTED_ATTRIBUTE_PYTHON_SETUP_COMMIT = BuiltinTriggerDefinition(
2932
name="computed-attribute-python-setup-on-commit",
3033
description="Trigger actions on branch create event",
31-
trigger=EventTrigger(events={"infrahub.repository.update_commit"}),
34+
trigger=EventTrigger(events={CommitUpdatedEvent.event_name}),
3235
actions=[
3336
ExecuteWorkflow(
3437
workflow=COMPUTED_ATTRIBUTE_SETUP_PYTHON,
@@ -47,7 +50,7 @@
4750
TRIGGER_COMPUTED_ATTRIBUTE_PYTHON_CLEAN_BRANCH = BuiltinTriggerDefinition(
4851
name="computed-attribute-python-cleanup-on-branch-deletion",
4952
description="Trigger actions on branch delete event",
50-
trigger=EventTrigger(events={"infrahub.branch.deleted"}),
53+
trigger=EventTrigger(events={BranchDeletedEvent.event_name}),
5154
actions=[
5255
ExecuteWorkflow(
5356
workflow=COMPUTED_ATTRIBUTE_REMOVE_PYTHON,
@@ -64,7 +67,7 @@
6467

6568
TRIGGER_COMPUTED_ATTRIBUTE_ALL_SCHEMA = BuiltinTriggerDefinition(
6669
name="computed-attribute-all-setup-on-schema-update",
67-
trigger=EventTrigger(events={"infrahub.schema.update"}),
70+
trigger=EventTrigger(events={SchemaUpdatedEvent.event_name}),
6871
actions=[
6972
ExecuteWorkflow(
7073
workflow=COMPUTED_ATTRIBUTE_SETUP,

backend/infrahub/context.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
from typing import Any
2+
13
from pydantic import BaseModel, Field
24
from typing_extensions import Self
35

46
from infrahub.auth import AccountSession
57
from infrahub.core.branch import Branch
8+
from infrahub.core.constants import GLOBAL_BRANCH_NAME
69

710

811
class ParentEvent(BaseModel):
@@ -21,6 +24,10 @@ class BranchContext(BaseModel):
2124
name: str
2225
id: str | None = None
2326

27+
@property
28+
def is_global(self) -> bool:
29+
return self.name == GLOBAL_BRANCH_NAME
30+
2431

2532
class InfrahubContext(BaseModel):
2633
branch: BranchContext
@@ -37,3 +44,6 @@ def set_event(self, name: str, id: str) -> None:
3744
self.event.id = id
3845
else:
3946
self.event = EventContext(name=name, id=id)
47+
48+
def to_event(self) -> dict[str, Any]:
49+
return self.model_dump(mode="json")

backend/infrahub/core/branch/tasks.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from infrahub.dependencies.registry import get_component_registry
3030
from infrahub.events.branch_action import BranchCreatedEvent, BranchDeletedEvent, BranchMergedEvent, BranchRebasedEvent
3131
from infrahub.events.models import EventMeta, InfrahubEvent
32-
from infrahub.events.node_action import NodeMutatedEvent
32+
from infrahub.events.node_action import get_node_event
3333
from infrahub.exceptions import BranchNotFoundError, MergeFailedError, ValidationError
3434
from infrahub.graphql.mutations.models import BranchCreateModel # noqa: TC001
3535
from infrahub.log import get_log_data
@@ -46,7 +46,7 @@
4646

4747

4848
@flow(name="branch-rebase", flow_run_name="Rebase branch {branch}")
49-
async def rebase_branch(branch: str, context: InfrahubContext, service: InfrahubServices) -> None:
49+
async def rebase_branch(branch: str, context: InfrahubContext, service: InfrahubServices) -> None: # noqa: PLR0915
5050
async with service.database.start_session() as db:
5151
log = get_run_logger()
5252
await add_tags(branches=[branch])
@@ -175,11 +175,11 @@ async def rebase_branch(branch: str, context: InfrahubContext, service: Infrahub
175175
diff=default_branch_diff, branch=obj, db=db, migration_tracker=MigrationTracker(migrations=migrations)
176176
)
177177
for action, node_changelog in changelog_collector.collect_changelogs():
178-
mutate_event = NodeMutatedEvent(
178+
node_event_class = get_node_event(MutationAction.from_diff_action(diff_action=action))
179+
mutate_event = node_event_class(
179180
kind=node_changelog.node_kind,
180181
node_id=node_changelog.node_id,
181-
data=node_changelog,
182-
action=MutationAction.from_diff_action(diff_action=action),
182+
changelog=node_changelog,
183183
fields=node_changelog.updated_fields,
184184
meta=EventMeta.from_parent(parent=rebase_event, branch=obj),
185185
)
@@ -282,11 +282,11 @@ async def merge_branch(branch: str, context: InfrahubContext, service: InfrahubS
282282

283283
for action, node_changelog in node_events:
284284
meta = EventMeta.from_parent(parent=merge_event, branch=default_branch)
285-
mutate_event = NodeMutatedEvent(
285+
node_event_class = get_node_event(MutationAction.from_diff_action(diff_action=action))
286+
mutate_event = node_event_class(
286287
kind=node_changelog.node_kind,
287288
node_id=node_changelog.node_id,
288-
data=node_changelog,
289-
action=MutationAction.from_diff_action(diff_action=action),
289+
changelog=node_changelog,
290290
fields=node_changelog.updated_fields,
291291
meta=meta,
292292
)

backend/infrahub/core/constants/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class EventType(InfrahubStringEnum):
5252
BRANCH_MERGED = f"{EVENT_NAMESPACE}.branch.merged"
5353
BRANCH_REBASED = f"{EVENT_NAMESPACE}.branch.rebased"
5454

55-
SCHEMA_UPDATED = f"{EVENT_NAMESPACE}.schema.update"
55+
SCHEMA_UPDATED = f"{EVENT_NAMESPACE}.schema.updated"
5656

5757
NODE_CREATED = f"{EVENT_NAMESPACE}.node.created"
5858
NODE_UPDATED = f"{EVENT_NAMESPACE}.node.updated"
Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,27 @@
1+
from .artifact_action import ArtifactCreatedEvent, ArtifactUpdatedEvent
2+
from .branch_action import BranchCreatedEvent, BranchDeletedEvent, BranchMergedEvent, BranchRebasedEvent
3+
from .group_action import GroupMemberAddedEvent, GroupMemberRemovedEvent
14
from .models import EventMeta, InfrahubEvent
2-
from .node_action import NodeMutatedEvent
5+
from .node_action import NodeCreatedEvent, NodeDeletedEvent, NodeUpdatedEvent
6+
from .repository_action import CommitUpdatedEvent
7+
from .validator_action import ValidatorFailedEvent, ValidatorPassedEvent, ValidatorStartedEvent
38

4-
__all__ = ["EventMeta", "InfrahubEvent", "NodeMutatedEvent"]
9+
__all__ = [
10+
"ArtifactCreatedEvent",
11+
"ArtifactUpdatedEvent",
12+
"BranchCreatedEvent",
13+
"BranchDeletedEvent",
14+
"BranchMergedEvent",
15+
"BranchRebasedEvent",
16+
"CommitUpdatedEvent",
17+
"EventMeta",
18+
"GroupMemberAddedEvent",
19+
"GroupMemberRemovedEvent",
20+
"InfrahubEvent",
21+
"NodeCreatedEvent",
22+
"NodeDeletedEvent",
23+
"NodeUpdatedEvent",
24+
"ValidatorFailedEvent",
25+
"ValidatorPassedEvent",
26+
"ValidatorStartedEvent",
27+
]

backend/infrahub/events/artifact_action.py

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
from typing import Any
1+
from typing import ClassVar
22

3-
from pydantic import Field, computed_field
4-
5-
from infrahub.message_bus import InfrahubMessage
3+
from pydantic import Field
64

75
from .constants import EVENT_NAMESPACE
86
from .models import InfrahubEvent
@@ -19,7 +17,6 @@ class ArtifactEvent(InfrahubEvent):
1917
checksum_previous: str | None = Field(default=None, description="The previous checksum of the artifact")
2018
storage_id: str = Field(..., description="The current storage id of the artifact")
2119
storage_id_previous: str | None = Field(default=None, description="The previous storage id of the artifact")
22-
created: bool = Field(..., description="Indicates if the artifact was created with this event or already existed")
2320

2421
def get_related(self) -> list[dict[str, str]]:
2522
related = super().get_related()
@@ -52,25 +49,10 @@ def get_resource(self) -> dict[str, str]:
5249
"infrahub.branch.name": self.meta.context.branch.name,
5350
}
5451

55-
def get_payload(self) -> dict[str, Any]:
56-
return {
57-
"node_id": self.node_id,
58-
"artifact_definition_id": self.artifact_definition_id,
59-
"target_id": self.target_id,
60-
"target_kind": self.target_kind,
61-
"checksum": self.checksum,
62-
"checksum_previous": self.checksum_previous,
63-
"storage_id": self.storage_id,
64-
"storage_id_previous": self.storage_id_previous,
65-
}
6652

67-
def get_messages(self) -> list[InfrahubMessage]:
68-
return []
53+
class ArtifactCreatedEvent(ArtifactEvent):
54+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.artifact.created"
55+
6956

70-
@computed_field
71-
def event_name(self) -> str:
72-
match self.created:
73-
case True:
74-
return f"{EVENT_NAMESPACE}.artifact.created"
75-
case False:
76-
return f"{EVENT_NAMESPACE}.artifact.updated"
57+
class ArtifactUpdatedEvent(ArtifactEvent):
58+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.artifact.updated"

backend/infrahub/events/branch_action.py

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from pydantic import Field, computed_field
1+
from typing import ClassVar
2+
3+
from pydantic import Field
24

35
from infrahub.message_bus import InfrahubMessage
46
from infrahub.message_bus.messages.refresh_registry_branches import RefreshRegistryBranches
@@ -11,6 +13,8 @@
1113
class BranchDeletedEvent(InfrahubEvent):
1214
"""Event generated when a branch has been deleted"""
1315

16+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.branch.deleted"
17+
1418
branch_name: str = Field(..., description="The name of the branch")
1519
branch_id: str = Field(..., description="The ID of the mutated node")
1620
sync_with_git: bool = Field(..., description="Indicates if the branch was extended to Git")
@@ -34,14 +38,12 @@ def get_messages(self) -> list[InfrahubMessage]:
3438
]
3539
return events
3640

37-
@computed_field
38-
def event_name(self) -> str:
39-
return f"{EVENT_NAMESPACE}.branch.deleted"
40-
4141

4242
class BranchCreatedEvent(InfrahubEvent):
4343
"""Event generated when a branch has been created"""
4444

45+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.branch.created"
46+
4547
branch_name: str = Field(..., description="The name of the branch")
4648
branch_id: str = Field(..., description="The ID of the branch")
4749
sync_with_git: bool = Field(..., description="Indicates if the branch was extended to Git")
@@ -65,14 +67,12 @@ def get_messages(self) -> list[InfrahubMessage]:
6567
]
6668
return events
6769

68-
@computed_field
69-
def event_name(self) -> str:
70-
return f"{EVENT_NAMESPACE}.branch.created"
71-
7270

7371
class BranchMergedEvent(InfrahubEvent):
7472
"""Event generated when a branch has been merged"""
7573

74+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.branch.merged"
75+
7676
branch_name: str = Field(..., description="The name of the branch")
7777
branch_id: str = Field(..., description="The ID of the branch")
7878

@@ -83,17 +83,12 @@ def get_resource(self) -> dict[str, str]:
8383
"infrahub.branch.name": self.branch_name,
8484
}
8585

86-
def get_messages(self) -> list[InfrahubMessage]:
87-
return []
88-
89-
@computed_field
90-
def event_name(self) -> str:
91-
return f"{EVENT_NAMESPACE}.branch.merged"
92-
9386

9487
class BranchRebasedEvent(InfrahubEvent):
9588
"""Event generated when a branch has been rebased"""
9689

90+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.branch.rebased"
91+
9792
branch_id: str = Field(..., description="The ID of the mutated node")
9893
branch_name: str = Field(..., description="The name of the branch")
9994

@@ -113,7 +108,3 @@ def get_messages(self) -> list[InfrahubMessage]:
113108
RefreshRegistryRebasedBranch(branch=self.branch_name),
114109
]
115110
return events
116-
117-
@computed_field
118-
def event_name(self) -> str:
119-
return f"{EVENT_NAMESPACE}.branch.rebased"

backend/infrahub/events/group_action.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from typing import Any
1+
from typing import ClassVar
22

3-
from pydantic import Field, computed_field
3+
from pydantic import Field
44

55
from infrahub.core.constants import MutationAction
6-
from infrahub.message_bus import InfrahubMessage
76

87
from .constants import EVENT_NAMESPACE
98
from .models import EventNode, InfrahubEvent
@@ -78,10 +77,6 @@ def get_related(self) -> list[dict[str, str]]:
7877

7978
return related
8079

81-
@computed_field
82-
def event_name(self) -> str:
83-
return f"{EVENT_NAMESPACE}.group.{self.action.value}"
84-
8580
def get_resource(self) -> dict[str, str]:
8681
return {
8782
"prefect.resource.id": f"infrahub.node.{self.node_id}",
@@ -91,27 +86,12 @@ def get_resource(self) -> dict[str, str]:
9186
"infrahub.node.root_id": self.node_id,
9287
}
9388

94-
def get_payload(self) -> dict[str, Any]:
95-
return {
96-
"ancestors": [ancestor.model_dump() for ancestor in self.ancestors],
97-
"members": [member.model_dump() for member in self.members],
98-
}
99-
100-
def get_messages(self) -> list[InfrahubMessage]:
101-
return []
102-
10389

10490
class GroupMemberAddedEvent(GroupMutatedEvent):
10591
action: MutationAction = MutationAction.CREATED
106-
107-
@computed_field
108-
def event_name(self) -> str:
109-
return f"{EVENT_NAMESPACE}.group.member_added"
92+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.group.member_added"
11093

11194

11295
class GroupMemberRemovedEvent(GroupMutatedEvent):
11396
action: MutationAction = MutationAction.DELETED
114-
115-
@computed_field
116-
def event_name(self) -> str:
117-
return f"{EVENT_NAMESPACE}.group.member_removed"
97+
event_name: ClassVar[str] = f"{EVENT_NAMESPACE}.group.member_removed"

0 commit comments

Comments
 (0)