feat: add delete post tests

This commit is contained in:
Vlad Stan 2023-02-03 15:45:23 +02:00
parent b0be06580a
commit 01764c155e
4 changed files with 111 additions and 11 deletions

View file

@ -1,11 +1,10 @@
import asyncio
import json
from typing import Any, Callable, List, Union
from typing import Any, Callable, List
from fastapi import WebSocket
from loguru import logger
from .crud import create_event, get_events
from .crud import create_event, delete_events, get_events
from .models import NostrEvent, NostrEventType, NostrFilter
@ -23,8 +22,7 @@ class NostrClientManager:
async def broadcast_event(self, source: "NostrClientConnection", event: NostrEvent):
for client in self.clients:
if client != source:
sent = await client.notify_event(event)
print("### sent", sent, event.id)
await client.notify_event(event)
class NostrClientConnection:
@ -38,13 +36,12 @@ class NostrClientConnection:
await self.websocket.accept()
while True:
json_data = await self.websocket.receive_text()
print('### received', json_data)
print('### received: ', json_data)
try:
data = json.loads(json_data)
resp = await self.__handle_message(data)
for r in resp:
print('### sent query', json.dumps(r))
await self.websocket.send_text(json.dumps(r))
except Exception as e:
logger.warning(e)
@ -53,7 +50,6 @@ class NostrClientConnection:
for filter in self.filters:
if filter.matches(event):
resp = event.serialize_response(filter.subscription_id)
print('### sent notify', json.dumps(resp))
await self.websocket.send_text(json.dumps(resp))
return True
return False
@ -76,18 +72,28 @@ class NostrClientConnection:
return []
async def __handle_event(self, e: "NostrEvent"):
async def __handle_event(self, e: NostrEvent):
resp_nip20: List[Any] = ["ok", e.id]
try:
e.check_signature()
await create_event("111", e)
await self.broadcast_event(self, e)
if e.is_delete_event():
await self.__delete_event(e)
resp_nip20 += [True, ""]
except Exception as ex:
resp_nip20 += [False, f"error: failed to create event"]
await self.websocket.send_text(json.dumps(resp_nip20))
async def __delete_event(self, event: NostrEvent):
# NIP 09
filter = NostrFilter(authors=[event.pubkey])
filter.ids = [t[1] for t in event.tags if t[0] == "e"]
events_to_delete = await get_events("111", filter, False)
ids = [e.id for e in events_to_delete]
await delete_events("111", ids)
async def __handle_request(self, subscription_id: str, filter: NostrFilter) -> List:
filter.subscription_id = subscription_id
self.remove_filter(subscription_id)