OpenStax Lambda@Edge utilities
Project description
late-python
A Python package with OpenStax Lambda@Edge ("lAMBDA at eDGE") utilities.
Overview
late-python
provides object overlays
to the JSON containers
inside Lambda@Edge events and responses.
These overlay objects handle the details
of accessing and modifying
the containers they overlay.
All get_*
methods
leave the underlying container intact,
and all set_*
methods
modify it in place.
Usage
Dealing With Request Events
from oxlate import Event, Response def lambda_handler(event, context): request = Event(event).request() ## returns Request overlay ## get and set the request uri field request.get_uri() request.set_uri('/some/new/uri') ## get the viewer's country code request.get_viewer_country() ## return Headers overlay headers = request.get_headers() ## get the Request event header array-of-hash (or None if missing): ## [{name=..., value=...}] headers.get(name='header-name') ## get the header value only ## (or None if missing and no default given) headers.get_value(name='header-name', default='some default') ## set or overwrite a header headers.set( name = 'header-name', value = 'some value', ) ## get a request cookie value ## (or None if missing and no default given) headers.get_request_cookie('cookie_name', default='some default') ## set or overwrite a request cookie value headers.set_request_cookie('cookie_name', value='some value') ## return a deep copy of the overlaid hashmap return request.to_dict()
Dealing With Response Objects
from oxlate import Response def request_handler(event, context): ## construct a Response object response = Response( status=302, content_type='text/plain', body=None, ) ## use method chaining to tweak Response response.set_status(404) \ .set_content_type('custom/type') \ .set_content_type_json() \ .set_content_type_html() \ .set_body(json.dumps('some body text')) ## get a Headers overlay headers = response.get_headers() ## get the header value only ## (or None if missing and no default given) headers.get_value(name='header-name', default='some default') ## set or overwrite a header headers.set( name = 'header-name', value = 'some value', ) ## get a ResponseCookie overlay cookie = headers.get_response_cookie('cookie-name') print(cookie.name()) print(cookie.value()) print(cookie.expires_at()) print(cookie.path()) print(cookie.domain()) ## set or override a ResponseCookie cookie = ResponseCookie( name = 'cookie-name', value = 'some value', expires_at = datetime.datetime.utcnow() + datetime.timedelta(days=2), path = '/', domain = 'my.domain.com', ) headers.set_response_cookie(cookie) return response.to_dict()
Development
All development is done inside a docker container. From your host running Docker, in this directory run:
$> docker-compose up -d
%> ./docker/bash
This will drop you into the running container
Run tests
From within the container, you can run tests with:
$ /code> python -m pytest
For debugging, you can use ipdb
, e.g.
import ipdb; ipdb.set_trace()
When running tests with the debugger make sure to use the -s
option to prevent pytest from capturing output.
$> python -m pytest -s tests -k 'test_decrypts'
Note that pytest
is also on the PATH
so you can call it directly.
Distributing
...
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.