From a39889276669ee801423d057087102fda3c09cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 31 Jul 2026 22:45:27 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=20polygon=20=E2=80=94=20STAND?= =?UTF-8?q?S-check=20=D0=B2=20get=5Fclient/get=5Fstand=20(v1.2.24)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/api/auth.py | 41 ++++++++++++++++++++++++++++++++--------- site/app.py | 2 +- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/site/api/auth.py b/site/api/auth.py index 4898b3d..7ea1858 100644 --- a/site/api/auth.py +++ b/site/api/auth.py @@ -18,7 +18,7 @@ import base64 import json from flask import request, current_app -from api.http_client import HttpClient, detect_endpoint, stand_name +from api.http_client import HttpClient, detect_endpoint, stand_name, STANDS def get_token(): @@ -33,12 +33,25 @@ def get_token(): def get_client(): - """HttpClient с автоопределением стенда по активному токену. + """HttpClient с автоопределением стенда. - Использует detect_endpoint() — пробует dev→test стенды. - Если автоопределение не сработало — fallback на NUBES_API_ENDPOINT из конфига.""" + Если NUBES_API_ENDPOINT — один из известных стендов (dev/test) → + автоопределение через detect_endpoint(). + + Если NUBES_API_ENDPOINT — любой другой URL (localhost, polygon, кастом) → + использовать его напрямую, без detect_endpoint(). + + Это позволяет направить app-autotest в polygon: + NUBES_API_ENDPOINT=http://localhost:5000/api/v1/svc + или + NUBES_API_ENDPOINT=https://polygon.pythonk8s.dev.nubes.ru/api/v1/svc + """ token = get_token() - endpoint = detect_endpoint(token) or current_app.config["NUBES_API_ENDPOINT"] + endpoint = current_app.config["NUBES_API_ENDPOINT"] + # Автоопределение ТОЛЬКО для известных стендов (dev/test). + # Для polygon/localhost/кастомных URL — используем endpoint как есть. + if endpoint in STANDS: + endpoint = detect_endpoint(token) or endpoint return HttpClient(endpoint, token) @@ -68,12 +81,22 @@ def get_client_id(): def get_stand(): - """Определить стенд (dev/test) по активному токену. + """Определить стенд (dev/test/mock) по активному токену. - detect_endpoint → stand_name. Если автоопределение не сработало — - fallback на NUBES_API_ENDPOINT из конфига.""" + Для известных стендов (STANDS) — автоопределение через detect_endpoint(). + Для polygon/localhost — stand_name может вернуть "?" (неизвестный URL), + заменяем на "mock" чтобы трекер инстансов не сломался. + + Примечание: для https://polygon.pythonk8s.dev.nubes.ru stand_name + вернёт "dev" (подстрока есть в URL) — это ок, трекер создаст + /tmp/instances-{clientId}-dev.json.""" token = get_token() - endpoint = detect_endpoint(token) or current_app.config["NUBES_API_ENDPOINT"] + endpoint = current_app.config["NUBES_API_ENDPOINT"] + if endpoint not in STANDS: + # Неизвестный стенд — polygon или localhost + s = stand_name(endpoint) + return s if s != "?" else "mock" + endpoint = detect_endpoint(token) or endpoint return stand_name(endpoint) diff --git a/site/app.py b/site/app.py index d794e7a..1ef513f 100644 --- a/site/app.py +++ b/site/app.py @@ -32,7 +32,7 @@ from routes.api_scenario_defs import bp_defs as api_scenario_defs_bp # Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода. # Нужна для фильтрации истории (пользователь видит только записи своей версии). -VERSION = "1.2.23" +VERSION = "1.2.24" # Flask-приложение с Jinja2-шаблонами из папки templates/ app = Flask(__name__, template_folder="templates", static_folder="static")