Versión de Faraday: 5.23.0 y 5.23.2 (instalación con Docker, paquete faradaysec)
Componente: faraday-server
Pasos para reproducir:
- Levantar Faraday con Docker (docker-compose con
faraday_server, faraday_worker, faraday_beat, faraday_redis, faraday_db).
- Iniciar los contenedores y abrir
http://localhost:5985 en el navegador.
Comportamiento esperado:
La interfaz web carga normalmente.
Comportamiento actual:
Cualquier request a / devuelve un 500 Internal Server Error.
Traceback:
[2026-08-31 00:49:24,966] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/src/.venv/lib/python3.11/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/src/.venv/lib/python3.11/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/src/.venv/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/src/.venv/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
TypeError: create_app.<locals>.index() got an unexpected keyword argument 'text'
Causa raíz:
En faraday/server/app.py, la vista index dentro de create_app está decorada al mismo tiempo como manejador de error 404 y como ruta catch-all para la SPA:
@app.errorhandler(404)
@app.route('/', defaults={'text': ''})
@app.route('/<path:text>')
def index(ex):
"""
Handles 404 errors of paths.
:param ex: Exception to return.
:return: The exception if the path starts with the prefixes, or the default static file.
"""
prefixes = ('/_api', '/v3', '/socket.io')
if request.path.startswith(prefixes):
return ex
return app.send_static_file('index.html')
Flask invoca esta función de forma distinta según qué decorador la disparó:
- Como error handler, la llama posicionalmente:
index(instancia_de_excepcion).
- Como vista de ruta (matcheada por
@app.route(...)), la llama con la variable capturada de la URL como keyword argument: index(text=...).
Como la firma de la función solo declara ex como único parámetro posicional, cualquier request matcheado vía los decoradores de ruta (lo que incluye cualquier GET / normal) falla con TypeError: index() got an unexpected keyword argument 'text'. Esto rompe completamente la interfaz web en una instalación nueva.
Fix sugerido:
Que la firma acepte ambos estilos de invocación, ya que el cuerpo de la función no usa el valor de text para nada:
def index(ex=None, text=None):
prefixes = ('/_api', '/v3', '/socket.io')
if request.path.startswith(prefixes):
return ex
return app.send_static_file('index.html')
Aplicando este cambio localmente se soluciona el problema y la UI carga con normalidad.
Quedo a disposición para dar más detalles o probar un patch si hace falta.
Versión de Faraday: 5.23.0 y 5.23.2 (instalación con Docker, paquete
faradaysec)Componente: faraday-server
Pasos para reproducir:
faraday_server,faraday_worker,faraday_beat,faraday_redis,faraday_db).http://localhost:5985en el navegador.Comportamiento esperado:
La interfaz web carga normalmente.
Comportamiento actual:
Cualquier request a
/devuelve un 500 Internal Server Error.Traceback:
Causa raíz:
En
faraday/server/app.py, la vistaindexdentro decreate_appestá decorada al mismo tiempo como manejador de error 404 y como ruta catch-all para la SPA:Flask invoca esta función de forma distinta según qué decorador la disparó:
index(instancia_de_excepcion).@app.route(...)), la llama con la variable capturada de la URL como keyword argument:index(text=...).Como la firma de la función solo declara
excomo único parámetro posicional, cualquier request matcheado vía los decoradores de ruta (lo que incluye cualquierGET /normal) falla conTypeError: index() got an unexpected keyword argument 'text'. Esto rompe completamente la interfaz web en una instalación nueva.Fix sugerido:
Que la firma acepte ambos estilos de invocación, ya que el cuerpo de la función no usa el valor de
textpara nada:Aplicando este cambio localmente se soluciona el problema y la UI carga con normalidad.
Quedo a disposición para dar más detalles o probar un patch si hace falta.