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