Skip to content

Instantly share code, notes, and snippets.

@x603
Last active May 11, 2021 15:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save x603/277c44432ad59a92379ea046907f7da3 to your computer and use it in GitHub Desktop.
Save x603/277c44432ad59a92379ea046907f7da3 to your computer and use it in GitHub Desktop.

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

Тестовое задание можно выполнить на любом веб-фреймворке (django/flask/pyramid/falcon/aiohttp/sanic) и прислать нам ссылку на репозиторий, либо архив с вашим кодом и документацией по нему. Имейте в виду, что выбранных вами библиотек может не быть на компьютере проверяющего, поэтому укажите все зависимости в отдельном файле (requirements/Pipfile). Если вы достаточно хорошо знакомы с Docker, то можете написать docker-compose конфиг и упаковать приложение в контейнер, где все необходимое уже будет установлено, а ваш код собран и готов к запуску. Это идеальный вариант.

После проверки задания мы обязательно сообщим вам о нашем решении.

О задании

Необходимо написать приложение, которое будет парсить новостную ленту Hacker News (главную страницу), сохранять данные в БД (на ваш выбор) и иметь HTTP API, с помощью которого можно получить список новостей. Парсить нужно заголовок и URL новости, а так же сохранять время, когда новость была добавлена в БД. Приложение должно периодически приходить на HN и парсить главную страницу опять, сохраняя в БД только новые посты.

API метод для получения списка новостей. На запрос:

curl -X GET http://localhost:8000/posts

Должен возвращаться список новостей в формате JSON:

[
  {"id": 1, "title": "Announcing Rust 1.33.0", "url": "https://example.com"},
  {"id": 2, "title": "Redesigning GitHub Repository Page", "url": "https://example.com"}
]

Должна работать сортировка по заданному атрибуту, по возрастанию и убыванию.

curl -X GET http://localhost:8000/posts?order=title

Так же клиент должен иметь возможность запросить подмножество данных, указав offset и limit. Пусть по-умолчанию API возвращает 5 постов.

curl -X GET http://localhost:8000/posts?offset=10&limit=10

Разумеется, клиент может указать и сортировку, и лимит одновременно.

Требования

  • Инструкции по запуску приложения должны находиться в README
  • Приложение должно быть развернуто и доступно по URL
  • Код должен быть покрыт тестами. Вы можете использовать любую библиотеку (unittest, nose, pytest)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment