feat(api): портфели, ручные события, правка инструментов и обзор по скоупам

CRUD портфелей (/portfolios), ручные события (POST /events, DELETE только для manual), PATCH /instruments/{id}, GET /analytics/overview — карточка на каждый скоуп одним запросом. Холдинги отдают logo_url и logo_color. openapi.json обновлён.
This commit is contained in:
Dmitry
2026-09-19 22:13:55 +03:00
parent 75933993b2
commit f1f336f94f
15 changed files with 2129 additions and 21 deletions
+21
View File
@@ -0,0 +1,21 @@
"""Issuer logos, as T-Invest publishes them (kept out of `sources/`: the API needs the URL,
not the whole source registry).
Every instrument the API describes carries a `brand` block: the name of a logo file and the
brand's own colour. The pictures live on T-Bank's public CDN, need no key and answer with
`access-control-allow-origin: *`, so a browser client can load them straight from there.
"""
from __future__ import annotations
LOGO_HOST = "https://invest-brands.cdn-tinkoff.ru"
LOGO_SIZE = 160
"""The CDN serves 160, 320 and 640 px squares; a list row never needs more than the first."""
def logo_url(logo_name: str | None) -> str | None:
"""`sber.png` -> the URL of its 160 px picture; None when the instrument has no logo."""
if not logo_name:
return None
stem = logo_name.rsplit(".", 1)[0]
return f"{LOGO_HOST}/{stem}x{LOGO_SIZE}.png"