Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] - conda-store requires UI to be enabled in order to use auth functionality #1034

Open
soapy1 opened this issue Jan 2, 2025 · 0 comments

Comments

@soapy1
Copy link
Contributor

soapy1 commented Jan 2, 2025

Describe the bug

When running conda-store without the ui enabled auth no longer works. For example, given the following relevant config (notice the ui is turned off)

c.CondaStoreServer.enable_ui = False
c.CondaStoreServer.enable_api = True
c.CondaStoreServer.enable_registry = False
c.CondaStoreServer.enable_metrics = False

trying to login to conda store will produce a 500 error. The full error from the logs is shown below. Relevant part of the error:

conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/requests.py", line 186, in url_for
conda-store-server-1  |     url_path = url_path_provider.url_path_for(name, **path_params)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 662, in url_path_for
conda-store-server-1  |     raise NoMatchFound(name, path_params)
conda-store-server-1  | starlette.routing.NoMatchFound: No route exists for name "ui_list_environments" and params "".

Expected behavior

conda store auth functionality should not be tied to if the ui is enabled (eg. using the config option c.CondaStoreServer.enable_ui).

How to Reproduce the problem?

To reproduce the problem launch conda-store with docker compose. You'll need the docker-compose.yml and condastore_config.py given by

docker-compose.yml

services:
  conda-store-worker:
    image: quansight/conda-store-server:${CONDA_STORE_SERVER_VERSION:-latest}
    volumes:
      - ./docker/assets/environments:/opt/environments:ro
      - ./docker/assets/conda_store_config.py:/opt/conda_store/conda_store_config.py:ro
    depends_on:
      conda-store-server:
        condition: service_healthy
    platform: linux/amd64
    command:
      [
        "conda-store-worker",
        "--config",
        "/opt/conda_store/conda_store_config.py"
      ]

  conda-store-server:
    image: quansight/conda-store-server:${CONDA_STORE_SERVER_VERSION:-latest}
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    volumes:
      - ./conda_store_config.py:/opt/conda_store/conda_store_config.py:ro
    healthcheck:
      test:
        ["CMD", "curl", "--fail", "http://localhost:8080/conda-store/api/v1/"]
      interval: 10s
      timeout: 5s
      retries: 5
    platform: linux/amd64
    command:
      [
        "conda-store-server",
        "--config",
        "/opt/conda_store/conda_store_config.py"
      ]
    ports:
      - "8080:8080"

  minio:
    image: minio/minio:RELEASE.2020-11-10T21-02-24Z
    ports:
      - "9000:9000"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 10s
      timeout: 5s
      retries: 5
    entrypoint: sh
    command: -c 'mkdir -p /data/conda-store && /usr/bin/minio server /data'
    environment:
      MINIO_ACCESS_KEY: admin
      MINIO_SECRET_KEY: password

  postgres:
    image: postgres:13
    user: postgres
    ports:
      - 5432:5432
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: conda-store

  redis:
    image: bitnami/redis
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      REDIS_PASSWORD: password

  conda-store-ui:
    build:
      context: .
      target: dev
    command: "yarn run start:ui"
    profiles:
      - local-dev
    ports:
      - "8000:8000"
    depends_on:
      conda-store-server:
        condition: service_healthy
    platform: linux/amd64
    volumes:
      - ./src:/usr/src/app/src
      - ./style:/usr/src/app/style
      - ./.env:/usr/src/app/.env
    healthcheck:
      test:
        ["CMD", "curl", "--fail", "http://localhost:8000"]
      interval: 20s
      timeout: 10s
      retries: 8

conda_store_config.py

import logging

from conda_store_server.storage import S3Storage
from conda_store_server.server.auth import DummyAuthentication

# ==================================
#      conda-store settings
# ==================================
c.CondaStore.storage_class = S3Storage
c.CondaStore.store_directory = "/var/lib/conda-store/"
c.CondaStore.environment_directory = "/opt/conda-store/envs/{namespace}-{name}"
# c.CondaStore.database_url = "mysql+pymysql://admin:password@mysql/conda-store"
c.CondaStore.database_url = "postgresql+psycopg2://postgres:password@postgres/conda-store"
c.CondaStore.redis_url = "redis://:password@redis:6379/0"
c.CondaStore.default_uid = 1000
c.CondaStore.default_gid = 1000
c.CondaStore.default_permissions = "775"
c.CondaStore.conda_included_packages = [
    'ipykernel'
]

c.CondaStore.pypi_included_packages = [
    'nothing'
]


