upgrade schema, resolvers, panel added
This commit is contained in:
@@ -1 +0,0 @@
|
||||
|
@@ -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
65
utils/generate_slug.py
Normal 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("+", "-")
|
Reference in New Issue
Block a user