-
Notifications
You must be signed in to change notification settings - Fork 268
Open
Description
Checklist
- The bug is reproducible against the latest release or
master. - There are no similar issues or pull requests to fix it yet.
Describe the bug
So, I tried to manually add user from dashboard manually inputting UUID, and it throws sqlalchemy exception.
Steps to reproduce the bug
from sqlalchemy import Column, Boolean, Integer, String, create_engine
from sqlalchemy.orm import (
declarative_base,
relationship,
sessionmaker,
Mapped,
mapped_column,
)
from uuid import UUID as PyUUID
from sqlalchemy.dialects.postgresql import UUID
Base = declarative_base()
engine = create_engine(
"sqlite:///example.db",
connect_args={"check_same_thread": False},
)
SessionLocal = sessionmaker(bind=engine)
class User(Base):
__tablename__ = "users"
uuid: Mapped[PyUUID] = mapped_column(UUID, primary_key=True)
name: Mapped[str]
def __str__(self) -> str:
return f"User {self.uuid}"
Base.metadata.create_all(engine) # Create tables
from fastapi import Request
from sqladmin import ModelView
class UserAdmin(ModelView, model=User):
column_list = User.__table__.columns.keys()
form_include_pk = True
from fastapi import FastAPI
from sqladmin import Admin
app = FastAPI()
admin = Admin(app=app, session_maker=SessionLocal)
admin.add_view(UserAdmin)Add User from admin panel and it fails.
Expected behavior
Successful creation
Actual behavior
Exception:
Debugging material
(builtins.AttributeError) 'str' object has no attribute 'hex'
[SQL: INSERT INTO users (uuid, name) VALUES (?, ?)]
[parameters: [{'uuid': '00000000-0000-0000-0000-000000000001', 'name': 'John'}]]
Traceback (most recent call last):
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1815, in _execute_context
context = constructor(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1494, in _init_compiled
l_param: List[Any] = [
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1496, in <listcomp>
flattened_processors[key](compiled_params[key])
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/sql/sqltypes.py", line 3734, in process
value = value.hex
AttributeError: 'str' object has no attribute 'hex'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/application.py", line 554, in create
obj = await model_view.insert_model(request, form_data_dict)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/models.py", line 1088, in insert_model
return await Query(self).insert(data, request)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/_queries.py", line 234, in insert
return await coro
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/anyio/to_thread.py", line 63, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread
return await future
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 986, in run
result = context.run(func, *args)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/_queries.py", line 203, in _insert_sync
session.commit()
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2030, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1311, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1286, in _prepare_impl
self.session.flush()
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
self._flush(objects)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
with util.safe_reraise():
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
flush_context.execute()
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1048, in _emit_insert_statements
result = connection.execute(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1821, in _execute_context
self._handle_dbapi_exception(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1815, in _execute_context
context = constructor(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1494, in _init_compiled
l_param: List[Any] = [
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1496, in <listcomp>
flattened_processors[key](compiled_params[key])
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/sql/sqltypes.py", line 3734, in process
value = value.hex
sqlalchemy.exc.StatementError: (builtins.AttributeError) 'str' object has no attribute 'hex'
[SQL: INSERT INTO users (uuid, name) VALUES (?, ?)]
[parameters: [{'uuid': '00000000-0000-0000-0000-000000000001', 'name': 'John'}]]
Environment
OS: Linux
Python: 3.10
SQLAdmin: 0.22.0
Additional context
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels