Skip to content

Commit dd41396

Browse files
committed
allow for @intersect_status to be sufficient for building a capability
Signed-off-by: Lance Drane <[email protected]>
1 parent 387e0d2 commit dd41396

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

src/intersect_sdk/_internal/schema.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ def _get_functions(
143143
logger.warning(
144144
f"Class '{capability.__name__}' has no function annotated with the @intersect_status() decorator. No status information will be provided when sending status messages."
145145
)
146-
if not intersect_messages and not intersect_events:
146+
if not intersect_messages and not intersect_events and not intersect_status:
147147
die(
148-
f"No intersect annotations detected on class '{capability.__name__}'. Please annotate at least one entrypoint with '@intersect_message()', or one event-emitting function with '@intersect_event()' ."
148+
f"No intersect annotations detected on class '{capability.__name__}'. Please annotate at least one entrypoint with '@intersect_message()', or one event-emitting function with '@intersect_event()', or create an '@intersect_status' function."
149149
)
150150
return intersect_status, intersect_messages, intersect_events
151151

tests/unit/test_schema_valid.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
import json
22
from pathlib import Path
33

4-
from intersect_sdk import IntersectDataHandler, IntersectMimeType
4+
from intersect_sdk import (
5+
IntersectBaseCapabilityImplementation,
6+
IntersectDataHandler,
7+
IntersectEventDefinition,
8+
IntersectMimeType,
9+
intersect_event,
10+
intersect_message,
11+
intersect_status,
12+
)
513
from intersect_sdk._internal.constants import (
614
REQUEST_CONTENT,
715
RESPONSE_CONTENT,
@@ -22,7 +30,43 @@ def get_fixture_path(fixture: str):
2230
return Path(__file__).absolute().parents[1] / 'fixtures' / fixture
2331

2432

25-
# TESTS ##################
33+
# MINIMAL ANNOTATION TESTS ######################
34+
35+
36+
def test_minimal_intersect_annotations():
37+
class CapWithMessage(IntersectBaseCapabilityImplementation):
38+
intersect_sdk_capability_name = 'CapWithMessage'
39+
40+
@intersect_message
41+
def message_function(self, theinput: int) -> int:
42+
return theinput * 4
43+
44+
class CapWithEvent(IntersectBaseCapabilityImplementation):
45+
intersect_sdk_capability_name = 'CapWithEvent'
46+
47+
@intersect_event(events={'event': IntersectEventDefinition(event_type=str)})
48+
def event_function(self):
49+
self.intersect_sdk_emit_event('event', 'emitted_value')
50+
51+
class CapWithStatus(IntersectBaseCapabilityImplementation):
52+
intersect_sdk_capability_name = 'CapWithStatus'
53+
54+
@intersect_status
55+
def status_function(self) -> str:
56+
return 'Up'
57+
58+
schemas = get_schema_from_capability_implementations(
59+
[
60+
CapWithEvent,
61+
CapWithMessage,
62+
CapWithStatus,
63+
],
64+
FAKE_HIERARCHY_CONFIG,
65+
)
66+
assert len(schemas['capabilities']) == 3
67+
68+
69+
# FIXTURE TESTS ##################
2670

2771

2872
def test_schema_comparison():

0 commit comments

Comments
 (0)