Columns with default=func.now()
will cause SQLAlchemySerializationPlugin
to error with ValueError: Unexpected default type
.
Workaround is replacing it with server_default=func.now()
No response
from litestar import Litestar, get
from litestar.contrib.sqlalchemy.plugins import SQLAlchemySerializationPlugin
from sqlalchemy import BigInteger, Column, DateTime, String
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.sql import func
class Base(DeclarativeBase): ...
class User(Base):
__tablename__ = "users"
id = Column(BigInteger, primary_key=True)
username = Column(String)
first_interaction = Column(DateTime, default=func.now())
last_interaction = Column(DateTime, default=func.now(), onupdate=func.now())
@get("/{user_id:int}")
async def get_user(user_id: int) -> User:
user = "pretend this is a User"
return user
app = Litestar(
route_handlers=[get_user],
plugins=[SQLAlchemySerializationPlugin()],
)
No response
No response
Traceback (most recent call last):
File "/home/mit/frbot/./asd.py", line 25, in <module>
app = Litestar(
^^^^^^^^^
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/app.py", line 483, in __init__
self.register(route_handler)
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/app.py", line 667, in register
route_handler.on_registration(self)
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/handlers/http_handlers/base.py", line 560, in on_registration
super().on_registration(app)
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/handlers/base.py", line 544, in on_registration
self.resolve_return_dto()
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/handlers/base.py", line 504, in resolve_return_dto
return_dto.create_for_field_definition(
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/dto/base_dto.py", line 183, in create_for_field_definition
backend_context[key] = backend_cls( # type: ignore[literal-required]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/dto/_codegen_backend.py", line 72, in __init__
super().__init__(
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/dto/_backend.py", line 108, in __init__
self.parsed_field_definitions = self.parse_model(
^^^^^^^^^^^^^^^^^
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/litestar/dto/_backend.py", line 140, in parse_model
for field_definition in self.dto_factory.generate_field_definitions(model_type):
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/advanced_alchemy/extensions/litestar/dto.py", line 280, in generate_field_definitions
yield from cls.handle_orm_descriptor(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/functools.py", line 946, in _method
return method.__get__(obj, cls)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/advanced_alchemy/extensions/litestar/dto.py", line 116, in _
default, default_factory = _detect_defaults(elem)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/mit/frbot/.venv/lib/python3.11/site-packages/advanced_alchemy/extensions/litestar/dto.py", line 311, in _detect_defaults
raise ValueError(msg)
ValueError: Unexpected default type
sqlalchemy = { extras = ["asyncio"], version = "^2.0.29" }
litestar = {extras = ["sqlalchemy", "standard"], version = "^2.8.2"}
Pay now to fund the work behind this issue.
Get updates on progress being made.
Maintainer is rewarded once the issue is completed.
You're funding impactful open source efforts
You want to contribute to this effort
You want to get funding like this too