osbot-utils 1.33.0__py3-none-any.whl → 1.35.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osbot_utils/helpers/Local_Caches.py +4 -3
- osbot_utils/helpers/Zip_Bytes.py +9 -2
- osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +4 -1
- osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +15 -1
- osbot_utils/helpers/sqlite/Sqlite__Database.py +3 -1
- osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +34 -0
- osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +7 -0
- osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +6 -0
- osbot_utils/utils/Files.py +2 -1
- osbot_utils/utils/Misc.py +1 -1
- osbot_utils/version +1 -1
- {osbot_utils-1.33.0.dist-info → osbot_utils-1.35.0.dist-info}/METADATA +2 -2
- {osbot_utils-1.33.0.dist-info → osbot_utils-1.35.0.dist-info}/RECORD +15 -14
- {osbot_utils-1.33.0.dist-info → osbot_utils-1.35.0.dist-info}/LICENSE +0 -0
- {osbot_utils-1.33.0.dist-info → osbot_utils-1.35.0.dist-info}/WHEEL +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
from pathlib import Path
|
2
2
|
from typing import Dict, List
|
3
3
|
from osbot_utils.helpers.Local_Cache import Local_Cache
|
4
|
-
from osbot_utils.utils.Files
|
4
|
+
from osbot_utils.utils.Files import current_temp_folder, path_combine, folder_exists, folder_delete, file_extension
|
5
5
|
from osbot_utils.utils.Misc import random_text
|
6
6
|
|
7
7
|
|
@@ -41,8 +41,9 @@ class Local_Caches:
|
|
41
41
|
cache_names = []
|
42
42
|
for f in self.path_local_caches().iterdir():
|
43
43
|
if f.is_file():
|
44
|
-
|
45
|
-
|
44
|
+
if file_extension(f.name) == '.json':
|
45
|
+
cache_name = f.name.replace('.json', '')
|
46
|
+
cache_names.append(cache_name)
|
46
47
|
return cache_names
|
47
48
|
|
48
49
|
#@cache_on_self
|
osbot_utils/helpers/Zip_Bytes.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.utils.Dev import pprint
|
3
3
|
from osbot_utils.utils.Files import files_list, file_create_from_bytes, temp_file, parent_folder, parent_folder_create
|
4
|
+
from osbot_utils.utils.Misc import random_text
|
4
5
|
from osbot_utils.utils.Regex import list__match_regex, list__match_regexes
|
5
6
|
from osbot_utils.utils.Zip import zip_bytes_empty, zip_bytes__files, zip_bytes__add_file, zip_bytes__add_files, \
|
6
7
|
zip_bytes__replace_files, zip_bytes__replace_file, zip_bytes__file_list, zip_bytes__file, \
|
@@ -10,8 +11,8 @@ from osbot_utils.utils.Zip import zip_bytes_empty, zip_bytes__files, zip_bytes__
|
|
10
11
|
class Zip_Bytes(Type_Safe):
|
11
12
|
zip_bytes : bytes = None
|
12
13
|
|
13
|
-
def __init__(self):
|
14
|
-
super().__init__()
|
14
|
+
def __init__(self, **kwargs):
|
15
|
+
super().__init__(**kwargs)
|
15
16
|
self.zip_bytes = zip_bytes_empty()
|
16
17
|
|
17
18
|
def __enter__(self):
|
@@ -44,6 +45,12 @@ class Zip_Bytes(Type_Safe):
|
|
44
45
|
files_to_add = list__match_regexes(all_files_in_folder, *patterns)
|
45
46
|
return self.add_files__from_disk(base_path, files_to_add)
|
46
47
|
|
48
|
+
def add_random_file(self):
|
49
|
+
random_file_name = random_text('file_name' )
|
50
|
+
random_file_contents = random_text('file_contents')
|
51
|
+
self.add_file(random_file_name, random_file_contents)
|
52
|
+
return self
|
53
|
+
|
47
54
|
def add_folder__from_disk__with_prefix(self, folder_to_add, path_prefix, *patterns):
|
48
55
|
base_path = folder_to_add
|
49
56
|
all_files_in_folder = files_list(folder_to_add)
|
@@ -101,5 +101,8 @@ class Cache__Requests__Data(Type_Safe):
|
|
101
101
|
|
102
102
|
def response_data_serialize(self, response_data):
|
103
103
|
if self.config.pickle_response:
|
104
|
-
|
104
|
+
try:
|
105
|
+
return pickle_save_to_bytes(response_data)
|
106
|
+
except: # todo: look at a better way to handle this and any possible side effects (saw this with a couple boto3 class)
|
107
|
+
return None
|
105
108
|
return response_data
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import threading
|
1
2
|
import types
|
2
3
|
|
3
4
|
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
@@ -11,6 +12,14 @@ class Cache__Requests__Invoke(Type_Safe):
|
|
11
12
|
cache_data : Cache__Requests__Data
|
12
13
|
config : Cache__Requests__Config
|
13
14
|
on_invoke_target : types.FunctionType
|
15
|
+
cursor_thread_id : int
|
16
|
+
|
17
|
+
def __init__(self, **kwargs):
|
18
|
+
super().__init__(**kwargs)
|
19
|
+
self.cursor_thread_id = threading.get_ident() # we need to capture this to make sure we are operating on the same thread
|
20
|
+
|
21
|
+
def can_operate_in_this_thread(self):
|
22
|
+
return self.cursor_thread_id == threading.get_ident()
|
14
23
|
|
15
24
|
def invoke(self, target, target_args, target_kwargs):
|
16
25
|
return self.invoke_with_cache(target, target_args, target_kwargs)
|
@@ -22,7 +31,11 @@ class Cache__Requests__Invoke(Type_Safe):
|
|
22
31
|
raw_response = target(*target_args, **target_kwargs)
|
23
32
|
return self.transform_raw_response(raw_response)
|
24
33
|
|
34
|
+
|
35
|
+
|
25
36
|
def invoke_with_cache(self, target, target_args, target_kwargs, request_data=None):
|
37
|
+
if self.can_operate_in_this_thread() is False: # make sure we are in the correct thread
|
38
|
+
return self.invoke_target(target, target_args, target_kwargs)
|
26
39
|
if self.config.enabled is False:
|
27
40
|
if self.config.cache_only_mode:
|
28
41
|
return None
|
@@ -43,7 +56,8 @@ class Cache__Requests__Invoke(Type_Safe):
|
|
43
56
|
try:
|
44
57
|
response_data_obj = self.invoke_target(target, target_args, target_kwargs)
|
45
58
|
response_data = self.cache_data.response_data_serialize(response_data_obj)
|
46
|
-
|
59
|
+
if response_data:
|
60
|
+
self.cache_actions.cache_add(request_data=request_data, response_data=response_data)
|
47
61
|
return response_data_obj
|
48
62
|
except Exception as exception:
|
49
63
|
if self.config.capture_exceptions:
|
@@ -124,10 +124,12 @@ class Sqlite__Database(Kwargs_To_Self):
|
|
124
124
|
def tables_raw(self):
|
125
125
|
return self.cursor().tables()
|
126
126
|
|
127
|
-
def tables_names(self, include_sqlite_master=False):
|
127
|
+
def tables_names(self, include_sqlite_master=False, include_indexes=True):
|
128
128
|
table_names = self.table__sqlite_master().select_field_values('name')
|
129
129
|
if include_sqlite_master:
|
130
130
|
table_names.append('sqlite_master')
|
131
|
+
if include_indexes is False:
|
132
|
+
return [table_name for table_name in table_names if table_name.startswith('idx') is False]
|
131
133
|
return table_names
|
132
134
|
|
133
135
|
def purge_database(self): # this fells like a better name than vacuum :)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
from typing import Dict, Type
|
2
|
+
|
3
|
+
from osbot_utils.decorators.methods.cache_on_self import cache_on_self
|
4
|
+
from osbot_utils.helpers.sqlite.Sqlite__Database import Sqlite__Database
|
5
|
+
from osbot_utils.helpers.sqlite.tables.Sqlite__Table__Config import Sqlite__Table__Config, SQLITE__TABLE_NAME__CONFIG, \
|
6
|
+
Schema__Table__Config
|
7
|
+
|
8
|
+
|
9
|
+
class Sqlite__DB(Sqlite__Database):
|
10
|
+
|
11
|
+
# methods to override
|
12
|
+
def tables_to_add(self): # use this to define the tables that should be automatically created on setup
|
13
|
+
return {}
|
14
|
+
|
15
|
+
def db_not_configured(self):
|
16
|
+
return self.tables_names() == []
|
17
|
+
|
18
|
+
@cache_on_self
|
19
|
+
def table_config(self):
|
20
|
+
return Sqlite__Table__Config(database=self)
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
def tables_names(self, include_sqlite_master=False, include_indexes=False):
|
25
|
+
return super().tables_names(include_sqlite_master=include_sqlite_master, include_indexes=include_indexes)
|
26
|
+
|
27
|
+
def setup(self):
|
28
|
+
if self.db_not_configured():
|
29
|
+
self.table_config().setup()
|
30
|
+
for table_name, row_schema in self.tables_to_add().items():
|
31
|
+
table = self.table(table_name)
|
32
|
+
table.row_schema = row_schema
|
33
|
+
table.create()
|
34
|
+
return self
|
@@ -21,11 +21,18 @@ class Sqlite__DB__Files(Sqlite__DB__Local):
|
|
21
21
|
def file(self, path, include_contents=False):
|
22
22
|
return self.table_files().file(path, include_contents=include_contents)
|
23
23
|
|
24
|
+
def file_contents(self, path):
|
25
|
+
return self.table_files().file_contents(path)
|
26
|
+
|
27
|
+
def file__with_content(self, path):
|
28
|
+
return self.file(path, include_contents=True)
|
29
|
+
|
24
30
|
def file_exists(self, path):
|
25
31
|
return self.table_files().file_exists(path)
|
26
32
|
|
27
33
|
def file_names(self):
|
28
34
|
return self.table_files().select_field_values('path')
|
35
|
+
|
29
36
|
@cache_on_self
|
30
37
|
def table_files(self):
|
31
38
|
return Sqlite__Table__Files(database=self).setup()
|
@@ -67,6 +67,12 @@ class Sqlite__Table__Files(Sqlite__Table):
|
|
67
67
|
fields = self.field_names_without_content()
|
68
68
|
return self.row(where=dict(path=path), fields = fields)
|
69
69
|
|
70
|
+
def file_contents(self, path):
|
71
|
+
fields = ['contents']
|
72
|
+
row = self.row(where=dict(path=path), fields = fields)
|
73
|
+
if row:
|
74
|
+
return row.get('contents')
|
75
|
+
|
70
76
|
def file_without_contents(self, path):
|
71
77
|
return self.file(path, include_contents=False)
|
72
78
|
|
osbot_utils/utils/Files.py
CHANGED
@@ -270,7 +270,8 @@ class Files:
|
|
270
270
|
if isinstance(target, Path):
|
271
271
|
return target.is_file()
|
272
272
|
if type(target) is str:
|
273
|
-
|
273
|
+
if len(target) < 4096: # max file size in Linux (handle the cases when the file contents was used as target)
|
274
|
+
return os.path.isfile(target)
|
274
275
|
return False
|
275
276
|
|
276
277
|
@staticmethod
|
osbot_utils/utils/Misc.py
CHANGED
osbot_utils/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
v1.
|
1
|
+
v1.35.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.35.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
|
|
22
22
|
|
23
23
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
24
24
|
|
25
|
-

