Skip to content

Commit

Permalink
Async to sync
Browse files Browse the repository at this point in the history
  • Loading branch information
KoalaSat committed Aug 7, 2024
1 parent b1ebdf4 commit b658679
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 21 deletions.
54 changes: 37 additions & 17 deletions api/nostr.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import pygeohash
import hashlib
import uuid
from nostr_sdk import Keys, Client, EventBuilder, NostrSigner

from asgiref.sync import sync_to_async
from nostr_sdk import Keys, Client, EventBuilder, NostrSigner, Kind, Tag
from api.models import Order
from decouple import config

Expand All @@ -26,38 +28,56 @@ 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)
event.custom_created_at(order.created_at.timestamp())
robot_name = await self.get_robot_name(order)
currency = await self.get_robot_currency(order)

event = (
EventBuilder(
Kind(38383),
"",
Tag.parse(self.generate_tags(order, robot_name, currency)),
)
.custom_created_at(order.created_at.timestamp())
.to_event(keys)
)
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

@sync_to_async
def get_robot_currency(self, order):
return str(order.currency)

def generate_tags(self, order, robot_name, currency):
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],
["k", order.type.lower()],
["f", order.currency],
["d", str(uuid.UUID(hashed_id))],
["name", robot_name],
["k", "sell" if order.type == Order.Types.SELL else "buy"],
["f", currency],
["s", self.get_status_tag(order)],
["amt", "0"],
["fa", order.amount],
["pm", order.payment_method.split(" ")],
["premium", order.premium_percentile * 100],
["fa", str(order.amount)],
["pm"] + order.payment_method.split(" "),
["premium", str(order.premium)],
[
"source",
f"{config("HOST_NAME")}/{config("COORDINATOR_ALIAS")}/order/{order.id}",
f"http://{config("HOST_NAME")}/{config("COORDINATOR_ALIAS")}/order/{order.id}",
],
["expiration", order.expires_at.timestamp()],
["expiration", int(order.expires_at.timestamp())],
["y", "robosats", config("COORDINATOR_ALIAS", cast=str)],
["n", order.network],
["layer", self.get_layer_tag(order)],
["bond", order.bond],
["n", str(config("NETWORK"))],
["layer"] + self.get_layer_tag(order),
["bond", str(order.bond_size)],
["z", "order"],
]

print(tags)
if order.latitude and order.longitude:
tags.extend([["g", pygeohash.encode(order.latitude, order.longitude)]])

Expand Down
4 changes: 2 additions & 2 deletions api/tasks.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import asyncio
from asgiref.sync import async_to_sync
from celery import shared_task
from celery.exceptions import SoftTimeLimitExceeded

Expand Down Expand Up @@ -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

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 1 addition & 2 deletions tests/utils/trade.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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()
Expand Down

0 comments on commit b658679

Please sign in to comment.