Skip to main content

Session Lambda

A simple way to manage sessions for AWS Lambdas

This package simplfy the way one can use DynamoDB as a key/value presistance layer for AWS Lambda - using a single python decorator.

Install

pip install session-lambda

Prerequisites

DynamoDB Table

  • A table in DynamoDB with a primary key named key of type string
  • [optional] Enable TTL in your DynamoDB table with attribute named ttl

Usage

Set SESSION_LAMBDA_DYNAMODB_TABLE_NAME env var:

export SESSION_LAMBDA_DYNAMODB_TABLE_NAME=<table-name>

Run the following python code:

from session_lambda import session, set_session_data, get_session_data

@session
def lambda_handler(event, context):
    print(get_session_data())
    set_session_data((get_session_data() or 0)+1)
    return {"headers":{}}
# first client_a call 
response = lambda_handler({'headers':{}}, {})  
# get session id from response (created by the server)
session_id = response.get('headers').get('session-id')
# use session id in subsequent calls
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})

# first client_b call 
lambda_handler({'headers':{}}, {})

You should get the following prints:

None
1
1
1
None

This time using the update=True mode:

from session_lambda import session, set_session_data, get_session_data

@session(update=True)
def lambda_handler(event, context):
    print(get_session_data())
    set_session_data((get_session_data() or 0)+1)
    return {"headers":{}}
# first client_a call 
response = lambda_handler({'headers':{}}, {})  
# get session id from response (created by the server)
session_id = response.get('headers').get('session-id')
# use session id in subsequent calls
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})
lambda_handler({'headers':{'session-id':session_id}}, {})

# first client_b call 
lambda_handler({'headers':{}}, {})

Now you should see:

None
1
2
3
None

Features

@session(id_key_name='session-id', update=False, ttl=0)
def lambda_handler(event, context):
    ...
  • id_key_name is the expected key name in the event[headers]. It is default to session-id. It is case-sensitive.
  • update flag control weather set_sessions_data updates the data. It is default to False.
  • ttl is seconds interval for the session to live (since the last update time). By default it is disabled. Any value larger then 0 will enable this feature. Make sure to set the TTL key name in your dynamodb to ttl.

Future Features

  • Support Schema validation for session data

Additional Inforamtion

Metadata

Release files for session-lambda 0.3.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for session-lambda 0.3.6
File Size Uploaded
session_lambda-0.3.6.tar.gz 6.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for session-lambda 0.3.6
File Interpreter ABI Platform
session_lambda-0.3.6-py3-none-any.whl Python 3 none any Details

Total release size: 13.4 kB

Release files / session_lambda-0.3.6.tar.gz

Download URL session_lambda-0.3.6.tar.gz
Size 6.1 kB
Tags Source
SHA-256 checksum
How to use checksums
50c8b5e0b4b454c8bce214ebd7099434ce818f047044e4e80e9a25747c5488b0
BLAKE2b-256 checksum
How to use checksums
0a5dd464c92d5710c248207ffacf8985e5662dc73204b84ecedbfea142bc06e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.9.5 Darwin/21.1.0

Release files / session_lambda-0.3.6-py3-none-any.whl

Download URL session_lambda-0.3.6-py3-none-any.whl
Size 7.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6ec28ae2eacfd10cb37949943d1805a0ddba8528024b813b60e94013df49afb9
BLAKE2b-256 checksum
How to use checksums
3e5cbaf9cc5009248d95e8e183bfb58b67d9fcc40e8329021caedaf33d3d9b58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.9.5 Darwin/21.1.0

Release history Release notifications | RSS feed

This release

0.3.6 This release

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page