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

2.2.14. Проверка на цикл при изменении родителя подкатегории

функция:

check_cyclic_dependency - проверка на цикл при смене родителя категории

-- вход:

-- 1. new_parent_id - id нового назначаемого родителя

-- 2. category_id - id дочерней категории

-- выход: нет

-- эффекты:

-- 1. изменение родителя у дочерней выбранной категории

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

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

def check_cyclic_dependency(new_parent_id, category_id):

def fetch_parent_category(cat_id):

cursor.execute("SELECT id_parent FROM category WHERE id = ?", (cat_id,))

return cursor.fetchone()[0]

current_id = new_parent_id

while current_id is not None:

if current_id == category_id:

return True

current_id = fetch_parent_category(current_id)

return False

2.2.15. Изменение родителя подкатегории

функция: change_parent_of_subcategory - изменение родителя у категории

-- вход:

-- 1. subcategory_name - имя подкатегории

-- 2. new_parent_category_name - имя новой родительской категории (если необходимо назначить родителя. Если нужно сделать корневой - передавать этот аргумент не надо)

-- выход: нет

-- эффекты:

-- 1. изменение родителя у подкатегории

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

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

-- 2. существование подкатегории

-- 3. подкатегория и новая родительская категория не должны совпадать

def change_parent_of_subcategory(category_name, new_parent_category=None):

try:

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

if (is_category_exists(category_name)):

cursor.execute("SELECT id FROM category WHERE category_name = ?", (category_name,))

id_category = cursor.fetchone()[0]

if (new_parent_category is not None):

if (is_category_exists(new_parent_category)):

if (category_name == new_parent_category):

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

return

cursor.execute("SELECT id FROM category WHERE category_name = ?", (new_parent_category,))

id_new_parent_category = cursor.fetchone()[0]

cursor.execute("SELECT id_parent FROM category WHERE category_name = ?", (category_name,))

id_parent_category_of_category = cursor.fetchone()[0]

# Check for cyclic dependency using the recursive function

if check_cyclic_dependency(id_new_parent_category, id_category):

if (id_parent_category_of_category):

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

cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_new_parent_category, id_category))

conn.commit()

cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_parent_category_of_category, id_new_parent_category ))

conn.commit()

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

else:

# if not then category becomes root

cursor.execute("UPDATE category SET id_parent = ? WHERE category_name = ?", (None, new_parent_category))

conn.commit()

print(f'Подкатегория c category_name {new_parent_category} стала родительской.')

# Update the parent category

cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_new_parent_category, id_category ))

conn.commit()

else:

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

else:

# code for new_parent_category=None

cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (None, id_category))

conn.commit()

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

else:

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

except Exception as _ex:

conn.rollback()

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

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