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).

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; molti aspetti (ORM, template, WS/SSE, middleware avanzati, sessioni, migrazioni) sono lasciati come stub per iterazioni future.
  • Nessuna dipendenza esterna; performance e sicurezza sono “best-effort” ragionevoli 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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

weblib_py-0.1.0-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: weblib_py-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.3 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aae4d27241027a2fe525068e1f830696f346ca97c6aa09cdb71837b0116281b8
MD5 99025d008b755bafd0e38f34287efa72
BLAKE2b-256 e71f51659caa6fe071629f1db2ebef6ac65d35660565d9d1a8c82f6da283b9ff

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