|
26
26
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
27
27
|
|
28
28
|
|
@@ -59,12 +59,12 @@ osbot_utils/helpers/CPrint.py,sha256=ztKPNmT8BGxeyPXSQKRs63PqqbgxKDz_BiZmzFMup9g
|
|
59
59
|
osbot_utils/helpers/Dict_To_Attr.py,sha256=NdhXl5mJH7-NaBk213amzc5Nfy3tJgW-N_uYIRE4hoc,208
|
60
60
|
osbot_utils/helpers/Hashicorp_Secrets.py,sha256=zjXa_dQvfR9L1uoulWJ8nYYaDvznV6o_QPPS4zmb6mo,4235
|
61
61
|
osbot_utils/helpers/Local_Cache.py,sha256=0JZZX3fFImcwtbBvxAQl-EbBegSNJRhRMYF6ovTH6zY,3141
|
62
|
-
osbot_utils/helpers/Local_Caches.py,sha256=
|
62
|
+
osbot_utils/helpers/Local_Caches.py,sha256=aQmi1HSM0TH6WQPedG2fbz4KCCJ3DQTU9d18rB1jR0M,1885
|
63
63
|
osbot_utils/helpers/Print_Table.py,sha256=LEXbyqGg_6WSraI4cob4bNNSu18ddqvALp1zGK7bPhs,19126
|
64
64
|
osbot_utils/helpers/Python_Audit.py,sha256=shpZlluJwqJBAlad6xN01FkgC1TsQ48RLvR5ZjmrKa4,1539
|
65
65
|
osbot_utils/helpers/Random_Seed.py,sha256=14btja8LDN9cMGWaz4fCNcMRU_eyx49gas-_PQvHgy4,634
|
66
66
|
osbot_utils/helpers/Type_Registry.py,sha256=Ajk3SyMSKDi2g9SJYUtTgg7PZkAgydaHcpbGuEN3S94,311
|
67
|
-
osbot_utils/helpers/Zip_Bytes.py,sha256=
|
67
|
+
osbot_utils/helpers/Zip_Bytes.py,sha256=d5hYXNOJkOaYa7h2CJ0Y3ojEuGTOvCxPuSic2quwMY4,4236
|
68
68
|
osbot_utils/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
69
69
|
osbot_utils/helpers/ast/Ast.py,sha256=lcPQOSxXI6zgmMnIVF9WM6ISqViWX-sq4d_UC0CDG8s,1155
|
70
70
|
osbot_utils/helpers/ast/Ast_Base.py,sha256=5rHMupBlN_n6lOC31UnSW_lWqxqxaE31v0gn-t32OgQ,3708
|
@@ -144,8 +144,8 @@ osbot_utils/helpers/ast/nodes/Ast_Yield.py,sha256=7ATJnOHekV9XquMTYYSJ6xqyDvgwFc
|
|
144
144
|
osbot_utils/helpers/ast/nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
145
145
|
osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py,sha256=r1CMR4qHO9is66lexJQ-BNUmBWcEjOSTG_qC0xsoorY,1228
|
146
146
|
osbot_utils/helpers/cache_requests/Cache__Requests__Config.py,sha256=KxBjj56YTjZjKsO9TLsRfkcHYJPIGDXZ6rFskaNnh-4,935
|
147
|
-
osbot_utils/helpers/cache_requests/Cache__Requests__Data.py,sha256=
|
148
|
-
osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py,sha256=
|
147
|
+
osbot_utils/helpers/cache_requests/Cache__Requests__Data.py,sha256=W0t4HyRgTTBbykBf_Ui9o84xLPu5ivreB-jSdOct1lc,5504
|
148
|
+
osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py,sha256=i8OiiA8afOnxVo_w9W8ySkMQygLAMMxDf3NAAmPCaE4,3348
|
149
149
|
osbot_utils/helpers/cache_requests/Cache__Requests__Row.py,sha256=h-yc7NkpScbHwwf2km5wwKig-wLi4WuB9P4fVEdFGdM,3182
|
150
150
|
osbot_utils/helpers/cache_requests/Cache__Requests__Table.py,sha256=RgxAYhm-FIrXXteQRtD91pOLq8JXhSzxb51Jb6MTUdY,391
|
151
151
|
osbot_utils/helpers/cache_requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -184,7 +184,7 @@ osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py,sha256=yOQSn4o1bIsE
|
|
184
184
|
osbot_utils/helpers/pubsub/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
185
185
|
osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py,sha256=GSuRYgs1yKQjxMszPoaI7fsfMfuUqhb64AaIysRE6Cs,1747
|
186
186
|
osbot_utils/helpers/sqlite/Sqlite__Cursor.py,sha256=k5G9Tkk3nx6nHoSanLmpuJG_TceAmN7uRBCt0bo6sIc,3364
|
187
|
-
osbot_utils/helpers/sqlite/Sqlite__Database.py,sha256=
|
187
|
+
osbot_utils/helpers/sqlite/Sqlite__Database.py,sha256=AAUaUXABiL1GE7urg20YpwbFGbRvRxqvv4D7IgCgvYw,5594
|
188
188
|
osbot_utils/helpers/sqlite/Sqlite__Field.py,sha256=oBWglAOKN0EWVtaRwiQFxmR1FQ61lQ35yKkWXjSiihs,2911
|
189
189
|
osbot_utils/helpers/sqlite/Sqlite__Globals.py,sha256=aP6uIy_y4xzl2soTUCFIJRjsb8JyfxfL6qIEZKIWy_4,230
|
190
190
|
osbot_utils/helpers/sqlite/Sqlite__Table.py,sha256=FsFSolFN2N5V8DfZPp4gZL9xmCXaOhmG38wQmgRrvp8,15145
|
@@ -200,7 +200,8 @@ osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py,sha256=77uO-8
|
|
200
200
|
osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py,sha256=CWB-hTcgly2T_7HOZM5gUgfdsvgMus5nX2M_wpjVLZs,1643
|
201
201
|
osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py,sha256=TLUdQC6vsf5BcDP15CCeoYkipVG30bzqFcqEJpH4dWg,1645
|
202
202
|
osbot_utils/helpers/sqlite/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
203
|
-
osbot_utils/helpers/sqlite/domains/
|
203
|
+
osbot_utils/helpers/sqlite/domains/Sqlite__DB.py,sha256=xyXnt4-GLYqMEPBZrNPI0dZnkl61KwLEIuYjebO20Jc,1210
|
204
|
+
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py,sha256=IyAbtHrpovNkIXaJKQ2vcg3yqF70XLQ-5mdIiN3vSK0,1696
|
204
205
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py,sha256=aGykK4Qll5Rn0xJR4RvF5bN6llNEjx-Vst52XTVSNio,1751
|
205
206
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py,sha256=ILx1wOsmwmvV2yb_fMzLzo18uGNub8cxhBrRfYxCCqA,3808
|
206
207
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py,sha256=liN_0gyXmQyqnsmiz0RYanSCRI0VoIbwSBf4buM0l-w,1093
|
@@ -215,7 +216,7 @@ osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py,sha256=_5fszoWTknE
|
|
215
216
|
osbot_utils/helpers/sqlite/sql_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
216
217
|
osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py,sha256=M-h6fYQgmX7Yaq3cSmpePutajLVeVy_IDUrDk97EH6U,2061
|
217
218
|
osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py,sha256=YwlWj9GYBDeotqDFdjMOb6MyuHhPZKasndAtuHiLrkQ,1635
|
218
|
-
osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py,sha256=
|
219
|
+
osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py,sha256=4YguiuqzcfTadPWV67lN4IU_8xJzJF--ZRMqbEyzXqw,3800
|
219
220
|
osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py,sha256=GT8h3wD4hGvEtqQuBs0sBbcu2ydktRHTi95PEL2ffHQ,1721
|
220
221
|
osbot_utils/helpers/sqlite/tables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
221
222
|
osbot_utils/helpers/ssh/SCP.py,sha256=9PgJbyWKfxJj00Ijaj7o6ffxPXuNoureb6JlHMPbHww,3330
|
@@ -267,14 +268,14 @@ osbot_utils/utils/Csv.py,sha256=oHLVpjRJqrLMz9lubMCNEoThXWju5rNTprcwHc1zq2c,1012
|
|
267
268
|
osbot_utils/utils/Dev.py,sha256=HibpQutYy_iG8gGV8g1GztxNN4l29E4Bi7UZaVL6-L8,1203
|
268
269
|
osbot_utils/utils/Env.py,sha256=243O6ENzaRjHXp8DIHUuv4Wfk-zHTE18KZr0cU8uWyo,5474
|
269
270
|
osbot_utils/utils/Exceptions.py,sha256=KyOUHkXQ_6jDTq04Xm261dbEZuRidtsM4dgzNwSG8-8,389
|
270
|
-
osbot_utils/utils/Files.py,sha256=
|
271
|
+
osbot_utils/utils/Files.py,sha256=7W0FmxPvxOapUchEVOKDgUx4JBRs9TCesu60uKkvrto,21765
|
271
272
|
osbot_utils/utils/Functions.py,sha256=0E6alPJ0fJpBiJgFOWooCOi265wSRyxxXAJ5CELBnso,3498
|
272
273
|
osbot_utils/utils/Http.py,sha256=WlXEfgT_NaiDVD7vCDUxy_nOm5Qf8x_L0A3zd8B5tX8,4706
|
273
274
|
osbot_utils/utils/Int.py,sha256=PmlUdU4lSwf4gJdmTVdqclulkEp7KPCVUDO6AcISMF4,116
|
274
275
|
osbot_utils/utils/Json.py,sha256=UNaBazuH1R40fsHjpjuK8kmAANmUHoK9Q0PUeYmgPeY,6254
|
275
276
|
osbot_utils/utils/Json_Cache.py,sha256=mLPkkDZN-3ZVJiDvV1KBJXILtKkTZ4OepzOsDoBPhWg,2006
|
276
277
|
osbot_utils/utils/Lists.py,sha256=CLEjgZwAixJAFlubWEKjnUUhUN85oqvR7UqExVW7rdY,5502
|
277
|
-
osbot_utils/utils/Misc.py,sha256=
|
278
|
+
osbot_utils/utils/Misc.py,sha256=AN-JTs9-Em2jVyoQ6Kd7dCA0eiqVQSlXajKjKxRAhyY,16639
|
278
279
|
osbot_utils/utils/Objects.py,sha256=qAWNLISL-gYTl1Ihj4fBSZ9I6n-p-YPUhRZu9YQwqWQ,15235
|
279
280
|
osbot_utils/utils/Png.py,sha256=V1juGp6wkpPigMJ8HcxrPDIP4bSwu51oNkLI8YqP76Y,1172
|
280
281
|
osbot_utils/utils/Process.py,sha256=lr3CTiEkN3EiBx3ZmzYmTKlQoPdkgZBRjPulMxG-zdo,2357
|
@@ -286,8 +287,8 @@ osbot_utils/utils/Toml.py,sha256=dqiegndCJF7V1YT1Tc-b0-Bl6QWyL5q30urmQwMXfMQ,140
|
|
286
287
|
osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
|
287
288
|
osbot_utils/utils/Zip.py,sha256=riPLKkZJxQjVu8lCm19cOTx5uiLPm1HreB9_BzNXi30,12209
|
288
289
|
osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
289
|
-
osbot_utils/version,sha256=
|
290
|
-
osbot_utils-1.
|
291
|
-
osbot_utils-1.
|
292
|
-
osbot_utils-1.
|
293
|
-
osbot_utils-1.
|
290
|
+
osbot_utils/version,sha256=g15kdH8ycbHrZuIBu1hKNt7B2bEznkpLT_dQR-2S77M,8
|
291
|
+
osbot_utils-1.35.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
292
|
+
osbot_utils-1.35.0.dist-info/METADATA,sha256=eW9-c4dTVc2xI7Tf-sqOrYpQOJwHw6hMUAAGRLdbWkQ,1266
|
293
|
+
osbot_utils-1.35.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
294
|
+
osbot_utils-1.35.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|