Skip to content

Тестовое задание соискателя Python

Notifications You must be signed in to change notification settings

aashlykov/recruit-python

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание разработчика Python

Дано

Имеется веб-сервер, который способен обрабатывать GET и POST запросы. В POST запросе приходит лог переписки в виде json:

[
  {
    "time": 1551179712,
    "sender": "i.petrov",
    "message": "Раз-два, проверка связи"
  },
  {
    "time": 1551179749,
    "sender": "m.vasiljeva",
    "message": "Проверка пройдена, всё работает"
  },
  {
    "time": 1551179831,
    "sender": "i.petrov",
    "message": "Отлично"
  }
]

Количество отдельных сообщений в списке может быть любым. Поле time содержит unix timestamp.

В базе данных (MySQL 5.7) имеется таблица со статистикой:

create table dialogs(
  id int(11) auto_increment,
  start_time timestamp not null,
  end_time timestamp not null,
  message_count int(11) not null,
  primary key (id)
);

Где:

  • start_time - время начала диалога (первое сообщение)
  • end_time - время окончания диалога (последнее сообщение)
  • message_count - количество сообщений в диалоге

На сервере уже настроена маршрутизация запросов и имеется базовый класс App для обработки входящих HTTP запросов.

Задание

Следующее задание является обязательным для выполнения.

Необходимо дополнить реализацию класса App, чтобы он выполнял следующие функции:

  1. При получении POST запроса с данными необходимо сформировать по нему статистику и сохранить в БД в таблицу dialogs.
  2. Диалог из POST-запроса сохранить в текстовый файл по одной строке на сообщение. Формат строки: Отправитель - Дата и Время - Текст сообщения. Дата и время должны быть представлены в человекопонятном формате. Путь к файлу сохранения значения не имеет.
  3. При получении GET запроса сервер должен вернуть из БД список диалогов с параметрами в простом текстовом формате, удобном для чтения, по одной строке на запись. Даты и время необходимо представить в человекопонятном формате. Пример ответа:
Запись 1: Сообщений - 3 шт с 26.02.2019 11:15:12 по 26.02.2019 11:17:11
Запись 2: Сообщений - 5 шт с 26.02.2019 13:27:09 по 26.02.2019 13:34:28

Использование ORM (SQLAlchemy и др.) для работы с БД не допускается.

Дополнительные задания

Следующие задания не являются обязательными и имеют повышенную сложность, однако их выполнение является желаемым. Можно выполнить только некоторые из них.

  1. Параметры подключения к БД вынести в отдельный файл.
  2. Выделить логику взаимодействия с БД и файлами диалогов в отдельные классы.
  3. Реализовать обработку ошибок в процессе работы приложения, их логгирование и установку соответствующих кодов ответа в HTTP в случае ошибки.
  4. Реализовать функционал вывода списком нарушителей режима сна: людей, которые в период времени 22:00 - 06:00 спали менее шести часов. Формат списка: Имя (ник) и перечисление дат, когда был нарушен режим.

Примечания

Для проверки работы можно использовать REST-клиенты, например Insomnia, Postman или иные.

Необходимые внешние пакеты необходимо добавить в requirements.txt

Для запуска сервера необходимо запустить в интерпретаторе файл index.py

About

Тестовое задание соискателя Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%