mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-08 04:54:47 +08:00
Revised stubs for geoip2 third party library (#3317)
This commit is contained in:
committed by
Jelle Zijlstra
parent
f0ccb325aa
commit
57384ce033
@@ -1,5 +1,5 @@
|
||||
from typing import (Any, Container, Generic, Iterable, Iterator, Optional,
|
||||
overload, SupportsInt, Tuple, TypeVar)
|
||||
overload, SupportsInt, Text, Tuple, TypeVar)
|
||||
|
||||
# Undocumented length constants
|
||||
IPV4LENGTH: int
|
||||
@@ -21,11 +21,11 @@ class _IPAddressBase:
|
||||
def __lt__(self: _T, other: _T) -> bool: ...
|
||||
def __ne__(self, other: Any) -> bool: ...
|
||||
@property
|
||||
def compressed(self) -> str: ...
|
||||
def compressed(self) -> Text: ...
|
||||
@property
|
||||
def exploded(self) -> str: ...
|
||||
def exploded(self) -> Text: ...
|
||||
@property
|
||||
def reverse_pointer(self) -> str: ...
|
||||
def reverse_pointer(self) -> Text: ...
|
||||
@property
|
||||
def version(self) -> int: ...
|
||||
|
||||
@@ -90,11 +90,11 @@ class _BaseNetwork(_IPAddressBase, Container[_A], Iterable[_A], Generic[_A]):
|
||||
def subnets(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> Iterator[_T]: ...
|
||||
def supernet(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> _T: ...
|
||||
@property
|
||||
def with_hostmask(self) -> str: ...
|
||||
def with_hostmask(self) -> Text: ...
|
||||
@property
|
||||
def with_netmask(self) -> str: ...
|
||||
def with_netmask(self) -> Text: ...
|
||||
@property
|
||||
def with_prefixlen(self) -> str: ...
|
||||
def with_prefixlen(self) -> Text: ...
|
||||
@property
|
||||
def hostmask(self) -> _A: ...
|
||||
|
||||
@@ -105,11 +105,11 @@ class _BaseInterface(_BaseAddress, Generic[_A, _N]):
|
||||
@property
|
||||
def ip(self) -> _A: ...
|
||||
@property
|
||||
def with_hostmask(self) -> str: ...
|
||||
def with_hostmask(self) -> Text: ...
|
||||
@property
|
||||
def with_netmask(self) -> str: ...
|
||||
def with_netmask(self) -> Text: ...
|
||||
@property
|
||||
def with_prefixlen(self) -> str: ...
|
||||
def with_prefixlen(self) -> Text: ...
|
||||
|
||||
class IPv4Address(_BaseAddress): ...
|
||||
class IPv4Network(_BaseNetwork[IPv4Address]): ...
|
||||
|
||||
@@ -26,6 +26,7 @@ consistent_files = [
|
||||
{'stdlib/3.7/dataclasses.pyi', 'third_party/3/dataclasses.pyi'},
|
||||
{'stdlib/3/pathlib.pyi', 'third_party/2/pathlib2.pyi'},
|
||||
{'stdlib/3.7/contextvars.pyi', 'third_party/3/contextvars.pyi'},
|
||||
{'stdlib/3/ipaddress.pyi', 'third_party/2/ipaddress.pyi'},
|
||||
]
|
||||
|
||||
def main():
|
||||
|
||||
149
third_party/2/ipaddress.pyi
vendored
Normal file
149
third_party/2/ipaddress.pyi
vendored
Normal file
@@ -0,0 +1,149 @@
|
||||
from typing import (Any, Container, Generic, Iterable, Iterator, Optional,
|
||||
overload, SupportsInt, Text, Tuple, TypeVar)
|
||||
|
||||
# Undocumented length constants
|
||||
IPV4LENGTH: int
|
||||
IPV6LENGTH: int
|
||||
|
||||
_A = TypeVar("_A", IPv4Address, IPv6Address)
|
||||
_N = TypeVar("_N", IPv4Network, IPv6Network)
|
||||
_T = TypeVar("_T")
|
||||
|
||||
def ip_address(address: object) -> Any: ... # morally Union[IPv4Address, IPv6Address]
|
||||
def ip_network(address: object, strict: bool = ...) -> Any: ... # morally Union[IPv4Network, IPv6Network]
|
||||
def ip_interface(address: object) -> Any: ... # morally Union[IPv4Interface, IPv6Interface]
|
||||
|
||||
class _IPAddressBase:
|
||||
def __eq__(self, other: Any) -> bool: ...
|
||||
def __ge__(self: _T, other: _T) -> bool: ...
|
||||
def __gt__(self: _T, other: _T) -> bool: ...
|
||||
def __le__(self: _T, other: _T) -> bool: ...
|
||||
def __lt__(self: _T, other: _T) -> bool: ...
|
||||
def __ne__(self, other: Any) -> bool: ...
|
||||
@property
|
||||
def compressed(self) -> Text: ...
|
||||
@property
|
||||
def exploded(self) -> Text: ...
|
||||
@property
|
||||
def reverse_pointer(self) -> Text: ...
|
||||
@property
|
||||
def version(self) -> int: ...
|
||||
|
||||
class _BaseAddress(_IPAddressBase, SupportsInt):
|
||||
def __init__(self, address: object) -> None: ...
|
||||
def __add__(self: _T, other: int) -> _T: ...
|
||||
def __hash__(self) -> int: ...
|
||||
def __int__(self) -> int: ...
|
||||
def __sub__(self: _T, other: int) -> _T: ...
|
||||
@property
|
||||
def is_global(self) -> bool: ...
|
||||
@property
|
||||
def is_link_local(self) -> bool: ...
|
||||
@property
|
||||
def is_loopback(self) -> bool: ...
|
||||
@property
|
||||
def is_multicast(self) -> bool: ...
|
||||
@property
|
||||
def is_private(self) -> bool: ...
|
||||
@property
|
||||
def is_reserved(self) -> bool: ...
|
||||
@property
|
||||
def is_unspecified(self) -> bool: ...
|
||||
@property
|
||||
def max_prefixlen(self) -> int: ...
|
||||
@property
|
||||
def packed(self) -> bytes: ...
|
||||
|
||||
class _BaseNetwork(_IPAddressBase, Container[_A], Iterable[_A], Generic[_A]):
|
||||
network_address: _A
|
||||
netmask: _A
|
||||
def __init__(self, address: object, strict: bool = ...) -> None: ...
|
||||
def __contains__(self, other: Any) -> bool: ...
|
||||
def __getitem__(self, n: int) -> _A: ...
|
||||
def __iter__(self) -> Iterator[_A]: ...
|
||||
def address_exclude(self: _T, other: _T) -> Iterator[_T]: ...
|
||||
@property
|
||||
def broadcast_address(self) -> _A: ...
|
||||
def compare_networks(self: _T, other: _T) -> int: ...
|
||||
def hosts(self) -> Iterator[_A]: ...
|
||||
@property
|
||||
def is_global(self) -> bool: ...
|
||||
@property
|
||||
def is_link_local(self) -> bool: ...
|
||||
@property
|
||||
def is_loopback(self) -> bool: ...
|
||||
@property
|
||||
def is_multicast(self) -> bool: ...
|
||||
@property
|
||||
def is_private(self) -> bool: ...
|
||||
@property
|
||||
def is_reserved(self) -> bool: ...
|
||||
@property
|
||||
def is_unspecified(self) -> bool: ...
|
||||
@property
|
||||
def max_prefixlen(self) -> int: ...
|
||||
@property
|
||||
def num_addresses(self) -> int: ...
|
||||
def overlaps(self: _T, other: _T) -> bool: ...
|
||||
@property
|
||||
def prefixlen(self) -> int: ...
|
||||
def subnets(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> Iterator[_T]: ...
|
||||
def supernet(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> _T: ...
|
||||
@property
|
||||
def with_hostmask(self) -> Text: ...
|
||||
@property
|
||||
def with_netmask(self) -> Text: ...
|
||||
@property
|
||||
def with_prefixlen(self) -> Text: ...
|
||||
@property
|
||||
def hostmask(self) -> _A: ...
|
||||
|
||||
class _BaseInterface(_BaseAddress, Generic[_A, _N]):
|
||||
hostmask: _A
|
||||
netmask: _A
|
||||
network: _N
|
||||
@property
|
||||
def ip(self) -> _A: ...
|
||||
@property
|
||||
def with_hostmask(self) -> Text: ...
|
||||
@property
|
||||
def with_netmask(self) -> Text: ...
|
||||
@property
|
||||
def with_prefixlen(self) -> Text: ...
|
||||
|
||||
class IPv4Address(_BaseAddress): ...
|
||||
class IPv4Network(_BaseNetwork[IPv4Address]): ...
|
||||
class IPv4Interface(IPv4Address, _BaseInterface[IPv4Address, IPv4Network]): ...
|
||||
|
||||
class IPv6Address(_BaseAddress):
|
||||
@property
|
||||
def ipv4_mapped(self) -> Optional[IPv4Address]: ...
|
||||
@property
|
||||
def is_site_local(self) -> bool: ...
|
||||
@property
|
||||
def sixtofour(self) -> Optional[IPv4Address]: ...
|
||||
@property
|
||||
def teredo(self) -> Optional[Tuple[IPv4Address, IPv4Address]]: ...
|
||||
|
||||
class IPv6Network(_BaseNetwork[IPv6Address]):
|
||||
@property
|
||||
def is_site_local(self) -> bool: ...
|
||||
|
||||
class IPv6Interface(IPv6Address, _BaseInterface[IPv6Address, IPv6Network]): ...
|
||||
|
||||
def v4_int_to_packed(address: int) -> bytes: ...
|
||||
def v6_int_to_packed(address: int) -> bytes: ...
|
||||
@overload
|
||||
def summarize_address_range(first: IPv4Address, last: IPv4Address) -> Iterator[IPv4Network]: ...
|
||||
@overload
|
||||
def summarize_address_range(first: IPv6Address, last: IPv6Address) -> Iterator[IPv6Network]: ...
|
||||
def collapse_addresses(addresses: Iterable[_N]) -> Iterator[_N]: ...
|
||||
@overload
|
||||
def get_mixed_type_key(obj: _A) -> Tuple[int, _A]: ...
|
||||
@overload
|
||||
def get_mixed_type_key(obj: IPv4Network) -> Tuple[int, IPv4Address, IPv4Address]: ...
|
||||
@overload
|
||||
def get_mixed_type_key(obj: IPv6Network) -> Tuple[int, IPv6Address, IPv6Address]: ...
|
||||
|
||||
class AddressValueError(ValueError): ...
|
||||
class NetmaskValueError(ValueError): ...
|
||||
0
third_party/2and3/geoip2/__init__.pyi
vendored
Normal file
0
third_party/2and3/geoip2/__init__.pyi
vendored
Normal file
22
third_party/2and3/geoip2/database.pyi
vendored
Normal file
22
third_party/2and3/geoip2/database.pyi
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
from types import TracebackType
|
||||
from typing import Optional, Sequence, Text, Type
|
||||
|
||||
from maxminddb.reader import Metadata
|
||||
from geoip2.models import AnonymousIP, ASN, City, ConnectionType, Country, Domain, Enterprise, ISP
|
||||
|
||||
_Locales = Optional[Sequence[Text]]
|
||||
|
||||
class Reader:
|
||||
def __init__(self, filename: Text, locales: _Locales = ..., mode: int = ...) -> None: ...
|
||||
def __enter__(self) -> Reader: ...
|
||||
def __exit__(self, exc_type: Optional[Type[BaseException]] = ..., exc_val: Optional[BaseException] = ..., exc_tb: Optional[TracebackType] = ...) -> None: ...
|
||||
def country(self, ip_address: Text) -> Country: ...
|
||||
def city(self, ip_address: Text) -> City: ...
|
||||
def anonymous_ip(self, ip_address: Text) -> AnonymousIP: ...
|
||||
def asn(self, ip_address: Text) -> ASN: ...
|
||||
def connection_type(self, ip_address: Text) -> ConnectionType: ...
|
||||
def domain(self, ip_address: Text) -> Domain: ...
|
||||
def enterprise(self, ip_address: Text) -> Enterprise: ...
|
||||
def isp(self, ip_address: Text) -> ISP: ...
|
||||
def metadata(self) -> Metadata: ...
|
||||
def close(self) -> None: ...
|
||||
18
third_party/2and3/geoip2/errors.pyi
vendored
Normal file
18
third_party/2and3/geoip2/errors.pyi
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
from typing import Optional, Text
|
||||
|
||||
class GeoIP2Error(RuntimeError): ...
|
||||
|
||||
class AddressNotFoundError(GeoIP2Error): ...
|
||||
|
||||
class AuthenticationError(GeoIP2Error): ...
|
||||
|
||||
class HTTPError(GeoIP2Error):
|
||||
http_status: Optional[int]
|
||||
uri: Optional[Text]
|
||||
def __init__(self, message: Text, http_status: Optional[int] = ..., uri: Optional[Text] = ...) -> None: ...
|
||||
|
||||
class InvalidRequestError(GeoIP2Error): ...
|
||||
|
||||
class OutOfQueriesError(GeoIP2Error): ...
|
||||
|
||||
class PermissionRequiredError(GeoIP2Error): ...
|
||||
3
third_party/2and3/geoip2/mixins.pyi
vendored
Normal file
3
third_party/2and3/geoip2/mixins.pyi
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
class SimpleEquality:
|
||||
def __eq__(self, other: object) -> bool: ...
|
||||
def __ne__(self, other: object) -> bool: ...
|
||||
65
third_party/2and3/geoip2/models.pyi
vendored
Normal file
65
third_party/2and3/geoip2/models.pyi
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
from typing import Any, Mapping, Optional, Sequence, Text
|
||||
|
||||
from geoip2 import records
|
||||
|
||||
from geoip2.mixins import SimpleEquality
|
||||
|
||||
_Locales = Optional[Sequence[Text]]
|
||||
_RawResponse = Mapping[Text, Mapping[Text, Any]]
|
||||
|
||||
class Country(SimpleEquality):
|
||||
continent: records.Continent
|
||||
country: records.Country
|
||||
registered_country: records.Country
|
||||
represented_country: records.RepresentedCountry
|
||||
maxmind: records.MaxMind
|
||||
traits: records.Traits
|
||||
raw: _RawResponse
|
||||
def __init__(self, raw_response: _RawResponse, locales: _Locales = ...) -> None: ...
|
||||
|
||||
class City(Country):
|
||||
city: records.City
|
||||
location: records.Location
|
||||
postal: records.Postal
|
||||
subdivisions: records.Subdivisions
|
||||
def __init__(self, raw_response: _RawResponse, locales: _Locales = ...) -> None: ...
|
||||
|
||||
class Insights(City): ...
|
||||
|
||||
class Enterprise(City): ...
|
||||
|
||||
class SimpleModel(SimpleEquality): ...
|
||||
|
||||
class AnonymousIP(SimpleModel):
|
||||
is_anonymous: bool
|
||||
is_anonymous_vpn: bool
|
||||
is_hosting_provider: bool
|
||||
is_public_proxy: bool
|
||||
is_tor_exit_node: bool
|
||||
ip_address: Optional[Text]
|
||||
raw: _RawResponse
|
||||
def __init__(self, raw: _RawResponse) -> None: ...
|
||||
|
||||
class ASN(SimpleModel):
|
||||
autonomous_system_number: Optional[int]
|
||||
autonomous_system_organization: Optional[Text]
|
||||
ip_address: Optional[Text]
|
||||
raw: _RawResponse
|
||||
def __init__(self, raw: _RawResponse) -> None: ...
|
||||
|
||||
class ConnectionType(SimpleModel):
|
||||
connection_type: Optional[Text]
|
||||
ip_address: Optional[Text]
|
||||
raw: _RawResponse
|
||||
def __init__(self, raw: _RawResponse) -> None: ...
|
||||
|
||||
class Domain(SimpleModel):
|
||||
domain: Optional[Text]
|
||||
ip_address: Optional[Text]
|
||||
raw: Optional[Text]
|
||||
def __init__(self, raw: _RawResponse) -> None: ...
|
||||
|
||||
class ISP(ASN):
|
||||
isp: Optional[Text]
|
||||
organization: Optional[Text]
|
||||
def __init__(self, raw: _RawResponse) -> None: ...
|
||||
83
third_party/2and3/geoip2/records.pyi
vendored
Normal file
83
third_party/2and3/geoip2/records.pyi
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
from typing import Any, Mapping, Optional, Sequence, Text, Tuple
|
||||
|
||||
from geoip2.mixins import SimpleEquality
|
||||
|
||||
_Locales = Optional[Sequence[Text]]
|
||||
_Names = Mapping[Text, Text]
|
||||
|
||||
class Record(SimpleEquality):
|
||||
def __init__(self, **kwargs: Any) -> None: ...
|
||||
def __setattr__(self, name: Text, value: Any) -> None: ...
|
||||
|
||||
class PlaceRecord(Record):
|
||||
def __init__(self, locales: _Locales = ..., **kwargs: Any) -> None: ...
|
||||
@property
|
||||
def name(self) -> Text: ...
|
||||
|
||||
class City(PlaceRecord):
|
||||
confidence: int
|
||||
geoname_id: int
|
||||
names: _Names
|
||||
|
||||
class Continent(PlaceRecord):
|
||||
code: Text
|
||||
geoname_id: int
|
||||
names: _Names
|
||||
|
||||
class Country(PlaceRecord):
|
||||
confidence: int
|
||||
geoname_id: int
|
||||
is_in_european_union: bool
|
||||
iso_code: Text
|
||||
names: _Names
|
||||
def __init__(self, locales: _Locales = ..., **kwargs: Any) -> None: ...
|
||||
|
||||
class RepresentedCountry(Country):
|
||||
type: Text
|
||||
|
||||
class Location(Record):
|
||||
average_income: int
|
||||
accuracy_radius: int
|
||||
latitude: float
|
||||
longitude: float
|
||||
metro_code: int
|
||||
population_density: int
|
||||
time_zone: Text
|
||||
|
||||
class MaxMind(Record):
|
||||
queries_remaining: int
|
||||
|
||||
class Postal(Record):
|
||||
code: Text
|
||||
confidence: int
|
||||
|
||||
class Subdivision(PlaceRecord):
|
||||
confidence: int
|
||||
geoname_id: int
|
||||
iso_code: Text
|
||||
names: _Names
|
||||
|
||||
class Subdivisions(Tuple[Subdivision]):
|
||||
def __new__(cls, locales: _Locales, *subdivisions: Subdivision) -> Subdivisions: ...
|
||||
def __init__(self, locales: _Locales, *subdivisions: Subdivision) -> None: ...
|
||||
@property
|
||||
def most_specific(self) -> Subdivision: ...
|
||||
|
||||
class Traits(Record):
|
||||
autonomous_system_number: int
|
||||
autonomous_system_organization: Text
|
||||
connection_type: Text
|
||||
domain: Text
|
||||
ip_address: Text
|
||||
is_anonymous: bool
|
||||
is_anonymous_proxy: bool
|
||||
is_anonymous_vpn: bool
|
||||
is_hosting_provider: bool
|
||||
is_legitimate_proxy: bool
|
||||
is_public_proxy: bool
|
||||
is_satellite_provider: bool
|
||||
is_tor_exit_node: bool
|
||||
isp: Text
|
||||
organization: Text
|
||||
user_type: Text
|
||||
def __init__(self, **kwargs: Any) -> None: ...
|
||||
7
third_party/2and3/maxminddb/__init__.pyi
vendored
Normal file
7
third_party/2and3/maxminddb/__init__.pyi
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
from typing import Text
|
||||
|
||||
from maxminddb import reader
|
||||
|
||||
def open_database(database: Text, mode: int = ...) -> reader.Reader: ...
|
||||
|
||||
def Reader(database: Text) -> reader.Reader: ...
|
||||
@@ -1,5 +1,3 @@
|
||||
# Stubs for maxminddb.compat (Python 3)
|
||||
|
||||
from ipaddress import IPv4Address, IPv6Address
|
||||
|
||||
from typing import Any
|
||||
@@ -1,5 +1,3 @@
|
||||
# Stubs for maxminddb.const (Python 3)
|
||||
|
||||
MODE_AUTO: int = ...
|
||||
MODE_MMAP_EXT: int = ...
|
||||
MODE_MMAP: int = ...
|
||||
@@ -1,5 +1,3 @@
|
||||
# Stubs for maxminddb.decoder (Python 3)
|
||||
|
||||
from typing import Any, Tuple
|
||||
|
||||
class Decoder:
|
||||
@@ -1,3 +1 @@
|
||||
# Stubs for maxminddb.errors (Python 3)
|
||||
|
||||
class InvalidDatabaseError(RuntimeError): ...
|
||||
@@ -1,6 +1,4 @@
|
||||
# Stubs for maxminddb.extension (Python 3)
|
||||
|
||||
from typing import Any, Mapping, Sequence
|
||||
from typing import Any, Mapping, Sequence, Text
|
||||
|
||||
from maxminddb.errors import InvalidDatabaseError as InvalidDatabaseError
|
||||
|
||||
@@ -21,9 +19,9 @@ class extension:
|
||||
@property
|
||||
def ip_version(self) -> int: ...
|
||||
@property
|
||||
def database_type(self) -> str: ...
|
||||
def database_type(self) -> Text: ...
|
||||
@property
|
||||
def languages(self) -> Sequence[str]: ...
|
||||
def languages(self) -> Sequence[Text]: ...
|
||||
@property
|
||||
def binary_format_major_version(self) -> int: ...
|
||||
@property
|
||||
@@ -31,5 +29,5 @@ class extension:
|
||||
@property
|
||||
def build_epoch(self) -> int: ...
|
||||
@property
|
||||
def description(self) -> Mapping[str, str]: ...
|
||||
def description(self) -> Mapping[Text, Text]: ...
|
||||
def __init__(self, **kwargs: Any) -> None: ...
|
||||
@@ -1,16 +1,14 @@
|
||||
# Stubs for maxminddb.reader (Python 3)
|
||||
|
||||
from ipaddress import IPv4Address, IPv6Address
|
||||
|
||||
from types import TracebackType
|
||||
from typing import Any, Mapping, Optional, Sequence, Tuple, Type, Union
|
||||
from typing import Any, Mapping, Optional, Sequence, Text, Tuple, Type, Union
|
||||
|
||||
class Reader:
|
||||
closed: bool = ...
|
||||
def __init__(self, database: bytes, mode: int = ...) -> None: ...
|
||||
def metadata(self) -> Metadata: ...
|
||||
def get(self, ip_address: Union[str, IPv4Address, IPv6Address]) -> Optional[Any]: ...
|
||||
def get_with_prefix_len(self, ip_address: Union[str, IPv4Address, IPv6Address]) -> Tuple[Optional[Any], int]: ...
|
||||
def get(self, ip_address: Union[Text, IPv4Address, IPv6Address]) -> Optional[Any]: ...
|
||||
def get_with_prefix_len(self, ip_address: Union[Text, IPv4Address, IPv6Address]) -> Tuple[Optional[Any], int]: ...
|
||||
def close(self) -> None: ...
|
||||
def __enter__(self) -> Reader: ...
|
||||
def __exit__(self, exc_type: Optional[Type[BaseException]] = ..., exc_val: Optional[BaseException] = ..., exc_tb: Optional[TracebackType] = ...) -> None: ...
|
||||
@@ -19,12 +17,12 @@ class Metadata:
|
||||
node_count: int = ...
|
||||
record_size: int = ...
|
||||
ip_version: int = ...
|
||||
database_type: str = ...
|
||||
languages: Sequence[str] = ...
|
||||
database_type: Text = ...
|
||||
languages: Sequence[Text] = ...
|
||||
binary_format_major_version: int = ...
|
||||
binary_format_minor_version: int = ...
|
||||
build_epoch: int = ...
|
||||
description: Mapping[str, str] = ...
|
||||
description: Mapping[Text, Text] = ...
|
||||
def __init__(self, **kwargs: Any) -> None: ...
|
||||
@property
|
||||
def node_byte_size(self) -> int: ...
|
||||
9
third_party/3/maxminddb/__init__.pyi
vendored
9
third_party/3/maxminddb/__init__.pyi
vendored
@@ -1,9 +0,0 @@
|
||||
# Stubs for maxminddb (Python 3)
|
||||
|
||||
from typing import Any
|
||||
|
||||
from maxminddb import reader
|
||||
|
||||
def open_database(database: str, mode: int = ...) -> reader.Reader: ...
|
||||
|
||||
def Reader(database: str) -> reader.Reader: ...
|
||||
Reference in New Issue
Block a user