v0.5.7: openapi.json кешируется в памяти — 33KB без перегенерации на каждый запрос
This commit is contained in:
@@ -80,7 +80,7 @@ SERVICES = _DF["SERVICES"]
|
|||||||
OPS_INDEX = _DF["OPS_INDEX"]
|
OPS_INDEX = _DF["OPS_INDEX"]
|
||||||
|
|
||||||
DELAY = float(os.getenv("MOCK_OP_DELAY", "0.1"))
|
DELAY = float(os.getenv("MOCK_OP_DELAY", "0.1"))
|
||||||
VERSION = "0.5.6"
|
VERSION = "0.5.7"
|
||||||
|
|
||||||
|
|
||||||
def get_services(stand_id):
|
def get_services(stand_id):
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ bp = Blueprint("openapi", __name__, url_prefix="/api/v1/svc")
|
|||||||
# URL для сервера — из env или автоопределение
|
# URL для сервера — из env или автоопределение
|
||||||
_SERVER_URL = os.getenv("POLYGON_ENDPOINT", "https://polygon.pythonk8s.dev.nubes.ru")
|
_SERVER_URL = os.getenv("POLYGON_ENDPOINT", "https://polygon.pythonk8s.dev.nubes.ru")
|
||||||
|
|
||||||
|
# Кеш спеки — генерится один раз, не на каждый запрос
|
||||||
|
_SPEC_CACHE = None
|
||||||
|
|
||||||
|
|
||||||
def _build_servers():
|
def _build_servers():
|
||||||
"""Список серверов — по одному на каждый стенд."""
|
"""Список серверов — по одному на каждый стенд."""
|
||||||
@@ -33,12 +36,11 @@ def _build_servers():
|
|||||||
|
|
||||||
@bp.route("/openapi.json", methods=["GET"])
|
@bp.route("/openapi.json", methods=["GET"])
|
||||||
def openapi_spec():
|
def openapi_spec():
|
||||||
"""GET /api/v1/svc/openapi.json — OpenAPI 3.1.0 спецификация.
|
"""GET /api/v1/svc/openapi.json — OpenAPI 3.1.0 спецификация (кешируется)."""
|
||||||
|
global _SPEC_CACHE
|
||||||
Возвращает полную спецификацию всех эндпоинтов полигона.
|
if _SPEC_CACHE is None:
|
||||||
Динамически добавляет схемы параметров для каждого загруженного сервиса.
|
_SPEC_CACHE = _build_spec()
|
||||||
"""
|
return jsonify(_SPEC_CACHE)
|
||||||
return jsonify(_build_spec())
|
|
||||||
|
|
||||||
|
|
||||||
def _build_spec():
|
def _build_spec():
|
||||||
|
|||||||
+1
-1
@@ -371,7 +371,7 @@ def test_stands_isolated():
|
|||||||
t("Изоляция: каждый стенд — свои инстансы", test_stands_isolated)
|
t("Изоляция: каждый стенд — свои инстансы", test_stands_isolated)
|
||||||
|
|
||||||
def test_stands_openapi():
|
def test_stands_openapi():
|
||||||
r = requests.get(f"{BASE}/api/v1/svc/openapi.json")
|
r = requests.get(f"{BASE}/api/v1/svc/openapi.json", timeout=30)
|
||||||
spec = js(r)
|
spec = js(r)
|
||||||
servers = [s["url"] for s in spec["servers"]]
|
servers = [s["url"] for s in spec["servers"]]
|
||||||
assert len(servers) == 3, f"expected 3 servers, got {len(servers)}"
|
assert len(servers) == 3, f"expected 3 servers, got {len(servers)}"
|
||||||
|
|||||||
Reference in New Issue
Block a user