package module: optimize the code

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