diff --git a/src/helpers/__init__.py b/src/helpers/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/helpers/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/helpers/context.py b/src/helpers/context.py new file mode 100644 index 0000000..d69a010 --- /dev/null +++ b/src/helpers/context.py @@ -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 diff --git a/src/helpers/data.py b/src/helpers/data.py new file mode 100644 index 0000000..f09b49d --- /dev/null +++ b/src/helpers/data.py @@ -0,0 +1,6 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +def merge(target, source): + for key in source: + target[key] = source[key] diff --git a/src/helpers/mediator.py b/src/helpers/mediator.py new file mode 100644 index 0000000..1d357d5 --- /dev/null +++ b/src/helpers/mediator.py @@ -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) diff --git a/src/helpers/session/__init__.py b/src/helpers/session/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/helpers/session/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/helpers/session/session.py b/src/helpers/session/session.py new file mode 100644 index 0000000..91e9099 --- /dev/null +++ b/src/helpers/session/session.py @@ -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 diff --git a/src/helpers/session/store.py b/src/helpers/session/store.py new file mode 100644 index 0000000..77b1ec2 --- /dev/null +++ b/src/helpers/session/store.py @@ -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) diff --git a/src/helpers/tree/__init__.py b/src/helpers/tree/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/helpers/tree/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/helpers/tree/storage.py b/src/helpers/tree/storage.py new file mode 100644 index 0000000..1df82f4 --- /dev/null +++ b/src/helpers/tree/storage.py @@ -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() diff --git a/src/helpers/yaml.py b/src/helpers/yaml.py new file mode 100644 index 0000000..3920dbb --- /dev/null +++ b/src/helpers/yaml.py @@ -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)