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
@cachedecorator 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
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.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file codercore-8.2.0.tar.gz.
File metadata
- Download URL: codercore-8.2.0.tar.gz
- Upload date:
- Size: 16.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25bebb34ff7a0074d2ed47669cfc8131802b9d44ba16e4f4212772c3f43275b4
|
|
| MD5 |
011d11612aa0a0d82abae45d9f2bde20
|
|
| BLAKE2b-256 |
019e73c7db5a9df47fbd961336423a3eb588337cb56790a9ce6aee21e435dd3e
|
File details
Details for the file codercore-8.2.0-py3-none-any.whl.
File metadata
- Download URL: codercore-8.2.0-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04c76a5c391ff51de26402e65ccd6683a3dbf48a54e61ab4fe09896ed564ba4e
|
|
| MD5 |
b7dd66b795b7924a0a7c28846fe2b45f
|
|
| BLAKE2b-256 |
e9d9c33967bb60d3359ecf95ca74d795ead8f9c7509331e964484b47bd144ca2
|