-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathmocketizer.py
More file actions
95 lines (79 loc) · 2.52 KB
/
mocketizer.py
File metadata and controls
95 lines (79 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from mocket.mocket import Mocket
from mocket.mode import MocketMode
from mocket.utils import get_mocketize
class Mocketizer:
def __init__(
self,
instance=None,
namespace=None,
truesocket_recording_dir=None,
strict_mode=False,
strict_mode_allowed=None,
):
self.instance = instance
self.truesocket_recording_dir = truesocket_recording_dir
self.namespace = namespace or str(id(self))
MocketMode().STRICT = strict_mode
if strict_mode:
MocketMode().STRICT_ALLOWED = strict_mode_allowed or []
elif strict_mode_allowed:
raise ValueError(
"Allowed locations are only accepted when STRICT mode is active."
)
def enter(self):
Mocket.enable(
namespace=self.namespace,
truesocket_recording_dir=self.truesocket_recording_dir,
)
if self.instance:
self.check_and_call("mocketize_setup")
def __enter__(self):
self.enter()
return self
def exit(self):
if self.instance:
self.check_and_call("mocketize_teardown")
Mocket.disable()
def __exit__(self, type, value, tb):
self.exit()
async def __aenter__(self, *args, **kwargs):
self.enter()
return self
async def __aexit__(self, *args, **kwargs):
self.exit()
def check_and_call(self, method_name):
method = getattr(self.instance, method_name, None)
if callable(method):
method()
@staticmethod
def factory(test, truesocket_recording_dir, strict_mode, strict_mode_allowed, args):
instance = args[0] if args else None
namespace = None
if truesocket_recording_dir:
namespace = ".".join(
(
instance.__class__.__module__,
instance.__class__.__name__,
test.__name__,
)
)
return Mocketizer(
instance,
namespace=namespace,
truesocket_recording_dir=truesocket_recording_dir,
strict_mode=strict_mode,
strict_mode_allowed=strict_mode_allowed,
)
def wrapper(
test,
truesocket_recording_dir=None,
strict_mode=False,
strict_mode_allowed=None,
*args,
**kwargs,
):
with Mocketizer.factory(
test, truesocket_recording_dir, strict_mode, strict_mode_allowed, args
):
return test(*args, **kwargs)
mocketize = get_mocketize(wrapper_=wrapper)