odmantic icon indicating copy to clipboard operation
odmantic copied to clipboard

Cannot support motor time zone problem

Open InfernalAzazel opened this issue 1 year ago • 2 comments

note : tzinfo=pytz.timezone(TZ_INFO)

class Users(Model):
    class Config:
        collection: str = 'users'

    # def __setattr__(self, key, value):
    #     match key:
    #         case 'create_at':
    #             self.__dict__[key] = value
    #         case 'update_at':
    #             self.__dict__[key] = value

    username: str = Field()  # 帐号: quid1111
    # password: str = Field()  # 密码: 123456
    disabled: bool = Field()  # 禁用:True == 禁用
    name: str = Field(None)  # 姓名:  张三
    mail: str = Field(None)  # 邮箱
    company: str = Field(None)  # 公司
    department: str = Field(None)  # 部门
    # association_role: AssociationRole = Field(None)  # 关联角色
    create_at: datetime = Field(None)  # 创建时间

client = AsyncIOMotorClient(
        f'mongodb://{MONGODB_USERNAME}:{MONGODB_PASSWORD}@{MONGODB_HOST}',
        tz_aware=True,
        tzinfo=pytz.timezone(TZ_INFO)
    )

engine = AIOEngine(client, database=DATABASE_NAME)
   

errror:

INFO:     127.0.0.1:43516 - "GET /api/v1/users/account HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/odmantic/model.py", line 768, in parse_doc
    instance = cls.parse_obj(obj)
  File "pydantic/main.py", line 526, in pydantic.main.BaseModel.parse_obj
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/odmantic/model.py", line 524, in __init__
    super().__init__(**data)
  File "pydantic/main.py", line 342, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Users
create_at
  datetime objects must be naive (no timezone info) (type=value_error)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
    return await self.app(scope, receive, send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/fastapi/applications.py", line 270, in __call__
    await super().__call__(scope, receive, send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/applications.py", line 124, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    raise exc
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
    raise e
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/routing.py", line 706, in __call__
    await route.handle(scope, receive, send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/starlette/routing.py", line 66, in app
    response = await func(request)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/fastapi/routing.py", line 225, in app
    solved_result = await solve_dependencies(
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/fastapi/dependencies/utils.py", line 504, in solve_dependencies
    solved_result = await solve_dependencies(
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/fastapi/dependencies/utils.py", line 533, in solve_dependencies
    solved = await call(**sub_values)
  File "/home/V01/extittivns03/Documents/code/github/universal/server/app/utils/dependencies.py", line 81, in get_current_user
    doc = await db_client.find_one(Users, Users.username == username)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/odmantic/engine.py", line 509, in find_one
    results = await self.find(model, *queries, sort=sort, limit=1, session=session)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/odmantic/engine.py", line 110, in __await__
    instances.append(self._parse_document(raw_doc))
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/odmantic/engine.py", line 83, in _parse_document
    instance = self._model.parse_doc(raw_doc)
  File "/home/V01/extittivns03/.pyenv/versions/3.10.8/lib/python3.10/site-packages/odmantic/model.py", line 770, in parse_doc
    raise DocumentParsingError(
odmantic.exceptions.DocumentParsingError: 1 validation error for Users
create_at
  datetime objects must be naive (no timezone info) (type=value_error)
(Users instance details: id=ObjectId('62b98323bc765ef1413bcd0f'))

InfernalAzazel avatar Dec 19 '22 07:12 InfernalAzazel