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