watch and bugs modules: fix

parent 01722978
...@@ -105,12 +105,17 @@ class BugInfo: ...@@ -105,12 +105,17 @@ class BugInfo:
def __init__(self, client: BaseAPI): def __init__(self, client: BaseAPI):
self.client = client self.client = client
async def bugzilla_by_maintainer(self, maintainer_nickname: str, by_acl: str | None = None): async def bugzilla_by_maintainer(
self, maintainer_nickname: str, by_acl: str | None = None
) -> models.BugzillaInfoModel | None:
try:
data = await self.client.get( data = await self.client.get(
"/bug/bugzilla_by_maintainer", "/bug/bugzilla_by_maintainer",
{"maintainer_nickname": maintainer_nickname, {"maintainer_nickname": maintainer_nickname,
"by_acl": by_acl if by_acl else "none"} "by_acl": by_acl if by_acl else "none"}
) )
except errors.DataNotFoundError:
return None
return models.BugzillaInfoModel(**data) return models.BugzillaInfoModel(**data)
...@@ -155,11 +160,14 @@ class SiteInfo: ...@@ -155,11 +160,14 @@ class SiteInfo:
) )
return models.MaintainerInfoModel(**data) return models.MaintainerInfoModel(**data)
async def watch_by_maintainer(self, maintainer_nickname: str) -> models.SiteWatchByMaintainerModel: async def watch_by_maintainer(self, maintainer_nickname: str) -> models.SiteWatchByMaintainerModel | None:
try:
data = await self.client.get( data = await self.client.get(
"/site/watch_by_maintainer", "/site/watch_by_maintainer",
{"maintainer_nickname": maintainer_nickname} {"maintainer_nickname": maintainer_nickname}
) )
except errors.DataNotFoundError:
return None
return models.SiteWatchByMaintainerModel(**data) return models.SiteWatchByMaintainerModel(**data)
......
...@@ -30,7 +30,10 @@ async def bugs_handler(m: Message, user: User | None, maintainer: str | None = N ...@@ -30,7 +30,10 @@ async def bugs_handler(m: Message, user: User | None, maintainer: str | None = N
return return
bugs_data = await altrepo.api.bug.bugzilla_by_maintainer(maintainer) bugs_data = await altrepo.api.bug.bugzilla_by_maintainer(maintainer)
if bugs_data:
unresolved_bugs = [bug for bug in bugs_data.bugs if bug.status not in ["RESOLVED", "CLOSED"]] unresolved_bugs = [bug for bug in bugs_data.bugs if bug.status not in ["RESOLVED", "CLOSED"]]
else:
unresolved_bugs = []
if not len(unresolved_bugs): if not len(unresolved_bugs):
await m.answer( await m.answer(
......
...@@ -26,13 +26,19 @@ async def profile_handler(m: Message, user: User | None) -> None: ...@@ -26,13 +26,19 @@ async def profile_handler(m: Message, user: User | None) -> None:
roles = DB.user.get_roles(m.from_user.id) roles = DB.user.get_roles(m.from_user.id)
bugs_data = await altrepo.api.bug.bugzilla_by_maintainer(user.maintainer) bugs_data = await altrepo.api.bug.bugzilla_by_maintainer(user.maintainer)
if bugs_data:
all_bugs = bugs_data.bugs
unresolved_bugs = [bug for bug in bugs_data.bugs if bug.status not in ["RESOLVED", "CLOSED"]] unresolved_bugs = [bug for bug in bugs_data.bugs if bug.status not in ["RESOLVED", "CLOSED"]]
else:
all_bugs = []
unresolved_bugs = []
await m.answer( await m.answer(
"Профиль:\n\n" "Профиль:\n\n"
f"Сопровождающий: {maintainer.packager_name} ({maintainer.packager_nickname})\n" f"Сопровождающий: {maintainer.packager_name} ({maintainer.packager_nickname})\n"
f"Исходные пакеты: {maintainer.count_source_pkg}\n" f"Исходные пакеты: {maintainer.count_source_pkg}\n"
"\n" "\n"
f"Всего багов: {bugs_data.length}\n" f"Всего багов: {len(all_bugs)}\n"
f"Открытых багов: {len(unresolved_bugs)}\n\n" f"Открытых багов: {len(unresolved_bugs)}\n\n"
f"Роли в боте: {", ".join(roles) or "пользователь"}", f"Роли в боте: {", ".join(roles) or "пользователь"}",
reply_markup=profile_keyboards.profile_kb reply_markup=profile_keyboards.profile_kb
......
...@@ -28,15 +28,15 @@ async def watch_handler(m: Message, user: User | None, maintainer: str | None = ...@@ -28,15 +28,15 @@ async def watch_handler(m: Message, user: User | None, maintainer: str | None =
return return
watch_data = await altrepo.api.site.watch_by_maintainer(maintainer) watch_data = await altrepo.api.site.watch_by_maintainer(maintainer)
watch_packages = watch_data.packages if watch_data else []
if not len(watch_data.packages): if not len(watch_packages):
await m.answer("Нет устаревших пакетов") await m.answer("Нет устаревших пакетов")
return return
watch_message = "Отслеживание:\n\n" watch_message = "Отслеживание:\n\n"
packages = {} packages = {}
for package in watch_data.packages: for package in watch_packages:
name = package.pkg_name name = package.pkg_name
if name not in packages or "src.rpm" in packages[name].url: if name not in packages or "src.rpm" in packages[name].url:
packages[name] = package packages[name] = package
......
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