aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/webhook/sync.py33
1 files changed, 22 insertions, 11 deletions
diff --git a/discord/webhook/sync.py b/discord/webhook/sync.py
index 021c0ef9..2df02d58 100644
--- a/discord/webhook/sync.py
+++ b/discord/webhook/sync.py
@@ -142,12 +142,14 @@ class WebhookAdapter:
for p in multipart:
name = p['name']
if name == 'payload_json':
- to_send = { 'payload_json': p['value'] }
+ to_send = {'payload_json': p['value']}
else:
file_data[name] = (p['filename'], p['value'], p['content_type'])
try:
- with session.request(method, url, data=to_send, files=file_data, headers=headers, params=params) as response:
+ with session.request(
+ method, url, data=to_send, files=file_data, headers=headers, params=params
+ ) as response:
log.debug(
'Webhook ID %s with %s %s has returned status code %s',
webhook_id,
@@ -346,8 +348,17 @@ class WebhookAdapter:
return self.request(route, session=session)
-_context = threading.local()
-_context.adapter = WebhookAdapter()
+class _WebhookContext(threading.local):
+ adapter: Optional[WebhookAdapter] = None
+
+
+_context = _WebhookContext()
+
+
+def _get_webhook_adapter() -> WebhookAdapter:
+ if _context.adapter is None:
+ _context.adapter = WebhookAdapter()
+ return _context.adapter
class SyncWebhookMessage(Message):
@@ -621,7 +632,7 @@ class SyncWebhook(BaseWebhook):
:class:`SyncWebhook`
The fetched webhook.
"""
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
if prefer_auth and self.auth_token:
data = adapter.fetch_webhook(self.id, self.auth_token, session=self.session)
@@ -659,7 +670,7 @@ class SyncWebhook(BaseWebhook):
if self.token is None and self.auth_token is None:
raise InvalidArgument('This webhook does not have a token associated with it')
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
if prefer_auth and self.auth_token:
adapter.delete_webhook(self.id, token=self.auth_token, session=self.session, reason=reason)
@@ -713,7 +724,7 @@ class SyncWebhook(BaseWebhook):
if avatar is not MISSING:
payload['avatar'] = utils._bytes_to_base64_data(avatar) if avatar is not None else None
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
# If a channel is given, always use the authenticated endpoint
if channel is not None:
@@ -873,7 +884,7 @@ class SyncWebhook(BaseWebhook):
allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions,
)
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
thread_id: Optional[int] = None
if thread is not MISSING:
thread_id = thread.id
@@ -921,7 +932,7 @@ class SyncWebhook(BaseWebhook):
if self.token is None:
raise InvalidArgument('This webhook does not have a token associated with it')
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
data = adapter.get_webhook_message(
self.id,
self.token,
@@ -995,7 +1006,7 @@ class SyncWebhook(BaseWebhook):
allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions,
)
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
adapter.edit_webhook_message(
self.id,
self.token,
@@ -1029,7 +1040,7 @@ class SyncWebhook(BaseWebhook):
if self.token is None:
raise InvalidArgument('This webhook does not have a token associated with it')
- adapter: WebhookAdapter = _context.adapter
+ adapter: WebhookAdapter = _get_webhook_adapter()
adapter.delete_webhook_message(
self.id,
self.token,