|
25 | 25 |
|
26 | 26 | """
|
27 | 27 |
|
| 28 | +from __future__ import annotations |
| 29 | + |
28 | 30 | import ipaddress
|
29 | 31 | import json
|
30 | 32 | from collections.abc import Sequence
|
31 | 33 | from typing import Any, Optional, Union, cast
|
32 | 34 |
|
33 |
| -import aiohttp |
34 |
| -import aiohttp.http |
35 |
| -import requests |
36 |
| -import requests.utils |
| 35 | +try: |
| 36 | + import aiohttp |
| 37 | + import aiohttp.http |
| 38 | +except ImportError: |
| 39 | + aiohttp = None # type: ignore[assignment] |
| 40 | + |
| 41 | +try: |
| 42 | + import requests |
| 43 | + import requests.utils |
| 44 | +except ImportError: |
| 45 | + requests = None # type: ignore[assignment] |
| 46 | + |
37 | 47 |
|
38 | 48 | import geoip2
|
39 | 49 | import geoip2.models
|
|
49 | 59 | from geoip2.models import City, Country, Insights
|
50 | 60 | from geoip2.types import IPAddress
|
51 | 61 |
|
52 |
| -_AIOHTTP_UA = ( |
53 |
| - f"GeoIP2-Python-Client/{geoip2.__version__} {aiohttp.http.SERVER_SOFTWARE}" |
54 |
| -) |
55 |
| - |
56 |
| -_REQUEST_UA = ( |
57 |
| - f"GeoIP2-Python-Client/{geoip2.__version__} {requests.utils.default_user_agent()}" |
58 |
| -) |
59 |
| - |
60 | 62 |
|
61 | 63 | class BaseClient: # pylint: disable=missing-class-docstring, too-few-public-methods
|
62 | 64 | _account_id: str
|
@@ -346,10 +348,19 @@ async def insights(self, ip_address: IPAddress = "me") -> Insights:
|
346 | 348 | )
|
347 | 349 |
|
348 | 350 | async def _session(self) -> aiohttp.ClientSession:
|
| 351 | + if aiohttp is None: |
| 352 | + raise ImportError( |
| 353 | + "aiohttp is required for async mode; install `GeoIP2[aiohttp]`" |
| 354 | + ) |
| 355 | + |
349 | 356 | if not hasattr(self, "_existing_session"):
|
| 357 | + user_agent = ( |
| 358 | + f"GeoIP2-Python-Client/{geoip2.__version__} " |
| 359 | + f"{aiohttp.http.SERVER_SOFTWARE}" |
| 360 | + ) |
350 | 361 | self._existing_session = aiohttp.ClientSession(
|
351 | 362 | auth=aiohttp.BasicAuth(self._account_id, self._license_key),
|
352 |
| - headers={"Accept": "application/json", "User-Agent": _AIOHTTP_UA}, |
| 363 | + headers={"Accept": "application/json", "User-Agent": user_agent}, |
353 | 364 | timeout=aiohttp.ClientTimeout(total=self._timeout),
|
354 | 365 | )
|
355 | 366 |
|
@@ -456,7 +467,10 @@ def __init__( # pylint: disable=too-many-arguments,too-many-positional-argument
|
456 | 467 | self._session = requests.Session()
|
457 | 468 | self._session.auth = (self._account_id, self._license_key)
|
458 | 469 | self._session.headers["Accept"] = "application/json"
|
459 |
| - self._session.headers["User-Agent"] = _REQUEST_UA |
| 470 | + self._session.headers["User-Agent"] = ( |
| 471 | + f"GeoIP2-Python-Client/{geoip2.__version__}" |
| 472 | + f" {requests.utils.default_user_agent()}" |
| 473 | + ) |
460 | 474 | if proxy is None:
|
461 | 475 | self._proxies = None
|
462 | 476 | else:
|
|
0 commit comments