Skip to main content

codercore

Project description

Coder Core

Async-first Python utility library providing common infrastructure for backend services.

Features

  • Database — Async PostgreSQL session management via SQLAlchemy 2.0 + asyncpg, with Google Cloud SQL connector support
  • Cursor-based pagination — Keyset pagination for SQLAlchemy queries with multi-column ordering and composite IDs
  • Redis — Connection factory with TTL defaults and a @cache decorator for transparent async caching
  • Aggregation — Query mixins for grouped and date-bucketed aggregations (year through second precision)
  • Password hashing — bcrypt utilities for hashing and verification
  • HTTP — Async context manager for validating third-party API responses
  • Settings — Environment-variable-based configuration loader for database and Redis
  • Test utilities — Reusable pytest fixtures for async database sessions, Redis connections, and Pydantic validation helpers

Installation

pip install codercore

Quick Start

Database Sessions

from codercore.db import sessionmaker, get_connection_url

url = get_connection_url("postgresql+asyncpg", "user", "pass", "localhost", "mydb")
Session = sessionmaker(url)

async with Session() as session:
    result = await session.execute(...)

Cursor-Based Pagination

from codercore.db.pagination import paginate, Cursor
from codercore.lib.collection import Direction

statement = paginate(
    select(User),
    id_column=User.id,
    cursor=Cursor.decode(cursor_token) if cursor_token else None,
    order_by=User.created_at,
    order_direction=Direction.DESC,
    limit=20,
)

Redis Caching

from codercore.lib.redis import connection, cache

redis = connection(host="localhost", port=6379, default_ttl_in_seconds=300)

@cache(key=lambda user_id: f"user:{user_id}", ex=60)
async def get_user(user_id: str) -> str:
    ...

Password Hashing

from codercore.lib.hash import bcrypt_hash, bcrypt_check_plaintext_equals_hash

hashed, salt = bcrypt_hash("my_password")
is_valid = bcrypt_check_plaintext_equals_hash("my_password", hashed, salt)

Requirements

  • Python 3.12+
  • PostgreSQL 15+ (required by codercore.db)
  • Redis 7+ (required by codercore.lib.redis)

Modules such as codercore.lib.hash, codercore.lib.http, and codercore.lib.aggregation can be used independently without PostgreSQL or Redis.

Documentation

Build and serve the API reference locally:

pip install -e ".[docs]"
mkdocs serve

Then visit http://127.0.0.1:8000. To build static HTML:

mkdocs build

Development

pip install -e ".[test,dev]"

Running Tests

Tests run against real PostgreSQL and Redis instances via Docker Compose:

docker compose -f test-compose.yml up --build

Linting

This project uses pre-commit for linting:

pre-commit install
pre-commit run --all-files

License

Apache-2.0

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

codercore-9.0.1.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

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

codercore-9.0.1-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file codercore-9.0.1.tar.gz.

File metadata

  • Download URL: codercore-9.0.1.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for codercore-9.0.1.tar.gz
Algorithm Hash digest
SHA256 8261a95b508e356a96ac41896a2f5f119e4613f602a73fd7b57b214bc42266e0
MD5 d88e220d899602f6a33343aa604c2bc2
BLAKE2b-256 acf1b52803ca952a60bd52032bcf4fc9847ed608c28dc3217d922d0c5af36ced

See more details on using hashes here.

File details

Details for the file codercore-9.0.1-py3-none-any.whl.

File metadata

  • Download URL: codercore-9.0.1-py3-none-any.whl
  • Upload date:
  • Size: 19.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for codercore-9.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 74a63e5891074e3d6d30b5e36b852bad99c18f08b878b091ea939c89f72aee28
MD5 bf14e728789edfd045ef836c263a142d
BLAKE2b-256 25bcfe672896762dc54cc24b02f3a6d6b5588daad559841c4e244aa825d1b897

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