96 lines
4.3 KiB
Python
96 lines
4.3 KiB
Python
# forms/rack_edit_form.py
|
||
"""Модуль для работы с формой редактирования стойки."""
|
||
|
||
from dataclasses import dataclass
|
||
from typing import Optional, Dict
|
||
from playwright.sync_api import Page
|
||
from tools.logger import get_logger
|
||
from locators.rack_locators import RackLocators
|
||
from forms.base_rack_form import BaseRackForm, BaseRackData
|
||
|
||
|
||
logger = get_logger("EDIT_RACK_FORM")
|
||
|
||
|
||
@dataclass
|
||
class EditRackData(BaseRackData):
|
||
"""Класс для хранения данных редактируемой стойки."""
|
||
|
||
# Дополнительное поле для формы редактирования
|
||
allocated_power: str = ""
|
||
ventilation_panel: Optional[bool] = None
|
||
|
||
|
||
class EditRackForm(BaseRackForm):
|
||
"""Компонент для работы с формой редактирования стойки."""
|
||
|
||
# Маппинг текстовых полей
|
||
TEXT_FIELDS_MAPPING = {
|
||
"Имя": ("name", "name_input"),
|
||
"Комментарий": ("comment", "comment_input"),
|
||
"Серийный номер": ("serial", "serial_input"),
|
||
"Инвентарный номер": ("inventory", "inventory_input"),
|
||
"Выделенная мощность (Вт/ВА)": ("allocated_power", "power_input"),
|
||
}
|
||
|
||
# Маппинг combobox полей
|
||
COMBOBOX_FIELDS_MAPPING = {
|
||
"Ввод кабеля": ("cable_entry", "cable_entry_input", "cable_entry_list"),
|
||
"Состояние": ("state", "state_input", "state_list"),
|
||
"Глубина (мм)": ("depth", "depth_input", "depth_list"),
|
||
"Высота в юнитах": ("usize", "usize_input", "usize_list"),
|
||
"Владелец": ("owner", "owner_input", "owner_list"),
|
||
"Обслуживающая организация": ("service_org", "service_input", "service_list"),
|
||
"Проект/Титул": ("project", "project_input", "project_list")
|
||
}
|
||
|
||
# Маппинг checkbox полей
|
||
CHECKBOX_FIELDS_MAPPING = {
|
||
"Вентиляционная панель": ("ventilation_panel", "ventilation_checkbox"),
|
||
}
|
||
|
||
# Локаторы для текстовых полей
|
||
TEXT_FIELDS_LOCATORS = {
|
||
"Имя": RackLocators.EDIT_RACK_FORM_FIELD_NAME,
|
||
"Комментарий": RackLocators.EDIT_RACK_FORM_FIELD_COMMENT,
|
||
"Серийный номер": RackLocators.EDIT_RACK_FORM_FIELD_SERIAL,
|
||
"Инвентарный номер": RackLocators.EDIT_RACK_FORM_FIELD_INVENTORY,
|
||
"Выделенная мощность (Вт/ВА)": RackLocators.EDIT_RACK_FORM_FIELD_POWER,
|
||
}
|
||
|
||
# Локаторы для combobox полей
|
||
COMBOBOX_FIELDS_LOCATORS = {
|
||
"Ввод кабеля": RackLocators.EDIT_RACK_FORM_SELECT_CABLE_INPUT,
|
||
"Состояние": RackLocators.EDIT_RACK_FORM_SELECT_CONDITION_TYPE,
|
||
"Глубина (мм)": RackLocators.EDIT_RACK_FORM_SELECT_DEPTH,
|
||
"Высота в юнитах": RackLocators.EDIT_RACK_FORM_SELECT_USIZE,
|
||
"Владелец": RackLocators.EDIT_RACK_FORM_SELECT_OWNER,
|
||
"Обслуживающая организация": RackLocators.EDIT_RACK_FORM_SELECT_SERVICE_PROVIDER,
|
||
"Проект/Титул": RackLocators.EDIT_RACK_FORM_SELECT_PROJECT,
|
||
}
|
||
|
||
# Локаторы для checkbox полей
|
||
CHECKBOX_FIELDS_LOCATORS = {
|
||
"Вентиляционная панель": RackLocators.EDIT_RACK_FORM_CHECKBOX_VENTILATION,
|
||
}
|
||
|
||
def __init__(self, page: Page) -> None:
|
||
"""Инициализирует компонент формы редактирования стойки."""
|
||
super().__init__(page, RackLocators.EDIT_RACK_FORM)
|
||
|
||
def fill_rack_data(self, rack_data: EditRackData) -> Dict[str, int]:
|
||
"""Заполняет поля формы редактирования стойки."""
|
||
results = {
|
||
"text_fields_filled": 0,
|
||
"combobox_fields_filled": 0,
|
||
"checkboxes_set": 0
|
||
}
|
||
|
||
self._fill_text_fields(rack_data, results)
|
||
self._fill_combobox_fields(rack_data, results)
|
||
self._fill_checkbox_fields(rack_data, results)
|
||
|
||
logger.info(f"Filled {results['text_fields_filled']} text fields, "
|
||
f"{results['combobox_fields_filled']} combobox fields, "
|
||
f"{results['checkboxes_set']} checkboxes")
|
||
return results |