Skip to content

Andrey-Kugubaev/weather_data

Repository files navigation

Тестовое задание на позицию python-разработчик в компанию DataFort

Python SQLAlchemy Pydantic PostgreSQL Schedule Docker Flake8

Оглавление:


Введение

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

Информация собирается с сайта https://openweathermap.org/ для 50 самых больших городов мира. Запись в базу данных ведется каждый час.


Список городов

Список городов собирается с заданного файла с данными. Для каждого города сохраняется:

  • Название;
  • Координата северной широты;
  • Координата восточной долготы;
  • Численность населения.

Погодные характеристики

Сайт https://openweathermap.org/ позволяет получить большое количетсво параметров климатических условий. В настоящем проекте для каждого города, по заданным координатам, сохряняются следующие данные (текущие значения на время сохранения):

  • Температура воздуха;
  • Темперутара воздуха "по ощущениям";
  • Влажность воздуха.

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


Инфраструктура

  • Библиотека Pydantic
    • Библиотека для валидации данных, полученных из файла (для списка городов) или по api (для погодных данных)
  • SQLAlchemy
    • Для работы с базой данных использована SQLAlchemy
  • База данных PostgeSQL
    • Данная база данных выбрана как одна из самых удобных и популярных баз реляционного типа;
    • В проекте использованы две таблицы. Основая с информацие о погоде и дополнительная с информацией о городах. Данная структура является самой удобной, отвечающей поставленной задаче;
  • Язык програмирования и версия Python 3.10
    • Данная версия языка поддерживает все необходимые версии библиотек;
  • Библиотека schedule
    • Для периодического обращения сервиса для получения данных о погоде использованная библиотека schedule, позволяющая настроить расписание работы необхолимых функций;

Мониторинг

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

Инструкция по запуску

  1. Создаем .env и заполняем переменные окружения:
    API_KEY = ваш api-ключ от сайта https://openweathermap.org/
    DATABASE_URL = postgresql://postgres:postgres@db:5432/postgres
    SENTRY_DSN = ваш dsn-ключ проекта на sentry.io
    DB_ENGINE = postgres
    DB_NAME = postgres
    POSTGRES_USER = postgres
    POSTGRES_PASSWORD = postgres
    DB_HOST = db
    DB_PORT = 5432

  2. Устанавливаем Docker

  3. Собираем docker-compose
    docker-compose up -d --build

  4. Останавливаем и удаляем контейнеры:
    docker-compose down -v


Releases

No releases published

Packages

No packages published