Skip to content

niqzart/ffs-test-task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание

Описание

Репозиторий-заготовка для выполнения тестового задания для вступления в команду бэкенда. Призван погрузить в стек проекта, познакомить с используемыми библиотеками, в том числе внутрипроектными.

Стек

Начало и установка

  1. Создать публичный fork репозитория
  2. Склонировать репозиторий себе
  3. Создать виртуальное окружение на python 3.11
  4. Установить зависимости:
pip install poetry==1.5.1
poetry install
  1. Запусить файл app.py, можно создать Run Configuration на его запуск
  2. Проверить, документация работает: http://localhost:5000/doc/

Про тесты

  • В проекте настроены тесты на pytest для удобства тестирования SIO-интерфейсов
  • Все тесты лежат в папке tests
  • Предопределённые фикстуры:
    • client: тестовый flask-клиент (модифицирован в ffs)
    • socketio_client: тестовый socketio-клиент, созданный от client
  • Базовые тесты проверяют документацию, ошибки и авторизацию
  • Запуск командой: pytest tests

Задание

Само задание будет кастомизированно для каждого!

Рекомендации

Pydantic-Marshals

Библиотека для автоматического создания частичных pydantic-моделей. В проекте используется для:

Flask-Fullstack

В проекте во всю мощь используется библиотека flask-fullstack (FFS). В ней есть частичная документация, но вот пример использования вытащить из проекта не удалось. Стоит прочитать документацию в файлах:

Никто не запрещает читать код репозитория внутри проекта, где используется эта библиотека: xi.backend

Знание flask-restx и sqlalchemy сильно поможет в понимании ffs, уже с этими знаниями можно почитать информационный материал ниже:

FFS: Порядок декораторов

Все упаковщики запросов (.a_response, .marshal_with, .marshal_list_with или .lister) должны быть последним декоратором перед методами в Resource. Иначе вылет ошибки из других декораторов (.argument_parser, .database_searcher, .jwt_authorizer) будет либо подавлен, либо завёрнут в дополнительный слой ненужной вложенности, нарушая описанное в документации. Технически не относится к декораторам документирования, но ради лучшей читабельности и общности стоит везде складывать декораторы в одинаковом порядке.

  • все декораторы документации параметров запроса
  • все декораторы документации формата ответов
  • декоратор авторизации (.jwt_authorizer)
  • декоратор парсинга аргументов (.argument_parser)
  • декоратор(-ы) поиска объектов в бд (.database_searcher)
  • декоратор пост-обработки ответа (.a_response, .marshal_with, .marshal_list_with или .lister)
FFS: Shortcut-ы для БД

К объекту db.session добавлено несколько методов, упрощающих работу с логикой БД. По сути это простые shortcut-ы. Все их можно увидеть тут

Ко всем классам, наследующим Base (именно Base из common, не db.Model!) теперь добавляется набор полезных методов, которые могут значительно уменьшить объём работы. Они создаются и документированы тут

FFS: SocketIO (частичная дока внутри проекта)

Стиль кода

  • Будет проверяться
  • Соблюдение PEP8 обязательно
  • Желательно не забывать Zen
  • DRY приветствуется
  • Автоматическое реформатирование рекомендуется
  • Стоит поглядывать на стиль других файлов проекта

Стиль git-а

  • Желательно соблюдать conventional commits
  • Решить задачу в несколько коммитов
  • Pull Request с мини-описанием приветствуется

Ссылки

Общее

Flask и расширения:

SQLAlchemy:

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages