upgrade schema, resolvers, panel added

This commit is contained in:
2025-05-16 09:23:48 +03:00
parent 8a60bec73a
commit 2d382be794
80 changed files with 8641 additions and 1100 deletions

View File

@@ -1 +0,0 @@

View File

@@ -2,26 +2,48 @@
Модуль для обработки HTML-фрагментов
"""
import trafilatura
def extract_text(html: str) -> str:
"""
Извлекает текст из HTML-фрагмента.
Args:
html: HTML-фрагмент
Returns:
str: Текст из HTML-фрагмента
"""
return trafilatura.extract(
wrap_html_fragment(html),
include_comments=False,
include_tables=False,
include_images=False,
include_formatting=False,
)
def wrap_html_fragment(fragment: str) -> str:
"""
Оборачивает HTML-фрагмент в полную HTML-структуру для корректной обработки.
Args:
fragment: HTML-фрагмент для обработки
Returns:
str: Полный HTML-документ
Example:
>>> wrap_html_fragment("<p>Текст параграфа</p>")
'<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><p>Текст параграфа</p></body></html>'
"""
if not fragment or not fragment.strip():
return fragment
# Проверяем, является ли контент полным HTML-документом
is_full_html = fragment.strip().startswith('<!DOCTYPE') or fragment.strip().startswith('<html')
is_full_html = fragment.strip().startswith("<!DOCTYPE") or fragment.strip().startswith("<html")
# Если это фрагмент, оборачиваем его в полный HTML-документ
if not is_full_html:
return f"""<!DOCTYPE html>
@@ -34,5 +56,5 @@ def wrap_html_fragment(fragment: str) -> str:
{fragment}
</body>
</html>"""
return fragment
return fragment

65
utils/generate_slug.py Normal file
View File

@@ -0,0 +1,65 @@
import re
from urllib.parse import quote_plus
from auth.orm import Author
from services.db import local_session
def replace_translit(src):
ruchars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя."
enchars = [
"a",
"b",
"v",
"g",
"d",
"e",
"yo",
"zh",
"z",
"i",
"y",
"k",
"l",
"m",
"n",
"o",
"p",
"r",
"s",
"t",
"u",
"f",
"h",
"c",
"ch",
"sh",
"sch",
"",
"y",
"'",
"e",
"yu",
"ya",
"-",
]
return src.translate(str.maketrans(ruchars, enchars))
def generate_unique_slug(src):
print("[resolvers.auth] generating slug from: " + src)
slug = replace_translit(src.lower())
slug = re.sub("[^0-9a-zA-Z]+", "-", slug)
if slug != src:
print("[resolvers.auth] translited name: " + slug)
c = 1
with local_session() as session:
user = session.query(Author).where(Author.slug == slug).first()
while user:
user = session.query(Author).where(Author.slug == slug).first()
slug = slug + "-" + str(c)
c += 1
if not user:
unique_slug = slug
print("[resolvers.auth] " + unique_slug)
return quote_plus(unique_slug.replace("'", "")).replace("+", "-")