1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-09-20 09:16:16 +02:00

Merge pull request #1515 from dmach/dont-retry-on-400

Don't retry on 400
This commit is contained in:
Daniel Mach 2024-03-13 13:18:30 +01:00 committed by GitHub
commit 1bf2264427
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 20 deletions

View File

@ -141,12 +141,12 @@ def http_request_wrap_file(func):
Turn file path into a file object and close it automatically
by using a context manager.
"""
def new_func(method, url, headers=None, data=None, file=None, retry_on_400: bool = True):
def new_func(method, url, headers=None, data=None, file=None):
if file:
with open(file, "rb") as f:
return func(method, url, headers, data, f, retry_on_400)
return func(method, url, headers, data, file=f)
else:
return func(method, url, headers, data, file, retry_on_400)
return func(method, url, headers, data, file)
new_func.__name__ = func.__name__
new_func.__doc__ = func.__doc__
@ -154,7 +154,7 @@ def http_request_wrap_file(func):
@http_request_wrap_file
def http_request(method: str, url: str, headers=None, data=None, file=None, retry_on_400: bool = True):
def http_request(method: str, url: str, headers=None, data=None, file=None):
"""
Send a HTTP request to a server.
@ -174,7 +174,6 @@ def http_request(method: str, url: str, headers=None, data=None, file=None, retr
:param headers: Dictionary of custom headers to send.
:param data: Data to send in the request body (conflicts with `file`).
:param file: Path to a file to send as data in the request body (conflicts with `data`).
:param retry_on_400: Whether to retry on receiving HTTP status code 400.
"""
purl = urllib3.util.parse_url(url)
@ -234,22 +233,15 @@ def http_request(method: str, url: str, headers=None, data=None, file=None, retr
else:
retries_kwargs = {"method_whitelist": None}
status_forcelist = (
500, # Internal Server Error
502, # Bad Gateway
503, # Service Unavailable
504, # Gateway Timeout
)
if retry_on_400:
status_forcelist = (
400, # Bad Request; retry on 400: service in progress
) + status_forcelist
pool_kwargs["retries"] = urllib3.Retry(
total=int(conf.config["http_retries"]),
backoff_factor=2,
status_forcelist=status_forcelist,
status_forcelist=(
500, # Internal Server Error
502, # Bad Gateway
503, # Service Unavailable
504, # Gateway Timeout
),
# don't raise because we want an actual response rather than a MaxRetryError with "too many <status_code> error responses" message
raise_on_status=False,
**retries_kwargs,

View File

@ -5422,7 +5422,7 @@ def server_diff(
query["file"] = UrlQueryArray(files)
u = makeurl(apiurl, ['source', new_project, new_package], query=query)
f = http_POST(u, retry_on_400=False)
f = http_POST(u)
if onlyissues and not xml:
del_issue_list = []
add_issue_list = []

View File

@ -759,7 +759,7 @@ class XmlModel(BaseModel):
from ..core import makeurl
url = makeurl(apiurl, path, query)
# TODO: catch HTTPError and return the wrapped response as XmlModel instance
return http_request(method, url, data=data, retry_on_400=False)
return http_request(method, url, data=data)
def do_update(self, other: "XmlModel") -> None:
"""