Тут сложно сказать, что это за проект. Это мои реальные проекты, которые я использую в своих бизнес процессах. Но это не проекты для людей, это боты. Которые что-то парсят и взаимодействуют со сторонними системами.
Я пишу много разных проектов, которые довольно однотипны. И в моих проектах намного важнее скорость разработки, чем их надежность и качество (такие вот условия бизнес задач). И мне постоянно надо работать с состояниями систем.
Например состояние системы может выглядеть примерно так (реальный пример написать не могу, так как NDA).
app_state = {
“processed_block_for_task1”: 123123123,
“processed_block_for_task2”: 123123121,
“last_checked_task1_at”: 2019-10-10 10:10:10,
“last_checked_task2_at”: 2019-10-10 10:10:10,
“was_action1”: True,
“was_action2”: True,
“locked_objects1” : [1,2,3,4,5,6,7],
“best_situations”: [{“param1”: 1, “param2”: Decimal(“123,123”}, {“param1”: 1, “param2”: Decimal(“123,123”}],
}
— т.е. большинство состояний это простые типы (str, int, float, bool, Decimal, datetime), но иногда встречаются и композитные типы: list и dict
И вот я хочу написать для себя реюзабельное django приложение, которое бы содержало бы в себе этот функционал, чтобы в каждом новом проекте мне не надо было бы писать очень похожий код.
Это приложение я хочу использовать в своих проектах в таком виде:
1) Вначале в
settings.py я регистрирую те объекты, которые я хочу использовать в проекте. Я их называю “dinamic values” -> DVALUE
DVALUE = {….}
2) Дальше в самом коде проекта я хочу использовать их максимально удобно, например:
from sharedapp import dvalue
if dvalue.was_action1:
dvalue.locked_objects += [1]
…
— это делается так, что в sharedapp я определяю объект dvalue, который определяет
getattr и
setattr, в через эти методы идет работа с БД данных. + там используется кеш, чтобы не нагружать БД.
3) Все эти состояния должны записываться в БД, так как приложение должно иметь возможность продолжить работу в случае краша сервера, через ребут оного.
4) Еще эти состояния должен иметь возможность отредактировать оператор (человек) этих приложений через браузер, поэтому просто pickle сериализация мне не подходит. И админка этого будет находиться в этом джанговском реюзабельном sharedapp, т.е. мне не придется постоянно в новых проектах писать простой код для редактирования этих состояний.
5) Еще хочется вынести работу с этими dvalue в отдельное реюзаемое приложение, так как там не все банально. И не хочется в каждом новом проекте повторять код. Там нунжны локи, так как есть многопоточность. Еще не должна быть тупо долбежка в БД, т.е. если данные не изменялись, не надо лезть в базу, а надо взять из кеша. Ну и еще не все эти DVALUE должны писаться в БД, часть из них не проблема если потеряется при рестарте сервера.
Вообще в мире джанги есть что-то похожее, называется django-constance. Но только мне нужен более широкий спектр поддержки используемых типов ( а именно композитные), + мне надо для некоторых параметров указывать, что мы их держим только в памяти, а не записываем в базу.
И я хочу иметь возможсть в БД хранить такие строки данные:
key= processed_block_for_task1, value = 123123123,
key = locked_objects1, value = [1,2,3,4,5,6,7],
key = best_situations, value= [{“param1”: 1, “param2”: Decimal(“123,123”}, {“param1”: 1, “param2”: Decimal(“123,123”}]