add statistics

parent 18281836
......@@ -37,6 +37,18 @@ class APIInfo:
return models.APIVersion(**data)
class PackagesetInfo:
def __init__(self, client: BaseAPI):
self.client = client
async def repository_statistics(self, branch: str | None = None) -> models.RepositoryStatisticsModel:
if branch:
data = await self.client.get("/packageset/repository_statistics", {"branch": branch})
else:
data = await self.client.get("/packageset")
return models.RepositoryStatisticsModel(**data)
class BugInfo:
def __init__(self, client: BaseAPI):
self.client = client
......@@ -76,6 +88,7 @@ class PackagesAPI:
def __init__(self):
self._client = BaseAPI()
self.api = APIInfo(self._client)
self.packageset = PackagesetInfo(self._client)
self.bug = BugInfo(self._client)
self.site = SiteInfo(self._client)
......
......@@ -8,6 +8,26 @@ class APIVersion(BaseModel):
description: str
class RepositoryStatisticsPackageCountsModel(BaseModel):
arch: str
component: str
count: int
size: int
size_hr: str
uuid: str
class RepositoryStatisticsBranchesModel(BaseModel):
branch: str
date_update: str
packages_count: List[RepositoryStatisticsPackageCountsModel]
class RepositoryStatisticsModel(BaseModel):
length: int
branches: List[RepositoryStatisticsBranchesModel]
class AllMaintainersElementModel(BaseModel):
packager_name: str
packager_nickname: str
......@@ -44,4 +64,4 @@ class BugzillaInfoElementModel(BaseModel):
class BugzillaInfoModel(BaseModel):
request_args: Dict[str, Any]
length: int
bugs: List[BugzillaInfoElementModel]
\ No newline at end of file
bugs: List[BugzillaInfoElementModel]
......@@ -3,4 +3,6 @@ from telegrinder import Button, Keyboard
menu_kb = (
Keyboard()
.add(Button("Профиль"))
.row()
.add(Button("Статистика"))
).get_markup()
\ No newline at end of file
......@@ -5,7 +5,7 @@ from api import api
dp = Dispatch()
@dp.message(Command("info"))
@dp.message(Command("altrepo_info"))
async def info_handler(m: Message) -> None:
api_data = await api.api.version()
await m.answer(
......
from telegrinder import Dispatch, Message, CallbackQuery
from telegrinder.rules import Command, PayloadEqRule, Text
from telegrinder.rules import Command, PayloadEqRule, Text, IsUser
from api import api
from api.models import BugzillaInfoModel
......@@ -7,8 +7,10 @@ from api.models import BugzillaInfoModel
from services.menu import send_menu
from database.models import User
dp = Dispatch()
dp.message.auto_rules = IsUser()
@dp.message(Command("profile") | Text(["profile", "профиль"], ignore_case=True))
async def profile_handler(m: Message, user: User | None) -> None:
......
from telegrinder import MESSAGE_FROM_USER, Dispatch, Message, WaiterMachine
from telegrinder.rules import StartCommand, HasText
from telegrinder.rules import StartCommand, HasText, IsUser
from database.func import DB
from database.models import User
......@@ -7,11 +7,14 @@ from database.models import User
from data.keyboards import start_keyboards
from api import api
from services.menu import send_menu
from config import DEFAUIL_BRANCHES
dp = Dispatch()
wm = WaiterMachine(dp)
dp.message.auto_rules = IsUser()
@dp.message(StartCommand())
async def start_handler(m: Message, user: User | None) -> None:
......@@ -63,3 +66,4 @@ async def start_handler(m: Message, user: User | None) -> None:
maintainer,
branch
)
await send_menu(m, user)
from telegrinder import MESSAGE_FROM_USER, Dispatch, Message, WaiterMachine, CallbackQuery
from telegrinder.rules import Command, PayloadEqRule, Text, IsUser
from datetime import datetime
import locale
from api import api
from services.menu import send_menu
from database.models import User
dp = Dispatch()
wm = WaiterMachine(dp)
@dp.message(Command("statistics"))
@dp.message(Text(["statistics", "статистика"], ignore_case=True), IsUser())
async def profile_handler(m: Message, user: User | None) -> None:
statistics_data = (await api.packageset.repository_statistics(user.default_branch)).branches[0]
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')
statistics_date = (datetime.fromisoformat(
statistics_data.date_update)).strftime("%-d %B %Y г.")
statistics_message = f"{statistics_data.branch.capitalize()} ({statistics_date})\n\n"
for packages in statistics_data.packages_count:
statistics_message += f"Архитектура: {packages.arch} ({packages.component})\n"
statistics_message += f"Пакеты: {packages.count} - {packages.size_hr}\n\n"
await m.answer(
statistics_message
)
@dp.callback_query(PayloadEqRule("command/menu"), IsUser())
async def menu_handler(cb: CallbackQuery, user: User | None):
send_menu(cb, user)
@dp.message(Command(["menu", "меню"]) | Text(["меню", "menu"]), IsUser())
async def menu_handler(m: Message, user: User | None):
await send_menu(m, user)
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