1414try :
1515 import maxminddb .extension
1616except ImportError :
17- maxminddb .extension = None # type: ignore
17+ maxminddb .extension = None # type: ignore[assignment]
1818
1919from maxminddb import InvalidDatabaseError , open_database
2020from maxminddb .const import (
2828from maxminddb .reader import Reader
2929
3030
31- def get_reader_from_file_descriptor (filepath , mode ) -> Reader :
31+ def get_reader_from_file_descriptor (filepath : str , mode : int ) -> Reader :
3232 """Patches open_database() for class TestFDReader()."""
3333 if mode == MODE_FD :
3434 with open (filepath , "rb" ) as mmdb_fh :
@@ -53,7 +53,7 @@ class BaseTestReader(unittest.TestCase):
5353 if os .name != "nt" :
5454 mp = multiprocessing .get_context ("fork" )
5555
56- def ipf (self , ip ) -> Union [ipaddress .IPv4Address , ipaddress .IPv6Address ]:
56+ def ipf (self , ip : str ) -> Union [ipaddress .IPv4Address , ipaddress .IPv6Address , str ]:
5757 if self .use_ip_objects :
5858 return ipaddress .ip_address (ip )
5959 return ip
@@ -179,7 +179,9 @@ def test_get_with_prefix_len(self) -> None:
179179 "tests/data/test-data/" + cast ("str" , test ["file_name" ]),
180180 self .mode ,
181181 ) as reader :
182- (record , prefix_len ) = reader .get_with_prefix_len (cast ("str" , test ["ip" ]))
182+ (record , prefix_len ) = reader .get_with_prefix_len (
183+ cast ("str" , test ["ip" ])
184+ )
183185
184186 self .assertEqual (
185187 prefix_len ,
@@ -314,8 +316,8 @@ def test_opening_path(self) -> None:
314316 self .assertEqual (reader .metadata ().database_type , "MaxMind DB Decoder Test" )
315317
316318 def test_no_extension_exception (self ) -> None :
317- real_extension = maxminddb ._extension
318- maxminddb ._extension = None # type: ignore
319+ real_extension = maxminddb ._extension # noqa: SLF001
320+ maxminddb ._extension = None # type: ignore[assignment] # noqa: SLF001
319321 with self .assertRaisesRegex (
320322 ValueError ,
321323 "MODE_MMAP_EXT requires the maxminddb.extension module to be available" ,
@@ -375,11 +377,11 @@ def test_database_with_invalid_utf8_key(self) -> None:
375377
376378 def test_too_many_constructor_args (self ) -> None :
377379 with self .assertRaises (TypeError ):
378- self .reader_class ("README.md" , self .mode , 1 ) # type: ignore
380+ self .reader_class ("README.md" , self .mode , 1 ) # type: ignore[arg-type,call-arg]
379381
380382 def test_bad_constructor_mode (self ) -> None :
381383 with self .assertRaisesRegex (ValueError , r"Unsupported open mode \(100\)" ):
382- self .reader_class ("README.md" , mode = 100 ) # type: ignore
384+ self .reader_class ("README.md" , mode = 100 ) # type: ignore[arg-type]
383385
384386 def test_no_constructor_args (self ) -> None :
385387 with self .assertRaisesRegex (
@@ -389,15 +391,15 @@ def test_no_constructor_args(self) -> None:
389391 r"takes at least 2 arguments|"
390392 r"function missing required argument \'database\' \(pos 1\)" ,
391393 ):
392- self .reader_class () # type: ignore
394+ self .reader_class () # type: ignore[call-arg]
393395
394396 def test_too_many_get_args (self ) -> None :
395397 reader = open_database (
396398 "tests/data/test-data/MaxMind-DB-test-decoder.mmdb" ,
397399 self .mode ,
398400 )
399401 with self .assertRaises (TypeError ):
400- reader .get (self .ipf ("1.1.1.1" ), "blah" ) # type: ignore
402+ reader .get (self .ipf ("1.1.1.1" ), "blah" ) # type: ignore[call-arg]
401403 reader .close ()
402404
403405 def test_no_get_args (self ) -> None :
@@ -406,7 +408,7 @@ def test_no_get_args(self) -> None:
406408 self .mode ,
407409 )
408410 with self .assertRaises (TypeError ):
409- reader .get () # type: ignore
411+ reader .get () # type: ignore[call-arg]
410412 reader .close ()
411413
412414 def test_incorrect_get_arg_type (self ) -> None :
@@ -415,7 +417,7 @@ def test_incorrect_get_arg_type(self) -> None:
415417 TypeError ,
416418 "argument 1 must be a string or ipaddress object" ,
417419 ):
418- reader .get (1 ) # type: ignore
420+ reader .get (1 ) # type: ignore[arg-type]
419421 reader .close ()
420422
421423 def test_metadata_args (self ) -> None :
@@ -424,7 +426,7 @@ def test_metadata_args(self) -> None:
424426 self .mode ,
425427 )
426428 with self .assertRaises (TypeError ):
427- reader .metadata ("blah" ) # type: ignore
429+ reader .metadata ("blah" ) # type: ignore[call-arg]
428430 reader .close ()
429431
430432 def test_metadata_unknown_attribute (self ) -> None :
@@ -437,7 +439,7 @@ def test_metadata_unknown_attribute(self) -> None:
437439 AttributeError ,
438440 "'Metadata' object has no attribute 'blah'" ,
439441 ):
440- metadata .blah # type: ignore
442+ metadata .blah # type: ignore[attr-defined] # noqa: B018
441443 reader .close ()
442444
443445 def test_close (self ) -> None :
@@ -547,7 +549,7 @@ def lookup(pipe) -> None:
547549 except :
548550 pipe .send (0 )
549551 finally :
550- if worker_class is self .mp .Process : # type: ignore
552+ if worker_class is self .mp .Process : # type: ignore[attr-defined]
551553 reader .close ()
552554 pipe .close ()
553555
@@ -560,11 +562,16 @@ def lookup(pipe) -> None:
560562
561563 reader .close ()
562564
563- count = sum ([p .recv () for (p , c ) in pipes ])
565+ count = sum ([p .recv () for (p , _ ) in pipes ])
564566
565567 self .assertEqual (count , 32 , "expected number of successful lookups" )
566568
567- def _check_metadata (self , reader , ip_version , record_size ) -> None :
569+ def _check_metadata (
570+ self ,
571+ reader : Reader ,
572+ ip_version : int ,
573+ record_size : int ,
574+ ) -> None :
568575 metadata = reader .metadata ()
569576
570577 self .assertEqual (2 , metadata .binary_format_major_version , "major version" )
@@ -582,7 +589,7 @@ def _check_metadata(self, reader, ip_version, record_size) -> None:
582589
583590 self .assertEqual (metadata .record_size , record_size )
584591
585- def _check_ip_v4 (self , reader , file_name ) -> None :
592+ def _check_ip_v4 (self , reader : Reader , file_name : str ) -> None :
586593 for i in range (6 ):
587594 address = "1.1.1." + str (pow (2 , i ))
588595 self .assertEqual (
@@ -612,7 +619,7 @@ def _check_ip_v4(self, reader, file_name) -> None:
612619 for ip in ["1.1.1.33" , "255.254.253.123" ]:
613620 self .assertIsNone (reader .get (self .ipf (ip )))
614621
615- def _check_ip_v6 (self , reader , file_name ) -> None :
622+ def _check_ip_v6 (self , reader : Reader , file_name : str ) -> None :
616623 subnets = ["::1:ffff:ffff" , "::2:0:0" , "::2:0:40" , "::2:0:50" , "::2:0:58" ]
617624
618625 for address in subnets :
@@ -645,10 +652,10 @@ def _check_ip_v6(self, reader, file_name) -> None:
645652
646653
647654def has_maxminddb_extension () -> bool :
648- return maxminddb .extension and hasattr (
655+ return maxminddb .extension is not None and hasattr (
649656 maxminddb .extension ,
650657 "Reader" ,
651- ) # type: ignore
658+ )
652659
653660
654661@unittest .skipIf (
0 commit comments