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
4dd06b46
Verified
Commit
4dd06b46
authored
Jul 15, 2025
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
altrepo: add error handling
parent
4cd86a40
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
5 deletions
+49
-5
errors.py
src/altrepo/api/errors.py
+21
-0
methods.py
src/altrepo/api/methods.py
+21
-4
main.py
src/main.py
+7
-1
No files found.
src/altrepo/api/errors.py
0 → 100644
View file @
4dd06b46
class
RequestValidationError
(
Exception
):
"""Ошибка валидации параметров запроса (400)"""
pass
class
DataNotFoundError
(
Exception
):
"""Данные не найдены в базе (404)"""
pass
class
TooManyRequests
(
Exception
):
"""Cлишком много запросо (429)"""
pass
class
UnexpectedResponseError
(
Exception
):
"""Непредвиденный ответ от сервера"""
def
__init__
(
self
,
status_code
:
int
,
message
:
str
=
""
):
self
.
status_code
=
status_code
self
.
message
=
message
or
f
"Unexpected response status: {status_code}"
super
()
.
__init__
(
self
.
message
)
src/altrepo/api/methods.py
View file @
4dd06b46
...
@@ -4,6 +4,7 @@ from urllib.parse import urlencode
...
@@ -4,6 +4,7 @@ from urllib.parse import urlencode
from
typing
import
List
from
typing
import
List
from
.
import
models
from
.
import
models
from
.
import
errors
class
BaseAPI
:
class
BaseAPI
:
...
@@ -12,6 +13,24 @@ class BaseAPI:
...
@@ -12,6 +13,24 @@ class BaseAPI:
def
__init__
(
self
,
session
:
aiohttp
.
ClientSession
):
def
__init__
(
self
,
session
:
aiohttp
.
ClientSession
):
self
.
session
=
session
self
.
session
=
session
async
def
_handle_response
(
self
,
resp
:
aiohttp
.
ClientResponse
):
match
resp
.
status
:
case
200
|
201
:
return
await
resp
.
json
()
case
400
:
raise
errors
.
RequestValidationError
(
"Request parameters validation error (400)"
)
case
404
:
raise
errors
.
DataNotFoundError
(
"Requested data not found in database (404)"
)
case
429
:
raise
errors
.
TooManyRequests
(
"Too Many Requests (429)"
)
case
_
:
try
:
error_text
=
await
resp
.
text
()
except
:
error_text
=
""
raise
errors
.
UnexpectedResponseError
(
resp
.
status
,
error_text
)
async
def
get
(
self
,
path
:
str
,
params
:
dict
=
None
):
async
def
get
(
self
,
path
:
str
,
params
:
dict
=
None
):
url
=
f
"{self.BASE_URL}/{path.lstrip('/')}"
url
=
f
"{self.BASE_URL}/{path.lstrip('/')}"
if
params
:
if
params
:
...
@@ -19,15 +38,13 @@ class BaseAPI:
...
@@ -19,15 +38,13 @@ class BaseAPI:
v
,
list
)
else
v
for
k
,
v
in
params
.
items
()})
v
,
list
)
else
v
for
k
,
v
in
params
.
items
()})
url
+=
f
"?{query}"
url
+=
f
"?{query}"
async
with
self
.
session
.
get
(
url
)
as
resp
:
async
with
self
.
session
.
get
(
url
)
as
resp
:
resp
.
raise_for_status
()
return
await
self
.
_handle_response
(
resp
)
return
await
resp
.
json
()
async
def
post
(
self
,
path
:
str
,
data
:
dict
=
None
,
json
:
dict
=
None
):
async
def
post
(
self
,
path
:
str
,
data
:
dict
=
None
,
json
:
dict
=
None
):
url
=
f
"{self.BASE_URL}/{path.lstrip('/')}"
url
=
f
"{self.BASE_URL}/{path.lstrip('/')}"
async
with
self
.
session
.
post
(
url
,
data
=
data
,
json
=
json
)
as
resp
:
async
with
self
.
session
.
post
(
url
,
data
=
data
,
json
=
json
)
as
resp
:
resp
.
raise_for_status
()
return
await
self
.
_handle_response
(
resp
)
return
await
resp
.
json
()
class
APIInfo
:
class
APIInfo
:
...
...
src/main.py
View file @
4dd06b46
from
telegrinder
import
API
,
Telegrinder
,
Token
from
telegrinder
import
API
,
Telegrinder
,
Token
,
Message
from
telegrinder.modules
import
logger
from
telegrinder.modules
import
logger
from
telegrinder.tools.formatting
import
HTMLFormatter
from
telegrinder.tools.formatting
import
HTMLFormatter
from
telegrinder.types
import
LinkPreviewOptions
from
telegrinder.types
import
LinkPreviewOptions
from
telegrinder.node
import
Error
from
config
import
config
from
config
import
config
from
altrepo
import
altrepo
from
altrepo
import
altrepo
from
altrepo.api.errors
import
TooManyRequests
from
database.models
import
db
,
User
from
database.models
import
db
,
User
from
middlewares
import
UserMiddleware
from
middlewares
import
UserMiddleware
...
@@ -29,4 +31,8 @@ async def shutdown():
...
@@ -29,4 +31,8 @@ async def shutdown():
logger
.
info
(
"stopping ALTRepo"
)
logger
.
info
(
"stopping ALTRepo"
)
await
altrepo
.
close
()
await
altrepo
.
close
()
@bot.on.error
()
async
def
error_handler
(
err
:
Error
[
TooManyRequests
],
m
:
Message
):
await
m
.
answer
(
f
"Слишком много запросов!"
)
bot
.
run_forever
(
skip_updates
=
True
)
bot
.
run_forever
(
skip_updates
=
True
)
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