Skip to main content

Session middleware for maintaining session state across requests.

Project description

Swarmauri Logo

PyPI - Downloads Hits PyPI - Python Version PyPI - License PyPI - swarmauri_middleware_session


Swarmauri Middleware Session

Session middleware for FastAPI and Starlette style applications that keeps a lightweight, in-memory session store synchronized with every request and response.

Overview

  • Accepts an incoming session identifier from the X-Session-ID request header (customisable through session_header).
  • Falls back to generating a new UUID session identifier and persists it on the response when none is supplied.
  • Stores per-session data in session_storage, allowing subsequent requests to reuse state keyed by the same identifier.
  • Writes the active session id to request.state.session_id and mirrors it in the session_id response cookie (customisable through session_cookie).
  • Uses a configurable max_age to control the lifetime of the emitted cookie.

Installation

Install from PyPI using the toolchain that fits your workflow.

pip

pip install swarmauri_middleware_session

Poetry

poetry add swarmauri_middleware_session

uv

uv venv
source .venv/bin/activate
uv pip install swarmauri_middleware_session

Example

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from fastapi.testclient import TestClient

from swarmauri_middleware_session import SessionMiddleware


app = FastAPI()
session_middleware = SessionMiddleware()


@app.middleware("http")
async def attach_session(request: Request, call_next):
    return await session_middleware.dispatch(request, call_next)


@app.get("/greet")
async def greet(request: Request):
    session_id = request.state.session_id
    session_data = session_middleware.session_storage.setdefault(session_id, {})
    session_data["visits"] = session_data.get("visits", 0) + 1
    return JSONResponse({"session_id": session_id, "visits": session_data["visits"]})


client = TestClient(app)

first_response = client.get("/greet")
first_data = first_response.json()

second_response = client.get(
    "/greet", headers={"X-Session-ID": first_response.headers["X-Session-ID"]}
)
second_data = second_response.json()

print(first_data)
print(second_data)

Running the example prints the initial visit count followed by an incremented visit count for the same session, demonstrating how the middleware keeps track of state across requests.

Want to help?

If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swarmauri_middleware_session-0.8.0.dev33.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file swarmauri_middleware_session-0.8.0.dev33.tar.gz.

File metadata

  • Download URL: swarmauri_middleware_session-0.8.0.dev33.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_middleware_session-0.8.0.dev33.tar.gz
Algorithm Hash digest
SHA256 16de1a45038e251cd75929321bd11d64fe413d37b8b26ff1a8769041946dfdb8
MD5 04368da5cdd392b3b50deb3a16901767
BLAKE2b-256 33f252bf984cad7b7681931c7a81f46639f6de4c464c44ec0120100b9cf61954

See more details on using hashes here.

File details

Details for the file swarmauri_middleware_session-0.8.0.dev33-py3-none-any.whl.

File metadata

  • Download URL: swarmauri_middleware_session-0.8.0.dev33-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_middleware_session-0.8.0.dev33-py3-none-any.whl
Algorithm Hash digest
SHA256 8a26d351a2784fca668d58baf99f5e64b33d6878697ee8d5426e1e56b47e6db1
MD5 998db458bd2b853a8ca852b3bedd1f5d
BLAKE2b-256 98e5680ae6b0209f2d404c8e0f423bd882129a89bea3b69a5c084bcb861517db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page