Skip to content

[Bug] PyTest 시 DB 연결 오류 #19

@Zerohertz

Description

@Zerohertz

What happened?

DB에 연관된 테스트들이 아래와 같이 정상적으로 구동되고 있지 않음

Relevant log output

================================================================================================================= test session starts ==================================================================================================================
platform linux -- Python 3.12.4, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/zerohertz/workspace
configfile: pyproject.toml
plugins: ordering-0.6, dotenv-0.5.2, anyio-4.8.0, cov-6.0.0
collected 5 items                                                                                                                                                                                                                                      

app/tests/api/v1/test_shields.py .                                                                                                                                                                                                               [ 20%]
app/tests/api/v1/test_users.py EEEE                                                                                                                                                                                                              [100%]

======================================================================================================================== ERRORS ========================================================================================================================
__________________________________________________________________________________________________________ ERROR at setup of test_create_user __________________________________________________________________________________________________________

    @pytest.fixture(scope="module")
    def client() -> Generator[TestClient, None, None]:
>       with TestClient(app) as cli:

app/tests/conftest.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.12/site-packages/starlette/testclient.py:739: in __enter__
    portal.call(self.wait_startup)
.venv/lib/python3.12/site-packages/anyio/from_thread.py:290: in call
    return cast(T_Retval, self.start_task_soon(func, *args).result())
../miniconda/lib/python3.12/concurrent/futures/_base.py:456: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:774: in wait_startup
    await receive()
.venv/lib/python3.12/site-packages/starlette/testclient.py:765: in receive
    self.task.result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:449: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:755: in lifespan
    await self.app(scope, self.stream_receive.receive, self.stream_send.send)
