intersect-sdk 0.8.1__tar.gz → 0.8.2__tar.gz
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.
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/PKG-INFO +5 -1
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/README.md +4 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/pyproject.toml +1 -1
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/schema.py +2 -2
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/capability/base.py +2 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/version.py +1 -1
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/example_schema.json +1 -1
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_base_capability_implementation.py +13 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_schema_valid.py +46 -2
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/LICENSE +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/constants.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/amqp_client.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/broker_client.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/mqtt_client.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/control_plane_manager.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/discovery_service.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/topic_handler.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/data_plane_manager.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/minio_utils.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/event_metadata.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/exceptions.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/function_metadata.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/interfaces.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/logger.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/event.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/lifecycle.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/userspace.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/multi_flag_thread_event.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/pydantic_schema_generator.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/stoppable_thread.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/utils.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/version.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/version_resolver.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/app_lifecycle.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/capability/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/client.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/client_callback_definitions.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/client.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/service.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/shared.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/constants.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/core_definitions.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/py.typed +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/schema.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service_callback_definitions.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service_definitions.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/shared_callback_definitions.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/conftest.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/e2e/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/e2e/test_examples.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/example_schema.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/return_type_mismatch.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/integration/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/integration/test_return_type_mismatch.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/integration/test_service.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/__init__.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_annotations.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_config.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_invalid_schema_runtime.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_lifecycle_message.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_schema_invalids.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_userspace_message.py +0 -0
- {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_version_resolver.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: intersect-sdk
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.2
|
|
4
4
|
Summary: Python SDK to interact with INTERSECT
|
|
5
5
|
Keywords: intersect
|
|
6
6
|
Author-Email: Lance Drane <dranelt@ornl.gov>, Marshall McDonnell <mcdonnellmt@ornl.gov>, Seth Hitefield <hitefieldsd@ornl.gov>, Andrew Ayres <ayresaf@ornl.gov>, Gregory Cage <cagege@ornl.gov>, Jesse McGaha <mcgahajr@ornl.gov>, Robert Smith <smithrw@ornl.gov>, Gavin Wiggins <wigginsg@ornl.gov>, Michael Brim <brimmj@ornl.gov>, Rick Archibald <archibaldrk@ornl.gov>, Addi Malviya Thakur <malviyaa@ornl.gov>
|
|
@@ -29,6 +29,10 @@ Requires-Dist: furo>=2023.3.27; extra == "docs"
|
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
30
30
|
|
|
31
31
|
[](https://doi.org/10.11578/dc.20240927.1)
|
|
32
|
+
[](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/ci.yml)
|
|
33
|
+
[](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/publish.yml)
|
|
34
|
+
[](https://badge.fury.io/py/intersect-sdk)
|
|
35
|
+
[](https://intersect-python-sdk.readthedocs.io/en/latest/)
|
|
32
36
|
|
|
33
37
|
# INTERSECT-SDK
|
|
34
38
|
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
[](https://doi.org/10.11578/dc.20240927.1)
|
|
2
|
+
[](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/ci.yml)
|
|
3
|
+
[](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/publish.yml)
|
|
4
|
+
[](https://badge.fury.io/py/intersect-sdk)
|
|
5
|
+
[](https://intersect-python-sdk.readthedocs.io/en/latest/)
|
|
2
6
|
|
|
3
7
|
# INTERSECT-SDK
|
|
4
8
|
|
|
@@ -143,9 +143,9 @@ def _get_functions(
|
|
|
143
143
|
logger.warning(
|
|
144
144
|
f"Class '{capability.__name__}' has no function annotated with the @intersect_status() decorator. No status information will be provided when sending status messages."
|
|
145
145
|
)
|
|
146
|
-
if not intersect_messages and not intersect_events:
|
|
146
|
+
if not intersect_messages and not intersect_events and not intersect_status:
|
|
147
147
|
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."
|
|
149
149
|
)
|
|
150
150
|
return intersect_status, intersect_messages, intersect_events
|
|
151
151
|
|
|
@@ -68,6 +68,8 @@ class IntersectBaseCapabilityImplementation:
|
|
|
68
68
|
is not IntersectBaseCapabilityImplementation.intersect_sdk_emit_event
|
|
69
69
|
or cls.intersect_sdk_call_service
|
|
70
70
|
is not IntersectBaseCapabilityImplementation.intersect_sdk_call_service
|
|
71
|
+
or cls.intersect_sdk_listen_for_service_event
|
|
72
|
+
is not IntersectBaseCapabilityImplementation.intersect_sdk_listen_for_service_event
|
|
71
73
|
):
|
|
72
74
|
msg = f"{cls.__name__}: Attempted to override a reserved INTERSECT-SDK function (don't start your function names with '_intersect_sdk_' or 'intersect_sdk_')"
|
|
73
75
|
raise RuntimeError(msg)
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_base_capability_implementation.py
RENAMED
|
@@ -73,6 +73,19 @@ def test_no_override():
|
|
|
73
73
|
|
|
74
74
|
assert 'BadClass3: Attempted to override a reserved INTERSECT-SDK function' in str(ex)
|
|
75
75
|
|
|
76
|
+
with pytest.raises(RuntimeError) as ex:
|
|
77
|
+
|
|
78
|
+
class BadClass4(IntersectBaseCapabilityImplementation):
|
|
79
|
+
def intersect_sdk_listen_for_service_event(
|
|
80
|
+
self,
|
|
81
|
+
service,
|
|
82
|
+
event_name,
|
|
83
|
+
response_handler,
|
|
84
|
+
) -> None:
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
assert 'BadClass4: Attempted to override a reserved INTERSECT-SDK function' in str(ex)
|
|
88
|
+
|
|
76
89
|
|
|
77
90
|
# Note that the ONLY thing the capability itself checks for are annotated functions.
|
|
78
91
|
# The event definitions and overall schema validation are a service-specific feature
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
|
-
from intersect_sdk import
|
|
4
|
+
from intersect_sdk import (
|
|
5
|
+
IntersectBaseCapabilityImplementation,
|
|
6
|
+
IntersectDataHandler,
|
|
7
|
+
IntersectEventDefinition,
|
|
8
|
+
IntersectMimeType,
|
|
9
|
+
intersect_event,
|
|
10
|
+
intersect_message,
|
|
11
|
+
intersect_status,
|
|
12
|
+
)
|
|
5
13
|
from intersect_sdk._internal.constants import (
|
|
6
14
|
REQUEST_CONTENT,
|
|
7
15
|
RESPONSE_CONTENT,
|
|
@@ -22,7 +30,43 @@ def get_fixture_path(fixture: str):
|
|
|
22
30
|
return Path(__file__).absolute().parents[1] / 'fixtures' / fixture
|
|
23
31
|
|
|
24
32
|
|
|
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 ##################
|
|
26
70
|
|
|
27
71
|
|
|
28
72
|
def test_schema_comparison():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/minio_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/function_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/lifecycle.py
RENAMED
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/userspace.py
RENAMED
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/multi_flag_thread_event.py
RENAMED
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/pydantic_schema_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/client_callback_definitions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service_callback_definitions.py
RENAMED
|
File without changes
|
|
File without changes
|
{intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/shared_callback_definitions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|