diff --git a/work_parser.py b/work_parser.py index 8bf8a1a..c220edd 100644 --- a/work_parser.py +++ b/work_parser.py @@ -95,8 +95,9 @@ def get_articles_by_filter(field_name: str, start_date: str, finish_date: str): rows = cur.fetchall() return [row['title'] for row in rows] - finally: - pass + except Exception as e: + print(f"Ошибка в get_articles_by_filter: {e}") + raise # Глобальное подключение к БД @@ -105,15 +106,39 @@ conn = None def get_connection(): """Получает подключение к БД, создавая новое при необходимости""" global conn - if conn is None or conn.closed: + try: + # Проверяем, активно ли подключение + if conn is None or conn.closed: + conn = psycopg2.connect(**DB_CONFIG) + conn.autocommit = True + # Дополнительная проверка на валидность + elif conn.info.transaction_status == 2: # TRANSACTION_IN_TRANS + # Подключение активно, но в транзакции — закроем и создадим новое + try: + conn.close() + except: + pass + conn = psycopg2.connect(**DB_CONFIG) + conn.autocommit = True + return conn + except Exception as e: + print(f"Ошибка при получении подключения: {e}") + # Сбрасываем подключение и пробуем заново + conn = None conn = psycopg2.connect(**DB_CONFIG) conn.autocommit = True - return conn + return conn + +def close_connection(): + """Закрывает глобальное подключение к БД""" + global conn + if conn and not conn.closed: + conn.close() + conn = None # Проверяет, есть ли указанный URL в базе данных. def check_url_exists(url: str): conn = get_connection() try: - conn = get_connection() with conn.cursor() as cursor: cursor.execute( "SELECT 1 FROM url WHERE url = %s LIMIT 1", @@ -123,8 +148,6 @@ def check_url_exists(url: str): return {"exists": bool(result)} except Exception as e: raise HTTPException(status_code=500, detail=f"Ошибка при проверке: {e}") - finally: - pass # работа с базой данных показывания задач work_parser def create_table(): @@ -145,8 +168,8 @@ def create_table(): ); """) print("Таблица work_parser создана или уже существует") - finally: - pass + except Exception as e: + print(f"Ошибка при создании таблицы work_parser: {e}") def insert_task(status, source_url=None, source_id=None, priority=0): conn = get_connection() @@ -159,8 +182,9 @@ def insert_task(status, source_url=None, source_id=None, priority=0): """, (status, source_url, priority)) task_id = cur.fetchone()[0] return task_id - finally: - pass + except Exception as e: + print(f"Ошибка при создании задачи: {e}") + raise def get_tasks_offset(limit, offset): conn = get_connection() @@ -173,8 +197,9 @@ def get_tasks_offset(limit, offset): """, (limit, offset)) tasks = cur.fetchall() return tasks - finally: - pass + except Exception as e: + print(f"Ошибка при получении задач: {e}") + raise def delete_task(task_id: int): conn = get_connection() @@ -186,8 +211,9 @@ def delete_task(task_id: int): return {"message": f"Задача {task_id} удалена", "deleted_task": dict(deleted_task)} else: return {"message": f"Задача с id {task_id} не найдена"} - finally: - pass + except Exception as e: + print(f"Ошибка при удалении задачи: {e}") + raise def update_task(task_id, **fields): conn = get_connection() @@ -206,8 +232,9 @@ def update_task(task_id, **fields): with conn.cursor() as cur: cur.execute(f"UPDATE work_parser SET {set_sql} WHERE id = %s;", values) return True - finally: - pass + except Exception as e: + print(f"Ошибка при обновлении задачи: {e}") + raise # Создание и работа с таблицей по созданию и редактированию промтов def create_table_config_gpt(): @@ -221,8 +248,8 @@ def create_table_config_gpt(): ); """) print("Таблица config_gpt создана или уже существует") - finally: - pass + except Exception as e: + print(f"Ошибка при создании таблицы config_gpt: {e}") def update_promt(name: str, promt: str): conn = get_connection() @@ -235,8 +262,9 @@ def update_promt(name: str, promt: str): promt = EXCLUDED.promt """, (name, promt)) conn.commit() - finally: - pass + except Exception as e: + print(f"Ошибка при обновлении промта: {e}") + raise def get_promt(promt_name_url): conn = get_connection() @@ -244,9 +272,12 @@ def get_promt(promt_name_url): with conn.cursor(cursor_factory=RealDictCursor) as cur: cur.execute("SELECT promt FROM config_gpt WHERE name = %s", (promt_name_url,)) promt = cur.fetchone() - return promt['promt'] - finally: - pass + if promt: + return promt['promt'] + return None + except Exception as e: + print(f"Ошибка при получении промта: {e}") + raise def get_all_promt(): # Возвращает список всех значений поля name из таблицы config_gpt @@ -258,8 +289,9 @@ def get_all_promt(): sources = [{"name": row["name"], "promt": row["promt"]} for row in rows] return {"sources": sources} - finally: - pass + except Exception as e: + print(f"Ошибка при получении всех промтов: {e}") + raise def get_all_categories_promt(): conn = get_connection() @@ -269,8 +301,9 @@ def get_all_categories_promt(): rows = cur.fetchall() return [row["name"] for row in rows] - finally: - pass + except Exception as e: + print(f"Ошибка при получении категорий: {e}") + raise # Создание, сохранение и работа с таблицей ошибочных ссылок (error_url) def create_table_error_url(): @@ -285,8 +318,8 @@ def create_table_error_url(): ); """) print("Таблица error_url создана или уже существует") - finally: - pass + except Exception as e: + print(f"Ошибка при создании таблицы error_url: {e}") def add_error_url(source_url: str, error_sources_url: str): conn = get_connection() @@ -298,8 +331,9 @@ def add_error_url(source_url: str, error_sources_url: str): RETURNING id; """, (source_url, error_sources_url)) return cur.fetchone()[0] - finally: - pass + except Exception as e: + print(f"Ошибка при добавлении error_url: {e}") + raise def check_error_url(error_sources_url: str) -> bool: conn = get_connection() @@ -313,8 +347,9 @@ def check_error_url(error_sources_url: str) -> bool: row = cur.fetchone() return row is None - finally: - pass + except Exception as e: + print(f"Ошибка при проверке error_url: {e}") + return True # Создание и работа с таблицей источников sources def create_table_add_sourse(): @@ -329,8 +364,8 @@ def create_table_add_sourse(): ); """) print("Таблица sourse создана или уже существует") - finally: - pass + except Exception as e: + print(f"Ошибка при создании таблицы sourse: {e}") def add_sources(url: str, promt: str, status: bool = False): @@ -345,8 +380,9 @@ def add_sources(url: str, promt: str, status: bool = False): status = EXCLUDED.status """, (url, promt, status)) conn.commit() - finally: - pass + except Exception as e: + print(f"Ошибка при добавлении источника: {e}") + raise def get_all_sources(category: str): @@ -371,8 +407,6 @@ def get_all_sources(category: str): except Exception as e: print(f"Ошибка при получении источников: {e}") return {"error": str(e), "sources": []} - finally: - pass def update_source_status(url: str, status: bool = True): @@ -389,8 +423,6 @@ def update_source_status(url: str, status: bool = True): except Exception as e: print(f"Ошибка при обновлении статуса: {e}") return {"error": str(e), "updated_rows": 0} - finally: - pass def delete_sources(url: str): @@ -408,8 +440,6 @@ def delete_sources(url: str): except Exception as e: print(f"Ошибка при удалении источника: {e}") return {"error": str(e), "deleted": False} - finally: - pass # Пример использования # if __name__ == "__main__":