Add src/helpers

This commit is contained in:
2025-12-11 00:38:18 +03:00
parent f1fdeec4e8
commit e5ffa4b58c
10 changed files with 217 additions and 0 deletions

2
src/helpers/__init__.py Normal file
View File

@@ -0,0 +1,2 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'

11
src/helpers/context.py Normal file
View File

@@ -0,0 +1,11 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
def context_decorator(method):
def wrapper(*args, **kwargs):
return method(Context(), *args, **kwargs)
return wrapper
class Context:
pass

6
src/helpers/data.py Normal file
View File

@@ -0,0 +1,6 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
def merge(target, source):
for key in source:
target[key] = source[key]

50
src/helpers/mediator.py Normal file
View File

@@ -0,0 +1,50 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
class Mediator:
def __init__(self):
self.__values = {}
def get(self, name):
assert name in self.__values, f'Ключ {name} в настройках не найден'
return self.__values[name]
def set(self, name, value):
self.__values[name] = value
def emit(self, name, *args, **kwargs):
assert name in self.__values, f'Ключ {name} в настройках не найден'
method = self.__values[name]
response = method(*args, **kwargs)
return response
def register(self, name, function):
self.__values[name] = function
def __contains__(self, key):
if key in self.__values:
return True
else:
return False
def __delitem__(self, key):
del self.__values[key]
def __getitem__(self, key):
value = self.__values[key]
return value
def __setitem__(self, key, value):
self.__values[key] = value
def __iter__(self):
for name in self.__values.keys():
yield name
def __repr__(self):
result = []
for key in self.__values:
value = self.__values[key]
result.append(f'{key}: {value}')
return '/n'.join(result)

View File

@@ -0,0 +1,2 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'

View File

@@ -0,0 +1,37 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
from datetime import datetime
class Session:
def __init__(self, store, id):
self.__store = store
self.__id = id
self.__values = {}
def save(self):
self.__values['session.id'] = self.__id
self.__values['session.created_at'] = datetime.now()
self.__store[self.__id] = self.__values
def __contains__(self, key):
if key in self.__values:
return True
else:
return False
def __delitem__(self, key):
del self.__values[key]
def __getitem__(self, key):
value = self.__values[key]
return value
def __setitem__(self, key, value):
self.__values[key] = value
def __getattr__(self, name):
print('Session.__getattr__', name)
if name == 'id':
return self.__id

View File

@@ -0,0 +1,54 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
from uuid import uuid4
from pathlib import Path
from helpers.tree.storage import gethashtree
from helpers.yaml import yaml_read, yaml_write
from helpers.session.session import Session
class SessionStore:
def __init__(self, path: str = './'):
print('SessionStore.__init__')
self.__path = Path(path)
print('self.__path', self.__path)
def __contains__(self, key):
if key in self.__values:
return True
else:
return False
def __delitem__(self, key):
del self.__values[key]
def __getitem__(self, id):
segments = gethashtree(id, 3)
print(segments)
value = yaml_read(self.__path / segments / f'{id}.yml')
return value
def create(self):
id = uuid4().hex
result = Session(self, id)
return result
def __setitem__(self, id, value):
print('SessionStore.__setitem__', id, value)
segments = gethashtree(id)
directory = self.__path / segments
if not directory.exists():
directory.mkdir(parents=True)
yaml_write(directory / f'{id}.yml', value)
def __setattr__(self, name, value):
print('SessionStore.__setattr__', name, value)
if name == 'path':
self.__path = Path(value)
print('self.__path', self.__path)
else:
super().__setattr__(name, value)
# print('super', type(super()))
# print('SessionStore', SessionStore.__path)

View File

@@ -0,0 +1,2 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'

View File

@@ -0,0 +1,38 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
import hashlib
def gettree(number, count=3):
"""
Сформировать дерево каталогов
"""
result = []
newline = str(number)
while len(newline) % count:
newline = '0' + newline
for i in range(0, len(newline)//count):
result.append(newline[i*count:i*count+count])
return result
def gethashtree(hash, count=3):
"""
Сформировать дерево каталогов
"""
result = []
for i in range(0, count):
element = hash[2*i:2*(i+1)]
result.append(element)
return '/'.join(result)
def getfilehash(filename):
"""
Подсчитать хеш сумму файла
"""
h = hashlib.new('md5')
with open(filename, 'rb') as fd:
h.update(fd.read())
return h.hexdigest()

15
src/helpers/yaml.py Normal file
View File

@@ -0,0 +1,15 @@
__author__ = 'RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'
import yaml
def yaml_read(filename: str):
with open(filename, 'r') as fd:
data = yaml.load(fd, Loader=yaml.Loader)
return data
def yaml_write(filename: str, data):
with open(filename, 'w') as fd:
yaml.dump(data, fd)