Skip to content

Test task for the position 'Junior+ Python developer, remotely' from e.Kom LLC

Notifications You must be signed in to change notification settings

yury-yury/test_task_from_e_Kom

Repository files navigation

Тестовое задание на позицию 'Junior+ Python разработчик, удаленно' от компании ООО e.Kom

Задание

Web-приложение для определения заполненных форм.

По поводу сроков выполнения: тестовые задания принимаются до тех пор, пока открыта вакансия.

Результат лучше всего присылать ссылкой на репозиторий Github

В базе данных хранится список шаблонов форм.

Шаблон формы, это структура, которая задается уникальным набором полей, с указанием их типов.

Пример шаблона формы:

{
    "name": "Form template name",
    "field_name_1": "email",
    "field_name_2": "phone"
}

Всего должно поддерживаться четыре типа данных полей:

email
телефон
дата
текст.

Все типы кроме текста должны поддерживать валидацию. Телефон передается в стандартном формате +7 xxx xxx xx xx, дата передается в формате DD.MM.YYYY или YYYY-MM-DD.

Имя шаблона формы задается в свободной форме, например MyForm или Order Form. Имена полей также задаются в свободной форме (желательно осмысленно), например user_name, order_date или lead_email.

На вход по url /get_form POST запросом передаются данные такого вида:

f_name1=value1&f_name2=value2

В ответ нужно вернуть имя шаблона формы, если она была найдена. Чтобы найти подходящий шаблон нужно выбрать тот, поля которого совпали с полями в присланной форме. Совпадающими считаются поля, у которых совпали имя и тип значения. Полей в пришедшей форме может быть больше чем в шаблоне, в этом случае шаблон все равно будет считаться подходящим. Самое главное, чтобы все поля шаблона присутствовали в форме.

Если подходящей формы не нашлось, вернуть ответ в следующем формате

{
    f_name1: FIELD_TYPE,
    f_name2: FIELD_TYPE
}

где FIELD_TYPE это тип поля, выбранный на основе правил валидации, проверка правил должна производиться в следующем порядке дата, телефон, email, текст.

В качестве базы данных рекомендуем использовать tinyDB, вместе с исходниками задания должен поставляться файл с тестовой базой, содержащей шаблоны форм. Но если сможете поднять и использовать контейнер Docker с MongoDB - это будет отличное решение, однако оно может отнять у вас много времени и не является обязательным.

Также в комплекте должен быть скрипт, который совершает тестовые запросы. Если окружение приложения подразумевает что-то выходящее за рамки virtualenv, то все должно быть упаковано в Docker контейнеры или таким способом, чтобы не приходилось ставить дополнительные пакеты и утилиты на машине. Все необходимые действия для настройки и запуска приложения должны находится в файле README.

Версия Python остается на ваш выбор. Мы рекомендуем использовать версию 3.6 и выше.

Входные данные для веб-приложения:

Список полей со значениями в теле POST запроса.

Выходные данные:

Имя наиболее подходящей данному списку полей формы, при отсутствии совпадений с известными формами произвести типизацию полей на лету и вернуть список полей с их типами.

Выполнение задания

Для реализации данного тестового задания применены следующий стек технологий:

  • Python 3.10
  • FastAPI 0.104
  • UviCorn 0.24
  • MongoDB
  • PyMongo
  • Motor

Архитектура проекта выполнена с разделением функциональных частей приложения по различным модулям.

В корневой директории проекта расположен файл Test task from e.Kom.postman_collection.json содержащий коллекцию запросов к API приложения.

Запуск приложения

Запуск приложения возможен в двух вариантах на локальной машине и с помощью инструментов контейнеризации Docker Compose.

Локальный запуск приложения

Для запуска проекта на локальной машине необходимо выполнить следующие шаги:

  1. Скопировать код проекта на локальную машину.
  2. Создать тестовую базу данных e_Kom
  3. Создать и активировать виртуальное окружение выполнив команды в терминале:
$ python3 -m venv venv
$ source venv/bin/activate
  1. Установить зависимости проекта с помощью команд в терминале:
$ pip install -r requirements.txt
  1. Создать файл .env содержащий чувствительные данные для запуска приложения. В качестве основы содержания файла нужно использовать файл .env_sample. И записать в него значения необходимых данных для запуска сервера приложения и соединения с базой данных.
  2. Заполнить базу данных тестовыми значениями. Для этого выполнить следующую команду в терминале:
$ python3 fill_db.py
  1. Запустить север приложения выполнив команду в терминале:
$ uvicorn --reload main:app
  1. Для просмотра документации по API в браузере перейти по URL адресу http://127.0.0.1:8000/docs - для просмотра документации Swagger или по URL адресу http://127.0.0.1:8000/redoc - для просмотра документации redoc.
  2. Для выполнения запросов к API приложения можно использовать страницу swagger в браузере или выполнять запросы с помощью Postman.

Запуск приложения в контейнерах Docker Compose

  1. Для запуска приложения с помощью Docker Compose необходимо создать образы контейнеров выполнив команду в терминале:
$ docker compose build
  1. Создать и запустить контейнеры выполнив команду в терминале:
$ docker compose up -d
  1. Приложение будет доступно по URL адресу http://0.0.0.0:8000
  2. Если тестовое заполнение базы данных не подтягивает значения из установленного volume. Выполнить следующие команды в терминале:
$ docker compose exec -it api /bin/bash
# python3 fil_db.py
  1. Для просмотра документации по API в браузере перейти по URL адресу http://0.0.0.0:8000/docs - для просмотра документации Swagger или по URL адресу http://0.0.0.0:8000/redoc - для просмотра документации redoc.
  2. Для выполнения запросов к API приложения можно использовать страницу swagger в браузере или выполнять запросы с помощью Postman. В корневой директории проекта расположен файл Test task from e.Kom.postman_collection.json содержащий коллекцию запросов к API приложения.

About

Test task for the position 'Junior+ Python developer, remotely' from e.Kom LLC

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published