Skip to content

Commit c6199c7

Browse files
committed
added tests for context decorator
1 parent a15d9a9 commit c6199c7

File tree

4 files changed

+77
-9
lines changed

4 files changed

+77
-9
lines changed

osbot_utils/base_classes/Cache_Pickle.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ def _cache_disable(self):
8080
def _cache_path(self):
8181
class_name = self.__class__.__name__
8282
module_name = self.__class__.__module__
83-
folder_name = f'{self._cache__FOLDER_CACHE_ROOT_FOLDER}/{module_name.replace(".", "/")}/{class_name}'
83+
folder_name = f'{self._cache__FOLDER_CACHE_ROOT_FOLDER}/{module_name.replace(".", "/")}'
84+
if not module_name.endswith(class_name):
85+
folder_name += f'/{class_name}'
8486
return path_combine(temp_folder_current(), folder_name)
8587

8688
def _cache_files(self):
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from contextlib import contextmanager
22

33
@contextmanager
4-
def context(target, exec_before=None, exec_after=None):
4+
def context(target, *args, exec_before=None, exec_after=None, **kwargs):
55
if exec_before:
6-
exec_before()
6+
exec_before(*args, **kwargs)
77
try:
88
yield target
99
finally:
1010
if exec_after:
11-
exec_after()
11+
exec_after(*args, **kwargs)

tests/base_classes/test_Cache_Pickle.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import types
22
from unittest import TestCase
3-
43
from osbot_utils.base_classes.Cache_Pickle import Cache_Pickle
54
from osbot_utils.decorators.methods.context import context
6-
from osbot_utils.utils.Dev import pprint
75
from osbot_utils.utils.Files import folder_exists, current_temp_folder, pickle_load_from_file
8-
from osbot_utils.utils.Misc import date_time_now, date_now, str_md5
6+
97

108

119
class test_Cache_Pickle(TestCase):
@@ -30,8 +28,6 @@ class An_Class(Cache_Pickle):
3028
def return_42(self):
3129
return 42
3230

33-
34-
3531
an_class = An_Class()
3632
assert isinstance(an_class , An_Class )
3733
assert isinstance(an_class , Cache_Pickle)

tests/decorators/methods/test_context.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,76 @@ def exec_after():
2222
before_mock.assert_called_once()
2323
after_mock.assert_called_once()
2424

25+
def test_context__with_args(self):
26+
def the_answer(value):
27+
assert value == 42
28+
return "it's 42"
29+
def exec_before(value):
30+
assert value == 'before_and_after'
31+
def exec_after(value):
32+
assert value == 'before_and_after'
33+
34+
with context(the_answer, 'before_and_after', exec_before=exec_before, exec_after=exec_after) as target: # value can be passed as a param
35+
assert target(42) == "it's 42"
36+
args = ['before_and_after']
37+
with context(the_answer, *args, exec_before=exec_before, exec_after=exec_after) as target: # or as an *args object at the start
38+
assert target(42) == "it's 42"
39+
with context(the_answer, exec_before=exec_before, exec_after=exec_after, *args) as target: # or as an *args object at the end
40+
assert target(42) == "it's 42"
41+
42+
def test_context__with_kwargs(self):
43+
value_before_and_after = {'before_and_after': 42}
44+
value_target = {'target': 42}
45+
return_value = "value was value_target"
46+
47+
def an_dict(value):
48+
assert value == value_target
49+
return return_value
50+
def exec_before(value):
51+
assert value == value_before_and_after
52+
def exec_after(value):
53+
assert value == value_before_and_after
54+
55+
with context(an_dict, value_before_and_after, exec_before=exec_before, exec_after=exec_after) as target: # value can be passed as a param
56+
assert target(value_target) == return_value
57+
58+
an_dict = {'answer': 42}
59+
60+
def target(value):
61+
assert value == an_dict
62+
return context
63+
64+
def exec_before(value):
65+
assert value == an_dict
66+
67+
def exec_after(value):
68+
assert value == an_dict
69+
70+
with context(target, an_dict, exec_before=exec_before, exec_after=exec_after) as target: # value can be passed as a param
71+
assert target(an_dict) == context
72+
73+
def test_context__with_kwargs_as_locals(self):
74+
"""
75+
shows an example of how to use the kwargs to pass data to the target function
76+
"""
77+
def target(data):
78+
assert data == {'in_exec_before': 2, 'raw_data': 1}
79+
data['in_target'] = 3
80+
return data
81+
82+
def exec_before(data):
83+
assert data == {'raw_data': 1}
84+
data['in_exec_before'] = 2
85+
86+
def exec_after(data):
87+
assert data == {'in_exec_before': 2, 'in_target': 3, 'raw_data': 1}
88+
data['in_exec_after'] = 4
89+
90+
raw_data = {'raw_data': 1}
91+
with context(target, raw_data, exec_before=exec_before, exec_after=exec_after) as target:
92+
assert target(raw_data) == {'in_exec_before': 2, 'in_target': 3, 'raw_data': 1}
93+
assert raw_data == {'in_exec_before': 2, 'in_target': 3, 'in_exec_after': 4, 'raw_data': 1}
94+
2595
def test_exec_before_and_after_called(self):
2696
before_mock = MagicMock()
2797
after_mock = MagicMock()

0 commit comments

Comments
 (0)