Skip to content

Commit e09555b

Browse files
Add test with suggested inputs
1 parent 8dd6b4a commit e09555b

File tree

5 files changed

+81
-8
lines changed

5 files changed

+81
-8
lines changed

nortech/derivers/services/schema.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ def check_create_deriver_schema_imports(
116116
# Retrieve the source code of the function
117117
source_code = dedent(getsource(create_deriver_schema))
118118

119-
pattern = r"suggestedInputs=\[.*?\],?\s*"
119+
pattern = r"suggested_inputs=\[.*?\],?\s*"
120120
source_code_without_suggested_inputs = sub(pattern, "", source_code, flags=DOTALL)
121+
print(source_code_without_suggested_inputs)
121122

122123
# Define a clean global environment for execution
123124
clean_env: dict[str, Any] = {}

nortech/derivers/services/visualize.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def create_deriver_schema_subgraph(deriver_schema_dag: DeriverSchemaDAG):
1111
for deriver_input in deriver_schema_dag.inputs:
1212
if deriver_input.name != "timestamp":
1313
node_id = sha256(deriver_schema_dag.name.encode()).hexdigest()[:8]
14+
1415
if deriver_input.physical_quantity:
1516
mermaid += f"""
1617
{node_id}_{deriver_input.name}["{deriver_input.name}<br/>[{deriver_input.physical_quantity.si_unit_symbol.replace(" ", "")}]"] --> transform_stream_{node_id}["transform_stream"]
@@ -23,6 +24,7 @@ def create_deriver_schema_subgraph(deriver_schema_dag: DeriverSchemaDAG):
2324
for deriver_output in deriver_schema_dag.outputs:
2425
if deriver_output.name != "timestamp":
2526
node_id = sha256(deriver_schema_dag.name.encode()).hexdigest()[:8]
27+
2628
if deriver_output.physical_quantity:
2729
mermaid += f"""
2830
transform_stream_{node_id} --> {node_id}_{deriver_output.name}["{deriver_output.name}<br/>[{deriver_output.physical_quantity.si_unit_symbol.replace(" ", "")}]"]
@@ -50,6 +52,7 @@ def create_deriver_schema_dag_mermaid(mermaid: str, deriver_schema_dag: DeriverS
5052

5153
source_id = sha256(suggested_input.deriver_schema_dag.name.encode()).hexdigest()[:8]
5254
target_id = sha256(deriver_schema_dag.name.encode()).hexdigest()[:8]
55+
5356
mermaid += f"""
5457
{source_id}_{suggested_input.name} -.->|suggestedInput| {target_id}_{deriver_input.name}
5558
"""

tests/integration/derivers/snapshots/test_deriver/test_visualize_deriver/markdown_obj.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
flowchart LR
44
subgraph "Deriver (Test Deriver)"
55

6-
subgraph "DeriverSchema (Test Schema)"
6+
subgraph "DeriverSchema (Test Schema with suggested inputs)"
77

8-
4a9b921b_input_signal["input_signal<br/>[K]"] --> transform_stream_4a9b921b["transform_stream"]
8+
91ea505a_input_signal["input_signal<br/>[K]"] --> transform_stream_91ea505a["transform_stream"]
99

10-
transform_stream_4a9b921b --> 4a9b921b_output_signal["output_signal<br/>[K]"]
10+
transform_stream_91ea505a --> 91ea505a_output_signal["output_signal<br/>[K]"]
1111

1212
end
1313

14-
847cb464_Signal["Signal<br/>[°C]"] --> 4a9b921b_input_signal
14+
847cb464_Signal["Signal<br/>[°C]"] --> 91ea505a_input_signal
1515

16-
4a9b921b_output_signal --> 847cb464_output_signal["output_signal<br/>[°C]"]
16+
91ea505a_output_signal --> 847cb464_output_signal["output_signal<br/>[°C]"]
1717

1818
end
1919
```

tests/integration/derivers/snapshots/test_deriver/test_visualize_deriver_schema/markdown_obj.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ flowchart LR
88

99
transform_stream_4a9b921b --> 4a9b921b_output_signal["output_signal<br/>[K]"]
1010

11+
end
12+
13+
4a9b921b_output_signal -.->|suggestedInput| 91ea505a_input_signal
14+
15+
subgraph "DeriverSchema (Test Schema with suggested inputs)"
16+
17+
91ea505a_input_signal["input_signal<br/>[K]"] --> transform_stream_91ea505a["transform_stream"]
18+
19+
transform_stream_91ea505a --> 91ea505a_output_signal["output_signal<br/>[K]"]
20+
1121
end
1222

1323
```

tests/integration/derivers/test_deriver.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,66 @@ def transform_stream(
7474
)
7575

7676

77-
deriver_schema = create_test_schema()
77+
deriver_schema_without_suggested_inputs = create_test_schema()
78+
79+
80+
def create_test_schema_with_suggested_inputs():
81+
import bytewax.operators as op
82+
from bytewax.dataflow import Stream
83+
from pydantic import BaseModel
84+
85+
from nortech.derivers import (
86+
DeriverInputSchema,
87+
DeriverOutputSchema,
88+
DeriverSchema,
89+
InputField,
90+
OutputField,
91+
physical_units,
92+
)
93+
94+
class Input(DeriverInputSchema):
95+
input_signal: float | None = InputField(
96+
description="Input signal description",
97+
physical_quantity=physical_units.temperature,
98+
suggested_inputs=[deriver_schema_without_suggested_inputs.outputs.output_signal],
99+
)
100+
101+
class Output(DeriverOutputSchema):
102+
output_signal: float | None = OutputField(
103+
description="Output signal description",
104+
physical_quantity=physical_units.temperature,
105+
create_deriver_schema=create_test_schema_with_suggested_inputs,
106+
)
107+
108+
class Configurations(BaseModel):
109+
pass
110+
111+
def transform_stream(
112+
stream: Stream[Input],
113+
config: Configurations,
114+
) -> Stream[Output]:
115+
output_stream = op.map(
116+
step_id="map_output",
117+
up=stream,
118+
mapper=lambda input_message: Output(
119+
timestamp=input_message.timestamp,
120+
output_signal=input_message.input_signal,
121+
),
122+
)
123+
124+
return output_stream
125+
126+
return DeriverSchema(
127+
name="Test Schema with suggested inputs",
128+
description="Test Schema description with suggested inputs",
129+
inputs=Input,
130+
outputs=Output,
131+
configurations=Configurations,
132+
transform_stream=transform_stream,
133+
)
134+
135+
136+
deriver_schema = create_test_schema_with_suggested_inputs()
78137

79138
inputs = {
80139
deriver_schema.inputs.input_signal: DeriverInput(
@@ -107,7 +166,7 @@ def transform_stream(
107166
outputs=outputs,
108167
configurations=configurations,
109168
start_at=datetime(2022, 1, 1, 0, 0, 0),
110-
create_deriver_schema=create_test_schema,
169+
create_deriver_schema=create_test_schema_with_suggested_inputs,
111170
)
112171

113172

0 commit comments

Comments
 (0)