добавление поля description в таблицу категорий (ВОЛК)
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
+5
-1
@@ -160,7 +160,8 @@ def ensure_database_structure():
|
|||||||
CREATE TABLE categories (
|
CREATE TABLE categories (
|
||||||
AUTO_ID INT AUTO_INCREMENT PRIMARY KEY,
|
AUTO_ID INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
ID VARCHAR(255),
|
ID VARCHAR(255),
|
||||||
TITLE VARCHAR(2048)
|
TITLE VARCHAR(2048),
|
||||||
|
description TEXT
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||||
'''
|
'''
|
||||||
}
|
}
|
||||||
@@ -220,6 +221,9 @@ def ensure_database_structure():
|
|||||||
],
|
],
|
||||||
'interlinks': [
|
'interlinks': [
|
||||||
{'column': 'auto_added', 'type': 'BOOLEAN DEFAULT 0'}
|
{'column': 'auto_added', 'type': 'BOOLEAN DEFAULT 0'}
|
||||||
|
],
|
||||||
|
'categories': [
|
||||||
|
{'column': 'description', 'type': 'TEXT'}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+69
-2
@@ -12,6 +12,7 @@ from ensure_db import ensure_database_structure
|
|||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
VOLK_CATEGORY_LIST = os.getenv('VOLK_CATEGORY_LIST')
|
VOLK_CATEGORY_LIST = os.getenv('VOLK_CATEGORY_LIST')
|
||||||
|
VOLK_CATEGORY_DESC_PREFIX = os.getenv('VOLK_CATEGORY_DESC_PREFIX')
|
||||||
VOLK_API_VERSION = os.getenv('VOLK_API_VERSION')
|
VOLK_API_VERSION = os.getenv('VOLK_API_VERSION')
|
||||||
MDB_HOST = os.getenv('MDB_HOST')
|
MDB_HOST = os.getenv('MDB_HOST')
|
||||||
MDB_USER = os.getenv('MDB_USER')
|
MDB_USER = os.getenv('MDB_USER')
|
||||||
@@ -98,6 +99,9 @@ def load_categories():
|
|||||||
log_message("Проверка структуры базы данных")
|
log_message("Проверка структуры базы данных")
|
||||||
ensure_database_structure()
|
ensure_database_structure()
|
||||||
|
|
||||||
|
# Список категорий для последующей загрузки описаний
|
||||||
|
loaded_categories = []
|
||||||
|
|
||||||
for item in categories_data:
|
for item in categories_data:
|
||||||
# Проверка обязательного поля ID
|
# Проверка обязательного поля ID
|
||||||
if 'id' not in item or not item['id']:
|
if 'id' not in item or not item['id']:
|
||||||
@@ -119,8 +123,8 @@ def load_categories():
|
|||||||
if not existing:
|
if not existing:
|
||||||
# Вставка новой записи
|
# Вставка новой записи
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"INSERT INTO categories (ID, TITLE) VALUES (%s, %s)",
|
"INSERT INTO categories (ID, TITLE, description) VALUES (%s, %s, %s)",
|
||||||
(category_id, title)
|
(category_id, title, None)
|
||||||
)
|
)
|
||||||
inserted_count += 1
|
inserted_count += 1
|
||||||
log_message(f"Добавление: Категория {category_id}, Название: {title if title else '(пусто)'}")
|
log_message(f"Добавление: Категория {category_id}, Название: {title if title else '(пусто)'}")
|
||||||
@@ -137,6 +141,69 @@ def load_categories():
|
|||||||
log_message(f"Категория {category_id} без изменений")
|
log_message(f"Категория {category_id} без изменений")
|
||||||
|
|
||||||
connection.commit()
|
connection.commit()
|
||||||
|
loaded_categories.append(category_id)
|
||||||
|
|
||||||
|
log_message(f"Загружено категорий: {len(loaded_categories)}. Добавлено записей: {inserted_count}. Обновлено записей: {updated_count}.")
|
||||||
|
|
||||||
|
# Загрузка описаний категорий
|
||||||
|
if VOLK_CATEGORY_DESC_PREFIX and loaded_categories:
|
||||||
|
log_message(f"Начало загрузки описаний для {len(loaded_categories)} категорий")
|
||||||
|
desc_updated_count = 0
|
||||||
|
|
||||||
|
for category_id in loaded_categories:
|
||||||
|
try:
|
||||||
|
desc_url = VOLK_CATEGORY_DESC_PREFIX + category_id
|
||||||
|
log_message(f"Запрос описания для категории {category_id} из {desc_url}")
|
||||||
|
|
||||||
|
with urlopen(desc_url) as response:
|
||||||
|
desc_response = json.loads(response.read().decode())
|
||||||
|
|
||||||
|
# Проверка версии API
|
||||||
|
api_version = desc_response.get('api_version')
|
||||||
|
if api_version != VOLK_API_VERSION:
|
||||||
|
error_msg = f"Несовпадение версии API при загрузке описания категории {category_id}: получена версия '{api_version}', ожидается '{VOLK_API_VERSION}'. Обработка остановлена."
|
||||||
|
log_message(error_msg, "ERROR")
|
||||||
|
print(error_msg)
|
||||||
|
# Останавливаем обработку
|
||||||
|
break
|
||||||
|
|
||||||
|
# Проверка наличия блока data
|
||||||
|
if 'data' not in desc_response:
|
||||||
|
error_msg = f"В JSON ответе для категории {category_id} отсутствует блок 'data'. Обработка остановлена."
|
||||||
|
log_message(error_msg, "ERROR")
|
||||||
|
print(error_msg)
|
||||||
|
# Останавливаем обработку
|
||||||
|
break
|
||||||
|
|
||||||
|
desc_data = desc_response['data']
|
||||||
|
|
||||||
|
# Получаем description из блока data
|
||||||
|
description = desc_data.get('description')
|
||||||
|
# Если description пустое, None или отсутствует, обнуляем поле в БД
|
||||||
|
if not description:
|
||||||
|
description = None
|
||||||
|
|
||||||
|
# Обновляем описание в базе данных
|
||||||
|
cursor.execute(
|
||||||
|
"UPDATE categories SET description = %s WHERE ID = %s",
|
||||||
|
(description, category_id)
|
||||||
|
)
|
||||||
|
connection.commit()
|
||||||
|
desc_updated_count += 1
|
||||||
|
|
||||||
|
if description:
|
||||||
|
log_message(f"Обновлено описание для категории {category_id}")
|
||||||
|
else:
|
||||||
|
log_message(f"Описание для категории {category_id} обнулено (пустое или отсутствует)")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
error_msg = f"Ошибка при загрузке описания для категории {category_id}: {e}"
|
||||||
|
log_message(error_msg, "ERROR")
|
||||||
|
print(error_msg)
|
||||||
|
# Останавливаем обработку при ошибке
|
||||||
|
break
|
||||||
|
|
||||||
|
log_message(f"Завершение загрузки описаний. Обновлено описаний: {desc_updated_count}.")
|
||||||
|
|
||||||
log_message(f"Завершение работы. Добавлено записей: {inserted_count}. Обновлено записей: {updated_count}.")
|
log_message(f"Завершение работы. Добавлено записей: {inserted_count}. Обновлено записей: {updated_count}.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user