commit cde23044b6b4455ecb237e2cda2d49f95d999c99
parent a6a04664c737de63e91295b5f6e091b16be8b894
Author: Andy Khramtsov <>
Date: Thu, 28 May 2026 03:35:50 +0300
feat: add production server
Diffstat:
3 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
@@ -13,6 +13,7 @@ dependencies = [
"plotly>=6.7.0",
"polars>=1.40.1",
"pydot>=4.0.1",
+ "uvicorn>=0.48.0",
]
[build-system]
diff --git a/src/deps/dash_app.py b/src/deps/dash_app.py
@@ -63,8 +63,19 @@ def main():
if args.debug:
app.run(debug=True)
else:
- # todo: use gunicorn or wsgi
- raise Exception("Production server is not yet implemented")
+ import uvicorn
+ from uvicorn.middleware.wsgi import WSGIMiddleware
+
+ print("Starting production server via Uvicorn...", flush=True)
+
+ wsgi_app = WSGIMiddleware(app.server) # ty: ignore
+
+ uvicorn.run(
+ wsgi_app,
+ host="0.0.0.0",
+ port=8000,
+ log_level="info",
+ )
if __name__ == "__main__":
diff --git a/uv.lock b/uv.lock
@@ -340,6 +340,7 @@ dependencies = [
{ name = "plotly" },
{ name = "polars" },
{ name = "pydot" },
+ { name = "uvicorn" },
]
[package.dev-dependencies]
@@ -355,6 +356,7 @@ requires-dist = [
{ name = "plotly", specifier = ">=6.7.0" },
{ name = "polars", specifier = ">=1.40.1" },
{ name = "pydot", specifier = ">=4.0.1" },
+ { name = "uvicorn", specifier = ">=0.48.0" },
]
[package.metadata.requires-dev]
@@ -1538,6 +1540,19 @@ wheels = [
]
[[package]]
+name = "uvicorn"
+version = "0.48.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "h11" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e6/bf/f6544ba992ddb9a6077343a576f9844f7f8f06ab819aefd00206e9255f18/uvicorn-0.48.0.tar.gz", hash = "sha256:a5504207195d08c2511bf9125ede5ac4a4b71725d519e758d01dcf0bc2d31c37", size = 91074, upload-time = "2026-05-24T12:08:41.925Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/01/be/72532be3da7acc5fdfbccdb95215cd04f995a0886532a5b423f929cda4cc/uvicorn-0.48.0-py3-none-any.whl", hash = "sha256:48097851328b87ec36117d3d575234519eb58c2b22d79666e9bbc6c49a761dad", size = 71410, upload-time = "2026-05-24T12:08:40.258Z" },
+]
+
+[[package]]
name = "wcwidth"
version = "0.7.0"
source = { registry = "https://pypi.org/simple" }