Skip to content

Commit 1c87065

Browse files
authored
fix: return payload instead of envelope in event context (#114)
2 parents d505d0e + 993e1b8 commit 1c87065

8 files changed

Lines changed: 35 additions & 33 deletions

File tree

nitric/api/secrets.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ class Secrets(object):
4141
This client insulates application code from stack specific secrets managements services.
4242
"""
4343

44-
def __init__(self):
44+
def __init__(self: Secrets):
4545
"""Construct a Nitric Storage Client."""
46-
self._channel: Union[Channel, None] = new_default_channel()
46+
self._channel: Channel = new_default_channel()
4747
self.secrets_stub = SecretServiceStub(channel=self._channel)
4848

4949
def __del__(self):
5050
# close the channel when this client is destroyed
5151
if self._channel is not None:
5252
self._channel.close()
5353

54-
def secret(self, name: str):
54+
def secret(self, name: str) -> SecretContainerRef:
5555
"""Return a reference to a secret container from the connected secrets management service."""
5656
return SecretContainerRef(_secrets=self, name=name)
5757

@@ -86,15 +86,15 @@ async def put(self, value: Union[str, bytes]) -> SecretVersion:
8686
except GRPCError as grpc_err:
8787
raise exception_from_grpc_error(grpc_err)
8888

89-
def version(self, version: str):
89+
def version(self, version: str) -> SecretVersion:
9090
"""
9191
Return a reference to a specific version of a secret.
9292
9393
Can be used to retrieve the secret value associated with the version.
9494
"""
9595
return SecretVersion(_secrets=self._secrets, secret=self, id=version)
9696

97-
def latest(self):
97+
def latest(self) -> SecretVersion:
9898
"""
9999
Return a reference to the 'latest' secret version.
100100
@@ -152,10 +152,10 @@ def __str__(self) -> str:
152152
def __bytes__(self) -> bytes:
153153
return self.value
154154

155-
def as_string(self):
155+
def as_string(self) -> str:
156156
"""Return the content of this secret value as a string."""
157157
return str(self)
158158

159-
def as_bytes(self):
159+
def as_bytes(self) -> bytes:
160160
"""Return the content of this secret value."""
161161
return bytes(self)

nitric/faas.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,10 @@ def __init__(self, data: bytes, topic: str, trace_context: Dict[str, str]):
263263
self.topic = topic
264264

265265
@property
266-
def payload(self) -> bytes:
267-
"""Return the payload of this request as text."""
268-
return json.loads(self.data.decode("utf-8"))
266+
def payload(self) -> Any:
267+
"""Return the payload of this event, usually a dictionary."""
268+
event_envelope = json.loads(self.data.decode("utf-8"))
269+
return event_envelope["payload"] if isinstance(event_envelope, dict) else event_envelope
269270

270271

271272
class EventResponse(Response):

nitric/resources/buckets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def __init__(self, name: str):
4949
super().__init__()
5050
self.name = name
5151

52-
async def _register(self):
52+
async def _register(self) -> None:
5353
try:
5454
await self._resources_stub.declare(
5555
resource_declare_request=ResourceDeclareRequest(resource=self._to_resource())
@@ -67,7 +67,7 @@ def _perms_to_actions(self, *args: BucketPermission) -> List[int]:
6767
return [action for perm in args for action in permission_actions_map[perm]]
6868

6969
def _to_resource(self) -> Resource:
70-
return Resource(name=self.name, type=ResourceType.Bucket) # type:ignore
70+
return Resource(name=self.name, type=ResourceType.Bucket) # type:ignore
7171

7272
def allow(self, *args: BucketPermission) -> BucketRef:
7373
"""Request the required permissions for this resource."""

nitric/resources/collections.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def __init__(self, name: str):
4343
super().__init__()
4444
self.name = name
4545

46-
async def _register(self):
46+
async def _register(self) -> None:
4747
try:
4848
await self._resources_stub.declare(
4949
resource_declare_request=ResourceDeclareRequest(resource=self._to_resource())
@@ -52,7 +52,7 @@ async def _register(self):
5252
raise exception_from_grpc_error(grpc_err)
5353

5454
def _to_resource(self) -> Resource:
55-
return Resource(name=self.name, type=ResourceType.Collection) # type:ignore
55+
return Resource(name=self.name, type=ResourceType.Collection) # type:ignore
5656

5757
def _perms_to_actions(self, *args: CollectionPermission) -> List[int]:
5858
permission_actions_map: dict[CollectionPermission, List[int]] = {

nitric/resources/queues.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from __future__ import annotations
2020

2121
from nitric.exception import exception_from_grpc_error
22-
from typing import List, Union, Literal
22+
from typing import List, Literal
2323
from grpclib import GRPCError
2424
from nitric.api.queues import QueueRef, Queues
2525
from nitric.application import Nitric
@@ -34,6 +34,7 @@
3434

3535
QueuePermission = Literal["sending", "receiving"]
3636

37+
3738
class Queue(SecureResource):
3839
"""A queue resource."""
3940

@@ -46,7 +47,7 @@ def __init__(self, name: str):
4647
self.name = name
4748

4849
def _to_resource(self) -> Resource:
49-
return Resource(name=self.name, type=ResourceType.Queue) # type:ignore
50+
return Resource(name=self.name, type=ResourceType.Queue) # type:ignore
5051

5152
def _perms_to_actions(self, *args: QueuePermission) -> List[int]:
5253
permission_actions_map: dict[QueuePermission, List[int]] = {
@@ -56,7 +57,7 @@ def _perms_to_actions(self, *args: QueuePermission) -> List[int]:
5657

5758
return [action for perm in args for action in permission_actions_map[perm]]
5859

59-
async def _register(self):
60+
async def _register(self) -> None:
6061
try:
6162
await self._resources_stub.declare(
6263
resource_declare_request=ResourceDeclareRequest(resource=self._to_resource())

nitric/resources/resource.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
from grpclib import GRPCError
2828
from nitric.proto.nitric.resource.v1 import (
29-
Action,
3029
PolicyResource,
3130
Resource as WireResource,
3231
ResourceType,
@@ -50,7 +49,7 @@ def __init__(self):
5049
self._resources_stub = ResourceServiceStub(channel=self._channel)
5150

5251
@abstractmethod
53-
async def _register(self):
52+
async def _register(self) -> None:
5453
pass
5554

5655
@classmethod
@@ -82,7 +81,7 @@ def _to_resource(self) -> WireResource:
8281
def _perms_to_actions(self, *args: Any) -> List[int]:
8382
pass
8483

85-
async def _register_policy_async(self, *args: str):
84+
async def _register_policy_async(self, *args: str) -> None:
8685
# if self._reg is not None:
8786
# await asyncio.wait({self._reg})
8887

@@ -100,7 +99,7 @@ async def _register_policy_async(self, *args: str):
10099
except GRPCError as grpc_err:
101100
raise exception_from_grpc_error(grpc_err)
102101

103-
def _register_policy(self, *args: str):
102+
def _register_policy(self, *args: str) -> None:
104103
try:
105104
loop = asyncio.get_event_loop()
106105
loop.run_until_complete(self._register_policy_async(*args))

nitric/resources/schedules.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
# limitations under the License.
1818
#
1919
from __future__ import annotations
20+
21+
from typing import Coroutine, Callable
22+
2023
from nitric.application import Nitric
21-
from nitric.faas import FunctionServer, Middleware, RateWorkerOptions, Frequency, EventContext
24+
from nitric.faas import FunctionServer, RateWorkerOptions, Frequency, EventHandler
2225

2326

2427
class Schedule:
@@ -27,15 +30,15 @@ class Schedule:
2730
description: str
2831
server: FunctionServer
2932

30-
def start(self):
33+
def start(self) -> Coroutine:
3134
"""Start the function server that executes the scheduled middleware."""
3235
return self.server.start()
3336

3437
def __init__(self, description: str):
3538
"""Construct a new schedule."""
3639
self.description = description
3740

38-
def every(self, rate_description: str, *middleware: Middleware[EventContext]):
41+
def every(self, rate_description: str, handler: EventHandler) -> None:
3942
"""
4043
Register middleware to be run at the specified rate.
4144
@@ -59,15 +62,15 @@ def every(self, rate_description: str, *middleware: Middleware[EventContext]):
5962
opts = RateWorkerOptions(self.description, int(rate), freq)
6063

6164
self.server = FunctionServer(opts)
62-
self.server.event(*middleware)
65+
self.server.event(handler)
6366
# type ignored because the register call is treated as protected.
6467
return Nitric._register_worker(self.server) # type: ignore
6568

6669

67-
def schedule(description: str, every: str):
70+
def schedule(description: str, every: str) -> Callable[[EventHandler], Schedule]:
6871
"""Return a schedule decorator."""
6972

70-
def decorator(func: Middleware[EventContext]):
73+
def decorator(func: EventHandler) -> Schedule:
7174
r = Schedule(description)
7275
r.every(every, func)
7376
return r

nitric/resources/topics.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
from nitric.api.events import Events, TopicRef
2222
from nitric.exception import exception_from_grpc_error
23-
from typing import List, Union, Callable, Literal
23+
from typing import List, Callable, Literal
2424
from grpclib import GRPCError
2525
from nitric.application import Nitric
2626
from nitric.faas import FunctionServer, SubscriptionWorkerOptions, EventHandler
@@ -47,7 +47,7 @@ def __init__(self, name: str):
4747
super().__init__()
4848
self.name = name
4949

50-
async def _register(self):
50+
async def _register(self) -> None:
5151
try:
5252
await self._resources_stub.declare(
5353
resource_declare_request=ResourceDeclareRequest(resource=self._to_resource())
@@ -56,12 +56,10 @@ async def _register(self):
5656
raise exception_from_grpc_error(grpc_err)
5757

5858
def _to_resource(self) -> Resource:
59-
return Resource(name=self.name, type=ResourceType.Topic) # type:ignore
59+
return Resource(name=self.name, type=ResourceType.Topic) # type:ignore
6060

6161
def _perms_to_actions(self, *args: TopicPermission) -> List[int]:
62-
_permMap: dict[TopicPermission, List[int]] = {
63-
"publishing": [Action.TopicEventPublish]
64-
}
62+
_permMap: dict[TopicPermission, List[int]] = {"publishing": [Action.TopicEventPublish]}
6563

6664
return [action for perm in args for action in _permMap[perm]]
6765

0 commit comments

Comments
 (0)