c.S3Storage.internal_endpoint = "minio:9000"
c.S3Storage.external_endpoint = "localhost:9000"
c.S3Storage.access_key = "admin"
c.S3Storage.secret_key = "password"
c.S3Storage.region = "us-east-1"  # minio region default
c.S3Storage.bucket_name = "conda-store"
c.S3Storage.internal_secure = False
c.S3Storage.external_secure = False

# ==================================
#        server settings
# ==================================
c.CondaStoreServer.log_level = logging.INFO
c.CondaStoreServer.enable_ui = False
c.CondaStoreServer.enable_api = True
c.CondaStoreServer.enable_registry = False
c.CondaStoreServer.enable_metrics = False
c.CondaStoreServer.address = "0.0.0.0"
c.CondaStoreServer.port = 8080
# This MUST start with `/`
c.CondaStoreServer.url_prefix = "/conda-store"


# ==================================
#         auth settings
# ==================================
c.CondaStoreServer.authentication_class = DummyAuthentication
c.CondaStoreServer.template_vars = {
    "banner": '<div class="alert alert-danger" role="alert">This is a localhost server</div>',
    "logo": "https://raw.githubusercontent.com/conda-incubator/conda-store/main/docusaurus-docs/static/img/conda-store-logo-horizontal-lockup.svg",
}

# ==================================
#         worker settings
# ==================================
c.CondaStoreWorker.log_level = logging.INFO
c.CondaStoreWorker.watch_paths = ["/opt/environments"]
c.CondaStoreWorker.concurrency = 4

Output

The full error message produced by the server is

