Recreate aiohttp.FormData objects during request retries

Fixes #6531
This commit is contained in:
Rapptz
2021-03-24 08:49:12 -04:00
parent 0b19fabbf0
commit 1c8d1b0289
2 changed files with 31 additions and 13 deletions

View File

@@ -203,13 +203,6 @@ class AsyncWebhookAdapter(WebhookAdapter):
if reason:
headers['X-Audit-Log-Reason'] = _uriquote(reason, safe='/ ')
if multipart:
data = aiohttp.FormData()
for key, value in multipart.items():
if key.startswith('file'):
data.add_field(key, value[1], filename=value[0], content_type=value[2])
else:
data.add_field(key, value)
base_url = url.replace(self._request_url, '/') or '/'
_id = self._webhook_id
@@ -217,6 +210,14 @@ class AsyncWebhookAdapter(WebhookAdapter):
for file in files:
file.reset(seek=tries)
if multipart:
data = aiohttp.FormData()
for key, value in multipart.items():
if key.startswith('file'):
data.add_field(key, value[1], filename=value[0], content_type=value[2])
else:
data.add_field(key, value)
async with self.session.request(verb, url, headers=headers, data=data) as r:
log.debug('Webhook ID %s with %s %s has returned status code %s', _id, verb, base_url, r.status)
# Coerce empty strings to return None for hygiene purposes