-
Notifications
You must be signed in to change notification settings - Fork 18
Open
Description
The .get_engine methods on the managers allow you to set the driver through an arg.
However, wait_for_ready on SQLAlchemyPGliteManager calls get_engine without passing driver:
py-pglite/src/py_pglite/sqlalchemy/manager.py
Lines 108 to 133 in 1ab59cb
| def wait_for_ready(self, max_retries: int = 15, delay: float = 1.0) -> bool: | |
| """Wait for database to be ready and responsive. | |
| NOTE: This method requires SQLAlchemy to be installed. | |
| Args: | |
| max_retries: Maximum number of connection attempts | |
| delay: Delay between attempts in seconds | |
| Returns: | |
| True if database becomes ready, False otherwise | |
| Raises: | |
| ImportError: If SQLAlchemy is not installed | |
| """ | |
| try: | |
| from sqlalchemy import text | |
| except ImportError as e: | |
| raise ImportError( | |
| "SQLAlchemy is required for wait_for_ready(). " | |
| "Install with: pip install py-pglite[sqlalchemy]" | |
| ) from e | |
| # Use the shared engine that get_engine() creates | |
| engine = self.get_engine(pool_pre_ping=False) | |
Causing this failure:
pglite_config = PGliteConfig(timeout=30, cleanup_on_exit=True, log_level='INFO', socket_path='/var/folders/vr/cc8sq12930zbfwtzfrjzj6g4...k=True, auto_install_deps=True, extensions=None, node_options=None, use_tcp=F
alse, tcp_host='127.0.0.1', tcp_port=5432)
@pytest.fixture(scope="session")
def pglite_sqlalchemy_manager(
pglite_config: PGliteConfig,
) -> Generator[SQLAlchemyPGliteManager, None, None]:
"""Pytest fixture providing an SQLAlchemy-enabled PGlite manager."""
manager = SQLAlchemyPGliteManager(pglite_config)
manager.start()
# Wait for database to be ready
> if not manager.wait_for_ready():
../.venv/lib/python3.12/site-packages/py_pglite/sqlalchemy/fixtures.py:55:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.venv/lib/python3.12/site-packages/py_pglite/sqlalchemy/manager.py:132: in wait_for_ready
engine = self.get_engine(pool_pre_ping=False)
../.venv/lib/python3.12/site-packages/py_pglite/sqlalchemy/manager.py:103: in get_engine
self._shared_engine = create_engine(
../.venv/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py:281: in warned
return fn(*args, **kwargs) # type: ignore[no-any-return]
../.venv/lib/python3.12/site-packages/sqlalchemy/engine/create.py:617: in create_engine
dbapi = dbapi_meth(**dbapi_args)
I locally tried to patch the lib to:
`engine = self.get_engine(driver="psycopg2", pool_pre_ping=False)`
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cls = <class 'sqlalchemy.dialects.postgresql.psycopg.PGDialect_psycopg'>
@classmethod
def import_dbapi(cls):
> import psycopg
E ModuleNotFoundError: No module named 'psycopg'
I locally patched the library to have:
engine = self.get_engine(driver="psycopg2", pool_pre_ping=False)and the fixture starts up fine.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels