115 lines
3 KiB
Python
115 lines
3 KiB
Python
"""C extension database reader and related classes."""
|
|
|
|
# pylint: disable=E0601,E0602
|
|
from ipaddress import IPv4Address, IPv6Address
|
|
from os import PathLike
|
|
from typing import IO, Any, AnyStr, Optional, Union
|
|
|
|
from maxminddb.const import MODE_AUTO
|
|
from maxminddb.types import Record
|
|
|
|
class Reader:
|
|
"""A C extension implementation of a reader for the MaxMind DB format. IP
|
|
addresses can be looked up using the ``get`` method.
|
|
"""
|
|
|
|
closed: bool = ...
|
|
|
|
def __init__(
|
|
self,
|
|
database: Union[AnyStr, int, PathLike, IO],
|
|
mode: int = MODE_AUTO,
|
|
) -> None:
|
|
"""Reader for the MaxMind DB file format
|
|
|
|
Arguments:
|
|
database -- A path to a valid MaxMind DB file such as a GeoIP2 database
|
|
file, or a file descriptor in the case of MODE_FD.
|
|
mode -- mode to open the database with. The only supported modes are
|
|
MODE_AUTO and MODE_MMAP_EXT.
|
|
|
|
"""
|
|
|
|
def close(self) -> None:
|
|
"""Closes the MaxMind DB file and returns the resources to the system"""
|
|
|
|
def get(self, ip_address: Union[str, IPv6Address, IPv4Address]) -> Optional[Record]:
|
|
"""Return the record for the ip_address in the MaxMind DB
|
|
|
|
Arguments:
|
|
ip_address -- an IP address in the standard string notation
|
|
|
|
"""
|
|
|
|
def get_with_prefix_len(
|
|
self,
|
|
ip_address: Union[str, IPv6Address, IPv4Address],
|
|
) -> tuple[Optional[Record], int]:
|
|
"""Return a tuple with the record and the associated prefix length
|
|
|
|
Arguments:
|
|
ip_address -- an IP address in the standard string notation
|
|
|
|
"""
|
|
|
|
def metadata(self) -> Metadata:
|
|
"""Return the metadata associated with the MaxMind DB file"""
|
|
|
|
def __enter__(self) -> Reader: ...
|
|
def __exit__(self, *args) -> None: ...
|
|
|
|
# pylint: disable=too-few-public-methods
|
|
class Metadata:
|
|
"""Metadata for the MaxMind DB reader"""
|
|
|
|
binary_format_major_version: int
|
|
"""
|
|
The major version number of the binary format used when creating the
|
|
database.
|
|
"""
|
|
|
|
binary_format_minor_version: int
|
|
"""
|
|
The minor version number of the binary format used when creating the
|
|
database.
|
|
"""
|
|
|
|
build_epoch: int
|
|
"""
|
|
The Unix epoch for the build time of the database.
|
|
"""
|
|
|
|
database_type: str
|
|
"""
|
|
A string identifying the database type, e.g., "GeoIP2-City".
|
|
"""
|
|
|
|
description: dict[str, str]
|
|
"""
|
|
A map from locales to text descriptions of the database.
|
|
"""
|
|
|
|
ip_version: int
|
|
"""
|
|
The IP version of the data in a database. A value of "4" means the
|
|
database only supports IPv4. A database with a value of "6" may support
|
|
both IPv4 and IPv6 lookups.
|
|
"""
|
|
|
|
languages: list[str]
|
|
"""
|
|
A list of locale codes supported by the databse.
|
|
"""
|
|
|
|
node_count: int
|
|
"""
|
|
The number of nodes in the database.
|
|
"""
|
|
|
|
record_size: int
|
|
"""
|
|
The bit size of a record in the search tree.
|
|
"""
|
|
|
|
def __init__(self, **kwargs: Any) -> None:
|
|
"""Creates new Metadata object. kwargs are key/value pairs from spec"""
|