conda-store-server-1  | INFO:     172.18.0.1:40022 - "GET /conda-store/login?next=http://localhost:8000/ HTTP/1.1" 307 Temporary Redirect
conda-store-server-1  | No route exists for name "ui_list_environments" and params "".
conda-store-server-1  | INFO:     172.18.0.1:40022 - "GET /conda-store/login/?next=http://localhost:8000/ HTTP/1.1" 500 Internal Server Error
conda-store-server-1  | ERROR:    Exception in ASGI application
conda-store-server-1  |   + Exception Group Traceback (most recent call last):
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
conda-store-server-1  |   |     yield
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 186, in __call__
conda-store-server-1  |   |     async with anyio.create_task_group() as task_group:
conda-store-server-1  |   |                ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 763, in __aexit__
conda-store-server-1  |   |     raise BaseExceptionGroup(
conda-store-server-1  |   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
conda-store-server-1  |   +-+---------------- 1 ----------------
conda-store-server-1  |     | Traceback (most recent call last):
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, _send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 185, in __call__
conda-store-server-1  |     |     with collapse_excgroups():
conda-store-server-1  |     |          ^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/contextlib.py", line 158, in __exit__
conda-store-server-1  |     |     self.gen.throw(value)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 187, in __call__
conda-store-server-1  |     |     response = await self.dispatch_func(request, call_next)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 256, in conda_store_middleware
conda-store-server-1  |     |     response = await call_next(request)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 163, in call_next
conda-store-server-1  |     |     raise app_exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 149, in coro
conda-store-server-1  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 85, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, send_wrapper)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 93, in __call__
conda-store-server-1  |     |     await self.simple_response(scope, receive, send, request_headers=headers)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 144, in simple_response
conda-store-server-1  |     |     await self.app(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
conda-store-server-1  |     |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     |     await app(scope, receive, sender)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
conda-store-server-1  |     |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
conda-store-server-1  |     |     await route.handle(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
conda-store-server-1  |     |     await self.app(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
conda-store-server-1  |     |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     |     await app(scope, receive, sender)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
conda-store-server-1  |     |     response = await f(request)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
conda-store-server-1  |     |     raw_response = await run_endpoint_function(
conda-store-server-1  |     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
conda-store-server-1  |     |     return await run_in_threadpool(dependant.call, **values)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
conda-store-server-1  |     |     return await anyio.to_thread.run_sync(func, *args)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
conda-store-server-1  |     |     return await get_async_backend().run_sync_in_worker_thread(
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2441, in run_sync_in_worker_thread
conda-store-server-1  |     |     return await future
conda-store-server-1  |     |            ^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 943, in run
conda-store-server-1  |     |     result = context.run(func, *args)
conda-store-server-1  |     |              ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/server/auth.py", line 523, in get_login_method
conda-store-server-1  |     |     return templates.TemplateResponse(
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 209, in TemplateResponse
conda-store-server-1  |     |     return _TemplateResponse(
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 40, in __init__
conda-store-server-1  |     |     content = template.render(context)
conda-store-server-1  |     |               ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 1304, in render
conda-store-server-1  |     |     self.environment.handle_exception()
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 939, in handle_exception
conda-store-server-1  |     |     raise rewrite_traceback_stack(source=source)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/login.html", line 7, in top-level template code
conda-store-server-1  |     |     {% extends 'base.html' %}
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/base.html", line 33, in top-level template code
conda-store-server-1  |     |     {% include 'navigation.html' %}
conda-store-server-1  |     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/navigation.html", line 8, in top-level template code
conda-store-server-1  |     |     <a class="navbar-brand" href="{{ url_for('ui_list_environments') }}">
conda-store-server-1  |     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 126, in url_for
conda-store-server-1  |     |     return request.url_for(name, **path_params)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/requests.py", line 186, in url_for
conda-store-server-1  |     |     url_path = url_path_provider.url_path_for(name, **path_params)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 662, in url_path_for
conda-store-server-1  |     |     raise NoMatchFound(name, path_params)
conda-store-server-1  |     | starlette.routing.NoMatchFound: No route exists for name "ui_list_environments" and params "".
conda-store-server-1  |     +------------------------------------
conda-store-server-1  | 
conda-store-server-1  | During handling of the above exception, another exception occurred:
conda-store-server-1  | 
conda-store-server-1  | Traceback (most recent call last):
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
conda-store-server-1  |     await self.app(scope, receive, _send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 185, in __call__
conda-store-server-1  |     with collapse_excgroups():
conda-store-server-1  |          ^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/contextlib.py", line 158, in __exit__
conda-store-server-1  |     self.gen.throw(value)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 187, in __call__
conda-store-server-1  |     response = await self.dispatch_func(request, call_next)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 256, in conda_store_middleware
conda-store-server-1  |     response = await call_next(request)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 163, in call_next
conda-store-server-1  |     raise app_exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 149, in coro
conda-store-server-1  |     await self.app(scope, receive_or_disconnect, send_no_error)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 85, in __call__
conda-store-server-1  |     await self.app(scope, receive, send_wrapper)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 93, in __call__
conda-store-server-1  |     await self.simple_response(scope, receive, send, request_headers=headers)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 144, in simple_response
conda-store-server-1  |     await self.app(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
conda-store-server-1  |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     await app(scope, receive, sender)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
conda-store-server-1  |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
conda-store-server-1  |     await route.handle(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
conda-store-server-1  |     await self.app(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
conda-store-server-1  |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     await app(scope, receive, sender)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
conda-store-server-1  |     response = await f(request)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
conda-store-server-1  |     raw_response = await run_endpoint_function(
conda-store-server-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
conda-store-server-1  |     return await run_in_threadpool(dependant.call, **values)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
conda-store-server-1  |     return await anyio.to_thread.run_sync(func, *args)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
conda-store-server-1  |     return await get_async_backend().run_sync_in_worker_thread(
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2441, in run_sync_in_worker_thread
conda-store-server-1  |     return await future
conda-store-server-1  |            ^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 943, in run
conda-store-server-1  |     result = context.run(func, *args)
conda-store-server-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/server/auth.py", line 523, in get_login_method
conda-store-server-1  |     return templates.TemplateResponse(
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 209, in TemplateResponse
conda-store-server-1  |     return _TemplateResponse(
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 40, in __init__
conda-store-server-1  |     content = template.render(context)
conda-store-server-1  |               ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 1304, in render
conda-store-server-1  |     self.environment.handle_exception()
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 939, in handle_exception
conda-store-server-1  |     raise rewrite_traceback_stack(source=source)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/login.html", line 7, in top-level template code
conda-store-server-1  |     {% extends 'base.html' %}
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/base.html", line 33, in top-level template code
conda-store-server-1  |     {% include 'navigation.html' %}
conda-store-server-1  |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/navigation.html", line 8, in top-level template code
conda-store-server-1  |     <a class="navbar-brand" href="{{ url_for('ui_list_environments') }}">
conda-store-server-1  |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 126, in url_for
conda-store-server-1  |     return request.url_for(name, **path_params)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/requests.py", line 186, in url_for
conda-store-server-1  |     url_path = url_path_provider.url_path_for(name, **path_params)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 662, in url_path_for
conda-store-server-1  |     raise NoMatchFound(name, path_params)
conda-store-server-1  | starlette.routing.NoMatchFound: No route exists for name "ui_list_environments" and params "".
conda-store-server-1  | 
conda-store-server-1  | During handling of the above exception, another exception occurred:
conda-store-server-1  | 
conda-store-server-1  | Traceback (most recent call last):
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi
conda-store-server-1  |     result = await app(  # type: ignore[func-returns-value]
conda-store-server-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
conda-store-server-1  |     await super().__call__(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/applications.py", line 113, in __call__
conda-store-server-1  |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 177, in __call__
conda-store-server-1  |     response = await self.handler(request, exc)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 275, in exception_handler
conda-store-server-1  |     return await http_exception_handler(request, exc)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 264, in http_exception_handler
conda-store-server-1  |     "message": exc.detail,
conda-store-server-1  |                ^^^^^^^^^^
conda-store-server-1  | AttributeError: 'NoMatchFound' object has no attribute 'detail'
conda-store-server-1  | INFO:     172.18.0.1:40026 - "GET /conda-store/login?next=http://localhost:8000/ HTTP/1.1" 307 Temporary Redirect
conda-store-server-1  | ERROR:    Exception in ASGI application
conda-store-server-1  |   + Exception Group Traceback (most recent call last):
conda-store-server-1  | No route exists for name "ui_list_environments" and params "".
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
conda-store-server-1  | INFO:     172.18.0.1:40026 - "GET /conda-store/login/?next=http://localhost:8000/ HTTP/1.1" 500 Internal Server Error
conda-store-server-1  |   |     yield
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 186, in __call__
conda-store-server-1  |   |     async with anyio.create_task_group() as task_group:
conda-store-server-1  |   |                ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 763, in __aexit__
conda-store-server-1  |   |     raise BaseExceptionGroup(
conda-store-server-1  |   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
conda-store-server-1  |   +-+---------------- 1 ----------------
conda-store-server-1  |     | Traceback (most recent call last):
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, _send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 185, in __call__
conda-store-server-1  |     |     with collapse_excgroups():
conda-store-server-1  |     |          ^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/contextlib.py", line 158, in __exit__
conda-store-server-1  |     |     self.gen.throw(value)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 187, in __call__
conda-store-server-1  |     |     response = await self.dispatch_func(request, call_next)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 256, in conda_store_middleware
conda-store-server-1  |     |     response = await call_next(request)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 163, in call_next
conda-store-server-1  |     |     raise app_exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 149, in coro
conda-store-server-1  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 85, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, send_wrapper)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
conda-store-server-1  |     |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     |     await app(scope, receive, sender)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
conda-store-server-1  |     |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
conda-store-server-1  |     |     await route.handle(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
conda-store-server-1  |     |     await self.app(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
conda-store-server-1  |     |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     |     await app(scope, receive, sender)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
conda-store-server-1  |     |     response = await f(request)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
conda-store-server-1  |     |     raw_response = await run_endpoint_function(
conda-store-server-1  |     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
conda-store-server-1  |     |     return await run_in_threadpool(dependant.call, **values)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
conda-store-server-1  |     |     return await anyio.to_thread.run_sync(func, *args)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
conda-store-server-1  |     |     return await get_async_backend().run_sync_in_worker_thread(
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2441, in run_sync_in_worker_thread
conda-store-server-1  |     |     return await future
conda-store-server-1  |     |            ^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 943, in run
conda-store-server-1  |     |     result = context.run(func, *args)
conda-store-server-1  |     |              ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/server/auth.py", line 523, in get_login_method
conda-store-server-1  |     |     return templates.TemplateResponse(
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 209, in TemplateResponse
conda-store-server-1  |     |     return _TemplateResponse(
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 40, in __init__
conda-store-server-1  |     |     content = template.render(context)
conda-store-server-1  |     |               ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 1304, in render
conda-store-server-1  |     |     self.environment.handle_exception()
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 939, in handle_exception
conda-store-server-1  |     |     raise rewrite_traceback_stack(source=source)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/login.html", line 7, in top-level template code
conda-store-server-1  |     |     {% extends 'base.html' %}
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/base.html", line 33, in top-level template code
conda-store-server-1  |     |     {% include 'navigation.html' %}
conda-store-server-1  |     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/navigation.html", line 8, in top-level template code
conda-store-server-1  |     |     <a class="navbar-brand" href="{{ url_for('ui_list_environments') }}">
conda-store-server-1  |     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 126, in url_for
conda-store-server-1  |     |     return request.url_for(name, **path_params)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/requests.py", line 186, in url_for
conda-store-server-1  |     |     url_path = url_path_provider.url_path_for(name, **path_params)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 662, in url_path_for
conda-store-server-1  |     |     raise NoMatchFound(name, path_params)
conda-store-server-1  |     | starlette.routing.NoMatchFound: No route exists for name "ui_list_environments" and params "".
conda-store-server-1  |     +------------------------------------
conda-store-server-1  | 
conda-store-server-1  | During handling of the above exception, another exception occurred:
conda-store-server-1  | 
conda-store-server-1  | Traceback (most recent call last):
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
conda-store-server-1  |     await self.app(scope, receive, _send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 185, in __call__
conda-store-server-1  |     with collapse_excgroups():
conda-store-server-1  |          ^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/contextlib.py", line 158, in __exit__
conda-store-server-1  |     self.gen.throw(value)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 187, in __call__
conda-store-server-1  |     response = await self.dispatch_func(request, call_next)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 256, in conda_store_middleware
conda-store-server-1  |     response = await call_next(request)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 163, in call_next
conda-store-server-1  |     raise app_exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 149, in coro
conda-store-server-1  |     await self.app(scope, receive_or_disconnect, send_no_error)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 85, in __call__
conda-store-server-1  |     await self.app(scope, receive, send_wrapper)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
conda-store-server-1  |     await self.app(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
conda-store-server-1  |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     await app(scope, receive, sender)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
conda-store-server-1  |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
conda-store-server-1  |     await route.handle(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
conda-store-server-1  |     await self.app(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
conda-store-server-1  |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     await app(scope, receive, sender)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
conda-store-server-1  |     response = await f(request)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
conda-store-server-1  |     raw_response = await run_endpoint_function(
conda-store-server-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
conda-store-server-1  |     return await run_in_threadpool(dependant.call, **values)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
conda-store-server-1  |     return await anyio.to_thread.run_sync(func, *args)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
conda-store-server-1  |     return await get_async_backend().run_sync_in_worker_thread(
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2441, in run_sync_in_worker_thread
conda-store-server-1  |     return await future
conda-store-server-1  |            ^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 943, in run
conda-store-server-1  |     result = context.run(func, *args)
conda-store-server-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/server/auth.py", line 523, in get_login_method
conda-store-server-1  |     return templates.TemplateResponse(
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 209, in TemplateResponse
conda-store-server-1  |     return _TemplateResponse(
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 40, in __init__
conda-store-server-1  |     content = template.render(context)
conda-store-server-1  |               ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 1304, in render
conda-store-server-1  |     self.environment.handle_exception()
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/jinja2/environment.py", line 939, in handle_exception
conda-store-server-1  |     raise rewrite_traceback_stack(source=source)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/login.html", line 7, in top-level template code
conda-store-server-1  |     {% extends 'base.html' %}
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/base.html", line 33, in top-level template code
conda-store-server-1  |     {% include 'navigation.html' %}
conda-store-server-1  |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/templates/navigation.html", line 8, in top-level template code
conda-store-server-1  |     <a class="navbar-brand" href="{{ url_for('ui_list_environments') }}">
conda-store-server-1  |     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/templating.py", line 126, in url_for
conda-store-server-1  |     return request.url_for(name, **path_params)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/requests.py", line 186, in url_for
conda-store-server-1  |     url_path = url_path_provider.url_path_for(name, **path_params)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 662, in url_path_for
conda-store-server-1  |     raise NoMatchFound(name, path_params)
conda-store-server-1  | starlette.routing.NoMatchFound: No route exists for name "ui_list_environments" and params "".
conda-store-server-1  | 
conda-store-server-1  | During handling of the above exception, another exception occurred:
conda-store-server-1  | 
conda-store-server-1  | Traceback (most recent call last):
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi
conda-store-server-1  |     result = await app(  # type: ignore[func-returns-value]
conda-store-server-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
conda-store-server-1  |     await super().__call__(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/applications.py", line 113, in __call__
conda-store-server-1  |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 177, in __call__
conda-store-server-1  |     response = await self.handler(request, exc)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 275, in exception_handler
conda-store-server-1  |     return await http_exception_handler(request, exc)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/conda_store_server/_internal/server/app.py", line 264, in http_exception_handler
conda-store-server-1  |     "message": exc.detail,
conda-store-server-1  |                ^^^^^^^^^^
conda-store-server-1  | AttributeError: 'NoMatchFound' object has no attribute 'detail'

This error looks like it is triggered from the auth class

request.url_for("ui_list_environments")
.

Versions and dependencies used.

from the main branch of conda-store (2024.11.2)

Anything else?

No response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: New 🚦
Development

No branches or pull requests

1 participant