Source code for abstract_api.ip_geolocation.ip_geolocation
from typing import ClassVar, Iterable, Optional
from ..core.bases import BaseService
from ..core.mixins import ResponseFieldsMixin
from ._response_fields import RESPONSE_FIELDS
from .ip_geolocation_response import IPGeolocationResponse
[docs]
class IPGeolocation(ResponseFieldsMixin, BaseService[IPGeolocationResponse]):
"""AbstractAPI IP geolocation service.
Used to determine the location and other details of IP addresses.
Attributes:
_subdomain: IP Geolocation service subdomain.
_response_fields: Selected response fields to be returned from IP
Geolocation service endpoint.
"""
_subdomain = "ipgeolocation"
_service_name_env_var: ClassVar[str] = "IP_GEOLOCATION"
_response_fields = RESPONSE_FIELDS
[docs]
def check(
self,
ip: str,
fields: Optional[Iterable[str]] = None
) -> IPGeolocationResponse:
"""Analyzes an IP address for geographical data.
Args:
ip: A valid IP address to analyze.
fields: Selected response fields (optional).
Returns:
IPGeolocationResponse representing API call response.
"""
selected_fields = self._prepare_selected_fields(fields)
return self._service_request(
_response_class=IPGeolocationResponse,
_response_class_kwargs={"response_fields": selected_fields},
ip_address=ip,
fields=self._response_fields_as_param(selected_fields)
)