Накидываем структуру приложения

Итак, первое, что надо сделать — подумать, из каких слоёв будет состоять наше приложение. Бросаться писать код сразу не надо. Давайте подумаем, что будет делать наша программа, вот просто перечислим, не думая пока о коде, функциях, классах, о том, как именно мы будем это реализовывать, а просто подумаем, что будет делать программа, из каких функциональных блоков она будет состоять.

Итак, наша программа погоды должна:

  • уметь получать текущие координаты устройства
  • запрашивать по этим координатам где-то погоду, в нашем случае на OpenWeather, но потенциально было бы здорово, если бы была возможность потом подцепить и какой-то другой сервис, если понадобится
  • результаты работы этого погодного сервиса надо распарсить, то есть разобрать, чтобы выдернуть оттуда нужные нам данные
  • и, наконец, наши данные надо отобразить в терминале.

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

  1. Слой, запускающий приложение и связывающий остальные слои
  2. Получение текущих координат
  3. Получение по координатам погоды
  4. Печать погоды

Отлично.

Создаём директорию и накидываем туда слои нашего приложения. Сразу создаём структуру. У нас есть 4 слоя нашего приложения, создадим под них сразу Python-модули, чтобы логика каждого слоя лежала сразу в них.

  • weather — входная точка приложения, сделаем её исполнимым файлом без расширения .py, чтобы можно было запускать её без указания интерпретатора
  • coordinates.py — получение текущих GPS-координат ноутбука
  • weather_api_service.py — работа с внешним сервисом прогноза погоды
  • weather_formatter.py — форматирование погоды, то есть «сборка» строки с данными погоды (например, для последующей печати этой строки в терминале)

Создаём директорию для проекта, в моём случае weather-yt, переходим в неё и создаём в ней пустой файл weather, добавляем этому файлу права на выполнение с помощью chmod, и затем открываем этот файл в редакторе кода, в моём случае в nvim:

mkdir weather-yt && cd $_
true > weather
chmod +x weather
nvim weather

Зададим заглушку в файле weather:

#!/usr/bin/env python3.10
print("Hello world")

Первая строка называется шебанг, при помощи чего будет запускаться текущий файл. В нашем случае файл будет запускаться с помощью интерпретатора python3.10. Убедитесь, что у вас есть такой интерпретатор в системе, что путь к нему добавлен в переменную окружения PATH, убедитесь, что python3.10 успешно запускается. Мы будем использовать здесь возможности актуальной на сегодня версии Python — 3.10. Проверим работу приложения:

./weather

Отлично! Точка входа в приложение готова. Теперь сделаем, чтобы она запускалась откуда угодно из системы, прокинув симлинк (ярлык) на этот исполнимый файл в /usr/local/bin/:

sudo ln -s $(pwd)/weather /usr/local/bin/

Отлично, теперь мы можем узнавать погоду (запускать weather) из любой директории в системе.

Создаём остальные модули приложения:

true > coordinates.py 
true > weather_api_service.py
true > weather_formatter.py
ls -l

Итак, у нас есть структура приложения, начинаем накидывать функционал.