GithubHelp home page GithubHelp logo

romarepin3 / async-python-sprint-1 Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 35 KB

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

Python 100.00%

async-python-sprint-1's Introduction

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

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

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

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

Описание

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

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

Описание

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

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

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

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

Для анализа данных используйте подготовленный скрипт в модуле external/analyzer.py. Скрипт имеет два параметра запуска:

  • -i – путь до файла с данными, как результат ответа от YandexWeatherAPI в формате json;
  • -o – путь до файла для сохранения результата выполнения работы.

Пример запуска скрипта:

python3 external/analyzer.py -i examples/response.json -o output.json

Пример данных с информацией об анализе данных для одного города за период времени, указанный во входном файле.

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

Описание

Формат сохраняемого файла – json, yml, 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. Используйте для решения как процессы, так и потоки. Для этого разделите все задачи по их типу – IO-bound или CPU-bound.
  2. Используйте для решения и очередь, и пул задач.
  3. Опишите этапы решения в виде отдельных классов в модуле tasks.py:
  • DataFetchingTask — получение данных через API;
  • DataCalculationTask — вычисление погодных параметров;
  • DataAggregationTask — объединение вычисленных данных;
  • DataAnalyzingTask — финальный анализ и получение результата.
  1. Используйте концепции ООП.
  2. Предусмотрите обработку исключительных ситуаций.
  3. Логируйте результаты действий.
  4. Используйте аннотацию типов.
  5. Приведите стиль кода в соответствие pep8, flake8, mypy.

Рекомендации к решению

  1. Предусмотрите и обработайте ситуации с некорректным обращением к внешнему API: отсутствующая/битая ссылка, неверный ответ, невалидное содержимое или иной формат ответа.
  2. Покройте написанный код тестами.
  3. Используйте таймауты для ограничения времени выполнения частей программы и принудительного завершения при зависаниях или нештатных ситуациях.

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

from external.client import YandexWeatherAPI
from utils import get_url_by_city_name

city_name = "MOSCOW"
url_with_data = get_url_by_city_name(city_name)
resp = YandexWeatherAPI.get_forecasting(data_url)

async-python-sprint-1's People

Contributors

romarepin3 avatar

Stargazers

 avatar

Watchers

 avatar

async-python-sprint-1's Issues

TDD

Add tests to check some required funcs and classes

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.