Skip to main content

WebLib v2 – Minimal ASGI web library MVP per specifiche

Project description

WebLib v2 (MVP)

Una libreria Python minimale (ASGI) che segue le specifiche in specifiche.txt.

Caratteristiche implementate nell’MVP:

  • WebApp con DI minimale, plugin hook, security headers base.
  • Routing con decorators (@route.get, @route.post, ...), path params tipati basilari ({id:int}, {slug}), Routes.register.
  • HTTP helpers (HTTP.ok/created/redirect/html/stream/file).
  • Request/Response ASGI minimi (senza dipendenze esterne).
  • Page/Element/Component immutabili, DSL E.div(...) con escaping HTML, Page.render().
  • CSS scope/merge/minify (no-op) e render compatto.
  • Static assets con mount semplice.
  • Middleware: security_headers, request_id, logging_middleware, cors, rate_limit, sessions (in-memory, dev-only).
  • CLI minimale (weblib new, weblib dev, weblib routes).
  • ORM: adapter SQLiteORM minimale con fields dichiarativi e CRUD base.

Installazione locale:

pip install -e .

Esecuzione esempio minimale:

uvicorn examples.minimal.app:asgi --reload

Esempio Blog con Auth + Postgres:

Requisiti: asyncpg e un Postgres in ascolto su 5432.

pip install asyncpg
export DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres
uvicorn examples.blog_auth.app:asgi --reload

Funzionalità:

  • Registrazione e Login/Logout (password PBKDF2, cookie sessione in‑memory)
  • Creazione post di testo (solo utenti autenticati)
  • Lista post come card con autore e timestamp
  • Navigazione tramite menu laterale

Esempio rapido:

from weblib import WebApp
from weblib.routing import Routes, route, HTTP
from weblib.page import Page
from weblib.elements import E
from weblib.css import CSS, css

routes = Routes()

base_css = CSS.scope("base").add(
    css("body", {"font-family": "system-ui"}),
    css(".container", {"max-width": "720px", "margin": "0 auto"}),
)

@route.get("/")
async def home(req):
    return (Page(title="Home").use_css(base_css)
            .body(E.div(E.h1("Hello WebLib"), E.p("It works"), cls="container")))

@route.post("/echo")
async def echo(req):
    data = await req.json()
    return HTTP.created({"you_sent": data})

routes.register(home, echo)
app = WebApp(routes=routes)
asgi = app.asgi
# Avvio (es.): uvicorn myapp:asgi --reload

Note:

  • Questo è un MVP focalizzato sull’API e DX; template, WS/SSE, plugin avanzati e migrazioni evolute sono previsti in future iterazioni.
  • Nessuna dipendenza esterna per l’ORM incluso (usa sqlite3 standard via threadpool). Performance e sicurezza sono “best-effort” per dev.

Licenza: MIT

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

weblib_py-0.1.12.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

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

weblib_py-0.1.12-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file weblib_py-0.1.12.tar.gz.

File metadata

  • Download URL: weblib_py-0.1.12.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for weblib_py-0.1.12.tar.gz
Algorithm Hash digest
SHA256 002b9a584ee7430f8e8978ab470b0f0830fe76dca72c5e25e8a5fd664de6a855
MD5 8b81411cccc11ce43bd84a364badd6c2
BLAKE2b-256 065f0c6a2bd7fc75af39be932276dcca8ef9fe35faa4aa3d210c53123585c12a

See more details on using hashes here.

File details

Details for the file weblib_py-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: weblib_py-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 29.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for weblib_py-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 fd88cac01943286dc9f6a346ad13a36b81c5250d08befa41521771f326a26183
MD5 79c00c2de8333393316be98fc6cab27c
BLAKE2b-256 4f9e52e17df5bf6fe09ce3eb849e738c5c9ada843a073ece703be66ed92cd937

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