Skip to content
This repository has been archived by the owner on Aug 31, 2023. It is now read-only.

MoreliaTalk/morelia_server

Repository files navigation

Morelia Server - сервер для мессенджера MoreliaTalk

tests Coverage Status

Language EN, RU

В репозитории 2 бранча

Master - стабильная ветка.

В разработке применяется

  • Python 3.10 - язык программирования

  • Starlette - основной фреймворк

  • SQLObject - ORM для работы с базой данный

  • Pydantic - валидация данных

  • Starlette - легковесный ASGI фреймворк/тулкит

  • websockets - реализация протокола Websockets в Python (RFC 6455 & 7692)

Описание репозитория

  • /mod
    • /config
      • config.py - модуль отвечает за работу с конфигурационным файлом config.ini
      • validator.py - модуль для валидации конфигурационного файла
      • instance.py - модуль содержит в себе инстанс handler-а для работы с конфигом
    • /db
      • dbhandler.py - модуль предназначен для выполнения запросов к БД
      • models.py - модуль отвечает за описание таблиц БД для работы через ОРМ.
      • instance.py - модуль содержит в себе инстанс handler-а для работы с базой данных
    • /protocol
      • /matrix
        • api.py - модуль отвечает за описание API, а так же валидацию данных.
        • worker.py - реализация протокола
      • /mtp
        • api.py - модуль отвечает за описание API, а так же валидацию данных.
        • worker.py - модуль отвечает за реализацию методов описанных в Morelia Protocol.
      • error.py - модуль отвечает за проверку и генерацию ответов с кодами ошибок.
      • controller.py - модуль обрабатывает запрос в соответствии с типом протокола
      • lib.py - модуль отвечает за хеширование пароля, сравнения пароля с его хэш-суммой, создание хеша для auth_id.
      • log_handler.py - модуль настройки логирования.
      • config.py - модуль читает настройки из config.ini
  • server.py - основной код сервера
  • manage.py - cli-инструмент для работы с сервером(запуск, тестовый клиент, работа с бд, и т.п.)
  • /tests
    • fixtures/ - json-файлы с заранее подготовленными данными, для проведения тестов.
    • config.ini - конфиг сервера для проведения тестов
    • test_*.py - тесты
  • example_config.ini - файл содержащий пример настроек сервера, перед запуском сервера просто переименуйте или скопируйте в config.ini.

Установка

Установить Python версией 3.10 или выше.

Загрузить и установить последнюю версию git.

Если нужен GUI, установить GitHub Desktop.

Настроить Git или GitHub Desktop введя свои username и email от аккаунта созданного на github.

Форк репозитория Morelia Server

Если ты не включен в команду на GitHub'е проекта, то необходимо сначала форкнуть к себе репозиторий Morelia Server перейдя по ссылке.

Клонирование репозитория на локальный компьютер

Клонировать репозиторий к себе на локальный компьютер используя командную строку и git

git clone https://github.com/{username}/morelia_server.git
cd morelia_server

Синхронизируем свой форк с оригинальным репозиторием upstream Morelia Server

git remote add upstream https://github.com/MoreliaTalk/morelia_server.git

Проверяем появились ли репозиторий upstream в списке удалённых репозиториев

git remote -v
> origin    https://github.com/{username}/morelia_server.git (fetch)
> origin    https://github.com/{username}/morelia_server.git (push)
> upstream  https://github.com/MoreliaTalk/morelia_server.git (fetch)
> upstream  https://github.com/MoreliaTalk/morelia_server.git (push)

При использовании GitHub выбрать в меню File пункт Clone repository... далее следовать инструкциям

Настройка виртуального окружения Pipenv

Для работы с проектом необходимо установить библиотеки которые он использует и настроить т.н. виртуальное рабочее окружение или virtualenv, для этого используется утилита Pipenv

Если не установлен pipenv, выполнить

python -m pip install pipenv

Создать виртуальное окружение в директории с проектом

pipenv shell

Установить все требуемые библиотеки из Pipfile

pipenv install --ignore-pipfile

Перед запуском сервера - используем менеджер настроек

Перед запуском сервера необходимо выполнить некоторые настройки (создать БД, таблицы и добавить первого пользователя - администратора)

Откройте файл example_config.ini, найдите параметр URI, замените его на путь к базе данных, пример: URI = 'sqlite:db_sqlite.db'

Создание config.ini, файла БД и учётной записи администратора сервера:

pipenv run python ./manage.py run init

Если необходимо удалить все таблицы в созданной базе данных (ВНИМАНИЕ удаляются только таблицы, БД не удаляется):

pipenv run python ./manage.py delete db

Дополнительно можно создать тестовый flow:

pipenv run python ./manage.py create flow

Информация о всех возможностях менеджера настроек:

pipenv run python ./manage.py --help

Запуск сервера в режиме отладки

Для запуска сервера используйте команду:

pipenv run python ./manage.py run devserver

Запуск сервера в нормально режиме работы

Для запуска сервера используйте команду:

pipenv run python ./manage.py run server

Параметры которые можно передать серверу (и в режиме отладки и в нормальном режиме):

--host <str> - адрес сервера, по умолчанию 127.0.0.1.

--port <int> - порт серврера, по умолчанию 8080.

--log-level <str> - уровень логирования: critical, error, warning, info, debugб trace, по умолчанию debug.

--use-colors - включить использования цветного вывода сообщений.

--reload - "горячая" перезагрузка.

Проверка работоспособности сервера с помощью встроенного клиента

Для проверки работы сервера запустите встроенный в manage.py мини-клиент:

pipenv run python manage.py client send

Примечание: перед запуском клиента нужно запустить сервер

Создание пулл-реквеста для внесения изменений в master-ветку Morelia Server

Получение последних изменений из master-ветки Morelia Server

git pull upstream master

Отправка изменений в master-ветку своего форка

git push

Для создания пулл-реквеста, необходимо перейти на GitHub, выбрать свой форк и в правом меню нажать на New pull request, после чего выбрать ветвь из которого будет производиться перенос изменений в master-ветку Morelia Server и нажать Create pull request.

Требования к стилю кода

Перед началом работы рекомендуется прочитать PEP 8 - руководство по написанию кода на Python. Обязательно использовать линтер (flake8, pylint или подобный).

Логирование

Используется библиотека loguru

Уровни логирования которыми можно пользоваться в коде:

Level name | Logger method

DEBUG      | logger.debug()
INFO       | logger.info()
SUCCESS    | logger.success()
WARNING    | logger.warning()
ERROR      | logger.error()
           | logger.exception()
CRITICAL   | logger.critical()

Написание и запуск тестов

Для написания тестов используется встроенный модуль Unittest.

Для запуска тестов выполните (вместо звёздочки подставьте наименование теста)

pipenv run python -v ./tests/test_*.py

Контакты

Telegram - группа для обсуждения вопросов разработки.

Slack - дополнительный канал для обсуждения вопросов разработки.

Лицензия

Copyright (c) 2020 - настоящее время MoreliaTalk team (NekrodNIK, Stepan Skriabin, rus-ai и другие. Смотрите полный список в файле AUTHORS.md)

MoreliaTalkServer распространяется под лицензией GNU Lesser General Public License версии 3 или более поздней (LGPL-3.0-or-later). Подробности смотрите в файле COPYING.LESSER.