подгрузка данных для кубка россии. тест 2
This commit is contained in:
@@ -7,13 +7,23 @@ import os
|
||||
from urllib.parse import urlparse
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
load_dotenv(override=True)
|
||||
|
||||
|
||||
def _refresh_env() -> None:
|
||||
# Читаем .env заново перед скачиванием, чтобы изменение SYNO_PATH_VMIX_2
|
||||
# применялось без пересборки кода.
|
||||
load_dotenv(override=True)
|
||||
|
||||
|
||||
def get_syno_settings() -> tuple[str | None, str | None, str | None]:
|
||||
_refresh_env()
|
||||
return (
|
||||
os.getenv("SYNO_URL"),
|
||||
os.getenv("SYNO_USERNAME"),
|
||||
os.getenv("SYNO_PASSWORD"),
|
||||
)
|
||||
|
||||
SYNO_URL = os.getenv("SYNO_URL")
|
||||
SYNO_USERNAME = os.getenv("SYNO_USERNAME")
|
||||
SYNO_PASSWORD = os.getenv("SYNO_PASSWORD")
|
||||
SYNO_PATH_VMIX = os.getenv("SYNO_PATH_VMIX")
|
||||
SYNO_PATH_VMIX_2 = os.getenv("SYNO_PATH_VMIX_2")
|
||||
|
||||
|
||||
def normalize_source_key(source_key: str | None) -> str:
|
||||
@@ -26,14 +36,17 @@ def get_vmix_preset_path(source_key: str | None = None) -> str | None:
|
||||
SUPERLEAGUE -> SYNO_PATH_VMIX
|
||||
RUSSIAN_CUP -> SYNO_PATH_VMIX_2, если он заполнен
|
||||
|
||||
Если второй путь не задан, используем основной, чтобы скачивание не ломалось.
|
||||
Значения читаются из .env прямо перед скачиванием.
|
||||
"""
|
||||
_refresh_env()
|
||||
key = normalize_source_key(source_key)
|
||||
primary_path = os.getenv("SYNO_PATH_VMIX")
|
||||
cup_path = os.getenv("SYNO_PATH_VMIX_2")
|
||||
|
||||
if key == "RUSSIAN_CUP" and SYNO_PATH_VMIX_2:
|
||||
return SYNO_PATH_VMIX_2
|
||||
if key == "RUSSIAN_CUP" and cup_path:
|
||||
return cup_path
|
||||
|
||||
return SYNO_PATH_VMIX
|
||||
return primary_path
|
||||
|
||||
|
||||
def get_fqdn():
|
||||
@@ -63,6 +76,15 @@ def rebuild_vmix_url(old_url: str, new_base_url: str, session_token: str) -> str
|
||||
endpoint = match.group(1)
|
||||
return f"{new_base_url}/vmix/session/{session_token}/{endpoint}"
|
||||
|
||||
# Старые пресеты могли хранить ссылки без session-токена:
|
||||
# /vmix/home-lineup, /vmix/info.json и т.п.
|
||||
old_style_match = re.match(r"^/vmix/(?!session/)(.+)$", path)
|
||||
if old_style_match:
|
||||
endpoint = old_style_match.group(1).strip("/")
|
||||
if endpoint.endswith(".json"):
|
||||
endpoint = endpoint[:-5]
|
||||
return f"{new_base_url}/vmix/session/{session_token}/{endpoint}"
|
||||
|
||||
# fallback: если структура другая, просто меняем host
|
||||
return re.sub(r"https?://[^/]+", new_base_url, old_url)
|
||||
|
||||
@@ -73,6 +95,7 @@ def change_vmix_datasource_urls(
|
||||
session_token: str,
|
||||
match_id: str | int | None = None,
|
||||
operator_login: str | None = None,
|
||||
source_key: str | None = None,
|
||||
) -> bytes:
|
||||
if isinstance(xml_data, dict):
|
||||
candidate = None
|
||||
@@ -155,6 +178,9 @@ def change_vmix_datasource_urls(
|
||||
# value2 = match_id
|
||||
get_or_create_dynamic_value(1).text = "" if match_id is None else str(match_id)
|
||||
|
||||
# value3 = source_key (SUPERLEAGUE / RUSSIAN_CUP)
|
||||
get_or_create_dynamic_value(2).text = "" if not source_key else normalize_source_key(source_key)
|
||||
|
||||
# value4 = operator_login
|
||||
get_or_create_dynamic_value(3).text = "" if not operator_login else str(operator_login)
|
||||
|
||||
@@ -168,14 +194,18 @@ def build_vmix_project_bytes(
|
||||
operator_login: str | None = None,
|
||||
source_key: str | None = None,
|
||||
) -> bytes:
|
||||
source_key = normalize_source_key(source_key)
|
||||
vmix_preset_path = get_vmix_preset_path(source_key)
|
||||
if not vmix_preset_path:
|
||||
raise RuntimeError("Не задан путь к vMix-пресету: SYNO_PATH_VMIX или SYNO_PATH_VMIX_2")
|
||||
|
||||
syno_url, syno_username, syno_password = get_syno_settings()
|
||||
print(f"[vmix] source_key={source_key or '-'} preset_path={vmix_preset_path}")
|
||||
|
||||
vmix_bio = nasio.load_bio(
|
||||
user=SYNO_USERNAME,
|
||||
password=SYNO_PASSWORD,
|
||||
nas_ip=SYNO_URL,
|
||||
user=syno_username,
|
||||
password=syno_password,
|
||||
nas_ip=syno_url,
|
||||
nas_port="443",
|
||||
path=vmix_preset_path,
|
||||
)
|
||||
@@ -186,6 +216,7 @@ def build_vmix_project_bytes(
|
||||
session_token,
|
||||
match_id,
|
||||
operator_login,
|
||||
source_key,
|
||||
)
|
||||
|
||||
if isinstance(edited_vmix, str):
|
||||
|
||||
Reference in New Issue
Block a user