Я собираюсь потихоньку рассказывать о своей идеологии и привлекать больше людей к этому проекту, так что, буду рассказывать об интересных решениях, которые были применены в этом проекте.
Ну и по случаю появления драйвера для sqlalchemy, на этот раз речь пойдёт про драйвера, а если вы пропустили вступительную статью, советую прочитать сначала её для понимания.
Что мы имеем сейчас
Из-за того, что идеология jija предполагает модульность, тут просто не могла не появиться идея ввести драйвера для взаимодействия между модулями и ядром фреймворка.
Каждый драйвер в jija - класс, который наследуется от интерфейса и описывает методы для взаимодействия с логикой, которую должен выполнять модуль предоставляющий этот драйвер.
class DatabaseDriver(base.Driver):
async def get_connection(self):
raise NotImplementedError()
async def migrate(self):
raise NotImplementedError()
async def update(self):
raise NotImplementedError()
Так же драйвер может вставлять какие-либо свои компоненты в приложение и запускать свои задаче на старте приложения
class Driver:
def setup(self, aiohttp_app: web.Application):
return aiohttp_app
async def preflight(self):
pass
Таким образом мы можем написать драйвер для любой ORM, настроить в нём сборку, подключение к базе и
На момент написания статьи иы имеем два типа драйвера: драйвер базы данных и дравер генератора документации, но пока что, они не особо отвечают свойствам драйверов.
Да, единственный драйвер, который хоть как-то сейчас соответствует своему названию - драйвер базы и всё что у него есть для взаимодействия с дугими модулями - get_connection
, но это только начало.
Светлое будущее
По мере разработки планирую добавлять больше возможностей для взаимодействия компонентов между собой, в планах сделать:
Баффнуть драйвер базы: добавить методы взаимодействия с базой, после чего любая сторонняя библиотека добавленная в наш проект сможет взаимодействовать с базой, даже не зная, с чем она вообще взаимодействует: с реальной базой или с профессиональной базой поднятой в exel и получать корректные данные для своей работы.
Переработать авторизацию, после чего она тоже переедет в драйвер, благодаря чему можно будет получать информацию об авторизации, авторизовывать и регистрировать пользователя через драйвер.
Ну и пара фич, о реализации которых я ещё только думаю:
Возможность выбора модуля вьюх и драйвер на них
Возможность выбора модуля сериализатора и драйвер на них
Как итог
В перспективе, можно будет иметь много разных библиотек от разных авторов, которые даже не знают о существовании друг друга, но могут спокойно друг с другом взаимодействовать.
Да и в целом драйверная архитектура даёт возможность проекту быть модульным, что в свою очередь позволяет подстраиваться под любые задачи и использовать jija под любые проекты.
ivankudryavtsev
Утопично, но успехов.