Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
altlinux-packages-bot
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Unitsaev
altlinux-packages-bot
Commits
1348441d
Verified
Commit
1348441d
authored
Jul 22, 2025
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
watch module: api -> parser
parent
7715ffe5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
51 additions
and
10 deletions
+51
-10
methods.py
src/altrepo/parser/methods.py
+14
-2
models.py
src/altrepo/parser/models.py
+8
-1
__init__.py
src/altrepo/parser/packages/__init__.py
+1
-0
watch.py
src/altrepo/parser/packages/watch.py
+14
-0
watch.py
src/handlers/watch.py
+14
-7
No files found.
src/altrepo/parser/methods.py
View file @
1348441d
import
aiohttp
from
typing
import
List
from
typing
import
List
,
Literal
from
.
import
models
from
.news
import
urls_parser
,
packages_parser
,
bugs_parser
from
.packages
import
ftbfs_parser
from
.packages
import
ftbfs_parser
,
watch_parser
class
BaseParser
:
...
...
@@ -56,6 +56,18 @@ class PackagesInfo:
text
=
await
self
.
client
.
get
(
url
)
return
await
ftbfs_parser
(
text
)
async
def
watch_by_maintainer
(
self
,
maintainer_nickname
:
str
,
by_acl
:
Literal
[
"by-acl"
,
"by-expanded-acl"
,
"by-expanded-leader"
,
"by-leader"
],
)
->
List
[
models
.
WatchByMaintainerModel
]:
url
=
f
"https://watch.altlinux.org/pub/watch/{by_acl}/{maintainer_nickname}.txt"
try
:
text
=
await
self
.
client
.
get
(
url
)
return
await
watch_parser
(
text
)
except
:
return
[]
class
ALTRepoParser
:
def
__init__
(
self
,
session
:
aiohttp
.
ClientSession
):
...
...
src/altrepo/parser/models.py
View file @
1348441d
from
pydantic
import
BaseModel
from
typing
import
List
,
Dict
,
Any
from
typing
import
List
class
NewsURL
(
BaseModel
):
...
...
@@ -51,3 +51,10 @@ class FTBFSModel(BaseModel):
version
:
str
ftbfs_weeks
:
int
maintainers
:
List
[
str
]
class
WatchByMaintainerModel
(
BaseModel
):
pkg_name
:
str
old_version
:
str
new_version
:
str
url
:
str
src/altrepo/parser/packages/__init__.py
View file @
1348441d
from
.ftbfs
import
ftbfs_parser
from
.watch
import
watch_parser
src/altrepo/parser/packages/watch.py
0 → 100644
View file @
1348441d
from
..
import
models
async
def
watch_parser
(
text
:
str
):
return
[
models
.
WatchByMaintainerModel
(
pkg_name
=
parts
[
0
],
old_version
=
parts
[
1
],
new_version
=
parts
[
2
],
url
=
parts
[
3
],
)
for
parts
in
(
line
.
split
(
"
\t
"
)
for
line
in
text
.
strip
()
.
splitlines
())
if
len
(
parts
)
==
4
]
src/handlers/watch.py
View file @
1348441d
...
...
@@ -10,9 +10,15 @@ from data.keyboards import watch_keyboards
dp
=
Dispatch
()
@dp.message
(
Command
(
"watch"
,
Argument
(
"maintainer"
,
optional
=
True
)))
@dp.message
(
Command
(
"watch"
,
Argument
(
"maintainer"
,
optional
=
True
),
Argument
(
"acl"
,
optional
=
True
))
)
@dp.message
(
Text
([
"watch"
,
"отслеживание"
],
ignore_case
=
True
),
IsUser
())
async
def
watch_handler
(
m
:
Message
,
user
:
User
|
None
,
maintainer
:
str
|
None
=
None
)
->
None
:
async
def
watch_test_handler
(
m
:
Message
,
user
:
User
|
None
,
maintainer
:
str
|
None
=
None
,
acl
:
str
|
None
=
None
)
->
None
:
if
maintainer
:
maintainer
=
maintainer
.
lower
()
...
...
@@ -27,16 +33,17 @@ async def watch_handler(m: Message, user: User | None, maintainer: str | None =
else
:
return
watch_data
=
await
altrepo
.
api
.
site
.
watch_by_maintainer
(
maintainer
)
watch_packages
=
watch_data
.
packages
if
watch_data
else
[]
if
not
len
(
watch_packages
):
acl
=
acl
or
"by-acl"
watch_data
=
await
altrepo
.
parser
.
packages
.
watch_by_maintainer
(
maintainer
,
acl
)
if
not
len
(
watch_data
):
await
m
.
answer
(
"Нет устаревших пакетов"
)
return
watch_message
=
"Отслеживание:
\n\n
"
packages
=
{}
for
package
in
watch_
packages
:
for
package
in
watch_
data
:
name
=
package
.
pkg_name
if
name
not
in
packages
or
"src.rpm"
in
packages
[
name
]
.
url
:
packages
[
name
]
=
package
...
...
@@ -57,5 +64,5 @@ async def watch_handler(m: Message, user: User | None, maintainer: str | None =
if
len
(
packages
)
>
30
:
watch_message
+=
"
\n
..."
markup
=
watch_keyboards
.
watch_more_kb
(
maintainer
)
await
m
.
answer
(
watch_message
,
reply_markup
=
markup
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment