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.
Files changed (73) hide show
  1. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/PKG-INFO +5 -1
  2. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/README.md +4 -0
  3. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/pyproject.toml +1 -1
  4. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/schema.py +2 -2
  5. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/capability/base.py +2 -0
  6. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/version.py +1 -1
  7. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/example_schema.json +1 -1
  8. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_base_capability_implementation.py +13 -0
  9. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_schema_valid.py +46 -2
  10. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/LICENSE +0 -0
  11. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/__init__.py +0 -0
  12. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/__init__.py +0 -0
  13. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/constants.py +0 -0
  14. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/__init__.py +0 -0
  15. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/__init__.py +0 -0
  16. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/amqp_client.py +0 -0
  17. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/broker_client.py +0 -0
  18. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/brokers/mqtt_client.py +0 -0
  19. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/control_plane_manager.py +0 -0
  20. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/discovery_service.py +0 -0
  21. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/control_plane/topic_handler.py +0 -0
  22. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/__init__.py +0 -0
  23. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/data_plane_manager.py +0 -0
  24. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/data_plane/minio_utils.py +0 -0
  25. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/event_metadata.py +0 -0
  26. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/exceptions.py +0 -0
  27. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/function_metadata.py +0 -0
  28. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/interfaces.py +0 -0
  29. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/logger.py +0 -0
  30. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/__init__.py +0 -0
  31. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/event.py +0 -0
  32. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/lifecycle.py +0 -0
  33. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/messages/userspace.py +0 -0
  34. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/multi_flag_thread_event.py +0 -0
  35. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/pydantic_schema_generator.py +0 -0
  36. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/stoppable_thread.py +0 -0
  37. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/utils.py +0 -0
  38. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/version.py +0 -0
  39. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/_internal/version_resolver.py +0 -0
  40. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/app_lifecycle.py +0 -0
  41. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/capability/__init__.py +0 -0
  42. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/client.py +0 -0
  43. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/client_callback_definitions.py +0 -0
  44. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/__init__.py +0 -0
  45. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/client.py +0 -0
  46. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/service.py +0 -0
  47. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/config/shared.py +0 -0
  48. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/constants.py +0 -0
  49. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/core_definitions.py +0 -0
  50. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/py.typed +0 -0
  51. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/schema.py +0 -0
  52. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service.py +0 -0
  53. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service_callback_definitions.py +0 -0
  54. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/service_definitions.py +0 -0
  55. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/src/intersect_sdk/shared_callback_definitions.py +0 -0
  56. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/__init__.py +0 -0
  57. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/conftest.py +0 -0
  58. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/e2e/__init__.py +0 -0
  59. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/e2e/test_examples.py +0 -0
  60. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/__init__.py +0 -0
  61. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/example_schema.py +0 -0
  62. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/fixtures/return_type_mismatch.py +0 -0
  63. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/integration/__init__.py +0 -0
  64. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/integration/test_return_type_mismatch.py +0 -0
  65. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/integration/test_service.py +0 -0
  66. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/__init__.py +0 -0
  67. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_annotations.py +0 -0
  68. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_config.py +0 -0
  69. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_invalid_schema_runtime.py +0 -0
  70. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_lifecycle_message.py +0 -0
  71. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_schema_invalids.py +0 -0
  72. {intersect_sdk-0.8.1 → intersect_sdk-0.8.2}/tests/unit/test_userspace_message.py +0 -0
  73. {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.1
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
  [![Static Badge](https://img.shields.io/badge/DOI-10.11578%2Fdc.20240927.1-blue)](https://doi.org/10.11578/dc.20240927.1)
32
+ [![CI](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/ci.yml)
33
+ [![Release to PyPi](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/publish.yml/badge.svg)](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/publish.yml)
34
+ [![PyPI version](https://badge.fury.io/py/intersect-sdk.svg)](https://badge.fury.io/py/intersect-sdk)
35
+ [![ReadTheDocs](https://readthedocs.org/projects/intersect-python-sdk/badge/?version=latest)](https://intersect-python-sdk.readthedocs.io/en/latest/)
32
36
 
33
37
  # INTERSECT-SDK
34
38
 
@@ -1,4 +1,8 @@
1
1
  [![Static Badge](https://img.shields.io/badge/DOI-10.11578%2Fdc.20240927.1-blue)](https://doi.org/10.11578/dc.20240927.1)
2
+ [![CI](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/ci.yml)
3
+ [![Release to PyPi](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/publish.yml/badge.svg)](https://github.com/INTERSECT-SDK/python-sdk/actions/workflows/publish.yml)
4
+ [![PyPI version](https://badge.fury.io/py/intersect-sdk.svg)](https://badge.fury.io/py/intersect-sdk)
5
+ [![ReadTheDocs](https://readthedocs.org/projects/intersect-python-sdk/badge/?version=latest)](https://intersect-python-sdk.readthedocs.io/en/latest/)
2
6
 
3
7
  # INTERSECT-SDK
4
8
 
@@ -35,7 +35,7 @@ dependencies = [
35
35
  "jsonschema[format-nongpl]>=4.21.1",
36
36
  "eval-type-backport>=0.1.3;python_version<'3.10'",
37
37
  ]
38
- version = "0.8.1"
38
+ version = "0.8.2"
39
39
 
40
40
  [project.license]
41
41
  text = "BSD-3-Clause"
@@ -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)
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  from ._internal.version import strip_version_metadata
9
9
 
10
10
  # may include build metadata
11
- __version__ = '0.8.1'
11
+ __version__ = '0.8.2'
12
12
 
13
13
  version_string = strip_version_metadata(__version__)
14
14
  """
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "asyncapi": "2.6.0",
3
- "x-intersect-version": "0.8.0",
3
+ "x-intersect-version": "0.8.2",
4
4
  "info": {
5
5
  "title": "test.test.test.test.test",
6
6
  "description": "INTERSECT schema",
@@ -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 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
+ )
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