older Python versions need a reference to the loop for a lock

This commit is contained in:
Sarah Hoffmann
2023-07-26 15:17:18 +02:00
parent 9448c5e16f
commit 77ed4f98bb

View File

@@ -9,6 +9,7 @@ Implementation of classes for API access via libraries.
""" """
from typing import Mapping, Optional, Any, AsyncIterator, Dict, Sequence, List, Tuple from typing import Mapping, Optional, Any, AsyncIterator, Dict, Sequence, List, Tuple
import asyncio import asyncio
import sys
import contextlib import contextlib
from pathlib import Path from pathlib import Path
@@ -32,11 +33,15 @@ class NominatimAPIAsync:
""" API loader asynchornous version. """ API loader asynchornous version.
""" """
def __init__(self, project_dir: Path, def __init__(self, project_dir: Path,
environ: Optional[Mapping[str, str]] = None) -> None: environ: Optional[Mapping[str, str]] = None,
loop: Optional[asyncio.AbstractEventLoop] = None) -> None:
self.config = Configuration(project_dir, environ) self.config = Configuration(project_dir, environ)
self.server_version = 0 self.server_version = 0
self._engine_lock = asyncio.Lock() if sys.version_info >= (3, 10):
self._engine_lock = asyncio.Lock()
else:
self._engine_lock = asyncio.Lock(loop=loop) # pylint: disable=unexpected-keyword-arg
self._engine: Optional[sa_asyncio.AsyncEngine] = None self._engine: Optional[sa_asyncio.AsyncEngine] = None
self._tables: Optional[SearchTables] = None self._tables: Optional[SearchTables] = None
self._property_cache: Dict[str, Any] = {'DB:server_version': 0} self._property_cache: Dict[str, Any] = {'DB:server_version': 0}
@@ -274,7 +279,7 @@ class NominatimAPI:
def __init__(self, project_dir: Path, def __init__(self, project_dir: Path,
environ: Optional[Mapping[str, str]] = None) -> None: environ: Optional[Mapping[str, str]] = None) -> None:
self._loop = asyncio.new_event_loop() self._loop = asyncio.new_event_loop()
self._async_api = NominatimAPIAsync(project_dir, environ) self._async_api = NominatimAPIAsync(project_dir, environ, loop=self._loop)
def close(self) -> None: def close(self) -> None: