package module: optimize the code

parent cbc1a862
......@@ -215,6 +215,15 @@ class SiteInfo:
)
return models.SitePackageInfoModel(**data)
async def pkghash_by_binary_name(
self, branch: str, name: str, arch: str
) -> models.SitePackagesetPackageHashModel:
data = await self.client.get(
"/site/pkghash_by_binary_name",
{"branch": branch, "name": name, "arch": arch},
)
return models.SitePackagesetPackageHashModel(**data)
async def pkghash_by_name(self, branch: str, name: str) -> models.SitePackagesetPackageHashModel:
data = await self.client.get(
"/site/pkghash_by_name",
......
from telegrinder import Dispatch, Message
from telegrinder.rules import Command, Argument, Text, IsUser
from telegrinder.tools.formatting import HTMLFormatter
from telegrinder.rules import Command, Argument
from datetime import datetime
from altrepo import altrepo
from altrepo.api.errors import DataNotFoundError
from altrepo.api.errors import DataNotFoundError, RequestValidationError
from database.models import User
from database.func import DB
from data.keyboards import watch_keyboards
from services.utils import _bold
dp = Dispatch()
@dp.message(
Command("package",
Command(
"package",
Argument("name", optional=True),
Argument("branch", optional=True),
Argument("arch", optional=True),
......@@ -24,69 +23,80 @@ dp = Dispatch()
)
async def package_info_handler(
m: Message,
user: User | None = None,
name: str | None = None,
branch: str | None = None,
arch: str | None = None
arch: str | None = None,
) -> None:
if name is None:
await m.answer("Не указано имя пакета")
return
branch = branch or "sisyphus"
user_branch = user.default_branch if user else None
branch = branch or user_branch or "sisyphus"
try:
package_data = await altrepo.api.package.package_info(
name=name,
branch=branch,
source=False if arch else True,
arch=arch or None,
full=True
if arch:
pkghash = (
await altrepo.api.site.pkghash_by_binary_name(branch, name, arch)
).pkghash
else:
pkghash = (await altrepo.api.site.pkghash_by_name(branch, name)).pkghash
package = await altrepo.api.site.package_info(
branch, pkghash, package_type="binary" if arch else "source"
)
package = package_data.packages[0]
except:
except DataNotFoundError:
await m.answer("Не удалось найти пакет.")
return
except RequestValidationError:
await m.answer("Ошибка обработки параметров.")
return
buildtime = datetime.fromtimestamp(package.buildtime).strftime("%Y-%m-%d %H:%M:%S")
packager = DB.maintainer.get(package.packager_email.split("@")[0])
packager = DB.maintainer.get(package.packager_nickname)
if arch:
sourse_package = (await altrepo.api.site.find_source_package(
branch, package.name
)).source_package
source_package = package.package_archs[0].name
new_version = None
if not arch:
pkghash = (await altrepo.api.site.pkghash_by_name(branch, package.name)).pkghash
binary_packages = await altrepo.api.site.package_info(branch, pkghash)
new_version = package.new_version
if new_version:
new_version_message = _bold(f"Собрана новая версия пакета\n")
new_version_message += f" № Задания: {new_version[0].task_id}\n"
new_version_message += (
f" Новая версия: {new_version[0].version}-{new_version[0].release}"
)
binary_packages_message = _bold("\n\nБинарные пакеты:\n")
for binary_package in binary_packages.package_archs:
for i, binary_package in enumerate(package.package_archs):
if i == 15:
binary_packages_message += " ..."
break
binary_packages_message += f" {binary_package.name}"
binary_packages_message += f" ({", ".join(binary_package.archs)})\n"
_package = DB.package.get(package.name)
if _package and _package.summary_ru:
summary = _package.summary_ru
else:
summary = package.summary
summary = (
_package.summary_ru if _package and _package.summary_ru else package.summary
)
message = (
f"{_bold("Пакет " + package.name)}\n\n"
f"{f"{new_version_message}\n\n" if new_version else ""}"
f"Версия: {package.version}-{package.release}\n"
f"{f"Архитектура: {package.arch}\n" if arch else ""}"
f"Собран: {buildtime}\n"
f"{f"Исходный пакет: {sourse_package}\n" if arch else ""}"
f"{f"Исходный пакет: {source_package}\n" if arch else ""}"
f"Сопровождающий: {packager.name_ru} ({packager.nickname})\n\n"
f"Категория: {package.group}\n"
f"Категория: {package.category}\n"
f"Домашняя страница: {package.url}\n"
f"Лицензия: {package.license}\n\n"
f"{_bold("О пакете:")}\n"
f"{summary}"
f"{f"{binary_packages_message}" if not arch else ""}"
)
await m.answer(message)
\ No newline at end of file
await m.answer(message)
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