From afbbf461b63838dfcc779c6c9d0189dc2efa4a2e Mon Sep 17 00:00:00 2001 From: zhangyongcai <17382809141.@163.com> Date: Fri, 11 Sep 2026 09:50:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/error.log | 1151 ++++++++++++++++++++++++++++++++++++++++++++++++ logs/info.log | 1151 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2302 insertions(+) diff --git a/logs/error.log b/logs/error.log index ddccd54..a7f2a72 100644 --- a/logs/error.log +++ b/logs/error.log @@ -403,3 +403,1154 @@ Traceback (most recent call last): self._write_fut = self._loop._proactor.send(self._sock, data) ^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'send' +2026-09-10 19:55:57,028 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 19:56:15,991 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:06:46,339 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 660, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2531, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1711, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1720, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1239, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 150, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 136, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 690, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 344, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:06:54,037 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 660, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2531, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1711, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1720, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1239, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 150, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 136, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 690, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 344, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:15:28,098 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 481, in app + solved_result = await solve_dependencies( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\dependencies\utils.py", line 668, in solve_dependencies + solved = await _solve_generator( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\dependencies\utils.py", line 574, in _solve_generator + return await stack.enter_async_context(cm) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\AppData\Roaming\uv\python\cpython-3.12.14-windows-x86_64-none\Lib\contextlib.py", line 659, in enter_async_context + result = await _enter(cm) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\AppData\Roaming\uv\python\cpython-3.12.14-windows-x86_64-none\Lib\contextlib.py", line 210, in __aenter__ + return await anext(self.gen) + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\config\deps.py", line 7, in get_db + async with mysql.get_session_factory()() as session: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\config\database\mysql.py", line 32, in get_session_factory + _sessionmaker = async_sessionmaker(bind=get_engine(), expire_on_commit=False) + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\config\database\mysql.py", line 17, in get_engine + _engine = create_async_engine( + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\engine.py", line 120, in create_async_engine + sync_engine = _create_engine(url, **kw) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in create_engine + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\deprecations.py", line 281, in warned + return fn(*args, **kwargs) # type: ignore[no-any-return] + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 617, in create_engine + dbapi = dbapi_meth(**dbapi_args) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 229, in import_dbapi + __import__("aiomysql"), __import__("pymysql") + ^^^^^^^^^^^^^^^^^^^^^^ +ModuleNotFoundError: No module named 'aiomysql' +2026-09-10 20:15:47,067 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:18:52,269 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:26:43,171 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods diff --git a/logs/info.log b/logs/info.log index e25fec3..a34de19 100644 --- a/logs/info.log +++ b/logs/info.log @@ -412,3 +412,1154 @@ Traceback (most recent call last): self._write_fut = self._loop._proactor.send(self._sock, data) ^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'send' +2026-09-10 19:55:57,028 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 19:56:15,991 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:06:46,339 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 660, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2531, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1711, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1720, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1239, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 150, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 136, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 690, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 344, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:06:54,037 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\routing.py", line 660, in __call__ + await self.middleware_stack(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2531, in app + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1711, in _handle_selected + await route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1700, in handle + await self.original_router.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 2586, in handle + await included_router._handle_selected(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1720, in _handle_selected + await original_route.handle(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 1239, in handle + await app(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 150, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "D:\cocnd\envs\fund\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 136, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 690, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\fastapi\routing.py", line 344, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "D:\cocnd\envs\fund\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\cocnd\envs\fund\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:15:28,098 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 481, in app + solved_result = await solve_dependencies( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\dependencies\utils.py", line 668, in solve_dependencies + solved = await _solve_generator( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\dependencies\utils.py", line 574, in _solve_generator + return await stack.enter_async_context(cm) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\AppData\Roaming\uv\python\cpython-3.12.14-windows-x86_64-none\Lib\contextlib.py", line 659, in enter_async_context + result = await _enter(cm) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\AppData\Roaming\uv\python\cpython-3.12.14-windows-x86_64-none\Lib\contextlib.py", line 210, in __aenter__ + return await anext(self.gen) + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\config\deps.py", line 7, in get_db + async with mysql.get_session_factory()() as session: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\config\database\mysql.py", line 32, in get_session_factory + _sessionmaker = async_sessionmaker(bind=get_engine(), expire_on_commit=False) + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\config\database\mysql.py", line 17, in get_engine + _engine = create_async_engine( + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\engine.py", line 120, in create_async_engine + sync_engine = _create_engine(url, **kw) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in create_engine + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\deprecations.py", line 281, in warned + return fn(*args, **kwargs) # type: ignore[no-any-return] + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 617, in create_engine + dbapi = dbapi_meth(**dbapi_args) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 229, in import_dbapi + __import__("aiomysql"), __import__("pymysql") + ^^^^^^^^^^^^^^^^^^^^^^ +ModuleNotFoundError: No module named 'aiomysql' +2026-09-10 20:15:47,067 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:18:52,269 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods +2026-09-10 20:26:43,171 ERROR [-] api: unhandled error on /api/auth/login +Traceback (most recent call last): + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 193, in __call__ + response = await self.dispatch_func(request, call_next) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\utils\request_id.py", line 28, in dispatch + response: Response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 168, in call_next + raise app_exc from app_exc.__cause__ or app_exc.__context__ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\base.py", line 144, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__ + await self.app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\routing.py", line 670, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2734, in app + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1791, in _handle_selected + await route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1780, in handle + await self.original_router.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 2789, in handle + await included_router._handle_selected(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1800, in _handle_selected + await original_route.handle(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 1279, in handle + await app(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 158, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 144, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 706, in app + raw_response = await run_endpoint_function( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\fastapi\routing.py", line 352, in run_endpoint_function + return await dependant.call(**values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\api\routers\auth.py", line 18, in login + return success(await auth_login(db, body.username, body.password)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\service\auth.py", line 68, in login + user = await SysUserRepo(db).get_by_username(username) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\repositories\sys_user.py", line 14, in get_by_username + return await self.db.scalar(select(SysUser).where(SysUser.username == username)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 504, in scalar + return await greenlet_spawn( + ^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 201, in greenlet_spawn + result = context.throw(*sys.exc_info()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2421, in scalar + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal + conn = self._connection_for_bind(bind) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2113, in _connection_for_bind + return trans._connection_for_bind(engine, execution_options) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 2, in _connection_for_bind + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\state_changes.py", line 137, in _go + ret_value = fn(self, *arg, **kw) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1191, in _connection_for_bind + conn = bind.connect() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3295, in connect + return self._connection_cls(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 144, in __init__ + self._dbapi_connection = engine.raw_connection() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 3319, in raw_connection + return self.pool.connect() + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 448, in connect + return _ConnectionFairy._checkout(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 1272, in _checkout + fairy = _ConnectionRecord.checkout(pool) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout + rec = pool._do_get() + ^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 178, in _do_get + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\impl.py", line 176, in _do_get + return self._create_connection() + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 389, in _create_connection + return _ConnectionRecord(self) + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ + self.__connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect + with util.safe_reraise(): + ^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 122, in __exit__ + raise exc_value.with_traceback(exc_tb) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect + self.dbapi_connection = connection = pool._invoke_creator(self) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\create.py", line 667, in connect + return dialect.connect(*cargs_tup, **cparams) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\engine\default.py", line 630, in connect + return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\dialects\mysql\aiomysql.py", line 176, in connect + await_only(creator_fn(*arg, **kw)), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 132, in await_only + return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn + value = await result + ^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 74, in _connect + await conn._connect() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 540, in _connect + await self._request_authentication() + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 865, in _request_authentication + await self.caching_sha2_password_auth(auth_packet) + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\aiomysql\connection.py", line 984, in caching_sha2_password_auth + data = _auth.sha2_rsa_encrypt( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Windows\Desktop\fund\venv\Lib\site-packages\pymysql\_auth.py", line 144, in sha2_rsa_encrypt + raise RuntimeError( +RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods