создан механизм для создания меню для разных сравнений через drap-and-drop
This commit is contained in:
@@ -544,16 +544,42 @@ class MappingDataService:
|
||||
control = session.scalar(select(GameControlState).where(GameControlState.game_external_id == resolved_game_id))
|
||||
if control is not None:
|
||||
runtime_values = HockeyDataService._runtime_values_from_row(control)
|
||||
player_panel_labels: dict[str, str] = {}
|
||||
for meta_key, meta_value in runtime_values.items():
|
||||
meta_match = re.match(r"^player_select\.([A-Za-z0-9_]+)\._label$", str(meta_key))
|
||||
if meta_match:
|
||||
player_panel_labels[meta_match.group(1)] = str(meta_value or meta_match.group(1))
|
||||
for raw_key, raw_value in runtime_values.items():
|
||||
sql_key = re.sub(r"[^A-Za-z0-9_]+", "_", str(raw_key)).strip("_")[:120]
|
||||
raw_key_text = str(raw_key)
|
||||
player_match = re.match(r"^player_select\.([A-Za-z0-9_]+)\.(.+)$", raw_key_text)
|
||||
if player_match and player_match.group(2).startswith("_"):
|
||||
continue
|
||||
sql_key = re.sub(r"[^A-Za-z0-9_]+", "_", raw_key_text).strip("_")[:120]
|
||||
if not sql_key or not re.match(r"^[A-Za-z]", sql_key):
|
||||
sql_key = f"panel_{sql_key}"[:120]
|
||||
context.setdefault(sql_key, str(raw_value))
|
||||
if player_match:
|
||||
panel_id, field_key = player_match.groups()
|
||||
slot_match = re.match(r"player(\d+)_(id|db_id|team_id|side|number|name)$", field_key)
|
||||
field_labels = {
|
||||
"id": "external ID", "db_id": "DB ID", "team_id": "ID команды",
|
||||
"side": "сторона", "number": "номер", "name": "имя",
|
||||
}
|
||||
label = field_key
|
||||
if slot_match:
|
||||
slot_no, field_name = slot_match.groups()
|
||||
label = f"Игрок {slot_no} — {field_labels.get(field_name, field_name)}"
|
||||
category = f"Игровые выборки · {player_panel_labels.get(panel_id, panel_id)}"
|
||||
description = f"Игрок, перетащенный оператором в блок {player_panel_labels.get(panel_id, panel_id)}."
|
||||
else:
|
||||
label = raw_key_text
|
||||
category = "Нижняя панель"
|
||||
description = f"Runtime-параметр нижней панели: {raw_key_text}"
|
||||
runtime_variable_payloads.append({
|
||||
"key": sql_key,
|
||||
"label": str(raw_key),
|
||||
"category": "Нижняя панель",
|
||||
"description": f"Runtime-параметр нижней панели: {raw_key}",
|
||||
"label": label,
|
||||
"category": category,
|
||||
"description": description,
|
||||
"scope": "match",
|
||||
"source_type": "system",
|
||||
"is_system": True,
|
||||
@@ -800,6 +826,11 @@ class MappingDataService:
|
||||
"description": "Текущее состояние операторской кнопки матча.",
|
||||
})
|
||||
runtime_values = HockeyDataService._runtime_values_from_row(control) if control is not None else {}
|
||||
player_panel_labels: dict[str, str] = {}
|
||||
for meta_key, meta_value in runtime_values.items():
|
||||
meta_match = re.match(r"^player_select\.([A-Za-z0-9_]+)\._label$", str(meta_key))
|
||||
if meta_match:
|
||||
player_panel_labels[meta_match.group(1)] = str(meta_value or meta_match.group(1))
|
||||
for key, value in runtime_values.items():
|
||||
mapping_key = str(key)
|
||||
if mapping_key.startswith("panel."):
|
||||
@@ -812,6 +843,32 @@ class MappingDataService:
|
||||
"source_code": "live_control",
|
||||
"description": "Выбранное значение параметризованной кнопки нижней панели.",
|
||||
})
|
||||
continue
|
||||
player_match = re.match(r"^player_select\.([A-Za-z0-9_]+)\.(.+)$", mapping_key)
|
||||
if not player_match:
|
||||
continue
|
||||
panel_id, field_key = player_match.groups()
|
||||
if field_key.startswith("_"):
|
||||
continue
|
||||
slot_match = re.match(r"player(\d+)_(id|db_id|team_id|side|number|name)$", field_key)
|
||||
field_labels = {
|
||||
"id": "external ID", "db_id": "DB ID", "team_id": "ID команды",
|
||||
"side": "сторона", "number": "номер", "name": "имя",
|
||||
}
|
||||
label = field_key
|
||||
if slot_match:
|
||||
slot_no, field_name = slot_match.groups()
|
||||
label = f"Игрок {slot_no} — {field_labels.get(field_name, field_name)}"
|
||||
panel_label = player_panel_labels.get(panel_id, panel_id)
|
||||
result.append({
|
||||
"key": mapping_key,
|
||||
"label": label,
|
||||
"category": f"Игровые выборки · {panel_label}",
|
||||
"value": value,
|
||||
"kind": "text",
|
||||
"source_code": "live_control",
|
||||
"description": f"Значение слота блока игроков «{panel_label}».",
|
||||
})
|
||||
return result
|
||||
|
||||
def data_catalog(
|
||||
|
||||
Reference in New Issue
Block a user