Skip to content

fix: устранена потеря path-префикса в кастомном api_url - #190

Open
Horizont32 wants to merge 4 commits into
love-apples:mainfrom
Horizont32:fix/base-url-path-prefix
Open

fix: устранена потеря path-префикса в кастомном api_url#190
Horizont32 wants to merge 4 commits into
love-apples:mainfrom
Horizont32:fix/base-url-path-prefix

Conversation

@Horizont32

Copy link
Copy Markdown

Проблема

ensure_session() создаёт ClientSession(base_url=self.api_url, ...), а request()
передаёт path из ApiPath как есть (все значения начинаются с /). aiohttp/yarl
резолвит такой URL по RFC 3986 §5.3 как absolute-path reference - path базового URL
отбрасывается целиком, остаётся только scheme://host

Из-за этого кастомный api_url, заданный через set_api_url() и содержащий
path-префикс (например, адрес внутреннего шлюза/прокси на нестандартных окружениях),
при каждом запросе теряет этот префикс, и запрос улетает не туда (а у многих энтерпрайз компаний есть свои самописные прокси для запросов во внешние сервисы, причем такие, что по одному домену с префиксом (типо /max, /tg и тп), работает одна прокся.

На дефолтном API_URL бага не видно, т.к. там пустой path - поэтому проявляется
только на кастомных base_url с префиксом

Фикс

  • ClientSession больше не создаётся с base_url= - резолюция через aiohttp убрана
  • request() теперь сам собирает абсолютный URL: bot.api_url.rstrip("/") + path

Оба изменения точечные, остальная логика (backoff-ретраи, retry_on_statuses,
bind_bot, диспатч raw_api_response) не тронута

Тесты и тп

Все проходит, все зеленое

@Horizont32

Copy link
Copy Markdown
Author

@love-apples Приветы!

Если можно, посмотри, пожалуйста, иначе приходится патчить request объект при base_url вида https://domain.com/max в десятках сервисов( А этот фикс должен вылечить

@codecov

codecov Bot commented Aug 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@Horizont32

Copy link
Copy Markdown
Author

UP.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Исправлено сохранение path-префикса пользовательского api_url.

Changes:

  • URL API теперь собирается явно.
  • ClientSession создаётся без base_url.
  • Добавлены регрессионные тесты.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
maxapi/connection/base.py Собирает абсолютный URL с сохранением префикса.
maxapi/bot.py Удаляет base_url из сессии.
tests/test_base_url_path_prefix.py Проверяет новый URL-маршрутинг.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread maxapi/connection/base.py Outdated
@Olegt0rr Olegt0rr added the enhancement New feature or request label Aug 19, 2026
Artem Golovachev added 2 commits August 19, 2026 23:10
…м request()

rstrip("/") теперь выполняется в set_api_url() и в __init__ (дефолтный
API_URL), вместо повторного вызова на каждом запросе в request().
@Horizont32

Copy link
Copy Markdown
Author

@Olegt0rr готово. Сначала сделал чтоб стрипало еще и в конструкторе, но будто бы и не надо это там, где хардкод.

@Horizont32
Horizont32 requested a review from Olegt0rr August 19, 2026 20:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants