diff --git a/api/nostr.py b/api/nostr.py index dbc97b6f7..bfc45c162 100644 --- a/api/nostr.py +++ b/api/nostr.py @@ -1,6 +1,8 @@ import pygeohash import hashlib import uuid + +from asgiref.sync import sync_to_async from nostr_sdk import Keys, Client, EventBuilder, NostrSigner from api.models import Order from decouple import config @@ -26,19 +28,27 @@ async def send_order_event(self, order): await client.add_relays(["ws://localhost:7777"]) await client.connect() - event = EventBuilder(38383, "", self.generate_tags(order)).to_event(keys) + robot_name = await self.get_robot_name(order) + + event = EventBuilder(38383, "", self.generate_tags(order, robot_name)).to_event( + keys + ) event.custom_created_at(order.created_at.timestamp()) output = await client.send_event(event) print(f"Nostr event sent: {output}") - def generate_tags(self, order): + @sync_to_async + def get_robot_name(self, order): + return order.maker.username + + def generate_tags(self, order, robot_name): hashed_id = hashlib.md5( f"{config("COORDINATOR_ALIAS", cast=str)}{order.id}".encode("utf-8") ).hexdigest() tags = [ ["d", uuid.UUID(hashed_id)], - ["name", order.maker.robot_name], + ["name", robot_name], ["k", order.type.lower()], ["f", order.currency], ["s", self.get_status_tag(order)], diff --git a/api/tasks.py b/api/tasks.py index 824bd9e69..416a58475 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -1,4 +1,4 @@ -import asyncio +from asgiref.sync import async_to_sync from celery import shared_task from celery.exceptions import SoftTimeLimitExceeded @@ -261,7 +261,7 @@ def nostr_send_order_event(order_id=None): order = Order.objects.get(id=order_id) nostr = Nostr() - asyncio.run(nostr.send_order_event(order)) + async_to_sync(nostr.send_order_event)(order) return diff --git a/requirements.txt b/requirements.txt index 92f1f8a4c..51334cc34 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,3 +30,4 @@ django-cors-headers==4.4.0 base91==1.0.1 nostr-sdk==0.32.2 pygeohash==1.2.0 +asgiref == 3.8.1 diff --git a/tests/utils/trade.py b/tests/utils/trade.py index c6303b0ad..39bcda0a1 100644 --- a/tests/utils/trade.py +++ b/tests/utils/trade.py @@ -5,7 +5,7 @@ from api.management.commands.clean_orders import Command as CleanOrders from api.management.commands.follow_invoices import Command as FollowInvoices from api.models import Order -from api.tasks import follow_send_payment, send_notification, nostr_send_order_event +from api.tasks import follow_send_payment, send_notification from tests.utils.node import ( add_invoice, create_address, @@ -156,7 +156,6 @@ def process_payouts(self, mine_a_block=False): wait_nodes_sync() @patch("api.tasks.send_notification.delay", send_notification) - @patch("api.tasks.nostr_send_order_event.delay", nostr_send_order_event) def publish_order(self): # Maker's first order fetch. Should trigger maker bond hold invoice generation. self.get_order()