mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-23 08:36:32 +00:00
Merge pull request #2163 from bookwyrm-social/revert-2143-async_broadcast
Revert "Use async requests for broadcasting"
This commit is contained in:
commit
43f3d69821
1 changed files with 23 additions and 34 deletions
|
@ -1,5 +1,4 @@
|
||||||
""" activitypub model functionality """
|
""" activitypub model functionality """
|
||||||
import asyncio
|
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
|
@ -7,8 +6,9 @@ import json
|
||||||
import operator
|
import operator
|
||||||
import logging
|
import logging
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
import requests
|
||||||
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
import aiohttp
|
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
from Crypto.Signature import pkcs1_15
|
from Crypto.Signature import pkcs1_15
|
||||||
from Crypto.Hash import SHA256
|
from Crypto.Hash import SHA256
|
||||||
|
@ -510,22 +510,15 @@ def broadcast_task(sender_id, activity, recipients):
|
||||||
"""the celery task for broadcast"""
|
"""the celery task for broadcast"""
|
||||||
user_model = apps.get_model("bookwyrm.User", require_ready=True)
|
user_model = apps.get_model("bookwyrm.User", require_ready=True)
|
||||||
sender = user_model.objects.get(id=sender_id)
|
sender = user_model.objects.get(id=sender_id)
|
||||||
asyncio.run(async_broadcast(recipients, sender, activity))
|
for recipient in recipients:
|
||||||
|
try:
|
||||||
|
sign_and_send(sender, activity, recipient)
|
||||||
|
except RequestException:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
async def async_broadcast(recipients, sender, data):
|
def sign_and_send(sender, data, destination):
|
||||||
"""Send all the broadcasts simultaneously"""
|
"""crpyto whatever and http junk"""
|
||||||
timeout = aiohttp.ClientTimeout(total=10)
|
|
||||||
async with aiohttp.ClientSession(timeout=timeout) as session:
|
|
||||||
tasks = []
|
|
||||||
for recipient in recipients:
|
|
||||||
tasks.append(
|
|
||||||
asyncio.ensure_future(sign_and_send(session, sender, data, recipient))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def sign_and_send(session, sender, data, destination):
|
|
||||||
"""Sign the messages and send them in an asynchronous bundle"""
|
|
||||||
now = http_date()
|
now = http_date()
|
||||||
|
|
||||||
if not sender.key_pair.private_key:
|
if not sender.key_pair.private_key:
|
||||||
|
@ -533,25 +526,21 @@ async def sign_and_send(session, sender, data, destination):
|
||||||
raise ValueError("No private key found for sender")
|
raise ValueError("No private key found for sender")
|
||||||
|
|
||||||
digest = make_digest(data)
|
digest = make_digest(data)
|
||||||
headers = {
|
|
||||||
"Date": now,
|
|
||||||
"Digest": digest,
|
|
||||||
"Signature": make_signature(sender, destination, now, digest),
|
|
||||||
"Content-Type": "application/activity+json; charset=utf-8",
|
|
||||||
"User-Agent": USER_AGENT,
|
|
||||||
}
|
|
||||||
|
|
||||||
try:
|
response = requests.post(
|
||||||
async with session.post(destination, data=data, headers=headers) as response:
|
destination,
|
||||||
if not response.ok:
|
data=data,
|
||||||
logger.exception(
|
headers={
|
||||||
"Failed to send broadcast to %s: %s", destination, response.reason
|
"Date": now,
|
||||||
)
|
"Digest": digest,
|
||||||
return await response
|
"Signature": make_signature(sender, destination, now, digest),
|
||||||
except asyncio.TimeoutError:
|
"Content-Type": "application/activity+json; charset=utf-8",
|
||||||
logger.info("Connection timed out for url: %s", destination)
|
"User-Agent": USER_AGENT,
|
||||||
except aiohttp.ClientError as err:
|
},
|
||||||
logger.exception(err)
|
)
|
||||||
|
if not response.ok:
|
||||||
|
response.raise_for_status()
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=unused-argument
|
# pylint: disable=unused-argument
|
||||||
|
|
Loading…
Reference in a new issue