A utility package for Caspian projects
Project description
Caspian Utils (casp)
Python is finally reactive.
Caspian Utils is the core utility package behind the Caspian framework ecosystem. It provides the building blocks used by Caspian projects: FastAPI-first plumbing, HTML/template processing, reactive integration patterns, RPC helpers, and common DX utilities.
- PyPI package name:
casp - Framework/brand name: Caspian (Caspian Utils is the shared library)
Why Caspian Utils?
Modern web stacks often require a separate Node backend, bundlers, and a growing set of conventions. Caspian projects remove that complexity while keeping the power:
- Keep the DOM as the source of truth
- Write async Python for server logic
- Call server functions directly from the UI via RPC
- Ship without a bundler or build pipeline
Caspian Utils exists to make those patterns reusable across apps and tooling.
Key Capabilities
FastAPI engine (native async)
Run application logic in async Python and leverage the FastAPI ecosystem (middleware, dependency injection, validation, Starlette sessions, etc.).
Reactive DOM (no build step)
Modify HTML and see changes instantly. No Webpack/Vite required. The DOM is the runtime surface.
File-system routing
Create pages like:
app/users/index.py
app/users/index.html
Caspian projects mount routes automatically based on your folder structure.
Type-safe RPC (no API routes)
Call Python functions directly from the frontend without manually creating REST endpoints.
Prisma ORM integration (optional)
Define your schema once and use an auto-generated, type-safe client in Python (no SQL boilerplate).
Installation
pip install caspian-utils
Python: >=3.11
Quick Start (Conceptual)
A typical Caspian-style app is split into:
app/**/index.htmlfor UIapp/**/index.py(or actions modules) for backend logic / RPC- optional
app/**/layout.htmlfor nested layouts
1) Reactive UI in HTML
<!-- app/todos/index.html -->
<!-- 1. Import Python Components -->
<!-- @import { Badge } from ../components/ui -->
<div class="flex gap-2 mb-4">
<Badge variant="default">Tasks: {todos.length}</Badge>
</div>
<!-- 2. Reactive loop -->
<ul>
<template pp-for="todo in todos">
<li key="{todo.id}" class="p-2 border-b">{todo.title}</li>
</template>
</ul>
<script>
// 3. State initialized by Python backend automatically
const [todos, setTodos] = pp.state([[todos]]);
</script>
2) Direct async RPC in Python
# actions.py
from casp.rpc import rpc
from src.lib.prisma.db import prisma
@rpc(require_auth=True)
async def like_post(post_id: str):
# 1. Direct DB access (async)
post = await prisma.post.update(
where={"id": post_id},
data={"likes": {"increment": 1}},
)
# 2. Return data directly to frontend
return post.likes
3) Call RPC from the frontend
<button onclick="likePost()">Like Post</button>
<script>
async function likePost() {
const newCount = await pp.rpc("like_post", { post_id: "123" });
setLikes(newCount);
}
</script>
What’s Included
Caspian Utils ships with integrations commonly used in Caspian projects:
fastapi,uvicornjinja2(templating)beautifulsoup4(HTML processing)python-dotenv(env loading)slowapi(rate limiting)starsessions(session management)python-multipart(uploads)httpx(HTTP client)tailwind-merge(class merging utility)werkzeug(helpers; used in some tooling)- ID utilities:
cuid2,nanoid,python-ulid
(Exact dependencies may vary by version; see setup.py in the repository.)
Packaging Notes
If you are publishing to PyPI under caspian-utils, ensure your setup.py matches:
setup(
name="caspian-utils",
# ...
)
Repository
License
MIT
Author
Jefferson Abraham
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 caspian_utils-0.1.4.tar.gz.
File metadata
- Download URL: caspian_utils-0.1.4.tar.gz
- Upload date:
- Size: 44.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6c32fd204e0de4efcbb7f6bf190263a4dd56cb8c14f05c86e1bdaa40e5ac158
|
|
| MD5 |
902be9130b633be88e06f572e98cbaa5
|
|
| BLAKE2b-256 |
aa2cb7bf4144f91bac68ce73755e3305b262218d6f45cae41a29ce799090e5a8
|
File details
Details for the file caspian_utils-0.1.4-py3-none-any.whl.
File metadata
- Download URL: caspian_utils-0.1.4-py3-none-any.whl
- Upload date:
- Size: 46.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a4191cb9d2ad5dbe18443864f363b5a88cea07233073e08652b7bf005b8cf19
|
|
| MD5 |
b85d44655d45aaea0e135c551063c8d3
|
|
| BLAKE2b-256 |
e109668270a345c57f3bfe5d2c1cd71e663530355acca5ded9e374141bf4f20d
|