fly304625 / python-developer-test-task

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Project language Docker Build Status Do something awesome

Описание

Реализовать сервис, который обходит произвольный сайт с глубиной до 2 и сохраняет html, url и title страницы в хранилище.

Примеры сайтов:

  • https://ain.ua
  • https://itc.ua
  • и любой другой, на котором есть ссылки

Оптимизировать прогрузку по потреблению памяти и по времени. Замерить время выполнения и потребление памяти загрузки.

При depth=0 необходимо сохранить html, title, url исходного веб-сайта.

На каждом depth=i+1 качаем страницы ссылок с i страницы (то есть глубина 2 это - главная, ссылки на главной и ссылки на страницах ссылок с главной).

CLI

  • По урлу сайта и глубине обхода загружаются данные.
  • По урлу сайта из хранилища можно получить n прогруженных страниц (url и title).

Пример:

spider.py load https://itc.ua/ --depth 2
>> ok, execution time: 10s, peak memory usage: 100 Mb
spider.py get https://itc.ua/ -n 2
>> https://itc.ua/news/: "Новости - ITC.ua"

Требования

  • Язык реализации python3.6+
  • Выбор хранилища произвольный (PostgreSQL/Redis/ElasticSearch и любой другой на ваш выбор)
  • Стек технологий произвольный
  • Выбор библиотек произвольный
  • Решение оформить как проект на любом git-сервисе
  • Описать в README.md установку, запуск, python и другие зависимости для запуска

Было бы большим плюсом

  • Docker multistage build
  • Run Docker as a non-root user
  • Написать тесты при помощи pytest/unittest и любой другой на ваш выбор

Как начать выполнение тестового задания?

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

Данный репозиторий уже содержит Dockerfile, docker-compose.yml и Makefile для быстрого запуска приложения силами docker (нет необходимости устанавливать python и пр. локально). Всё, что необходимо - это установленные локально docker и docker-compose. После клонирования репозитория просто выполните docker-compose up -d и/или натравите PyCharm на docker-compose - и можно приступать к написанию полезного кода.

Результат выполнения

  • Ссылку на репозиторий с вашей реализацией необходимо отправить нашему HR или TeamLead, от которого вы получили ссылку на данный репозиторий.

  • Приложение должно успешно запускаться после выполнения:

$ git clone ...
$ make build
$ docker-compose up -d
$ docker-compose run --rm app ./app
  • Проходить все тесты (при их наличии).

Если для запуска приожения потребуется другой набор команд - обязательно отразите это в файле README.md вашего репозитория.

Если в процессе выполнения у вас возникнут какие-либо неразрешимые вопросы - создайте соответствующий issue в данном репозитории. На вопросы касательно деталей реализации ("А лучше так и так?") - вероятнее всего вы получите ответ "Как вы посчитаете правильнее".

About


Languages

Language:Makefile 83.8%Language:Dockerfile 13.5%Language:Python 2.6%