Skip to content

Commit 819f8df

Browse files
authored
Improve ipaddress module (#7129)
1 parent 90695fa commit 819f8df

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

stdlib/ipaddress.pyi

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import sys
22
from _typeshed import Self
33
from typing import Any, Container, Generic, Iterable, Iterator, SupportsInt, TypeVar, overload
4+
from typing_extensions import Literal
45

56
# Undocumented length constants
6-
IPV4LENGTH: int
7-
IPV6LENGTH: int
7+
IPV4LENGTH: Literal[32]
8+
IPV6LENGTH: Literal[128]
89

910
_A = TypeVar("_A", IPv4Address, IPv6Address)
1011
_N = TypeVar("_N", IPv4Network, IPv6Network)
1112

12-
def ip_address(address: object) -> IPv4Address | IPv6Address: ...
13-
def ip_network(address: object, strict: bool = ...) -> IPv4Network | IPv6Network: ...
14-
def ip_interface(address: object) -> IPv4Interface | IPv6Interface: ...
13+
_RawIPAddress = int | str | bytes | IPv4Address | IPv6Address
14+
_RawNetworkPart = IPv4Network | IPv6Network | IPv4Interface | IPv6Interface
15+
16+
def ip_address(address: _RawIPAddress) -> IPv4Address | IPv6Address: ...
17+
def ip_network(address: _RawIPAddress | _RawNetworkPart, strict: bool = ...) -> IPv4Network | IPv6Network: ...
18+
def ip_interface(address: _RawIPAddress | _RawNetworkPart) -> IPv4Interface | IPv6Interface: ...
1519

1620
class _IPAddressBase:
1721
def __eq__(self, other: object) -> bool: ...
@@ -115,11 +119,23 @@ class _BaseInterface(_BaseAddress, Generic[_A, _N]):
115119
@property
116120
def with_prefixlen(self) -> str: ...
117121

118-
class IPv4Address(_BaseAddress): ...
119-
class IPv4Network(_BaseNetwork[IPv4Address]): ...
122+
class _BaseV4:
123+
@property
124+
def version(self) -> Literal[4]: ...
125+
@property
126+
def max_prefixlen(self) -> Literal[32]: ...
127+
128+
class IPv4Address(_BaseV4, _BaseAddress): ...
129+
class IPv4Network(_BaseV4, _BaseNetwork[IPv4Address]): ...
120130
class IPv4Interface(IPv4Address, _BaseInterface[IPv4Address, IPv4Network]): ...
121131

122-
class IPv6Address(_BaseAddress):
132+
class _BaseV6:
133+
@property
134+
def version(self) -> Literal[6]: ...
135+
@property
136+
def max_prefixlen(self) -> Literal[128]: ...
137+
138+
class IPv6Address(_BaseV6, _BaseAddress):
123139
@property
124140
def ipv4_mapped(self) -> IPv4Address | None: ...
125141
@property
@@ -132,7 +148,7 @@ class IPv6Address(_BaseAddress):
132148
@property
133149
def scope_id(self) -> str | None: ...
134150

135-
class IPv6Network(_BaseNetwork[IPv6Address]):
151+
class IPv6Network(_BaseV6, _BaseNetwork[IPv6Address]):
136152
@property
137153
def is_site_local(self) -> bool: ...
138154

0 commit comments

Comments
 (0)