|
18 | 18 | from urllib3.util.ssl_ import wrap_socket as urllib3_wrap_socket |
19 | 19 |
|
20 | 20 | from .compat import basestring, byte_type, decode_from_bytes, encode_to_bytes, text_type |
21 | | -from .utils import SSL_PROTOCOL, MocketSocketCore, get_mocketize, hexdump, hexload |
| 21 | +from .exceptions import StrictMocketException |
| 22 | +from .utils import ( |
| 23 | + SSL_PROTOCOL, |
| 24 | + MocketMode, |
| 25 | + MocketSocketCore, |
| 26 | + get_mocketize, |
| 27 | + hexdump, |
| 28 | + hexload, |
| 29 | +) |
22 | 30 |
|
23 | 31 | xxh32 = None |
24 | 32 | try: |
@@ -286,6 +294,9 @@ def recv(self, buffersize, flags=None): |
286 | 294 | raise exc |
287 | 295 |
|
288 | 296 | def true_sendall(self, data, *args, **kwargs): |
| 297 | + if MocketMode().STRICT: |
| 298 | + raise StrictMocketException("Mocket tried to use the real `socket` module.") |
| 299 | + |
289 | 300 | req = decode_from_bytes(data) |
290 | 301 | # make request unique again |
291 | 302 | req_signature = _hash_request(hasher, req) |
@@ -597,20 +608,17 @@ def get_response(self): |
597 | 608 |
|
598 | 609 |
|
599 | 610 | class Mocketizer: |
600 | | - def __init__(self, instance=None, namespace=None, truesocket_recording_dir=None): |
| 611 | + def __init__( |
| 612 | + self, |
| 613 | + instance=None, |
| 614 | + namespace=None, |
| 615 | + truesocket_recording_dir=None, |
| 616 | + strict_mode=False, |
| 617 | + ): |
601 | 618 | self.instance = instance |
602 | 619 | self.truesocket_recording_dir = truesocket_recording_dir |
603 | 620 | self.namespace = namespace or text_type(id(self)) |
604 | | - |
605 | | - @staticmethod |
606 | | - def get_namespace(test, instance): |
607 | | - return ".".join( |
608 | | - ( |
609 | | - instance.__class__.__module__, |
610 | | - instance.__class__.__name__, |
611 | | - test.__name__, |
612 | | - ) |
613 | | - ) |
| 621 | + MocketMode().STRICT = strict_mode |
614 | 622 |
|
615 | 623 | def enter(self): |
616 | 624 | Mocket.enable( |
@@ -639,22 +647,34 @@ async def __aenter__(self, *args, **kwargs): |
639 | 647 | async def __aexit__(self, *args, **kwargs): |
640 | 648 | self.exit() |
641 | 649 |
|
642 | | - def check_and_call(self, method): |
643 | | - method = getattr(self.instance, method, None) |
| 650 | + def check_and_call(self, method_name): |
| 651 | + method = getattr(self.instance, method_name, None) |
644 | 652 | if callable(method): |
645 | 653 | method() |
646 | 654 |
|
| 655 | + @staticmethod |
| 656 | + def factory(test, truesocket_recording_dir, strict_mode, args): |
| 657 | + instance = args[0] if args else None |
| 658 | + namespace = None |
| 659 | + if truesocket_recording_dir: |
| 660 | + namespace = ".".join( |
| 661 | + ( |
| 662 | + instance.__class__.__module__, |
| 663 | + instance.__class__.__name__, |
| 664 | + test.__name__, |
| 665 | + ) |
| 666 | + ) |
647 | 667 |
|
648 | | -def wrapper(test, cls=Mocketizer, truesocket_recording_dir=None, *args, **kwargs): |
649 | | - instance = args[0] if args else None |
650 | | - namespace = None |
651 | | - if truesocket_recording_dir: |
652 | | - namespace = Mocketizer.get_namespace(test, instance) |
653 | | - with cls( |
654 | | - instance, |
655 | | - namespace=namespace, |
656 | | - truesocket_recording_dir=truesocket_recording_dir, |
657 | | - ): |
| 668 | + return Mocketizer( |
| 669 | + instance, |
| 670 | + namespace=namespace, |
| 671 | + truesocket_recording_dir=truesocket_recording_dir, |
| 672 | + strict_mode=strict_mode, |
| 673 | + ) |
| 674 | + |
| 675 | + |
| 676 | +def wrapper(test, truesocket_recording_dir=None, strict_mode=False, *args, **kwargs): |
| 677 | + with Mocketizer.factory(test, truesocket_recording_dir, strict_mode, args): |
658 | 678 | return test(*args, **kwargs) |
659 | 679 |
|
660 | 680 |
|
|
0 commit comments