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
c79bf4a2
Verified
Commit
c79bf4a2
authored
Jul 16, 2025
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
altrepo.parser: add news.bugs parser
parent
1a38b958
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
91 additions
and
0 deletions
+91
-0
methods.py
src/altrepo/parser/methods.py
+74
-0
models.py
src/altrepo/parser/models.py
+17
-0
No files found.
src/altrepo/parser/methods.py
View file @
c79bf4a2
...
@@ -62,10 +62,84 @@ class NewsInfo:
...
@@ -62,10 +62,84 @@ class NewsInfo:
result
[
"p11"
]
=
None
result
[
"p11"
]
=
None
return
models
.
NewsURL
(
**
result
)
return
models
.
NewsURL
(
**
result
)
async
def
bugs
(
self
)
->
models
.
BugsModel
:
url
=
(
await
self
.
news_urls
())
.
bugs
html
=
await
self
.
client
.
get
(
url
,
"koi8-r"
)
soup
=
BeautifulSoup
(
html
,
"html.parser"
)
pre_tag
=
soup
.
find
(
"pre"
)
if
not
pre_tag
:
return
{}
text
=
pre_tag
.
get_text
()
lines
=
text
.
strip
()
.
splitlines
()
data
=
{}
section_name
=
None
bug_pattern
=
re
.
compile
(
r"#(\d+)\s+([^\t]+)\s+([^\t]+)\s+([^\t]+)"
)
description_buffer
=
""
current_bug
=
None
for
line
in
lines
:
header_match
=
re
.
match
(
r"^\s*(\d+)\s+(NEW|RESOLVED|REOPENED|RANDOM)\s+bugs?.*"
,
line
)
if
header_match
:
if
current_bug
and
section_name
:
current_bug
[
"summary"
]
=
description_buffer
.
strip
()
data
.
setdefault
(
section_name
,
[])
.
append
(
current_bug
)
current_bug
=
None
description_buffer
=
""
section_name
=
await
self
.
_get_bug_section_name
(
line
)
continue
bug_match
=
bug_pattern
.
match
(
line
)
if
bug_match
:
if
current_bug
and
section_name
:
current_bug
[
"summary"
]
=
description_buffer
.
strip
()
data
.
setdefault
(
section_name
,
[])
.
append
(
current_bug
)
status
=
bug_match
.
group
(
4
)
.
strip
()
if
status
==
"---"
:
status
=
None
current_bug
=
{
"id"
:
int
(
bug_match
.
group
(
1
)),
"component"
:
bug_match
.
group
(
2
)
.
strip
(),
"priority"
:
bug_match
.
group
(
3
)
.
strip
(),
"status"
:
status
}
description_buffer
=
""
elif
current_bug
:
if
not
line
.
strip
():
continue
if
re
.
match
(
r"^Total\s+\d+\s+pending bugs"
,
line
.
strip
(),
re
.
IGNORECASE
):
continue
description_buffer
+=
line
.
strip
()
+
" "
if
current_bug
and
section_name
:
current_bug
[
"summary"
]
=
description_buffer
.
strip
()
data
.
setdefault
(
section_name
,
[])
.
append
(
current_bug
)
return
models
.
BugsModel
(
**
data
)
async
def
sisyphus
(
self
):
async
def
sisyphus
(
self
):
...
...
async
def
_get_bug_section_name
(
self
,
line
:
str
)
->
str
:
line
=
line
.
lower
()
if
"new"
in
line
and
"resolved"
in
line
:
return
"quickly_resolved"
elif
"new"
in
line
:
return
"new"
elif
"old"
in
line
:
return
"old"
elif
"resolved"
in
line
:
return
"resolved"
elif
"reopened"
in
line
:
return
"reopened"
elif
"random"
in
line
:
return
"random"
class
ALTRepoParser
:
class
ALTRepoParser
:
def
__init__
(
self
,
session
:
aiohttp
.
ClientSession
):
def
__init__
(
self
,
session
:
aiohttp
.
ClientSession
):
...
...
src/altrepo/parser/models.py
View file @
c79bf4a2
...
@@ -6,3 +6,20 @@ class NewsURL(BaseModel):
...
@@ -6,3 +6,20 @@ class NewsURL(BaseModel):
sisyphus
:
str
|
None
=
None
sisyphus
:
str
|
None
=
None
p11
:
str
|
None
=
None
p11
:
str
|
None
=
None
bugs
:
str
|
None
=
None
bugs
:
str
|
None
=
None
class
BugsElementModel
(
BaseModel
):
id
:
int
component
:
str
priority
:
str
status
:
str
|
None
=
None
summary
:
str
class
BugsModel
(
BaseModel
):
quickly_resolved
:
List
[
BugsElementModel
]
|
None
=
None
new
:
List
[
BugsElementModel
]
|
None
=
None
old
:
List
[
BugsElementModel
]
|
None
=
None
resolved
:
List
[
BugsElementModel
]
|
None
=
None
reopened
:
List
[
BugsElementModel
]
|
None
=
None
random
:
List
[
BugsElementModel
]
|
None
=
None
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