/AsyncPython-Sprint1

Проектная работа первого спринта курса «Асинхронное программирование на Python».

Primary LanguagePython

Проектное задание первого спринта

Ваша задача — проанализировать данные по погодным условиям, полученные от API Яндекс Погоды.

Описание задания

1. Получите информацию о погодных условиях для указанного списка городов, используя API Яндекс Погоды.

Описание

Список городов находится в переменной CITIES в файле utils.py. Для взаимодействия с API используйте готовый класс YandexWeatherAPI в модуле api_client.py. Пример работы с классом YandexWeatherAPI описан в примере. Пример ответа от API для анализа находится в файле.

2. Вычислите среднюю температуру и проанализируйте информацию об осадках за указанный период для всех городов.

Описание

Условия и требования:

  • период вычислений в течение дня — с 9 до 19 часов;
  • средняя температура рассчитывается за указанный промежуток времени;
  • сумма времени (часов), когда погода без осадков (без дождя, снега, града или грозы), рассчитывается за указанный промежуток времени;
  • информация о температуре для указанного дня за определённый час находится по следующему пути: forecasts> [день]> hours> temp;
  • информация об осадках для указанного дня за определённый час находится по следующему пути: forecasts> [день]> hours> condition.

Пример данных с информацией о температуре и осадках за день.

Список вариантов погодных условий находится в таблице в блоке condition или в файле.

3. Объедините полученные данные и сохраните результат в текстовом файле.

Описание

Формат сохраняемого файла - json, csv или xls/xlsx.

Формат таблицы для сохранения, где рейтинг - позиция города относительно других при анализе "благоприятности поездки" (смотри п4).

Город/день 14-06 ... 19-06 Среднее Рейтинг
Москва Температура, среднее 24 27 25.6 8
Без осадков, часов 8 4 6
Абу-Даби Температура, среднее 34 37 35.5 2
Без осадков, часов 9 10 9.5
...

4. Проанализируйте результат и сделайте вывод, какой из городов наиболее благоприятен для поездки.

Описание

Наиболее благоприятным городом считать тот, в котором средняя температура за всё время была самой высокой, а количество времени без осадков — максимальным. Если таких городов более одного, то выводить все.

Требования к решению

  1. Используйте для решения как процессы, так и потоки.
  2. Используйте для решения как очередь, так и пул задач.
  3. Опишите этапы решения в виде отдельных классов в модуле tasks.py:
  • DataFetchingTask — получение данных через API;
  • DataCalculationTask — вычисление погодных параметров;
  • DataAggregationTask — объединение вычисленных данных;
  • DataAnalyzingTask — финальный анализ и получение результата.
  1. Используйте концепции ООП.
  2. Предусмотрите обработку исключительных ситуаций.
  3. Логируйте результаты действий.
  4. Покройте написанный код тестами.
  5. Используйте аннотацию типов.
  6. Приведите стиль кода в соответствие pep8, flake8, mypy.

Пример использования YandexWeatherAPI для работы с API

from api_client import YandexWeatherAPI

city_name = "MOSCOW"
ywAPI = YandexWeatherAPI()
resp = ywAPI.get_forecasting(city_name)