2222 urllib3_wrap_socket = None
2323
2424from .compat import basestring , byte_type , decode_from_bytes , encode_to_bytes , text_type
25- from .exceptions import StrictMocketException
2625from .utils import (
2726 SSL_PROTOCOL ,
2827 MocketMode ,
@@ -333,8 +332,8 @@ def recv(self, buffersize, flags=None):
333332 raise exc
334333
335334 def true_sendall (self , data , * args , ** kwargs ):
336- if MocketMode ().STRICT :
337- raise StrictMocketException ( "Mocket tried to use the real `socket` module." )
335+ if not MocketMode ().is_allowed (( self . _host , self . _port )) :
336+ MocketMode . raise_not_allowed ( )
338337
339338 req = decode_from_bytes (data )
340339 # make request unique again
@@ -642,6 +641,9 @@ def __init__(self, location, responses):
642641 r = self .response_cls (r )
643642 self .responses .append (r )
644643
644+ def __repr__ (self ):
645+ return "{}(location={})" .format (self .__class__ .__name__ , self .location )
646+
645647 @staticmethod
646648 def can_handle (data ):
647649 return True
@@ -670,11 +672,18 @@ def __init__(
670672 namespace = None ,
671673 truesocket_recording_dir = None ,
672674 strict_mode = False ,
675+ strict_mode_allowed = None ,
673676 ):
674677 self .instance = instance
675678 self .truesocket_recording_dir = truesocket_recording_dir
676679 self .namespace = namespace or text_type (id (self ))
677680 MocketMode ().STRICT = strict_mode
681+ if strict_mode :
682+ MocketMode ().STRICT_ALLOWED = strict_mode_allowed or []
683+ elif strict_mode_allowed :
684+ raise ValueError (
685+ "Allowed locations are only accepted when STRICT mode is active."
686+ )
678687
679688 def enter (self ):
680689 Mocket .enable (
@@ -709,7 +718,7 @@ def check_and_call(self, method_name):
709718 method ()
710719
711720 @staticmethod
712- def factory (test , truesocket_recording_dir , strict_mode , args ):
721+ def factory (test , truesocket_recording_dir , strict_mode , strict_mode_allowed , args ):
713722 instance = args [0 ] if args else None
714723 namespace = None
715724 if truesocket_recording_dir :
@@ -726,11 +735,21 @@ def factory(test, truesocket_recording_dir, strict_mode, args):
726735 namespace = namespace ,
727736 truesocket_recording_dir = truesocket_recording_dir ,
728737 strict_mode = strict_mode ,
738+ strict_mode_allowed = strict_mode_allowed ,
729739 )
730740
731741
732- def wrapper (test , truesocket_recording_dir = None , strict_mode = False , * args , ** kwargs ):
733- with Mocketizer .factory (test , truesocket_recording_dir , strict_mode , args ):
742+ def wrapper (
743+ test ,
744+ truesocket_recording_dir = None ,
745+ strict_mode = False ,
746+ strict_mode_allowed = None ,
747+ * args ,
748+ ** kwargs ,
749+ ):
750+ with Mocketizer .factory (
751+ test , truesocket_recording_dir , strict_mode , strict_mode_allowed , args
752+ ):
734753 return test (* args , ** kwargs )
735754
736755
0 commit comments