Skip to content

Commit

Permalink
Merge pull request #4 from owasp-sbot/develop
Browse files Browse the repository at this point in the history
merging develop
  • Loading branch information
DinisCruz authored Aug 13, 2022
2 parents a15702f + 1ec0ba5 commit 40cb494
Show file tree
Hide file tree
Showing 23 changed files with 1,177 additions and 110 deletions.
54 changes: 52 additions & 2 deletions osbot_utils/decorators/methods/cache_on_self.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
import inspect
from functools import wraps

from osbot_utils.utils.Misc import str_md5

#from osbot_utils.utils.Dev import pprint

CACHE_ON_SELF_KEY_PREFIX = 'cache_on_self'
CACHE_ON_SELF_TYPES = [int, float, bytearray, bytes, bool,
complex, str]

# not supported for now (need to understand side effect, )
# - set, dict, range,, tuple, list : cloud have inner objects
# - memoryview : returns unique memory location value


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

self = args[0] # get self
cache_id = f'osbot_cache_return_value__{function.__name__}' # generate cache_id
cache_id = cache_on_self__get_cache_in_key(function, args, kwargs)
if hasattr(self, cache_id) is False: # check if return_value has been set
setattr(self, cache_id, function(*args, **kwargs)) # invoke function and capture the return value
return getattr(self, cache_id) # return the return value
return wrapper
return wrapper

def cache_on_self__args_to_str(args):
args_values_as_str = ''
if args:
for arg in args:
if type(arg) in CACHE_ON_SELF_TYPES:
args_values_as_str += str(arg)
return args_values_as_str

def cache_on_self__kwargs_to_str(kwargs):
kwargs_values_as_str = ''
if kwargs:
for key,value in kwargs.items():
if type(value) in CACHE_ON_SELF_TYPES:
kwargs_values_as_str += f'{key}:{value}|'
return kwargs_values_as_str

def cache_on_self__get_cache_in_key(function, args=None, kwargs=None):
key_name = function.__name__
args_md5 = ''
kwargs_md5 = ''
args_values_as_str = cache_on_self__args_to_str(args)
kwargs_values_as_str = cache_on_self__kwargs_to_str(kwargs)
if args_values_as_str:
args_md5 = str_md5(args_values_as_str)
if kwargs_values_as_str:
kwargs_md5 = str_md5(kwargs_values_as_str)
return f'{CACHE_ON_SELF_KEY_PREFIX}_{key_name}_{args_md5}_{kwargs_md5}'

# class_name = self_obj.__class__.__name__
#
# function_name = function_obj.__name__
# if params:
# params_as_string = '_'.join(str(x) for x in params).replace('/',' ')
# params_md5 = str_md5(params_as_string)
# return f'{class_name}_{function_name}_{params_md5}.gz'
# else:
# return f'{class_name}_{function_name}.gz'
7 changes: 6 additions & 1 deletion osbot_utils/decorators/methods/cache_on_tmp.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from osbot_utils.utils.Misc import str_md5

from osbot_utils.utils.Files import temp_folder_current, path_combine, folder_create

from osbot_utils.utils.Json import json_load_file_gz, json_save_file_gz
Expand Down Expand Up @@ -41,7 +43,8 @@ def get_cache_in_tmp_key(self, self_obj, function_obj, params):
function_name = function_obj.__name__
if params:
params_as_string = '_'.join(str(x) for x in params).replace('/',' ')
return f'{class_name}_{function_name}_{params_as_string}.gz'
params_md5 = str_md5(params_as_string)
return f'{class_name}_{function_name}_{params_md5}.gz'
else:
return f'{class_name}_{function_name}.gz'

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

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

# todo: refactor to use pickle for data save
def save_cache_in_tmp_data(self, cache_path, data):
json_save_file_gz(path=cache_path, python_object=data)
return data
2 changes: 1 addition & 1 deletion osbot_utils/decorators/methods/remove_return_value.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ def wrapper(*args,**kwargs): # wrapper function
return wrapper # return wrapper function

#todo: check usages and remove legacy method
remove = remove_return_value
remove = remove_return_value
2 changes: 1 addition & 1 deletion osbot_utils/fluent/Fluent_Dict.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)

def keys(self):
return Fluent_List(list(self.data.keys()))
return Fluent_List(sorted(list(self.data.keys())))

def size(self):
return len(self.data)
Expand Down
Loading

0 comments on commit 40cb494

Please sign in to comment.