Skip to content
This repository has been archived by the owner on Oct 30, 2023. It is now read-only.

wwarne/jaundice-rate

 
 

Repository files navigation

Фильтр желтушных новостей

Данный проект представляет собой web-сервис для анализа статей с новостных сайтов.

Схема работы сервиса:

* Сервис получает список ссылок на новостные статьи для анализа.

* Сервис скачивает веб-страницы и получает текст статей.

* Текст нормализуется.

* Оценивается доля экспрессивных (негативных или позитивных слов) и вычисляется рейтинг "желтушности" статьи.

Пока поддерживается только один новостной сайт - ИНОСМИ.РУ. Для него разработан специальный адаптер, умеющий выделять текст статьи на фоне остальной HTML разметки. Для других новостных сайтов потребуются новые адаптеры, все они будут находиться в каталоге adapters. Туда же помещен код для сайта ИНОСМИ.РУ: adapters/inosmi_ru.py.

В перспективе можно создать универсальный адаптер, подходящий для всех сайтов, но его разработка будет сложной и потребует дополнительных времени и сил.

Как установить

Вам понадобится Python версии 3.7 или старше. Для установки пакетов рекомендуется использовать Poetry.

Первым шагом установите пакеты:

poetry install --no-dev

Если вы хотите запускать тесты, то нужно установить так-же и dev-зависимости

poetry install

Как запустить

Способо 1: Активировать виртуальное окружение командой poetry shell и далее запускать команды.

Способ 2: Запускать каждую команду как poetry run команда, которую хотите запустить.

Для запуска используйте команду

python server.py

Возможные настройки проекта

Вы можете передавать параметры чата как переменные окружения или как параметры командной строки.

Параметры командной строки имеют более высокий приоритет.

Переменная окружения Параметр командной строки Значение по-умолчанию Описание
NEWS_PORT --port 8080 На каком порту будет работать сервер
NEWS_REQUEST_TIMEOUT --request_timeout 2 Максимальное время ожидания загрузки страницы с новостью, сек.
NEWS_PROCESS_TIMEOUT --process_timeout 3 Максимальное время обработки текста статьи, сек.
NEWS_URL_LIMIT --urls_limit 10 Максимальное количество адресов url в одном запросе
NEWS_REDIS_HOST --redis_host None Адрес сервера Redis для кеширования
NEWS_REDIS_PORT --redis_port 6379 Порт сервера Redis

Кэширование результатов

Для ускорения работы сервиса может использоваться Redis. Если при запуске указаны параметры подключения, то все результаты всех успешных запросов на анализ статей будут закэшированы на 1 час и все запросы на анализ точно такого-же урла будут возвращаться из кэша, ускоряя работу.

Как запустить тесты

Для тестирования используется pytest. Команда для запуска тестов:

python -m pytest

Запуск с docker-compose

Проект содержит два docker-compose файла, для разработки и для продакшена.

Разработка с использованием docker (файл docker-compose-dev.yml)

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

docker-compose -f docker-compose-dev.yml build

При сборке в dev режиме внутри контейнера будут установлены все зависимости проекта (в том числе и dev, для запуска тестов и т.п.) Файлы проекта не будут скопированы внутрь контейнера, поэтому запустить его можно будет только примонтировав директорию проекта внутрь контейнера (это сделано целенаправленно, чтобы этот контейнер сразу падал, если использовать его не по-назначению).

В docker-compose-dev.yml монтирование уже настроено, плюс открываются порты и для aiohttp-сервера и для redis-сервера для возможности более простого подключения к ним и отладки.

Так как директория проекта смонтирована внутрь образа, при изменении исходников нужно только перезапустить проект, без пересборки образов (если не добавлялись новые пакеты, естественно).

PyCharm позволяет даже запускать и подключаться дебагером к проекту, запущенному в docker контейнере.

Запуск проекта

docker-compose -f docker-compose-dev.yml up

Запуск отдельной команды внутри проекта

Для запуска отдельной команды следует использовать docker-compose run вместе с флагом --rm чтобы автоматически удалить версию контейнера после.

Например docker-compose -f docker-compose-dev.yml run --rm web python -m pytest (web - имя сервиса в docker-compose файле)

Подключение к работающему контейнеру

Если проект уже запущен, то можно воспользоваться командой exec

(например зайти в сеанс bash внутри контейнера с aiohttp сервером)

docker-compose -f docker-compose-dev.yml exec web bash

Запуск в продакшене (файл docker-compose-prod.yml)

Сборка образов и запуск проекта из этого файла отличается следующими особенностями:

  • В итоговый образ НЕ устанавливаются зависимости из dev раздела pyproject.toml
  • В итоговый образ копируется содержимое директории проекта, образ можно переносить на другие машины и он будет работать.
  • Наружу открыт только порт nginx-a. Зайти на порт aiohttp сервера и redis-сервера снаружи нельзя.

Сборка и запуск

docker-compose -f docker-compose-prod.yml build

docker-compose -f docker-compose-prod.yml up -d

Цели проекта

Код написан в учебных целях. Это урок из курса по веб-разработке — Девман.

About

Задача из курса Девман

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML 91.2%
  • Python 8.3%
  • Dockerfile 0.5%