Показаны сообщения с ярлыком mypy. Показать все сообщения
Показаны сообщения с ярлыком mypy. Показать все сообщения

четверг, 26 июня 2025 г.

Black, isort, flake8, mypy, pyright, giga, gitlab,ci

Black, isort, flake8, mypy, pyright, giga, gitlab,ci

Процесс работы GitLab CI

Шаг 1: Отправка коммита

Когда ты отправляешь новый коммит в GitLab, GitLab CI автоматически запускает все этапы, описанные в файле .gitlab-ci.yml.

Шаг 2: Начало работы CI

GitLab CI считывает конфигурацию из .gitlab-ci.yml и начинает выполнение заданий последовательно по стадиям (stages).

Что делает GitLab CI:

Stage: before_script

  • Сначала выполняются общие предварительные операции:
    • Устанавливается Poetry.
    • Деактивируется создание виртуальных сред (так как мы работаем в контейнере).
    • Загружаются зависимости проекта через poetry install --no-root.

Stage: format

  • Этот этап отвечает за форматирование и очистку кода:
    • Black применяет форматирование кода.
    • Isort очищает и упорядочивает импорты.

Stage: type-check

  • Здесь осуществляется проверка аннотаций типов:
    • Mypy проверяет корректность аннотаций и сигнализирует о проблемах.
    • Pyright также осуществляет проверку аннотаций, работая параллельно с Mypy.

Stage: lint

  • Завершается процессом линта, проверяющим стиль и качество кода:
    • Flake8 ищет стилистические ошибки и выдает предупреждения.

Какие результаты можно ожидать:

  1. Лог выполнения:
    • Вся активность CI записывается в журнал.
    • Ты можешь посмотреть отчёт о результатах в панели CI/CD на странице проекта в GitLab.
  2. Уведомления об успехе или неудаче:
    • Если все этапы выполнены успешно, ты увидишь зелёный значок успеха возле последнего коммита.
    • Если какая-то проверка завершилась неудачей, напротив соответствующего этапа появится красный индикатор.
  3. Детализация ошибок:
    • Щёлкнув по этапу, ты можешь изучить детализированный лог ошибок или уведомлений,
    • полученных от каждой утилиты (например, Flake8, Mypy, Pyright).

Просмотр отчётов

После выполнения всех проверок CI на GitLab ты можешь увидеть результаты следующим образом:

  1. Зайди в страницу своего проекта в GitLab.
  2. Перейди в раздел CI/CD -> Pipeline.
  3. Среди последних Pipeline'ов найди последний коммит.
  4. Наведи мышью на каждую стадию и щёлкни по ссылке для просмотра журнала.

В журнале ты увидишь точные уведомления о любых нарушениях, возникающих при проверке,

будь то неправильное форматирование,

нарушение стандартов PEP8 или проблемы с аннотациями типов.

Пример отчёта:

Предположим, ты отправил код с неправильными отступами. Тогда в логе ты увидишь что-то подобное:

src/annotation_ci_proj/basic_any.py:4:1: E302 expected 2 blank lines, found 1

Или, если Mypy нашел проблему с типизацией:

src/annotation_ci_proj/some_module.py:10: error: Argument 1 to "some_function" has incompatible type "float"; expected "int"

Заключение:

Процесс GitLab CI выстроен таким образом,

чтобы обеспечивать высокое качество кода и своевременно реагировать на любые отклонения от стандартов и требований.

Благодаря такому подходу ты будешь получать своевременные уведомления о проблемах и сможете оперативно вносить исправления.

понедельник, 2 июня 2025 г.

MyPy, Giga, Python. Code Format, Tools

MyPy, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

MyPy — это инструмент для статической проверки типов в Python,

который проверяет правильность использования аннотаций типов в вашем коде.

Поскольку Python изначально является языком с динамической типизацией,

MyPy позволяет вводить типизацию, подобную статическим языкам, что помогает предотвращать ошибки,

связанные с неверными типами данных.

Зачем нужен MyPy?

  1. Повышение надёжности:
  2. Раннее выявление ошибок, связанных с типом данных, увеличивает уверенность в правильности кода.
  3. Улучшенная документация:
  4. Аннотации типов улучшают читаемость и понимаемость кода, делая его проще для последующих модификаций.
  5. Скорость разработки:
  6. Благодаря подсказкам от MyPy вы получаете мгновенное уведомление о потенциальных проблемах, экономя время на диагностику.
  7. Поддержка IDE:
  8. Многие интегрированные среды разработки (IDE) понимают аннотации типов и показывают предупреждения,
  9. основанные на проверке MyPy.

