78 lines
3.5 KiB
Python
78 lines
3.5 KiB
Python
# forms/rack_create_form.py
|
||
"""Модуль для работы с формой создания стойки."""
|
||
|
||
from dataclasses import dataclass
|
||
from typing import 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("CREATE_RACK_FORM")
|
||
|
||
|
||
@dataclass
|
||
class CreateRackData(BaseRackData):
|
||
"""Класс для хранения данных создаваемой стойки."""
|
||
pass # Используем все поля из базового класса
|
||
|
||
|
||
class CreateRackForm(BaseRackForm):
|
||
"""Компонент для работы с формой создания стойки."""
|
||
|
||
# Маппинг текстовых полей
|
||
TEXT_FIELDS_MAPPING = {
|
||
"Имя": ("name", "name_input"),
|
||
"Комментарий": ("comment", "comment_input"),
|
||
"Серийный номер": ("serial", "serial_input"),
|
||
"Инвентарный номер": ("inventory", "inventory_input"),
|
||
}
|
||
|
||
# Маппинг combobox полей
|
||
COMBOBOX_FIELDS_MAPPING = {
|
||
"Ввод кабеля": ("cable_entry", "cable_entry_input", "cable_entry_list"),
|
||
"Состояние": ("state", "state_input", "state_list"),
|
||
"Высота в юнитах": ("usize", "usize_input", "usize_list"),
|
||
"Глубина (мм)": ("depth", "depth_input", "depth_list"),
|
||
"Владелец": ("owner", "owner_input", "owner_list"),
|
||
"Обслуживающая организация": ("service_org", "service_input", "service_list"),
|
||
"Проект/Титул": ("project", "project_input", "project_list")
|
||
}
|
||
|
||
# Локаторы для текстовых полей
|
||
TEXT_FIELDS_LOCATORS = {
|
||
"Имя": RackLocators.CREATE_RACK_FORM_FIELD_NAME,
|
||
"Комментарий": RackLocators.CREATE_RACK_FORM_FIELD_COMMENT,
|
||
"Серийный номер": RackLocators.CREATE_RACK_FORM_FIELD_SERIAL,
|
||
"Инвентарный номер": RackLocators.CREATE_RACK_FORM_FIELD_INVENTORY,
|
||
}
|
||
|
||
# Локаторы для combobox полей
|
||
COMBOBOX_FIELDS_LOCATORS = {
|
||
"Высота в юнитах": RackLocators.CREATE_RACK_FORM_SELECT_USIZE,
|
||
"Глубина (мм)": RackLocators.CREATE_RACK_FORM_SELECT_DEPTH,
|
||
"Ввод кабеля": RackLocators.CREATE_RACK_FORM_SELECT_CABLE_INPUT,
|
||
"Состояние": RackLocators.CREATE_RACK_FORM_SELECT_CONDITION_TYPE,
|
||
"Владелец": RackLocators.CREATE_RACK_FORM_SELECT_OWNER,
|
||
"Обслуживающая организация": RackLocators.CREATE_RACK_FORM_SELECT_SERVICE_PROVIDER,
|
||
"Проект/Титул": RackLocators.CREATE_RACK_FORM_SELECT_PROJECT,
|
||
}
|
||
|
||
def __init__(self, page: Page) -> None:
|
||
"""Инициализирует компонент формы создания стойки."""
|
||
super().__init__(page, RackLocators.CREATE_RACK_FORM_CONTAINER)
|
||
|
||
def fill_rack_data(self, rack_data: CreateRackData) -> Dict[str, int]:
|
||
"""Заполняет поля формы создания стойки."""
|
||
results = {
|
||
"text_fields_filled": 0,
|
||
"combobox_fields_filled": 0,
|
||
}
|
||
|
||
self._fill_text_fields(rack_data, results)
|
||
self._fill_combobox_fields(rack_data, results)
|
||
|
||
logger.info(f"Filled {results['text_fields_filled']} text fields and "
|
||
f"{results['combobox_fields_filled']} combobox fields")
|
||
return results
|