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.11.tar.gz (19.8 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.11-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: weblib_py-0.1.11.tar.gz
  • Upload date:
  • Size: 19.8 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.11.tar.gz
Algorithm Hash digest
SHA256 16276748c3da79f80bc17037a9f25b6098287b5e92dc35831e2d1a28b11f94b0
MD5 e61440e56fd8498494976b0df7463948
BLAKE2b-256 d52f33ccea7c9fe1e60e1385c6c118d5b7ee253f8714b1f958c3aad8ff56e106

See more details on using hashes here.

File details

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

File metadata

  • Download URL: weblib_py-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 28.0 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.11-py3-none-any.whl
Algorithm Hash digest
SHA256 c1e86c02108aabba23582b569bd4cee6b6d89e98c8d832f1009f814b126e34bd
MD5 a6eaa04e6ea5927925de308f00e707db
BLAKE2b-256 65da7db7942ec0768403633864309f4d233e63c014847fd662c879207ba4ba4c

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