wsbuilder
wsbuilder es una libreria Python para construir servidores HTTP, WebSocket y utilidades de infraestructura en un unico paquete.
Se apoya en la biblioteca estandar y expone bloques pequenos y composables para:
- routing HTTP y respuestas tipadas.
- WebSocket de bajo nivel con control de frames.
- ORM ligero para SQLite.
- cache, seguridad, metricas y tareas en background.
- DNS local y replicas SQLite optimizadas.
Mapa rapido
Por que destaca
- Menos superficie de dependencia en runtime.
- Flujo explicito: request, dispatch, respuesta y cierre.
- Modulos separados que puedes activar solo cuando los necesitas.
- API publica uniforme:
App,Response,Database,TaskManager,LocalDNSServer. - Adecuado para servicios pequenos, medianos y capas de borde en Microservicios.
Instalacion
1. Instalar con pip
python -m pip install --upgrade pip
python -m pip install wsbuilder
En Debian, Kali, Ubuntu y derivados, pip puede bloquear la instalacion en el
Python del sistema con externally-managed-environment (PEP 668). En esos
casos, la ruta recomendada es usar un entorno virtual.
Si quieres aislar la instalacion en un entorno virtual:
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install wsbuilder
Verifica la instalacion:
python -c "import wsbuilder; print(wsbuilder.__version__)"
wsbuilder --help
2. Compilar en local e instalar sin internet
Si vas a trabajar sin conexion, usa una rueda local y desactiva el aislamiento de build.
Requisitos previos:
- Tener este repositorio ya descargado en la maquina.
- Tener Python
3.11+. - Tener
build,setuptoolsywheelya instalados antes de desconectarte.
Compilar el paquete localmente sin descargar nada:
python -m build --no-isolation
Instalar la wheel generada sin usar PyPI:
python -m pip install --no-index dist/wsbuilder-*.whl
Si tu Python del sistema aplica PEP 668, crea primero un venv y ejecuta la
instalacion dentro de ese entorno:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --no-index dist/wsbuilder-*.whl
Si de forma excepcional necesitas instalar en el Python del sistema, pip
permite forzarlo con --break-system-packages, pero no es la ruta recomendada:
python -m pip install --break-system-packages --no-index dist/wsbuilder-*.whl
Si prefieres instalar directamente desde el codigo fuente local, sin wheel:
python -m pip install --no-index --no-build-isolation --no-deps .
Verifica la instalacion offline:
python -c "import wsbuilder; print(wsbuilder.__version__)"
wsbuilder --help
Instalacion local o sin publicar
Desde este repositorio:
python -m pip install .
Si el entorno del sistema rechaza la instalacion, usa el mismo flujo dentro de
un venv.
Desde wheel ya construida:
python -m pip install dist/*.whl
Desarrollo
La instalacion editable queda reservada para contributors:
python -m pip install -e .
La guia completa de instalacion tambien queda documentada en docs/install.md.
Inicio rapido
from wsbuilder import App, Response
app = App(cors_allow_origin="*")
app.enable_metrics()
@app.view("/")
def home(_request):
return Response.html("<h1>wsbuilder</h1>")
@app.api("/api/health")
def health(_request):
return {"ok": True}
app.run("0.0.0.0", 8765)
Mapa de la libreria
wsbuilder.framework: fachada publica conApp,Request,Response,HTTPServer,WebSockety helpers.wsbuilder.http: parseo HTTP, request/response y streaming.wsbuilder.ws: handshake, frames y errores WebSocket.wsbuilder.orm: modelos SQLite,QuerySet, transacciones y helpers SQL.wsbuilder.cacheywsbuilder.caches: cache en memoria y cache declarativa de respuestas.wsbuilder.security: ACL, rate limiting y decision engine.wsbuilder.metrics: snapshot y stream de observabilidad.wsbuilder.tasks: trabajo asincrono controlado porTaskManager.wsbuilder.dns: servidor DNS UDP local.wsbuilder.db_replicas: lectura optimizada y pool de replicas SQLite.wsbuilder.cookiesywsbuilder.headers: utilidades HTTP de bajo nivel.wsbuilder.ia: redes neuronales basicas desde cero, con clasificacion, prediccion y estadistica.wsbuilder.predicts: utilidad matematicaPredictor.
Casos de uso
- APIs REST pequenas con respuestas JSON y HTML.
- Chat, notificaciones y telemetria sobre WebSocket.
- Persistencia local con SQLite y modelo declarativo.
- Cache de rutas o contenido calculado.
- Control de acceso, bloqueo temporal y observabilidad interna.
- Procesos de background y lectura optimizada sobre SQLite.
IA desde cero
wsbuilder.ia incluye tres bloques:
DataSetpara manejar datos, dividir conjuntos, mezclar y calcular estadistica por columna.NeuralNetworkyDenseLayerpara regresion y clasificacion.describe_datayevaluate_errorspara desviacion, incertidumbre y error maximo permisible.
Regresion
from wsbuilder import NeuralNetwork
X = [[0.0], [1.0], [2.0], [3.0]]
Y = [[0.0], [1.0], [2.0], [3.0]]
net = NeuralNetwork(seed=7, learning_rate=0.1, loss="mse")
net.add_dense(4, input_size=1, activation="tanh")
net.add_dense(1, activation="linear")
net.fit(X, Y, epochs=2000, batch_size=4)
prediction = net.predict([1.5])
report = net.predict_with_metrics([1.5], expected=[1.5], permissible_error=0.25)
Clasificacion
from wsbuilder import NeuralNetwork
X = [[0, 0], [0, 1], [1, 0], [1, 1]]
labels = ["no", "yes", "yes", "yes"]
clf = NeuralNetwork(seed=3, learning_rate=0.3, loss="binary_cross_entropy", task="classification")
clf.add_dense(6, input_size=2, activation="tanh")
clf.add_dense(1, activation="sigmoid")
clf.fit_classification(X, labels, epochs=3000, batch_size=4)
label = clf.predict_class([1, 0])
probability = clf.predict_proba([1, 0])
accuracy = clf.accuracy(X, labels)
Manejo de datos
from wsbuilder.ia import DataSet, describe_data, evaluate_errors
dataset = DataSet([[1, 2], [2, 3], [3, 4]], [[0], [1], [1]])
train, test = dataset.split(train_ratio=0.67, shuffle=True, seed=42)
stats = dataset.describe_features()
errors = evaluate_errors([10.0, 11.0], [9.8, 11.4], permissible_error=0.5)
summary = describe_data([1.0, 1.2, 0.9, 1.1])
Entrenamiento en background con Tasks
from wsbuilder import NeuralNetwork, TaskManager, submit_training_task
X = [[0, 0], [0, 1], [1, 0], [1, 1]]
labels = ["no", "yes", "yes", "yes"]
clf = NeuralNetwork(seed=3, learning_rate=0.3, loss="binary_cross_entropy", task="classification")
clf.add_dense(6, input_size=2, activation="tanh")
clf.add_dense(1, activation="sigmoid")
tasks = TaskManager(max_concurrent=1)
task = submit_training_task(
tasks,
clf,
X,
labels,
classification=True,
epochs=3000,
batch_size=4,
shuffle=False,
)
history = task.get()
label = clf.predict_class([1, 0])
Documentacion
Contribucion y soporte
- Crea ramas desde
mainusandofeat/<nombre>ofix/<nombre>. - Mantiene los cambios enfocados en un solo tema por PR.
- Abre el pull request hacia
maincon una descripcion corta y notas de riesgo. - Si encuentras un problema de seguridad, reportalo de forma privada.
Soporte opcional
Si wsbuilder te resulta util y quieres apoyar el mantenimiento del proyecto, puedes donar en BTC:
bc1q3lhxpr9yantvefmvhpd2h4lu0ykf3t45zvuve2
Red: BTC mainnet (Native SegWit).
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 wsbuilder-0.25.3.tar.gz.
File metadata
- Download URL: wsbuilder-0.25.3.tar.gz
- Upload date:
- Size: 145.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
697e10d7f94994a52d36809ec3821786a1361298dd0b5930deb77f00ae02ac79
|
|
| MD5 |
1ad601f1548cfadf6260a784c3f18e83
|
|
| BLAKE2b-256 |
452dd5d3006b461f1055a99fc5a34c8fe72d2210f4e7d72f43fce6d0b4fcff46
|
File details
Details for the file wsbuilder-0.25.3-py3-none-any.whl.
File metadata
- Download URL: wsbuilder-0.25.3-py3-none-any.whl
- Upload date:
- Size: 113.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43bf73808402928d9db6ca7d3c66d20293db552428535f09f73c81967ef56d46
|
|
| MD5 |
a6152a6fd35849e7d888e971ce56cc85
|
|
| BLAKE2b-256 |
2fa811db3cc12b77086b1e16aee453e551579228e2bb096f9c8a56e4860e118f
|