Как работает MyPy?

MyPy сканирует код и проверяет, соответствуют ли фактические типы объявленным аннотациям.

Например, рассмотрим следующий фрагмент кода:

def greet(name: str) -> None:
    print(f"Hello, {name}")

greet(123)  # ошибка типа

MyPy выдаст предупреждение о том, что аргумент name должен быть строкой, а передан int.

Начало работы с MyPy:

1. Установка:

pip install mypy

2. Написание аннотированного кода:

Добавьте аннотации типов в свой код:

def double(x: float) -> float:
    return x * 2

3. Запуск MyPy:

Выполните проверку вашего кода с помощью MyPy:

mypy my_file.py

4. Использование MyPy с большими проектами:

Рекомендуется настроить MyPy в своём проекте, добавив конфигурационный файл mypy.ini или .mypirc.

Там можно указать различные настройки (например, разрешить пропуска необъявленных типов, игнорировать несуществующие модули и т.д.).

Примеры сообщений от MyPy:

  • Ошибка типа: Argument 1 to "greet" has incompatible type "int"; expected "str".
  • Несоответствие возвращаемого типа: Return value of function "double" has incompatible type "float"; expected "int".

Интеграция с редакторами:

MyPy хорошо интегрируется с популярными IDE, такими как VSCode, PyCharm и другими.

Он выводит ошибки прямо в редакторе, облегчая немедленное исправление проблем.

Ограничения MyPy:

Несмотря на большую полезность, MyPy имеет несколько ограничений:

  • Невозможность обнаружения ошибок, вызванных динамическими особенностями Python (например, runtime полиморфизм).
  • Тяжело применить к унаследованному коду без аннотаций типов.
  • Медленнее проверяет большие проекты по сравнению с динамическим анализом.

Заключение:

MyPy — важный инструмент для современного Python-разработчика, позволяющий своевременно ловить ошибки,

улучшать качество кода и облегчать взаимодействие с ним.

Его широкое распространение подтверждает важность статической типизации в Python-разработке.

воскресенье, 1 июня 2025 г.

mypy, Giga, Tools

mypy, Giga, Tools

https://giga.chat/link/gcsJhXtnzn Python, Project Structure

mypy — это инструмент для статического анализа типов в Python, предназначенный для проверки аннотаций типов в коде.

Мотивация его создания связана с динамической природой Python, где многие ошибки возникают только на этапе выполнения,

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

Аннотируя типы в коде, мы можем заранее проверять правильность типов данных, передаваемых в функции и методы,

тем самым уменьшая вероятность ошибок на стадии исполнения.

Зачем нужны аннотации типов?

Аннотации типов повышают уверенность в правильности работы программы,

улучшают читаемость и поддерживают автоматическую генерацию документации.

Рассмотрим пример с функцией умножения чисел:

def multiply(x: int, y: int) -> int:
    return x * y

Типы аргументов (x, y) и возвращаемого значения (-> int) указаны явно.

Теперь при попытке передать неправильный тип данных (например, строку) статический анализатор, такой как mypy,

сможет обнаружить несоответствие ещё до запуска программы.

Как работает mypy?

После установки mypy с помощью pip:

pip install mypy

Его можно применять к отдельным файлам или всему проекту:

mypy my_module.py

Mypy выведет предупреждения или ошибки, если обнаружит несоответствия типов:

$ mypy my_module.py
my_module.py:3: error: Argument 1 to "multiply" has incompatible type "str"; expected "int"
Found 1 error in 1 file (checked 1 source file)

Практические советы по использованию mypy:

  • Начинайте с аннотирования ключевых частей кода (функции API, публичные интерфейсы, входные точки программы).
  • Постепенно вводите аннотации в остальных частях проекта.
  • Добавьте mypy в pipeline CI/CD, чтобы автоматически проверять аннотации при каждом изменении.
  • Используйте специальные плагины и инструменты, такие как typing_extensions,
  • для продвинутых случаев (generic types, abstract base classes и др.).

Примеры аннотаций типов:

from typing import List, Dict

def process_users(users: List[str]) -> None:
    pass

def fetch_user_info(user_id: str) -> Dict[str, any]:
    return {}

Итоги:

Mypy является ценным дополнением к процессу разработки на Python, позволяя поймать большинство ошибок,

связанных с типом данных, ещё на этапе написания кода.

Он дополняет динамический характер Python элементами статического анализа,

приближая опыт разработки к традиционным языкам с сильной типизацией.

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