Skip to content

fix: docs: повторяющиеся якоря исключений в фильтрах mkdocstrings - #195

Open
Pankovea wants to merge 2 commits into
love-apples:mainfrom
Pankovea:fix_docs
Open

fix: docs: повторяющиеся якоря исключений в фильтрах mkdocstrings#195
Pankovea wants to merge 2 commits into
love-apples:mainfrom
Pankovea:fix_docs

Conversation

@Pankovea

@Pankovea Pankovea commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Fix: дубликаты якорей исключений ломали mkdocs build --strict

Что происходило

Проверочная сборка документации в строгом режиме падала с ошибкой:

$ python -m mkdocs build --strict ​

Вывод до исправления — 15 предупреждений и abort:

WARNING - mkdocs_autorefs: Multiple primary URLs found for
    'maxapi.exceptions.max.MaxApiError':
    ['exceptions/dispatcher/#maxapi.exceptions.max.MaxApiError',
     'exceptions/max/#maxapi.exceptions.max.MaxApiError']
WARNING - mkdocs_autorefs: Multiple primary URLs found for
    'maxapi.exceptions.download_file.DownloadFileError': [...]   # ×3
WARNING - mkdocs_autorefs: Multiple primary URLs found for
    'maxapi.exceptions.base.MaxError': [...]                     # ×11

Aborted with 15 warnings in strict mode!

Разбивка: MaxApiError ×1, DownloadFileError ×3, MaxError ×11
(кратность — число попыток autorefs разрешить ссылки на класс с других страниц).

Причина

Страницы docs/exceptions/dispatcher.md и docs/exceptions/max.md обе
рендерят один модуль через ::: maxapi.exceptions и пытались отбирать
«свои» классы фильтрами mkdocstrings. Но семантика фильтров в
mkdocstrings-python (_keep_object) такова:

  1. выигрывает последнее совпавшее выражение;
  2. если member не совпал ни с одним выражением, он включается по
    умолчанию
    , когда в списке есть хотя бы один exclude-паттерн (!…).

Список "!^_[^_]", "^HandlerException$", … содержит exclude-паттерн,
поэтому все публичные члены без явного include проходили на обеих
страницах. Классы с docstring (MaxError, MaxApiError,
DownloadFileError) рендерились дважды и получали по два primary-якоря;
плагин autorefs фиксировал конфликт на каждую ссылку на них.

Исправление

Списки фильтров сделаны эксклюзивными: первым элементом добавлен
catch-all exclude "!.*" (матчит всё), следом идут include-паттерны.
По правилу «последнее совпадение выигрывает» они возвращают нужные
классы, остальные отсекаются:

filters:
  - "!.*"
  - "^HandlerException$"
  - "^MiddlewareException$"

(аналогично в max.md).

Как теперь

$ python -m mkdocs build --strict
INFO    -  Cleaning site directory
INFO    -  Documentation built in 3.96 seconds

0 warnings, strict проходит. Каждый класс исключений документируется
ровно на одной странице: HandlerException/MiddlewareException
exceptions/dispatcher, прочие → exceptions/max,
DownloadFileError/NotAvailableForDownloadexceptions/download_file.

MAX_API_Real_Payloads_2026.md вне навигации, поэтому перемещён в директорию doc/
(каталог девелоперских заметок). Так же в этом файле поправлены разметка и пунктцация

Фильтры на страницах exceptions/dispatcher и exceptions/max не отсекали
«чужие» члены пакета maxapi.exceptions
@codecov

codecov Bot commented Aug 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Поправлены разметка и пунктуация
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant