Skip to content

Commit 7ec6b48

Browse files
authored
Merge pull request #4652 from opsmill/dga-20241017-convert-transform
Convert Transform tasks to prefect
2 parents 24ad0c2 + e5656ff commit 7ec6b48

File tree

20 files changed

+181
-375
lines changed

20 files changed

+181
-375
lines changed

backend/infrahub/api/transformation.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,8 @@
2323
from infrahub.exceptions import TransformError
2424
from infrahub.graphql.initialization import prepare_graphql_params
2525
from infrahub.graphql.utils import extract_data
26-
from infrahub.message_bus.messages import (
27-
TransformPythonData,
28-
TransformPythonDataResponse,
29-
)
30-
from infrahub.message_bus.messages.transform_jinja_template import TransformJinjaTemplateData
31-
from infrahub.workflows.catalogue import TRANSFORM_JINJA2_RENDER
26+
from infrahub.transformations.models import TransformJinjaTemplateData, TransformPythonData
27+
from infrahub.workflows.catalogue import TRANSFORM_JINJA2_RENDER, TRANSFORM_PYTHON_RENDER
3228

3329
if TYPE_CHECKING:
3430
from infrahub.services import InfrahubServices
@@ -89,8 +85,10 @@ async def transform_python(
8985
data=data,
9086
)
9187

92-
response = await service.message_bus.rpc(message=message, response_class=TransformPythonDataResponse)
93-
return JSONResponse(content=response.data.transformed_data)
88+
response = await service.workflow.execute_workflow(
89+
workflow=TRANSFORM_PYTHON_RENDER, parameters={"message": message}
90+
)
91+
return JSONResponse(content=response)
9492

9593

9694
@router.get("/transform/jinja2/{transform_id}", response_class=PlainTextResponse)

backend/infrahub/message_bus/messages/__init__.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@
4949
from .send_echo_request import SendEchoRequest, SendEchoRequestResponse
5050
from .send_telemetry_push import SendTelemetryPush
5151
from .send_webhook_event import SendWebhookEvent
52-
from .transform_jinja_template import TransformJinjaTemplate, TransformJinjaTemplateResponse
53-
from .transform_python_data import TransformPythonData, TransformPythonDataResponse
5452
from .trigger_artifact_definition_generate import TriggerArtifactDefinitionGenerate
5553
from .trigger_generatordefinition_run import TriggerGeneratorDefinitionRun
5654
from .trigger_proposed_change_cancel import TriggerProposedChangeCancel
@@ -106,17 +104,13 @@
106104
"send.echo.request": SendEchoRequest,
107105
"send.webhook.event": SendWebhookEvent,
108106
"send.telemetry.push": SendTelemetryPush,
109-
"transform.jinja.template": TransformJinjaTemplate,
110-
"transform.python.data": TransformPythonData,
111107
"trigger.artifact_definition.generate": TriggerArtifactDefinitionGenerate,
112108
"trigger.generator_definition.run": TriggerGeneratorDefinitionRun,
113109
"trigger.proposed_change.cancel": TriggerProposedChangeCancel,
114110
"trigger.webhook.actions": TriggerWebhookActions,
115111
}
116112

117113
RESPONSE_MAP: dict[str, type[InfrahubResponse]] = {
118-
"transform.jinja.template": TransformJinjaTemplateResponse,
119-
"transform.python.data": TransformPythonDataResponse,
120114
"git.diff.names_only": GitDiffNamesOnlyResponse,
121115
"git.file.get": GitFileGetResponse,
122116
"send.echo.request": SendEchoRequestResponse,

backend/infrahub/message_bus/messages/transform_python_data.py

Lines changed: 0 additions & 26 deletions
This file was deleted.

backend/infrahub/message_bus/operations/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
requests,
1414
schema,
1515
send,
16-
transform,
1716
trigger,
1817
)
1918
from infrahub.message_bus.types import MessageTTL
@@ -70,8 +69,6 @@
7069
"send.telemetry.push": send.telemetry.push,
7170
"schema.migration.path": schema.migration.path,
7271
"schema.validator.path": schema.validator.path,
73-
"transform.jinja.template": transform.jinja.template,
74-
"transform.python.data": transform.python.data,
7572
"trigger.artifact_definition.generate": trigger.artifact_definition.generate,
7673
"trigger.generator_definition.run": trigger.generator_definition.run,
7774
"trigger.proposed_change.cancel": trigger.proposed_change.cancel,

