Skip to content

Commit 40cb494

Browse files
authored
Merge pull request #4 from owasp-sbot/develop
merging develop
2 parents a15702f + 1ec0ba5 commit 40cb494

23 files changed

+1177
-110
lines changed

osbot_utils/decorators/methods/cache_on_self.py

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
import inspect
22
from functools import wraps
33

4+
from osbot_utils.utils.Misc import str_md5
5+
6+
#from osbot_utils.utils.Dev import pprint
7+
8+
CACHE_ON_SELF_KEY_PREFIX = 'cache_on_self'
9+
CACHE_ON_SELF_TYPES = [int, float, bytearray, bytes, bool,
10+
complex, str]
11+
12+
# not supported for now (need to understand side effect, )
13+
# - set, dict, range,, tuple, list : cloud have inner objects
14+
# - memoryview : returns unique memory location value
15+
416

517
def cache_on_self(function):
618
"""
@@ -12,8 +24,46 @@ def wrapper(*args, **kwargs):
1224
raise Exception("In Method_Wrappers.cache_on_self could not find self")
1325

1426
self = args[0] # get self
15-
cache_id = f'osbot_cache_return_value__{function.__name__}' # generate cache_id
27+
cache_id = cache_on_self__get_cache_in_key(function, args, kwargs)
1628
if hasattr(self, cache_id) is False: # check if return_value has been set
1729
setattr(self, cache_id, function(*args, **kwargs)) # invoke function and capture the return value
1830
return getattr(self, cache_id) # return the return value
19-
return wrapper
31+
return wrapper
32+
33+
def cache_on_self__args_to_str(args):
34+
args_values_as_str = ''
35+
if args:
36+
for arg in args:
37+
if type(arg) in CACHE_ON_SELF_TYPES:
38+
args_values_as_str += str(arg)
39+
return args_values_as_str
40+
41+
def cache_on_self__kwargs_to_str(kwargs):
42+
kwargs_values_as_str = ''
43+
if kwargs:
44+
for key,value in kwargs.items():
45+
if type(value) in CACHE_ON_SELF_TYPES:
46+
kwargs_values_as_str += f'{key}:{value}|'
47+
return kwargs_values_as_str
48+
49+
def cache_on_self__get_cache_in_key(function, args=None, kwargs=None):
50+
key_name = function.__name__
51+
args_md5 = ''
52+
kwargs_md5 = ''
53+
args_values_as_str = cache_on_self__args_to_str(args)
54+
kwargs_values_as_str = cache_on_self__kwargs_to_str(kwargs)
55+
if args_values_as_str:
56+
args_md5 = str_md5(args_values_as_str)
57+
if kwargs_values_as_str:
58+
kwargs_md5 = str_md5(kwargs_values_as_str)
59+
return f'{CACHE_ON_SELF_KEY_PREFIX}_{key_name}_{args_md5}_{kwargs_md5}'
60+
61+
# class_name = self_obj.__class__.__name__
62+
#
63+
# function_name = function_obj.__name__
64+
# if params:
65+
# params_as_string = '_'.join(str(x) for x in params).replace('/',' ')
66+
# params_md5 = str_md5(params_as_string)
67+
# return f'{class_name}_{function_name}_{params_md5}.gz'
68+
# else:
69+
# return f'{class_name}_{function_name}.gz'

osbot_utils/decorators/methods/cache_on_tmp.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from osbot_utils.utils.Misc import str_md5
2+
13
from osbot_utils.utils.Files import temp_folder_current, path_combine, folder_create
24

35
from osbot_utils.utils.Json import json_load_file_gz, json_save_file_gz
@@ -41,7 +43,8 @@ def get_cache_in_tmp_key(self, self_obj, function_obj, params):
4143
function_name = function_obj.__name__
4244
if params:
4345
params_as_string = '_'.join(str(x) for x in params).replace('/',' ')
44-
return f'{class_name}_{function_name}_{params_as_string}.gz'
46+
params_md5 = str_md5(params_as_string)
47+
return f'{class_name}_{function_name}_{params_md5}.gz'
4548
else:
4649
return f'{class_name}_{function_name}.gz'
4750

@@ -52,9 +55,11 @@ def get_cache_in_tmp_path(self, self_obj, function_obj, params):
5255
return cache_path
5356
#return '/tmp/cache_in_tmp_{0}.gz'.format(cache_key)
5457

58+
# todo: refactor to use pickle for data load
5559
def get_cache_in_tmp_data(self, cache_path):
5660
return json_load_file_gz(path=cache_path)
5761

62+
# todo: refactor to use pickle for data save
5863
def save_cache_in_tmp_data(self, cache_path, data):
5964
json_save_file_gz(path=cache_path, python_object=data)
6065
return data

osbot_utils/decorators/methods/remove_return_value.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ def wrapper(*args,**kwargs): # wrapper function
1919
return wrapper # return wrapper function
2020

2121
#todo: check usages and remove legacy method
22-
remove = remove_return_value
22+
remove = remove_return_value

osbot_utils/fluent/Fluent_Dict.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def __init__(self,*args,**kwargs):
1010
super().__init__(*args,**kwargs)
1111

1212
def keys(self):
13-
return Fluent_List(list(self.data.keys()))
13+
return Fluent_List(sorted(list(self.data.keys())))
1414

1515
def size(self):
1616
return len(self.data)

0 commit comments

Comments
 (0)