From 4e357e52f8b40c3dfa52b66d7de682dadd7128f4 Mon Sep 17 00:00:00 2001 From: FazziCLAY Date: Sun, 5 Apr 2026 11:56:16 +0300 Subject: [PATCH] added delays --- debug_send_rabbitmq_parsed.py | 67 +++++++++++++++++++++++++++++++++++ links_parser.py | 10 +++--- main.py | 4 ++- 3 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 debug_send_rabbitmq_parsed.py diff --git a/debug_send_rabbitmq_parsed.py b/debug_send_rabbitmq_parsed.py new file mode 100644 index 0000000..e72c744 --- /dev/null +++ b/debug_send_rabbitmq_parsed.py @@ -0,0 +1,67 @@ +import json +import pika +import os +from dotenv import load_dotenv + +load_dotenv() + +# --- КОНФИГУРАЦИЯ --- +RABBITMQ_URL = os.getenv("RABBITMQ_URL", "amqp://guest:guest@localhost/") +EXCHANGE_NAME = os.environ.get("RABBITMQ_EXCHANGE", "vstu_schedule") + +# Параметры фейкового события +FACULTET = "fevt" +IS_NEW = False + +# Формируем структуру состояния (state), которую ожидает консьюмер +mock_state = { + "excel": { + "url": "https://www.vstu.ru/upload/raspisanie/z/ОН_ФЭВТ_TEST.xls", + "sha1hash": "test_hash_8a7b6c5d4e3f2a1", + "last_changed": "2026-04-05 10:00:00", + "uniqpath": "vstu.ru/rasp?dep=fevt/TEST.xls", + # Важно: этот файл должен реально существовать на сервере fazziclay.com/api/v1/.../parsed/ + # Иначе Летописец не сможет скачать JSON + "json_represent": "он_фэвт_2 курс.json", + "facultet": FACULTET + }, + "sheets": {}, + "actual_at": 1774475864 +} + +mock_payload = { + "type": "excel_file_parsed_not_same", + "is_new": IS_NEW, + "state": mock_state +} + +def send_test_event(): + try: + print(f"[*] Connecting to RabbitMQ: {RABBITMQ_URL}") + connection = pika.BlockingConnection(pika.URLParameters(RABBITMQ_URL)) + channel = connection.channel() + + # Гарантируем, что обменник существует + channel.exchange_declare(exchange=EXCHANGE_NAME, exchange_type='topic', durable=True) + + routing_key = f"parser.excel_parsed.{FACULTET}" + + print(f"[*] Publishing mock event to '{routing_key}'...") + channel.basic_publish( + exchange=EXCHANGE_NAME, + routing_key=routing_key, + properties=pika.BasicProperties( + content_type="application/json", + delivery_mode=2 # Persistent + ), + body=json.dumps(mock_payload, ensure_ascii=False).encode('utf-8') + ) + + print("[+] Test event published successfully!") + connection.close() + + except Exception as e: + print(f"[!] Failed to publish test event: {e}") + +if __name__ == "__main__": + send_test_event() \ No newline at end of file diff --git a/links_parser.py b/links_parser.py index f6cccbf..de03e88 100644 --- a/links_parser.py +++ b/links_parser.py @@ -18,7 +18,7 @@ def sibling_clear_to_date(s: str): return s.lower().replace("(последнее изменение:", "").replace(")", "").strip() # Парсит ссылки на эксель .xls & .xlsx файлы и выдаёт их -def parse_links(facultets): +def parse_links(facultets, DEBUG_NO_LINKS_DELAY=False): session = requests.Session() session.headers = CaseInsensitiveDict( { @@ -58,9 +58,11 @@ def parse_links(facultets): } print("Found in vstu.ru: ", record) EXCEL_LINKS.append(record) - st = random.randint(1, 10)/10 - print(f"sleep {st}s") - time.sleep(st) + + if not DEBUG_NO_LINKS_DELAY: + st = random.randint(1, 10)/10 + print(f"sleep {st}s") + time.sleep(st) return sorted(EXCEL_LINKS, key=lambda x: x['url']) diff --git a/main.py b/main.py index 4b05a8e..ba1caf7 100644 --- a/main.py +++ b/main.py @@ -26,6 +26,7 @@ EXCHANGE_NAME = os.environ.get("RABBITMQ_EXCHANGE", "vstu_schedule") INFINITY_LOOP = os.environ.get("INFINITY_LOOP", "no").lower() in ['yes', "true"] parser.LOGGING = LOGGING = os.environ.get("PARSER_LOGGING", "no").lower() in ['yes', "true"] + try: connection = pika.BlockingConnection(pika.URLParameters(RABBITMQ_URL)) channel = connection.channel() @@ -48,6 +49,7 @@ PARSED_DIR = "parsed" DEBUG_ONE_FAC = None #'fevt' DEBUG_NO_SAVE_STATES = False +DEBUG_NO_LINKS_DELAY = True def parse_sheets(download_place): to_return = {} @@ -168,7 +170,7 @@ def run_session(): print("main(); parse links starting...") - EXCEL_LINKS = links_parser.parse_links(FACULTETS if DEBUG_ONE_FAC is None else [DEBUG_ONE_FAC]) + EXCEL_LINKS = links_parser.parse_links(FACULTETS if DEBUG_ONE_FAC is None else [DEBUG_ONE_FAC], DEBUG_NO_LINKS_DELAY=DEBUG_NO_LINKS_DELAY) if len(EXCEL_LINKS) < 5 and not DEBUG_ONE_FAC: raise Exception("Safety exception: excel links count < 5; maybe in vstu.ru tech works")