backend/infrahub/message_bus/operations/transform/__init__.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

backend/infrahub/message_bus/operations/transform/jinja.py

Lines changed: 0 additions & 51 deletions
This file was deleted.

backend/infrahub/message_bus/operations/transform/python.py

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
from typing import Optional
2-
31
from pydantic import BaseModel, Field
42

5-
from infrahub.message_bus import InfrahubMessage, InfrahubResponse, InfrahubResponseData
63

7-
ROUTING_KEY = "transform.jinja.template"
4+
class TransformPythonData(BaseModel):
5+
"""Sent to run a Python transform."""
6+
7+
repository_id: str = Field(..., description="The unique ID of the Repository")
8+
repository_name: str = Field(..., description="The name of the repository")
9+
repository_kind: str = Field(..., description="The kind of the repository")
10+
data: dict = Field(..., description="Input data for the template")
11+
branch: str = Field(..., description="The branch to target")
12+
transform_location: str = Field(..., description="Location of the transform within the repository")
13+
commit: str = Field(..., description="The commit id to use when rendering the template")
814

915

1016
class TransformJinjaTemplateData(BaseModel):
@@ -17,16 +23,3 @@ class TransformJinjaTemplateData(BaseModel):
1723
branch: str = Field(..., description="The branch to target")
1824
template_location: str = Field(..., description="Location of the template within the repository")
1925
commit: str = Field(..., description="The commit id to use when rendering the template")
20-
21-
22-
class TransformJinjaTemplate(TransformJinjaTemplateData, InfrahubMessage):
23-
"""Sent to trigger the checks for a repository to be executed."""
24-
25-
26-
class TransformJinjaTemplateResponseData(InfrahubResponseData):
27-
rendered_template: Optional[str] = Field(None, description="Rendered template in string format")
28-
29-
30-
class TransformJinjaTemplateResponse(InfrahubResponse):
31-
routing_key: str = ROUTING_KEY
32-
data: TransformJinjaTemplateResponseData
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from typing import Any
2+
3+
from prefect import flow
4+
5+
from infrahub.git.repository import get_initialized_repo
6+
from infrahub.log import get_logger
7+
from infrahub.services import services
8+
9+
from .models import TransformJinjaTemplateData, TransformPythonData
10+
11+
log = get_logger()
12+
13+
14+
@flow(name="transform-render-python")
15+
async def transform_python(message: TransformPythonData) -> Any:
16+
service = services.service
17+
18+
repo = await get_initialized_repo(
19+
repository_id=message.repository_id,
20+
name=message.repository_name,
21+
service=service,
22+
repository_kind=message.repository_kind,
23+
)
24+
25+
transformed_data = await repo.execute_python_transform(
26+
branch_name=message.branch,
27+
commit=message.commit,
28+
location=message.transform_location,
29+
data=message.data,
30+
client=service.client,
31+
)
32+
33+
return transformed_data
34+
35+
36+
@flow(name="transform-render-jinja2")
37+
async def transform_render_jinja2_template(message: TransformJinjaTemplateData) -> str:
38+
service = services.service
39+
40+
repo = await get_initialized_repo(
41+
repository_id=message.repository_id,
42+
name=message.repository_name,
43+
service=service,
44+
repository_kind=message.repository_kind,
45+
)
46+
47+
rendered_template = await repo.render_jinja2_template(
48+
commit=message.commit, location=message.template_location, data={"data": message.data}
49+
)
50+
51+
return rendered_template

0 commit comments

Comments
 (0)