add event handler for default connection settings

This commit is contained in:
Sarah Hoffmann
2022-12-14 20:31:46 +01:00
parent 5c7c4bb9a8
commit 38f467bae3
2 changed files with 26 additions and 5 deletions

View File

@@ -7,12 +7,14 @@
"""
Implementation of classes for API access via libraries.
"""
from typing import Mapping, Optional
from typing import Mapping, Optional, cast, Any
import asyncio
from pathlib import Path
from sqlalchemy import text, event
from sqlalchemy.engine.url import URL
from sqlalchemy.ext.asyncio import create_async_engine
import asyncpg
from nominatim.config import Configuration
from nominatim.apicmd.status import get_status, StatusResult
@@ -33,10 +35,29 @@ class NominatimAPIAsync:
host=dsn.get('host'), port=int(dsn['port']) if 'port' in dsn else None,
query={k: v for k, v in dsn.items()
if k not in ('user', 'password', 'dbname', 'host', 'port')})
self.engine = create_async_engine(dburl,
connect_args={"server_settings": {"jit": "off"}},
future=True)
self.engine = create_async_engine(
dburl, future=True,
connect_args={'server_settings': {
'DateStyle': 'sql,european',
'max_parallel_workers_per_gather': '0'
}})
asyncio.get_event_loop().run_until_complete(self._query_server_version())
asyncio.get_event_loop().run_until_complete(self.close())
if self.server_version >= 110000:
@event.listens_for(self.engine.sync_engine, "connect") # type: ignore[misc]
def _on_connect(dbapi_con: Any, _: Any) -> None:
cursor = dbapi_con.cursor()
cursor.execute("SET jit_above_cost TO '-1'")
async def _query_server_version(self) -> None:
try:
async with self.engine.begin() as conn:
result = await conn.scalar(text('SHOW server_version_num'))
self.server_version = int(cast(str, result))
except asyncpg.PostgresError:
self.server_version = 0
async def close(self) -> None:
""" Close all active connections to the database. The NominatimAPIAsync