.venv/lib/python3.12/site-packages/fastapi/applications.py:1054: in __call__
    await super().__call__(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/applications.py:113: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/errors.py:152: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py:48: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:715: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:724: in app
    await self.lifespan(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:693: in lifespan
    async with self.lifespan_context(app) as maybe_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
.venv/lib/python3.12/site-packages/fastapi/routing.py:133: in merged_lifespan
    async with original_context(app) as maybe_original_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
app/core/lifespan.py:32: in lifespan
    await database.create_all()
app/core/database.py:54: in create_all
    await conn.run_sync(BaseModel.metadata.create_all)
.venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/engine.py:887: in run_sync
    return await greenlet_spawn(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:201: in greenlet_spawn
    result = context.throw(*sys.exc_info())
.venv/lib/python3.12/site-packages/sqlalchemy/sql/schema.py:5900: in create_all
    bind._run_ddl_visitor(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2456: in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/visitors.py:664: in traverse_single
    return meth(obj, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:907: in visit_metadata
    [t for t in tables if self._can_create_table(t)]
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:872: in _can_create_table
    return not self.checkfirst or not self.dialect.has_table(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py:89: in cache
    return fn(self, con, *args, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/base.py:3373: in has_table
    return bool(connection.scalar(query, {"table_name": table_name}))
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1305: in scalar
    return meth(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:533: in _execute_on_scalar
    return self._execute_on_connection(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:515: in _execute_on_connection
    return connection._execute_clauseelement(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1638: in _execute_clauseelement
    ret = self._execute_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1843: in _execute_context
    return self._exec_single_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1983: in _exec_single_context
    self._handle_dbapi_exception(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2355: in _handle_dbapi_exception
    raise exc_info[1].with_traceback(exc_info[2])
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1964: in _exec_single_context
    self.dialect.do_execute(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py:942: in do_execute
    cursor.execute(statement, parameters)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:580: in execute
    self._adapt_connection.await_(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:132: in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:196: in greenlet_spawn
    value = await result
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:515: in _prepare_and_execute
    await adapt_connection._start_transaction()
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:845: in _start_transaction
    self._handle_exception(error)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:794: in _handle_exception
    raise error
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:843: in _start_transaction
    await self._transaction.start()
.venv/lib/python3.12/site-packages/asyncpg/transaction.py:146: in start
    await self._connection.execute(query)
.venv/lib/python3.12/site-packages/asyncpg/connection.py:349: in execute
    result = await self._protocol.query(query, timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<locals>.task_done() at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py:789]> got Future <Future pending cb=[BaseProtocol._on_waiter_completed()]> attached to a different loop

asyncpg/protocol/protocol.pyx:375: RuntimeError
---------------------------------------------------------------------------------------------------------------- Captured stdout setup -----------------------------------------------------------------------------------------------------------------
2025-01-23 01:59:24,567 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2025-01-23 01:59:24,567 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname 
FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace 
WHERE pg_catalog.pg_class.relname = $1::VARCHAR AND pg_catalog.pg_class.relkind = ANY (ARRAY[$2::VARCHAR, $3::VARCHAR, $4::VARCHAR, $5::VARCHAR, $6::VARCHAR]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != $7::VARCHAR
2025-01-23 01:59:24,567 INFO sqlalchemy.engine.Engine [cached since 0.01263s ago] ('user', 'r', 'p', 'f', 'v', 'm', 'pg_catalog')
2025-01-23 01:59:24,568 INFO sqlalchemy.engine.Engine ROLLBACK
---------------------------------------------------------------------------------------------------------------- Captured stderr setup -----------------------------------------------------------------------------------------------------------------
2025-01-23 01:59:24.567 KST | WARNING  | app.core.database:create_all:52 - Create database
------------------------------------------------------------------------------------------------------------------ Captured log setup ------------------------------------------------------------------------------------------------------------------
INFO     sqlalchemy.engine.Engine:base.py:2699 BEGIN (implicit)
INFO     sqlalchemy.engine.Engine:base.py:1843 SELECT pg_catalog.pg_class.relname 
FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace 
WHERE pg_catalog.pg_class.relname = $1::VARCHAR AND pg_catalog.pg_class.relkind = ANY (ARRAY[$2::VARCHAR, $3::VARCHAR, $4::VARCHAR, $5::VARCHAR, $6::VARCHAR]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != $7::VARCHAR
INFO     sqlalchemy.engine.Engine:base.py:1843 [cached since 0.01263s ago] ('user', 'r', 'p', 'f', 'v', 'm', 'pg_catalog')
INFO     sqlalchemy.engine.Engine:base.py:2702 ROLLBACK
___________________________________________________________________________________________________________ ERROR at setup of test_get_user ____________________________________________________________________________________________________________

    @pytest.fixture(scope="module")
    def client() -> Generator[TestClient, None, None]:
>       with TestClient(app) as cli:

app/tests/conftest.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.12/site-packages/starlette/testclient.py:739: in __enter__
    portal.call(self.wait_startup)
.venv/lib/python3.12/site-packages/anyio/from_thread.py:290: in call
    return cast(T_Retval, self.start_task_soon(func, *args).result())
../miniconda/lib/python3.12/concurrent/futures/_base.py:456: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:774: in wait_startup
    await receive()
.venv/lib/python3.12/site-packages/starlette/testclient.py:765: in receive
    self.task.result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:449: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:755: in lifespan
    await self.app(scope, self.stream_receive.receive, self.stream_send.send)
.venv/lib/python3.12/site-packages/fastapi/applications.py:1054: in __call__
    await super().__call__(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/applications.py:113: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/errors.py:152: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py:48: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:715: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:724: in app
    await self.lifespan(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:693: in lifespan
    async with self.lifespan_context(app) as maybe_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
.venv/lib/python3.12/site-packages/fastapi/routing.py:133: in merged_lifespan
    async with original_context(app) as maybe_original_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
app/core/lifespan.py:32: in lifespan
    await database.create_all()
app/core/database.py:54: in create_all
    await conn.run_sync(BaseModel.metadata.create_all)
.venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/engine.py:887: in run_sync
    return await greenlet_spawn(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:201: in greenlet_spawn
    result = context.throw(*sys.exc_info())
.venv/lib/python3.12/site-packages/sqlalchemy/sql/schema.py:5900: in create_all
    bind._run_ddl_visitor(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2456: in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/visitors.py:664: in traverse_single
    return meth(obj, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:907: in visit_metadata
    [t for t in tables if self._can_create_table(t)]
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:872: in _can_create_table
    return not self.checkfirst or not self.dialect.has_table(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py:89: in cache
    return fn(self, con, *args, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/base.py:3373: in has_table
    return bool(connection.scalar(query, {"table_name": table_name}))
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1305: in scalar
    return meth(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:533: in _execute_on_scalar
    return self._execute_on_connection(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:515: in _execute_on_connection
    return connection._execute_clauseelement(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1638: in _execute_clauseelement
    ret = self._execute_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1843: in _execute_context
    return self._exec_single_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1983: in _exec_single_context
    self._handle_dbapi_exception(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2355: in _handle_dbapi_exception
    raise exc_info[1].with_traceback(exc_info[2])
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1964: in _exec_single_context
    self.dialect.do_execute(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py:942: in do_execute
    cursor.execute(statement, parameters)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:580: in execute
    self._adapt_connection.await_(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:132: in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:196: in greenlet_spawn
    value = await result
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:515: in _prepare_and_execute
    await adapt_connection._start_transaction()
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:845: in _start_transaction
    self._handle_exception(error)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:794: in _handle_exception
    raise error
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:843: in _start_transaction
    await self._transaction.start()
.venv/lib/python3.12/site-packages/asyncpg/transaction.py:146: in start
    await self._connection.execute(query)
.venv/lib/python3.12/site-packages/asyncpg/connection.py:349: in execute
    result = await self._protocol.query(query, timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<locals>.task_done() at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py:789]> got Future <Future pending cb=[BaseProtocol._on_waiter_completed()]> attached to a different loop

asyncpg/protocol/protocol.pyx:375: RuntimeError
__________________________________________________________________________________________________________ ERROR at setup of test_patch_user ___________________________________________________________________________________________________________

    @pytest.fixture(scope="module")
    def client() -> Generator[TestClient, None, None]:
>       with TestClient(app) as cli:

app/tests/conftest.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.12/site-packages/starlette/testclient.py:739: in __enter__
    portal.call(self.wait_startup)
.venv/lib/python3.12/site-packages/anyio/from_thread.py:290: in call
    return cast(T_Retval, self.start_task_soon(func, *args).result())
../miniconda/lib/python3.12/concurrent/futures/_base.py:456: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:774: in wait_startup
    await receive()
.venv/lib/python3.12/site-packages/starlette/testclient.py:765: in receive
    self.task.result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:449: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:755: in lifespan
    await self.app(scope, self.stream_receive.receive, self.stream_send.send)
.venv/lib/python3.12/site-packages/fastapi/applications.py:1054: in __call__
    await super().__call__(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/applications.py:113: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/errors.py:152: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py:48: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:715: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:724: in app
    await self.lifespan(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:693: in lifespan
    async with self.lifespan_context(app) as maybe_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
.venv/lib/python3.12/site-packages/fastapi/routing.py:133: in merged_lifespan
    async with original_context(app) as maybe_original_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
app/core/lifespan.py:32: in lifespan
    await database.create_all()
app/core/database.py:54: in create_all
    await conn.run_sync(BaseModel.metadata.create_all)
.venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/engine.py:887: in run_sync
    return await greenlet_spawn(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:201: in greenlet_spawn
    result = context.throw(*sys.exc_info())
.venv/lib/python3.12/site-packages/sqlalchemy/sql/schema.py:5900: in create_all
    bind._run_ddl_visitor(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2456: in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/visitors.py:664: in traverse_single
    return meth(obj, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:907: in visit_metadata
    [t for t in tables if self._can_create_table(t)]
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:872: in _can_create_table
    return not self.checkfirst or not self.dialect.has_table(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py:89: in cache
    return fn(self, con, *args, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/base.py:3373: in has_table
    return bool(connection.scalar(query, {"table_name": table_name}))
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1305: in scalar
    return meth(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:533: in _execute_on_scalar
    return self._execute_on_connection(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:515: in _execute_on_connection
    return connection._execute_clauseelement(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1638: in _execute_clauseelement
    ret = self._execute_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1843: in _execute_context
    return self._exec_single_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1983: in _exec_single_context
    self._handle_dbapi_exception(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2355: in _handle_dbapi_exception
    raise exc_info[1].with_traceback(exc_info[2])
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1964: in _exec_single_context
    self.dialect.do_execute(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py:942: in do_execute
    cursor.execute(statement, parameters)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:580: in execute
    self._adapt_connection.await_(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:132: in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:196: in greenlet_spawn
    value = await result
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:515: in _prepare_and_execute
    await adapt_connection._start_transaction()
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:845: in _start_transaction
    self._handle_exception(error)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:794: in _handle_exception
    raise error
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:843: in _start_transaction
    await self._transaction.start()
.venv/lib/python3.12/site-packages/asyncpg/transaction.py:146: in start
    await self._connection.execute(query)
.venv/lib/python3.12/site-packages/asyncpg/connection.py:349: in execute
    result = await self._protocol.query(query, timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<locals>.task_done() at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py:789]> got Future <Future pending cb=[BaseProtocol._on_waiter_completed()]> attached to a different loop

asyncpg/protocol/protocol.pyx:375: RuntimeError
___________________________________________________________________________________________________________ ERROR at setup of test_put_user ____________________________________________________________________________________________________________

    @pytest.fixture(scope="module")
    def client() -> Generator[TestClient, None, None]:
>       with TestClient(app) as cli:

app/tests/conftest.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.12/site-packages/starlette/testclient.py:739: in __enter__
    portal.call(self.wait_startup)
.venv/lib/python3.12/site-packages/anyio/from_thread.py:290: in call
    return cast(T_Retval, self.start_task_soon(func, *args).result())
../miniconda/lib/python3.12/concurrent/futures/_base.py:456: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:774: in wait_startup
    await receive()
.venv/lib/python3.12/site-packages/starlette/testclient.py:765: in receive
    self.task.result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:449: in result
    return self.__get_result()
../miniconda/lib/python3.12/concurrent/futures/_base.py:401: in __get_result
    raise self._exception
.venv/lib/python3.12/site-packages/anyio/from_thread.py:221: in _call_func
    retval = await retval_or_awaitable
.venv/lib/python3.12/site-packages/starlette/testclient.py:755: in lifespan
    await self.app(scope, self.stream_receive.receive, self.stream_send.send)
.venv/lib/python3.12/site-packages/fastapi/applications.py:1054: in __call__
    await super().__call__(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/applications.py:113: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/errors.py:152: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/base.py:101: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py:48: in __call__
    await self.app(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:715: in __call__
    await self.middleware_stack(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:724: in app
    await self.lifespan(scope, receive, send)
.venv/lib/python3.12/site-packages/starlette/routing.py:693: in lifespan
    async with self.lifespan_context(app) as maybe_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
.venv/lib/python3.12/site-packages/fastapi/routing.py:133: in merged_lifespan
    async with original_context(app) as maybe_original_state:
../miniconda/lib/python3.12/contextlib.py:210: in __aenter__
    return await anext(self.gen)
app/core/lifespan.py:32: in lifespan
    await database.create_all()
app/core/database.py:54: in create_all
    await conn.run_sync(BaseModel.metadata.create_all)
.venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/engine.py:887: in run_sync
    return await greenlet_spawn(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:201: in greenlet_spawn
    result = context.throw(*sys.exc_info())
.venv/lib/python3.12/site-packages/sqlalchemy/sql/schema.py:5900: in create_all
    bind._run_ddl_visitor(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2456: in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/visitors.py:664: in traverse_single
    return meth(obj, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:907: in visit_metadata
    [t for t in tables if self._can_create_table(t)]
.venv/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py:872: in _can_create_table
    return not self.checkfirst or not self.dialect.has_table(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py:89: in cache
    return fn(self, con, *args, **kw)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/base.py:3373: in has_table
    return bool(connection.scalar(query, {"table_name": table_name}))
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1305: in scalar
    return meth(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:533: in _execute_on_scalar
    return self._execute_on_connection(
.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py:515: in _execute_on_connection
    return connection._execute_clauseelement(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1638: in _execute_clauseelement
    ret = self._execute_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1843: in _execute_context
    return self._exec_single_context(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1983: in _exec_single_context
    self._handle_dbapi_exception(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:2355: in _handle_dbapi_exception
    raise exc_info[1].with_traceback(exc_info[2])
.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py:1964: in _exec_single_context
    self.dialect.do_execute(
.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py:942: in do_execute
    cursor.execute(statement, parameters)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:580: in execute
    self._adapt_connection.await_(
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:132: in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py:196: in greenlet_spawn
    value = await result
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:515: in _prepare_and_execute
    await adapt_connection._start_transaction()
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:845: in _start_transaction
    self._handle_exception(error)
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:794: in _handle_exception
    raise error
.venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:843: in _start_transaction
    await self._transaction.start()
.venv/lib/python3.12/site-packages/asyncpg/transaction.py:146: in start
    await self._connection.execute(query)
.venv/lib/python3.12/site-packages/asyncpg/connection.py:349: in execute
    result = await self._protocol.query(query, timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<locals>.task_done() at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py:789]> got Future <Future pending cb=[BaseProtocol._on_waiter_completed()]> attached to a different loop

asyncpg/protocol/protocol.pyx:375: RuntimeError
=============================================================================================================== short test summary info ================================================================================================================
ERROR app/tests/api/v1/test_users.py::test_create_user - RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<local...
ERROR app/tests/api/v1/test_users.py::test_get_user - RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<local...
ERROR app/tests/api/v1/test_users.py::test_patch_user - RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<local...
ERROR app/tests/api/v1/test_users.py::test_put_user - RuntimeError: Task <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at /home/zerohertz/workspace/.venv/lib/python3.12/site-packages/anyio/from_thread.py:221> cb=[TaskGroup._spawn.<local...
============================================================================================================= 1 passed, 4 errors in 1.86s ==============================================================================================================

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions