news.packages: update format

parent f8199342
......@@ -86,9 +86,17 @@ async def news_handler(
chat_id=m.from_user.id, text="Перевод не удался :("
)
return
print(len(added))
for msg in added:
await m.ctx_api.send_message(
chat_id=m.from_user.id, text=f"{msg}"
)
await m.ctx_api.send_message(
chat_id=m.from_user.id, text=f"{added}{removed}{info_message}"
chat_id=m.from_user.id, text=f"{removed}"
)
for msg in updated:
await m.ctx_api.send_message(chat_id=m.from_user.id, text=msg)
await m.ctx_api.send_message(
chat_id=m.from_user.id, text=f"{info_message}"
)
......@@ -3,7 +3,7 @@ from telegrinder.tools.formatting import HTMLFormatter, link, bold
import random
from collections import defaultdict
from altrepo.parser.models import PackagesModel, PackageElementModel, RemovedPackageElementModel
from altrepo.parser.models import PackagesModel, RemovedPackageElementModel
from config import PACKAGES_URL
from services.utils import translate_package, translate_maintainer, chunk_list
......@@ -12,25 +12,20 @@ from services.utils import translate_package, translate_maintainer, chunk_list
repo = PACKAGES_URL.format(repo="sisyphus")
async def format_packages(packages: PackagesModel, translate: bool | None = None):
async def format_packages(packages: PackagesModel, translate: bool = False):
added_message = ""
added_messages = []
removed_message = ""
updated_messages = []
if packages.added:
added_message += f"Добавлены: {len(packages.added)}\n"
for package in packages.added:
added_message += await _format_package(package, translate)
added_messages = await _format_package_group(packages, translate, "added")
if packages.removed:
removed_message += f"Удалены: {len(packages.removed)}\n"
for package in packages.removed:
removed_message += await _format_removed_package(package)
removed_message += "\n"
removed_message = await _format_removed(packages)
if packages.updated:
updated_messages = await _format_updated_packages(packages, translate)
updated_messages = await _format_package_group(packages, translate, "updated")
info_message = (
f"Всего исходных пакетов: {packages.total}\n\n"
......@@ -41,40 +36,39 @@ async def format_packages(packages: PackagesModel, translate: bool | None = None
HTMLFormatter(bold(link("https://t.me/altlinux_packages_bot", text="ALT Packages Bot")))
)
return added_message, removed_message, updated_messages, info_message
return added_messages, removed_message, updated_messages, info_message
async def _format_package(package: PackageElementModel, translate: bool):
message = HTMLFormatter(
bold(link(f"{repo}srpms/{package.name}", text=package.name))
) + f" - {(await translate_package(package.name, package.description)) if translate else package.description}\n"
message += f"{(await translate_maintainer(package.maintainer_nick)) if translate else package.maintainer_name} ({package.maintainer_nick})\n\n"
async def _format_removed(packages_model: PackagesModel) -> str:
removed = packages_model.removed
lines = [f"Удалены: {len(removed)}"]
for pkg in removed:
pkg_link = link(f"{repo}srpms/{pkg.name}", text=pkg.name)
lines.append(HTMLFormatter(bold(pkg_link)))
return "\n".join(lines) + "\n"
return message
async def _format_package_group(packages_model: PackagesModel, translate: bool, pkg_type: str):
async def _format_removed_package(package: RemovedPackageElementModel):
pkg_types = {
"added": (packages_model.added or [], "Добавлено"),
"updated": (packages_model.updated or [], "Обновлено"),
}
message = HTMLFormatter(
bold(link(f"{repo}srpms/{package.name}", text=package.name))) + "\n"
return message
async def _format_updated_packages(packages_model: PackagesModel, translate: bool):
updated = packages_model.updated or []
total_updated = len(updated)
_pkgs, title = pkg_types.get(pkg_type, ([], ""))
total = len(_pkgs)
grouped = defaultdict(list)
for pkg in updated:
for pkg in _pkgs:
grouped[(pkg.maintainer_nick, pkg.maintainer_name)].append(pkg)
sorted_groups = sorted(grouped.items(), key=lambda x: x[0][0])
result_pages = []
for chunk in chunk_list(sorted_groups, 8):
lines = [f"Обновлено {total_updated} пакетов, в том числе:"]
for (nick, name), pkgs in chunk:
selected_pkgs = random.sample(pkgs, min(8, len(pkgs)))
lines = [f"{title} {total} пакетов, в том числе:"]
for (nick, name), maintainer_pkgs in chunk:
selected_pkgs = random.sample(maintainer_pkgs, min(15, len(maintainer_pkgs)))
maintainer_display = (
await translate_maintainer(nick) if translate else name
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment