Skip to content

Commit 5158c75

Browse files
committed
add registered plugin event types
1 parent 6dff44d commit 5158c75

File tree

8 files changed

+93
-4
lines changed

8 files changed

+93
-4
lines changed

canvas_generated/messages/plugins_pb2.py

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

canvas_generated/messages/plugins_pb2.pyi

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from google.protobuf.internal import containers as _containers
12
from google.protobuf import descriptor as _descriptor
23
from google.protobuf import message as _message
3-
from typing import ClassVar as _ClassVar, Optional as _Optional
4+
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Optional as _Optional
45

56
DESCRIPTOR: _descriptor.FileDescriptor
67

@@ -37,3 +38,13 @@ class UnloadPluginResponse(_message.Message):
3738
SUCCESS_FIELD_NUMBER: _ClassVar[int]
3839
success: bool
3940
def __init__(self, success: bool = ...) -> None: ...
41+
42+
class GetRegisteredEventTypesRequest(_message.Message):
43+
__slots__ = ()
44+
def __init__(self) -> None: ...
45+
46+
class GetRegisteredEventTypesResponse(_message.Message):
47+
__slots__ = ("event_types",)
48+
EVENT_TYPES_FIELD_NUMBER: _ClassVar[int]
49+
event_types: _containers.RepeatedScalarFieldContainer[str]
50+
def __init__(self, event_types: _Optional[_Iterable[str]] = ...) -> None: ...

canvas_generated/services/plugin_runner_pb2.py

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

canvas_generated/services/plugin_runner_pb2_grpc.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ def __init__(self, channel):
3535
request_serializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginRequest.SerializeToString,
3636
response_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginResponse.FromString,
3737
)
38+
self.GetRegisteredEventTypes = channel.unary_unary(
39+
'/canvas.PluginRunner/GetRegisteredEventTypes',
40+
request_serializer=canvas__generated_dot_messages_dot_plugins__pb2.GetRegisteredEventTypesRequest.SerializeToString,
41+
response_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.GetRegisteredEventTypesResponse.FromString,
42+
)
3843

3944

4045
class PluginRunnerServicer(object):
@@ -64,6 +69,12 @@ def UnloadPlugin(self, request, context):
6469
context.set_details('Method not implemented!')
6570
raise NotImplementedError('Method not implemented!')
6671

72+
def GetRegisteredEventTypes(self, request, context):
73+
"""Missing associated documentation comment in .proto file."""
74+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
75+
context.set_details('Method not implemented!')
76+
raise NotImplementedError('Method not implemented!')
77+
6778

6879
def add_PluginRunnerServicer_to_server(servicer, server):
6980
rpc_method_handlers = {
@@ -87,6 +98,11 @@ def add_PluginRunnerServicer_to_server(servicer, server):
8798
request_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginRequest.FromString,
8899
response_serializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginResponse.SerializeToString,
89100
),
101+
'GetRegisteredEventTypes': grpc.unary_unary_rpc_method_handler(
102+
servicer.GetRegisteredEventTypes,
103+
request_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.GetRegisteredEventTypesRequest.FromString,
104+
response_serializer=canvas__generated_dot_messages_dot_plugins__pb2.GetRegisteredEventTypesResponse.SerializeToString,
105+
),
90106
}
91107
generic_handler = grpc.method_handlers_generic_handler(
92108
'canvas.PluginRunner', rpc_method_handlers)
@@ -164,3 +180,20 @@ def UnloadPlugin(request,
164180
canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginResponse.FromString,
165181
options, channel_credentials,
166182
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
183+
184+
@staticmethod
185+
def GetRegisteredEventTypes(request,
186+
target,
187+
options=(),
188+
channel_credentials=None,
189+
call_credentials=None,
190+
insecure=False,
191+
compression=None,
192+
wait_for_ready=None,
193+
timeout=None,
194+
metadata=None):
195+
return grpc.experimental.unary_unary(request, target, '/canvas.PluginRunner/GetRegisteredEventTypes',
196+
canvas__generated_dot_messages_dot_plugins__pb2.GetRegisteredEventTypesRequest.SerializeToString,
197+
canvas__generated_dot_messages_dot_plugins__pb2.GetRegisteredEventTypesResponse.FromString,
198+
options, channel_credentials,
199+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)

plugin_runner/plugin_runner.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import settings
2626
from canvas_generated.messages.effects_pb2 import EffectType
2727
from canvas_generated.messages.plugins_pb2 import (
28+
GetRegisteredEventTypesRequest,
29+
GetRegisteredEventTypesResponse,
2830
ReloadPluginRequest,
2931
ReloadPluginResponse,
3032
ReloadPluginsRequest,
@@ -380,6 +382,12 @@ def UnloadPlugin(
380382
else:
381383
yield UnloadPluginResponse(success=True)
382384

385+
def GetRegisteredEventTypes(
386+
self, request: GetRegisteredEventTypesRequest, context: Any
387+
) -> GetRegisteredEventTypesResponse:
388+
"""Return the event types that have at least one registered handler."""
389+
return GetRegisteredEventTypesResponse(event_types=list(EVENT_HANDLER_MAP.keys()))
390+
383391

384392
STOP_SYNCHRONIZER = threading.Event()
385393

plugin_runner/tests/test_plugin_runner.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from canvas_generated.messages.effects_pb2 import Effect, EffectType
1515
from canvas_generated.messages.plugins_pb2 import (
16+
GetRegisteredEventTypesRequest,
1617
ReloadPluginRequest,
1718
ReloadPluginsRequest,
1819
UnloadPluginRequest,
@@ -792,3 +793,27 @@ def test_payment_processor(
792793
]
793794

794795
assert result[0].effects == expected_effects
796+
797+
798+
@pytest.mark.parametrize("install_test_plugin", ["example_plugin"], indirect=True)
799+
def test_get_registered_event_types_returns_loaded_event_types(
800+
install_test_plugin: Path,
801+
plugin_runner: PluginRunner,
802+
load_test_plugins: None,
803+
) -> None:
804+
"""Test that GetRegisteredEventTypes returns the event types of loaded plugins."""
805+
response = plugin_runner.GetRegisteredEventTypes(GetRegisteredEventTypesRequest(), None)
806+
807+
assert EventType.Name(EventType.UNKNOWN) in response.event_types
808+
809+
810+
def test_get_registered_event_types_returns_empty_when_no_plugins(
811+
plugin_runner: PluginRunner,
812+
) -> None:
813+
"""Test that GetRegisteredEventTypes returns empty when no plugins are loaded."""
814+
LOADED_PLUGINS.clear()
815+
EVENT_HANDLER_MAP.clear()
816+
817+
response = plugin_runner.GetRegisteredEventTypes(GetRegisteredEventTypesRequest(), None)
818+
819+
assert list(response.event_types) == []

protobufs/canvas_generated/messages/plugins.proto

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,10 @@ message UnloadPluginRequest {
2121

2222
message UnloadPluginResponse {
2323
bool success = 1;
24+
}
25+
26+
message GetRegisteredEventTypesRequest {}
27+
28+
message GetRegisteredEventTypesResponse {
29+
repeated string event_types = 1;
2430
}

protobufs/canvas_generated/services/plugin_runner.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ service PluginRunner {
1313
rpc ReloadPlugin (ReloadPluginRequest) returns (stream ReloadPluginResponse);
1414

1515
rpc UnloadPlugin (UnloadPluginRequest) returns (stream UnloadPluginResponse);
16+
17+
rpc GetRegisteredEventTypes (GetRegisteredEventTypesRequest) returns (GetRegisteredEventTypesResponse);
1618
}

0 commit comments

Comments
 (0)