BLACK FRIDAY

осталось 5 дней

Скидка 10% и подарок на выбор — при покупке одной программы
При покупке двух программ  — вторая со скидкой 50%
Проект модуля #1

Загрузчик страниц (Тестирование)

Тестирование с Pytest

Загрузчик страниц – библиотека, которая умеет скачивать страницы по сети и сохранять их на локальном диске. Акцент в проекте делается на ее тестировании. Из-за обилия побочных эффектов, здесь придется правильно работать с их подавлением, стабами/моками и возможными ошибками.

2-4
недели

Цель

Проект в значительной степени ориентирован на проработку принципов и закрепление знаний по работе с файловой системой, HTTP-запросами, исключениями и их обработкой. Современные приложения часто используют эти возможности обмениваясь данными с внешними сервисами посредством HTTP, совершая попутно множественные операции ввода/вывода, в т.ч. с файловой системой. Как правило, взаимодействие с внешней средой сопряжено с потенциальными ошибками, которые могут возникнуть в процессе работы приложения, например, сбой интернет соединения, недоступность внешнего сервиса, отсутствие прав на запись файла и многое другое. И при написании кода, нужно будет обязательно учитывать эти моменты.

В этом проекте вы познакомитесь с библиотекой для выполнения HTTP-запросов requests, изучите возможности встроенных модулей os и sys, научитесь работать с ошибками и исключениями, а также контролировать процесс выполнения кода с помощью логирования. Для этих целей в python есть специальный модуль logging, который повсеместно используется при написании библиотек/приложений.

Все это влияет не только на сам код, но и на тесты для него. Здесь включаются и возможности самого тестового фреймворка и определенный способ организации кода, который делает его тестируемым. Помимо этого, в тестах проекта отрабатывается манки-патчинг HTTP-запросов с помощью популярной библиотеки requests-mock. Так как результат работы тестов будет зависеть от наличия интернет-соединения, доступности внешнего сервиса.

Также, в этом проекте идет активная работа с HTML. Для замены ссылок внутри страницы, нужно выполнить парсинг страницы в DOM. Из него потребуется извлечь все ресурсы для скачивания и заменить их локальными ссылками. В python эта задача выполняется с помощью библиотеки BeautifulSoup.

И, конечно же, архитектура. Создание хороших абстракций и правильная организация процесса загрузки – ключевая задач при создании загрузчика страниц. В этом проекте много преобразований, много операций ввода/вывода. Для создания хорошей архитектуры, понадобится вспомнить все чему учил Хекслет не только в курсах, но и в дополнительных статьях, например, из серии "совершенный код".

Описание

PageLoader – утилита командной строки, которая скачивает страницы из интернета и сохраняет их на компьютере. Вместе со страницей она скачивает все ресурсы (картинки, стили и js) давая возможность открывать страницу без интернета.

По такому же принципу устроено сохранение страниц в браузере (вы знали что они так умеют?).

Пример использования:

page-loader -o /var/tmp https://ru.hexlet.io/courses

INFO:root:requested url: https://ru.hexlet.io/courses
INFO:root:output path: /var/tmp
INFO:root:write html file: /var/tmp/ru-hexlet-io-courses.html
INFO:root:create directory for assets: /var/tmp/ru-hexlet-io-courses_files
Downloading: |████████████████████████████████| 100.0% (eta: 0)
Page was downloaded as '/var/tmp/ru-hexlet-io-courses.html'

Утилита скачивает ресурсы и показывает прогресс в терминале.

Сколько стоят проекты?

Проекты входят в стоимость обучения на любом плане: самостоятельном, групповом и индивидуальном. Дополнительно платить не нужно.

Зачем проходить проекты?

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

Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.

Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».

Что делать, если возникли трудности во время выполнения проекта?

Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться. Попросите о помощи в нашем Slack-чате в канале #hexlet-projects.

Кто проверяет проекты?

Автоматизированные тесты и линтер. В групповом и индивидуальном форматах наставник дополнительно проверит то, что тестами проверить невозможно (архитектуру проекта, правильность именования, удачность решений), и проведёт код-ревью, чтобы сделать проект ещё качественнее.

У меня другой вопрос

Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.