Skip to content

Nicer error handling of unique constraint on model post  #56

@mathiser

Description

@mathiser

production_inference_server-private-api-1 | ERROR: Exception in ASGI application
production_inference_server-private-api-1 | Traceback (most recent call last):
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1968, in _exec_single_context
production_inference_server-private-api-1 | self.dialect.do_execute(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 920, in do_execute
production_inference_server-private-api-1 | cursor.execute(statement, parameters)
production_inference_server-private-api-1 | sqlite3.IntegrityError: UNIQUE constraint failed: models.human_readable_id
production_inference_server-private-api-1 |
production_inference_server-private-api-1 | The above exception was the direct cause of the following exception:
production_inference_server-private-api-1 |
production_inference_server-private-api-1 | Traceback (most recent call last):
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 435, in run_asgi
production_inference_server-private-api-1 | result = await app( # type: ignore[func-returns-value]
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in call
production_inference_server-private-api-1 | return await self.app(scope, receive, send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 276, in call
production_inference_server-private-api-1 | await super().call(scope, receive, send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 122, in call
production_inference_server-private-api-1 | await self.middleware_stack(scope, receive, send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 184, in call
production_inference_server-private-api-1 | raise exc
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 162, in call
production_inference_server-private-api-1 | await self.app(scope, receive, _send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 79, in call
production_inference_server-private-api-1 | raise exc
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 68, in call
production_inference_server-private-api-1 | await self.app(scope, receive, sender)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call
production_inference_server-private-api-1 | raise e
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
production_inference_server-private-api-1 | await self.app(scope, receive, send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 718, in call
production_inference_server-private-api-1 | await route.handle(scope, receive, send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 276, in handle
production_inference_server-private-api-1 | await self.app(scope, receive, send)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 66, in app
production_inference_server-private-api-1 | response = await func(request)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 237, in app
production_inference_server-private-api-1 | raw_response = await run_endpoint_function(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 165, in run_endpoint_function
production_inference_server-private-api-1 | return await run_in_threadpool(dependant.call, **values)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
production_inference_server-private-api-1 | return await anyio.to_thread.run_sync(func, *args)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/anyio/to_thread.py", line 33, in run_sync
production_inference_server-private-api-1 | return await get_asynclib().run_sync_in_worker_thread(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
production_inference_server-private-api-1 | return await future
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 807, in run
production_inference_server-private-api-1 | result = context.run(func, *args)
production_inference_server-private-api-1 | File "/home/app/api/api_fastapi_impl.py", line 154, in post_model
production_inference_server-private-api-1 | return self.db.post_model(
production_inference_server-private-api-1 | File "/home/app/database/db_sql_impl.py", line 186, in post_model
production_inference_server-private-api-1 | raise e
production_inference_server-private-api-1 | File "/home/app/database/db_sql_impl.py", line 183, in post_model
production_inference_server-private-api-1 | session.commit()
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1906, in commit
production_inference_server-private-api-1 | trans.commit(_to_root=True)
production_inference_server-private-api-1 | File "", line 2, in commit
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
production_inference_server-private-api-1 | ret_value = fn(self, *arg, **kw)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1221, in commit
production_inference_server-private-api-1 | self._prepare_impl()
production_inference_server-private-api-1 | File "", line 2, in _prepare_impl
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
production_inference_server-private-api-1 | ret_value = fn(self, *arg, **kw)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1196, in _prepare_impl
production_inference_server-private-api-1 | self.session.flush()
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 4154, in flush
production_inference_server-private-api-1 | self._flush(objects)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 4291, in _flush
production_inference_server-private-api-1 | transaction.rollback(_capture_exception=True)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 147, in exit
production_inference_server-private-api-1 | raise exc_value.with_traceback(exc_tb)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 4251, in _flush
production_inference_server-private-api-1 | flush_context.execute()
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 467, in execute
production_inference_server-private-api-1 | rec.execute(self)
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 644, in execute
production_inference_server-private-api-1 | util.preloaded.orm_persistence.save_obj(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
production_inference_server-private-api-1 | _emit_insert_statements(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 1223, in _emit_insert_statements
production_inference_server-private-api-1 | result = connection.execute(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1413, in execute
production_inference_server-private-api-1 | return meth(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 483, in _execute_on_connection
production_inference_server-private-api-1 | return connection._execute_clauseelement(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1637, in _execute_clauseelement
production_inference_server-private-api-1 | ret = self._execute_context(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
production_inference_server-private-api-1 | return self._exec_single_context(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1987, in _exec_single_context
production_inference_server-private-api-1 | self._handle_dbapi_exception(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2344, in _handle_dbapi_exception
production_inference_server-private-api-1 | raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1968, in _exec_single_context
production_inference_server-private-api-1 | self.dialect.do_execute(
production_inference_server-private-api-1 | File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 920, in do_execute
production_inference_server-private-api-1 | cursor.execute(statement, parameters)
production_inference_server-private-api-1 | sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: models.human_readable_id
production_inference_server-private-api-1 | [SQL: INSERT INTO models (uid, human_readable_id, description, container_tag, use_gpu, model_available, model_zip, model_volume_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions