Skip to content

Commit

Permalink
v0.4 (#91)
Browse files Browse the repository at this point in the history
  • Loading branch information
goodoldneon committed May 29, 2024
1 parent 137cba0 commit 7f3c43d
Show file tree
Hide file tree
Showing 44 changed files with 1,298 additions and 560 deletions.
2 changes: 2 additions & 0 deletions examples/functions/invoke.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ async def invoker(
"invoke",
app_id=client.app_id,
function_id="invokee",
timeout=60_000,
)
print(res)

Expand Down Expand Up @@ -56,6 +57,7 @@ def invoker(
"invoke",
app_id=client.app_id,
function_id="invokee",
timeout=60_000,
)
print(type(res))
print(res)
Expand Down
16 changes: 10 additions & 6 deletions inngest/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
"""Public entrypoint for the Inngest SDK."""


from ._internal.client_lib import Inngest
from ._internal.client_lib import Inngest, SendEventsResult
from ._internal.errors import NonRetriableError, RetryAfterError, StepError
from ._internal.event_lib import Event
from ._internal.execution import Output
from ._internal.function import Context, Function
from ._internal.function_config import (
Batch,
Expand All @@ -16,8 +15,12 @@
TriggerCron,
TriggerEvent,
)
from ._internal.middleware_lib import Middleware, MiddlewareSync
from ._internal.step_lib import FunctionID, Step, StepSync
from ._internal.middleware_lib import (
Middleware,
MiddlewareSync,
TransformOutputResult,
)
from ._internal.step_lib import Step, StepMemos, StepSync
from ._internal.types import JSON

__all__ = [
Expand All @@ -28,19 +31,20 @@
"Debounce",
"Event",
"Function",
"FunctionID",
"Inngest",
"JSON",
"Middleware",
"MiddlewareSync",
"NonRetriableError",
"Output",
"RateLimit",
"RetryAfterError",
"SendEventsResult",
"Step",
"StepError",
"StepMemos",
"StepSync",
"Throttle",
"TransformOutputResult",
"TriggerCron",
"TriggerEvent",
]
4 changes: 4 additions & 0 deletions inngest/_internal/client_lib/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from .client import Inngest
from .models import SendEventsResult

__all__ = ["Inngest", "SendEventsResult"]
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import httpx

from . import (
from inngest._internal import (
const,
env_lib,
errors,
Expand All @@ -20,6 +20,8 @@
types,
)

from . import models

# Dummy value
_DEV_SERVER_EVENT_KEY = "NO_EVENT_KEY_SET"

Expand Down Expand Up @@ -404,21 +406,39 @@ async def send(
if not isinstance(events, list):
events = [events]

middleware = None
if not skip_middleware:
middleware = middleware_lib.MiddlewareManager.from_client(self)
middleware = middleware_lib.MiddlewareManager.from_client(
self,
raw_request=None,
)
await middleware.before_send_events(events)

req = self._build_send_request(events)
if isinstance(req, Exception):
raise req

res = await net.fetch_with_thready_safety(
self._http_client,
self._http_client_sync,
req,
result = models.SendEventsResult.from_raw(
(
await net.fetch_with_thready_safety(
self._http_client,
self._http_client_sync,
req,
)
).json()
)
if isinstance(result, Exception):
raise result

if middleware is not None:
err = await middleware.after_send_events(result)
if isinstance(err, Exception):
raise err

if result.error is not None:
raise errors.SendEventsError(result.error, result.ids)

return _extract_ids(res.json())
return result.ids

def send_sync(
self,
Expand All @@ -438,28 +458,38 @@ def send_sync(
if not isinstance(events, list):
events = [events]

middleware = None
if not skip_middleware:
middleware = middleware_lib.MiddlewareManager.from_client(self)
middleware.before_send_events_sync(events)
middleware = middleware_lib.MiddlewareManager.from_client(
self,
raw_request=None,
)
err = middleware.before_send_events_sync(events)
if isinstance(err, Exception):
raise err

req = self._build_send_request(events)
if isinstance(req, Exception):
raise req
return _extract_ids((self._http_client_sync.send(req)).json())

def set_logger(self, logger: types.Logger) -> None:
self.logger = logger
result = models.SendEventsResult.from_raw(
(self._http_client_sync.send(req)).json(),
)
if isinstance(result, Exception):
raise result

if middleware is not None:
err = middleware.after_send_events_sync(result)
if isinstance(err, Exception):
raise err

def _extract_ids(body: object) -> list[str]:
if not isinstance(body, dict) or "ids" not in body:
raise errors.BodyInvalidError("unexpected response when sending events")
if result.error is not None:
raise errors.SendEventsError(result.error, result.ids)

ids = body["ids"]
if not isinstance(ids, list):
raise errors.BodyInvalidError("unexpected response when sending events")
return result.ids

return ids
def set_logger(self, logger: types.Logger) -> None:
self.logger = logger


def _get_mode(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import pytest

from . import client_lib, const, errors, event_lib
from inngest._internal import client_lib, const, errors, event_lib


class Test(unittest.TestCase):
Expand Down
8 changes: 8 additions & 0 deletions inngest/_internal/client_lib/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import typing

from inngest._internal import types


class SendEventsResult(types.BaseModel):
error: typing.Optional[str] = None
ids: list[str]
Loading

0 comments on commit 7f3c43d

Please sign in to comment.