A framework easily routing AppSync requests using AWS Lambda
Project description
appsync-router
WARNING - Version 4.0.0 is a breaking change from version 3.x.x. Please review the documentation before upgrading
A micro-library that allows for the registration of functions corresponding to AWS AppSync routes. This allows for cleanly creating a single AWS Lambda datasource without large numbers of conditionals to evaluate the called route.
Installation
pip install appsync-router
Basic Usage
from appsync_router import discrete_route, route_event
# Context is a TypedDict that makes access to
# the items passed to your Lambda function simpler
from appsync_router.context import Context
# Here we are telling the router that when the field "getItems"
# is called on the type "Query", call the function "get_items"
@discrete_route("Query", "getItems")
def get_items(context: Context) -> list:
return [1, 2, 3, 4]
def function_handler(event, context):
# simply route the event and return the results
return route_event(event)
NOTE -
appsync-router
is designed to be used as a Direct Invocation AWS AppSync datasource. If you put a request VTL template in front of it, you must pass in the WHOLE $ctx/$context object.
Route Types
Each route type has an overloaded signature allowing for simple declaration.
discrete_route
- This discretely routes to a named type and fieldmulti_route
- This routes to a set of named type/field combinationspattern_route
- This routes to types/fields that match the type and field regex patterns providedglob_route
- This routes to the types/fields that match the type and field glob patterns provided
Routing Events
As seen in the example above, the simplest form of event routing is to call route_event
with only the event argument. This will do the following:
- Determine the route for the event
- If no route is found, raise
NoRouteFoundException
- If more than one route is found, use the first route found
- If no route is found, raise
- Route the event if it is a single context, or map the event to the route if it is multiple contexts
Many times this will be sufficient. However, this behavior can be modified:
- Passing a
default_route
of typeRoute
to theroute_event
method will call yourdefault_route
if no route is found - Passing
short_circuit=False
to theroute_event
method will cause aMultipleRoutesFoundException
to be raised in the case of multiple matched routes. - Passing an
executor
of typeconcurrent.futures.Executor
to theroute_event
method will cause all batch invocations (where theevent
has a list of contexts) to be executed using your executor.
Extensibility
You may extend the appsync_router
with your own route types. Any routes that you create must extend from the appsync_router.routes.Route
class.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for appsync_router-4.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3c398afa88bb1a16d273817b469e79cbf0738eaa379a8d2ff746e3d5b1edb111 |
|
MD5 | 349e3ae83480cc0393214d405582f4c9 |
|
BLAKE2b-256 | b68b98d5a2f76d873acc25f4c8e6ac246752b30f36f49db182294e467cc2f4b7 |