Skip to content

Commit 0ded69b

Browse files
committed
Make code easier for mypy and humans to follow
1 parent 98c3923 commit 0ded69b

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

geoip2/models.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,11 +325,13 @@ class SimpleModel(SimpleEquality, metaclass=ABCMeta):
325325

326326
raw: Dict[str, Union[bool, str, int]]
327327
ip_address: str
328+
_network: Optional[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]
329+
_prefix_len: int
328330

329331
def __init__(self, raw: Dict[str, Union[bool, str, int]]) -> None:
330332
self.raw = raw
331333
self._network = None
332-
self._prefix_len = raw.get("prefix_len")
334+
self._prefix_len = cast(int, raw.get("prefix_len"))
333335
self.ip_address = cast(str, raw.get("ip_address"))
334336

335337
def __repr__(self) -> str:
@@ -340,7 +342,7 @@ def network(self) -> Optional[Union[ipaddress.IPv4Network, ipaddress.IPv6Network
340342
"""The network for the record"""
341343
# This code is duplicated for performance reasons
342344
network = self._network
343-
if isinstance(network, (ipaddress.IPv4Network, ipaddress.IPv6Network)):
345+
if network is not None:
344346
return network
345347

346348
ip_address = self.ip_address

geoip2/records.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,7 @@ class Traits(Record):
830830
static_ip_score: Optional[float]
831831
user_count: Optional[int]
832832
user_type: Optional[str]
833-
_network: Optional[str]
833+
_network: Optional[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]
834834
_prefix_len: Optional[int]
835835

836836
def __init__(
@@ -881,23 +881,27 @@ def __init__(
881881
self.user_type = user_type
882882
self.user_count = user_count
883883
self.ip_address = ip_address
884-
self._network = network
884+
if network is None:
885+
self._network = None
886+
else:
887+
self._network = ipaddress.ip_network(network, False)
888+
# We don't construct the network using prefix_len here as that is
889+
# for database lookups. Customers using the database tend to be
890+
# much more performance sensitive than web service users.
885891
self._prefix_len = prefix_len
886892

887893
@property
888894
def network(self) -> Optional[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]]:
889895
"""The network for the record"""
890896
# This code is duplicated for performance reasons
891897
network = self._network
892-
if isinstance(network, (ipaddress.IPv4Network, ipaddress.IPv6Network)):
898+
if network is not None:
893899
return network
894900

895-
if network is None:
896-
ip_address = self.ip_address
897-
prefix_len = self._prefix_len
898-
if ip_address is None or prefix_len is None:
899-
return None
900-
network = f"{ip_address}/{prefix_len}"
901-
network = ipaddress.ip_network(network, False)
901+
ip_address = self.ip_address
902+
prefix_len = self._prefix_len
903+
if ip_address is None or prefix_len is None:
904+
return None
905+
network = ipaddress.ip_network(f"{ip_address}/{prefix_len}", False)
902906
self._network = network
903-
return network # type: ignore
907+
return network

0 commit comments

Comments
 (0)