Skip to main content
userharbor

GitHub License Tests Codecov PyPI - Python Version PyPI - Version uv Pytest

userharbor-inmemory is a minimal, contract-tested UserStore implementation for UserHarbor. It can be installed directly for tests and examples or used as a GitHub template when building a custom storage integration.

[!WARNING] All data is process-local and is lost when the store instance is discarded. This package is not a persistent database and is not intended for production storage.

Installation

pip install userharbor-inmemory

The package depends on userharbor and has no database or framework dependencies.

Usage

from userharbor import UserHarbor
from userharbor_inmemory import InMemoryUserStore


store = InMemoryUserStore()

harbor = UserHarbor(
    secret_key="your-secret-key",
    store=store,
    email_sender=email_sender,
)

Each InMemoryUserStore instance starts empty and keeps its data for the lifetime of that instance.

The store implements the complete UserHarbor persistence contract:

  • users and password hashes
  • case-insensitive username lookup and uniqueness with original casing preserved
  • email verification and password reset tokens
  • sessions and session refresh
  • roles and permissions
  • user-role and role-permission assignments
  • commit, rollback, and nested transaction behavior

Each user has at most one active email verification token and one active password reset token. Storing a replacement invalidates the previous token. Users may have multiple active sessions.

Use as an integration template

Select Use this template on GitHub and create a new repository. The generated repository starts with a complete implementation and a passing contract suite, so backend code can be replaced incrementally while the tests continue to verify UserStore behavior.

GitHub copies files without replacing project-specific names. After creating a repository:

  1. Rename the distribution in pyproject.toml.
  2. Rename the userharbor_inmemory package and InMemoryUserStore class.
  3. Update project metadata, links, badges, and this README.
  4. Replace the in-memory dictionaries and snapshot transaction with the target backend.
  5. Adapt the user_store fixture in tests/conftest.py to create and clean up the backend.
  6. Keep backend-specific tests separate from the shared contract suite.
  7. Run the complete test suite before publishing.

The contract tests stay intentionally small in this repository:

# tests/test_user_store_contract.py

from userharbor.testing.user_store_contract import *  # noqa: F403
# tests/conftest.py

import pytest

from userharbor_inmemory import InMemoryUserStore


@pytest.fixture
def user_store() -> InMemoryUserStore:
    return InMemoryUserStore()

See the UserStore contract testing guide and custom integrations guide for the complete behavioral requirements.

Development

Install the project and run its tests:

uv sync
uv run pytest

The suite imports the shared contract distributed with UserHarbor. Tests specific to this package remain in tests/test_public_api.py.

To develop against an unpublished local UserHarbor checkout, keep both repositories in the same parent directory and run:

uv run --with-editable ../userharbor pytest

Limitations

InMemoryUserStore is deliberately small. It does not provide persistence across process restarts, cross-process sharing, durable transactions, or concurrency guarantees. Its snapshot-based transaction implementation exists to reproduce the atomic behavior required by UserHarbor in tests and examples.

License

UserHarbor In-Memory is licensed under the MIT License. See LICENSE for details.

Metadata

Release files for userharbor-inmemory 0.3.0

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

Source distribution (sdist)

Source distribution for userharbor-inmemory 0.3.0
File Size Uploaded
userharbor_inmemory-0.3.0.tar.gz 4.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for userharbor-inmemory 0.3.0
File Interpreter ABI Platform
userharbor_inmemory-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.2 kB

Release files / userharbor_inmemory-0.3.0.tar.gz

Download URL userharbor_inmemory-0.3.0.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
43d44dbe51cf2854227c3348af1607c271527631696c3555c40ad558bc378ac4
BLAKE2b-256 checksum
How to use checksums
596c5316f0ae6431e157a72d41b45b995086ac1fac8a20dad59ba8cf4ed67754
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / userharbor_inmemory-0.3.0-py3-none-any.whl

Download URL userharbor_inmemory-0.3.0-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
59b1ced19f2a3d21e160b9d6d28f74978b360b0c46fdbc0141a3c8b39cd93367
BLAKE2b-256 checksum
How to use checksums
c45e66f0e385dc181b4006f413a676d7dabb3d8d83eff3304937de1949ce245b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.1

2 release files

0.2.0

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