Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
749220c
added couple simple pickle helper methods
DinisCruz Jul 30, 2021
2fdcddd
removed some chars from the random_password method
DinisCruz Jul 31, 2021
f3a66a1
added Misc.unique method
DinisCruz Jul 31, 2021
a16085f
added url_encode and url_decode methods
DinisCruz Aug 1, 2021
ee18a18
using md5 for cache_as_temp key (for params)
DinisCruz Aug 1, 2021
4fd0ab5
added method alias `file_create_from_bytes`
DinisCruz Aug 2, 2021
4c1c1d1
Added new helper class Temp_Web_Server
DinisCruz Aug 3, 2021
751d3c4
added Files.file_to_base64 method
DinisCruz Aug 3, 2021
8bf13af
added Files.file_from_base64 method
DinisCruz Aug 3, 2021
c61e561
made Fluent_Dict keys value to be sorted (to help with unit tests)
DinisCruz Aug 8, 2021
1912ff7
add couple helper methods for getting an object's data
DinisCruz Aug 15, 2021
f7fd777
Fixed broken tests
DinisCruz Aug 15, 2021
21b5f85
Added util class Python_Logger
DinisCruz Aug 15, 2021
663dc30
removed code not needed
DinisCruz Aug 15, 2021
fe7f1bd
added set_log_format method to Python_Logger
DinisCruz Aug 15, 2021
6de7653
minor class import refactoring
DinisCruz Aug 15, 2021
7e216e6
improved Python_Logger
DinisCruz Aug 16, 2021
20bb12a
fixed bug
DinisCruz Aug 16, 2021
8ef6c07
Using Python_Logger in utlis.Status
DinisCruz Aug 20, 2021
4a48377
changed logging statement
DinisCruz Aug 20, 2021
7cb7858
minor fix to http logging
DinisCruz Aug 21, 2021
28d8a24
Improve cache_on_self to support caching based on params values
DinisCruz Aug 22, 2021
27f620b
improved cache_on_self
DinisCruz Aug 24, 2021
f8e1799
bumped version
DinisCruz Aug 26, 2021
c6e4244
don't log errors by default on the Http.port_is_open method
DinisCruz Aug 26, 2021
e372eed
minor refactoring
DinisCruz Aug 27, 2021
c163a74
Merge branch 'local-changes' into develop
DinisCruz Aug 27, 2021
507a8ab
added multiple file utils
DinisCruz Aug 28, 2021
69bd8e7
Merge branch 'develop' into couple-file-utils
DinisCruz Aug 28, 2021
44df714
Merge branch 'couple-file-utils' into develop
DinisCruz Aug 28, 2021
b1b8504
minor test fix
DinisCruz Aug 28, 2021
e608be1
added class_functions method
DinisCruz Aug 29, 2021
6966186
added yaml_dump method
DinisCruz Aug 29, 2021
d9a6e2e
minor fix and added new Misc method list_sorted
DinisCruz Sep 7, 2021
26cb38e
added list_zip method to Misc class
DinisCruz Sep 7, 2021
7269390
added method list_contains_list
DinisCruz Oct 12, 2021
2c39e7d
added method stub
DinisCruz Nov 4, 2021
1ec0ba5
Minor refactoring
DinisCruz Dec 13, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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