Add src/helpers
This commit is contained in:
2
src/helpers/__init__.py
Normal file
2
src/helpers/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
11
src/helpers/context.py
Normal file
11
src/helpers/context.py
Normal 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
6
src/helpers/data.py
Normal 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
50
src/helpers/mediator.py
Normal 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)
|
||||
2
src/helpers/session/__init__.py
Normal file
2
src/helpers/session/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
37
src/helpers/session/session.py
Normal file
37
src/helpers/session/session.py
Normal 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
|
||||
54
src/helpers/session/store.py
Normal file
54
src/helpers/session/store.py
Normal 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)
|
||||
2
src/helpers/tree/__init__.py
Normal file
2
src/helpers/tree/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
38
src/helpers/tree/storage.py
Normal file
38
src/helpers/tree/storage.py
Normal 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
15
src/helpers/yaml.py
Normal 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)
|
||||
Reference in New Issue
Block a user