From 0ec925ec2fe97729d54b4952dd8048b275dd1983 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sun, 21 Dec 2025 14:16:39 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=92=D0=9E=D0=9B=D0=9A]=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20User-agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- volk_category_testing.py | 104 ++++++++++++++++++++++++++++++++------- volk_load.py | 2 +- 2 files changed, 86 insertions(+), 20 deletions(-) diff --git a/volk_category_testing.py b/volk_category_testing.py index 0eedfce..4422f18 100644 --- a/volk_category_testing.py +++ b/volk_category_testing.py @@ -60,10 +60,21 @@ def safe_log_direct(message, category="TEST"): # Игнорируем все исключения - эта функция должна быть максимально безопасной pass -def test_category_description_load(category_id): - """Тестирует загрузку описания категории""" +def test_category_description_load(category_id, category_number=None, total_count=None): + """Тестирует загрузку описания категории + + Args: + category_id: ID категории для тестирования + category_number: Номер категории в последовательности (опционально) + total_count: Общее количество категорий (опционально) + """ + if category_number and total_count: + header = f"НАЧАЛО ТЕСТИРОВАНИЯ [{category_number}/{total_count}] КАТЕГОРИИ: {category_id}" + else: + header = f"НАЧАЛО ТЕСТИРОВАНИЯ ЗАГРУЗКИ ОПИСАНИЯ КАТЕГОРИИ: {category_id}" + log_message("=" * 80) - log_message(f"НАЧАЛО ТЕСТИРОВАНИЯ ЗАГРУЗКИ ОПИСАНИЯ КАТЕГОРИИ: {category_id}") + log_message(header) log_message("=" * 80) # Проверка наличия префикса URL @@ -231,13 +242,14 @@ def test_category_description_load(category_id): description = None # Итоговый результат - log_message("=" * 80) - log_message(f"ТЕСТИРОВАНИЕ ЗАВЕРШЕНО УСПЕШНО ДЛЯ КАТЕГОРИИ: {category_id}") - log_message("=" * 80) + if category_number and total_count: + footer = f"ТЕСТИРОВАНИЕ ЗАВЕРШЕНО УСПЕШНО [{category_number}/{total_count}] КАТЕГОРИИ: {category_id}" + else: + footer = f"ТЕСТИРОВАНИЕ ЗАВЕРШЕНО УСПЕШНО ДЛЯ КАТЕГОРИИ: {category_id}" - print(f"\nУСПЕХ: Описание категории {category_id} успешно загружено") - print(f"Размер описания: {len(description) if description else 0} символов") - print(f"Лог сохранен в: {TEST_LOG_FILE}") + log_message("=" * 80) + log_message(footer) + log_message("=" * 80) return True @@ -247,18 +259,30 @@ def main(): description='Тестирование загрузки описания категории из API VOLK', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" -Пример использования: +Примеры использования: python volk_category_testing.py volk26_nri + python volk_category_testing.py volk26_nri volk26_other volk26_third """ ) parser.add_argument( - 'category_id', + 'category_ids', type=str, - help='ID категории для тестирования (например: volk26_nri)' + nargs='+', + help='ID категорий для тестирования (от 1 до 10 штук, например: volk26_nri volk26_other)' ) args = parser.parse_args() - category_id = args.category_id + category_ids = args.category_ids + + # Проверка количества ID + if len(category_ids) == 0: + print("ОШИБКА: Не указан ни один ID категории") + parser.print_help() + sys.exit(1) + + if len(category_ids) > 10: + print(f"ОШИБКА: Указано слишком много ID категорий ({len(category_ids)}). Максимум 10.") + sys.exit(1) # Проверка наличия необходимых переменных окружения if not VOLK_CATEGORY_DESC_PREFIX: @@ -272,20 +296,62 @@ def main(): sys.exit(1) log_message("=" * 80) - log_message("ЗАПУСК ТЕСТИРОВАНИЯ ЗАГРУЗКИ ОПИСАНИЯ КАТЕГОРИИ") + log_message("ЗАПУСК ТЕСТИРОВАНИЯ ЗАГРУЗКИ ОПИСАНИЯ КАТЕГОРИЙ") log_message(f"Время запуска: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") - log_message(f"ID категории: {category_id}") + log_message(f"Количество категорий для обработки: {len(category_ids)}") + log_message(f"ID категорий: {', '.join(category_ids)}") log_message(f"Префикс URL: {VOLK_CATEGORY_DESC_PREFIX}") log_message(f"Версия API: {VOLK_API_VERSION}") log_message(f"Лог-файл: {TEST_LOG_FILE}") log_message("=" * 80) - success = test_category_description_load(category_id) + # Обработка каждой категории последовательно + total_count = len(category_ids) + success_count = 0 + fail_count = 0 - if success: - sys.exit(0) - else: + for index, category_id in enumerate(category_ids, start=1): + log_message("") + log_message("") + log_message(f">>> ОБРАБОТКА КАТЕГОРИИ {index} из {total_count}: {category_id}") + log_message("") + + print(f"\n[{index}/{total_count}] Обработка категории: {category_id}") + + success = test_category_description_load(category_id, category_number=index, total_count=total_count) + + if success: + success_count += 1 + print(f"[{index}/{total_count}] ✓ УСПЕХ: Категория {category_id} обработана успешно") + else: + fail_count += 1 + print(f"[{index}/{total_count}] ✗ ОШИБКА: Категория {category_id} не обработана") + + # Итоговая статистика + log_message("") + log_message("") + log_message("=" * 80) + log_message("ИТОГОВАЯ СТАТИСТИКА") + log_message("=" * 80) + log_message(f"Всего категорий обработано: {total_count}") + log_message(f"Успешно: {success_count}") + log_message(f"С ошибками: {fail_count}") + log_message(f"Время завершения: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + log_message("=" * 80) + + print(f"\n{'='*60}") + print(f"ИТОГИ:") + print(f" Всего категорий: {total_count}") + print(f" Успешно: {success_count}") + print(f" С ошибками: {fail_count}") + print(f" Лог сохранен в: {TEST_LOG_FILE}") + print(f"{'='*60}") + + # Возвращаем код ошибки, если были неудачи + if fail_count > 0: sys.exit(1) + else: + sys.exit(0) if __name__ == "__main__": main() diff --git a/volk_load.py b/volk_load.py index ddebc6b..f05eada 100644 --- a/volk_load.py +++ b/volk_load.py @@ -178,7 +178,7 @@ def load_categories(): try: # Добавляем таймаут для избежания зависаний (30 секунд) from urllib.request import Request - req = Request(desc_url) + req = Request(desc_url, headers={'User-Agent': 'Mozilla/5.0 (MyApp)'}) log_message(f"request response = {req}", "DEBUG") safe_log_direct("run urlopen", "DEBUG") response = urlopen(req, timeout=30)