# 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