Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 сем / 2 / МиСПрИС_1374_2_Наволоцкий_Харитонов_Зырянов.docx
Скачиваний:
9
Добавлен:
29.03.2025
Размер:
1.07 Mб
Скачать

2.2.12. Изменение приоритета конкретного перечисления

функция: change_enum_priority() - изменение приоритета конкретного перечисления

-- вход:

-- 1. enum_name - имя перечисления

-- 2. priority - приоритет

-- выход: нет

-- эффекты:

-- 1. изменение приоритета перечисления

-- требования:

-- 1. перечисление должно существовать

def change_enum_priority(enum_name, priority):

try:

if (priority >= 0):

cursor.execute("UPDATE enum SET priority = ? WHERE enum_name = ?", (priority, enum_name))

conn.commit()

else:

print('Приоритет должен быть неотрицательным целым числом.')

return

except Exception as _ex:

print(f'Error {_ex} - ошибка при изменении приоритеа перечисления.')

2.2.13. Проверка классов перечисления на цикл

функция: check_cyclic_dependency_enum_classifier() - проверка классов перечисления на цикл

-- вход:

-- 1. new_parent_enum_classifier_id - родительский id

-- 2. enum_classifier_id - дочерний id

-- выход: true - есть цикл, false - нет цикла

-- эффекты: нет

-- требования: нет

def check_cyclic_dependency_enum_classifier(new_parent_enum_classifier_id, enum_classifier_id):

try:

def fetch_parent_enum_classifier(enum_id):

cursor.execute("SELECT id_parent FROM enum_classifier WHERE id = ?", (enum_id,))

return cursor.fetchone()[0]

current_id = new_parent_enum_classifier_id

while current_id is not None:

if current_id == enum_classifier_id:

return True

current_id = fetch_parent_enum_classifier(current_id)

return False

except Exception as _ex:

print(f'Error {_ex} - ошибка при проверке классов перечисления на цикл.')

2.2.14. Изменение родителя класса перечисления

функция: change_parent_of_enum_classifier() - изменение родителя перечисления (полный аналог функции change_parent_of_subcategory)

-- вход:

-- 1. enum_classifier_name - имя дочернего класса

-- 2. new_parent_enum_classifier - (optional) - имя родительского класса

-- выход: нет

-- эффекты:

-- 1. дочерний класс должен существовать

-- 2. если родительский класс существует - назначает родителя

-- 3. если родительский класс не назначен - дочерний класс становится одним из корневых/корневым

-- требования:

-- 1. существование дочернего класса

-- 2. несовпадение обоих аргументов

-- 3. отсутствие цикла (проверяется внутри функции за счет другой)

def change_parent_of_enum_classifier(enum_classifier_name, new_parent_enum_classifier=None):

try:

print(f'введенные категории - для {enum_classifier_name} назначить родителем {new_parent_enum_classifier}')

if (is_enum_exist(enum_classifier_name)):

cursor.execute("SELECT id FROM enum_classifier WHERE enum_classifier_name = ?", (enum_classifier_name,))

id_enum = cursor.fetchone()[0]

if (new_parent_enum_classifier is not None):

if (is_enum_exist(new_parent_enum_classifier)):

if (enum_classifier_name == new_parent_enum_classifier):

print('Нельзя назначить классу самого себя в родители.')

return

cursor.execute("SELECT id FROM enum_classifier WHERE enum_classifier_name = ?", (new_parent_enum_classifier,))

id_new_parent_enum_classifier = cursor.fetchone()[0]

cursor.execute("SELECT id_parent FROM enum_classifier WHERE enum_classifier_name = ?", (enum_classifier_name,))

id_parent_class_of_class = cursor.fetchone()[0]

# Check for cyclic dependency using the recursive function

if check_cyclic_dependency_enum_classifier(id_new_parent_enum_classifier, id_enum):

if (id_parent_class_of_class):

# if parent class has had their own parent then would set it

cursor.execute("UPDATE enum_classifier SET id_parent = ? WHERE id = ?", (id_new_parent_enum_classifier, id_enum))

conn.commit()

cursor.execute("UPDATE enum_classifier SET id_parent = ? WHERE id = ?", (id_parent_class_of_class, id_new_parent_enum_classifier ))

conn.commit()

print('Родитель у подкласса был успешно изменен.')

else:

# if not then class becomes root

cursor.execute("UPDATE enum_classifier SET id_parent = ? WHERE enum_classifier_name = ?", (None, new_parent_enum_classifier))

conn.commit()

print(f'Подкласс c enum_classifier_name - {new_parent_enum_classifier} стала родительской.')

# Update the parent class

cursor.execute("UPDATE enum_classifier SET id_parent = ? WHERE id = ?", (id_new_parent_enum_classifier, id_enum ))

conn.commit()

else:

print('Новая родительский класс не существует.')

else:

# code for new_parent_class=None

cursor.execute("UPDATE enum_classifier SET id_parent = ? WHERE id = ?", (None, id_enum))

conn.commit()

print('Класс стал корневым / одним из корневых')

else:

print('Указанного класса не существует.')

except Exception as _ex:

conn.rollback()

print(f"Ошибка в изменении родителя класса (enum_classifier): {_ex}")

Соседние файлы в папке 2