chore: force py format
This commit is contained in:
parent
55f9142f3d
commit
1eda457067
8 changed files with 248 additions and 99 deletions
132
crud.py
132
crud.py
|
|
@ -6,18 +6,28 @@ from .models import NostrEvent, NostrFilter, NostrRelay, RelayConfig
|
|||
|
||||
########################## RELAYS ####################
|
||||
|
||||
|
||||
async def create_relay(user_id: str, r: NostrRelay) -> NostrRelay:
|
||||
await db.execute(
|
||||
"""
|
||||
INSERT INTO nostrrelay.relays (user_id, id, name, description, pubkey, contact, meta)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
""",
|
||||
(user_id, r.id, r.name, r.description, r.pubkey, r.contact, json.dumps(dict(r.config))),
|
||||
(
|
||||
user_id,
|
||||
r.id,
|
||||
r.name,
|
||||
r.description,
|
||||
r.pubkey,
|
||||
r.contact,
|
||||
json.dumps(dict(r.config)),
|
||||
),
|
||||
)
|
||||
relay = await get_relay(user_id, r.id)
|
||||
assert relay, "Created relay cannot be retrieved"
|
||||
return relay
|
||||
|
||||
|
||||
async def update_relay(user_id: str, r: NostrRelay) -> NostrRelay:
|
||||
await db.execute(
|
||||
"""
|
||||
|
|
@ -25,31 +35,59 @@ async def update_relay(user_id: str, r: NostrRelay) -> NostrRelay:
|
|||
SET (name, description, pubkey, contact, active, meta) = (?, ?, ?, ?, ?, ?)
|
||||
WHERE user_id = ? AND id = ?
|
||||
""",
|
||||
(r.name, r.description, r.pubkey, r.contact, r.active, json.dumps(dict(r.config)), user_id, r.id),
|
||||
(
|
||||
r.name,
|
||||
r.description,
|
||||
r.pubkey,
|
||||
r.contact,
|
||||
r.active,
|
||||
json.dumps(dict(r.config)),
|
||||
user_id,
|
||||
r.id,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
return r
|
||||
|
||||
|
||||
async def get_relay(user_id: str, relay_id: str) -> Optional[NostrRelay]:
|
||||
row = await db.fetchone("""SELECT * FROM nostrrelay.relays WHERE user_id = ? AND id = ?""", (user_id, relay_id,))
|
||||
row = await db.fetchone(
|
||||
"""SELECT * FROM nostrrelay.relays WHERE user_id = ? AND id = ?""",
|
||||
(
|
||||
user_id,
|
||||
relay_id,
|
||||
),
|
||||
)
|
||||
|
||||
return NostrRelay.from_row(row) if row else None
|
||||
|
||||
|
||||
async def get_relays(user_id: str) -> List[NostrRelay]:
|
||||
rows = await db.fetchall("""SELECT * FROM nostrrelay.relays WHERE user_id = ? ORDER BY id ASC""", (user_id,))
|
||||
rows = await db.fetchall(
|
||||
"""SELECT * FROM nostrrelay.relays WHERE user_id = ? ORDER BY id ASC""",
|
||||
(user_id,),
|
||||
)
|
||||
|
||||
return [NostrRelay.from_row(row) for row in rows]
|
||||
|
||||
|
||||
async def get_config_for_all_active_relays() -> dict:
|
||||
rows = await db.fetchall("SELECT id, meta FROM nostrrelay.relays WHERE active = true",)
|
||||
rows = await db.fetchall(
|
||||
"SELECT id, meta FROM nostrrelay.relays WHERE active = true",
|
||||
)
|
||||
active_relay_configs = {}
|
||||
for r in rows:
|
||||
active_relay_configs[r["id"]] = RelayConfig(**json.loads(r["meta"])) #todo: from_json
|
||||
active_relay_configs[r["id"]] = RelayConfig(
|
||||
**json.loads(r["meta"])
|
||||
) # todo: from_json
|
||||
|
||||
return active_relay_configs
|
||||
|
||||
|
||||
async def get_public_relay(relay_id: str) -> Optional[dict]:
|
||||
row = await db.fetchone("""SELECT * FROM nostrrelay.relays WHERE id = ?""", (relay_id,))
|
||||
row = await db.fetchone(
|
||||
"""SELECT * FROM nostrrelay.relays WHERE id = ?""", (relay_id,)
|
||||
)
|
||||
|
||||
if not row:
|
||||
return None
|
||||
|
|
@ -59,14 +97,20 @@ async def get_public_relay(relay_id: str) -> Optional[dict]:
|
|||
**NostrRelay.info(),
|
||||
"id": relay.id,
|
||||
"name": relay.name,
|
||||
"description":relay.description,
|
||||
"pubkey":relay.pubkey,
|
||||
"contact":relay.contact
|
||||
"description": relay.description,
|
||||
"pubkey": relay.pubkey,
|
||||
"contact": relay.contact,
|
||||
}
|
||||
|
||||
|
||||
async def delete_relay(user_id: str, relay_id: str):
|
||||
await db.execute("""DELETE FROM nostrrelay.relays WHERE user_id = ? AND id = ?""", (user_id, relay_id,))
|
||||
await db.execute(
|
||||
"""DELETE FROM nostrrelay.relays WHERE user_id = ? AND id = ?""",
|
||||
(
|
||||
user_id,
|
||||
relay_id,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
########################## EVENTS ####################
|
||||
|
|
@ -85,7 +129,16 @@ async def create_event(relay_id: str, e: NostrEvent):
|
|||
)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
""",
|
||||
(relay_id, e.id, e.pubkey, e.created_at, e.kind, e.content, e.sig, e.size_bytes),
|
||||
(
|
||||
relay_id,
|
||||
e.id,
|
||||
e.pubkey,
|
||||
e.created_at,
|
||||
e.kind,
|
||||
e.content,
|
||||
e.sig,
|
||||
e.size_bytes,
|
||||
),
|
||||
)
|
||||
|
||||
# todo: optimize with bulk insert
|
||||
|
|
@ -94,7 +147,10 @@ async def create_event(relay_id: str, e: NostrEvent):
|
|||
extra = json.dumps(rest) if rest else None
|
||||
await create_event_tags(relay_id, e.id, name, value, extra)
|
||||
|
||||
async def get_events(relay_id: str, filter: NostrFilter, include_tags = True) -> List[NostrEvent]:
|
||||
|
||||
async def get_events(
|
||||
relay_id: str, filter: NostrFilter, include_tags=True
|
||||
) -> List[NostrEvent]:
|
||||
query, values = build_select_events_query(relay_id, filter)
|
||||
|
||||
rows = await db.fetchall(query, tuple(values))
|
||||
|
|
@ -108,8 +164,15 @@ async def get_events(relay_id: str, filter: NostrFilter, include_tags = True) ->
|
|||
|
||||
return events
|
||||
|
||||
|
||||
async def get_event(relay_id: str, id: str) -> Optional[NostrEvent]:
|
||||
row = await db.fetchone("SELECT * FROM nostrrelay.events WHERE relay_id = ? AND id = ?", (relay_id, id,))
|
||||
row = await db.fetchone(
|
||||
"SELECT * FROM nostrrelay.events WHERE relay_id = ? AND id = ?",
|
||||
(
|
||||
relay_id,
|
||||
id,
|
||||
),
|
||||
)
|
||||
if not row:
|
||||
return None
|
||||
|
||||
|
|
@ -117,17 +180,25 @@ async def get_event(relay_id: str, id: str) -> Optional[NostrEvent]:
|
|||
event.tags = await get_event_tags(relay_id, id)
|
||||
return event
|
||||
|
||||
|
||||
async def get_storage_for_public_key(relay_id: str, pubkey: str) -> int:
|
||||
"""Returns the storage space in bytes for all the events of a public key. Deleted events are also counted"""
|
||||
|
||||
row = await db.fetchone("SELECT SUM(size) as sum FROM nostrrelay.events WHERE relay_id = ? AND pubkey = ? GROUP BY pubkey", (relay_id, pubkey,))
|
||||
row = await db.fetchone(
|
||||
"SELECT SUM(size) as sum FROM nostrrelay.events WHERE relay_id = ? AND pubkey = ? GROUP BY pubkey",
|
||||
(
|
||||
relay_id,
|
||||
pubkey,
|
||||
),
|
||||
)
|
||||
if not row:
|
||||
return 0
|
||||
|
||||
return round(row["sum"])
|
||||
|
||||
|
||||
async def get_prunable_events(relay_id: str, pubkey: str) -> List[Tuple[str, int]]:
|
||||
""" Return the oldest 10 000 events. Only the `id` and the size are returned, so the data size should be small"""
|
||||
"""Return the oldest 10 000 events. Only the `id` and the size are returned, so the data size should be small"""
|
||||
query = """
|
||||
SELECT id, size FROM nostrrelay.events
|
||||
WHERE relay_id = ? AND pubkey = ?
|
||||
|
|
@ -139,21 +210,26 @@ async def get_prunable_events(relay_id: str, pubkey: str) -> List[Tuple[str, int
|
|||
return [(r["id"], r["size"]) for r in rows]
|
||||
|
||||
|
||||
async def mark_events_deleted(relay_id: str, filter: NostrFilter):
|
||||
async def mark_events_deleted(relay_id: str, filter: NostrFilter):
|
||||
if filter.is_empty():
|
||||
return None
|
||||
_, where, values = filter.to_sql_components(relay_id)
|
||||
|
||||
await db.execute(f"""UPDATE nostrrelay.events SET deleted=true WHERE {" AND ".join(where)}""", tuple(values))
|
||||
await db.execute(
|
||||
f"""UPDATE nostrrelay.events SET deleted=true WHERE {" AND ".join(where)}""",
|
||||
tuple(values),
|
||||
)
|
||||
|
||||
async def delete_events(relay_id: str, filter: NostrFilter):
|
||||
|
||||
async def delete_events(relay_id: str, filter: NostrFilter):
|
||||
if filter.is_empty():
|
||||
return None
|
||||
_, where, values = filter.to_sql_components(relay_id)
|
||||
|
||||
query = f"""DELETE from nostrrelay.events WHERE {" AND ".join(where)}"""
|
||||
await db.execute(query, tuple(values))
|
||||
#todo: delete tags
|
||||
# todo: delete tags
|
||||
|
||||
|
||||
async def prune_old_events(relay_id: str, pubkey: str, space_to_regain: int):
|
||||
prunable_events = await get_prunable_events(relay_id, pubkey)
|
||||
|
|
@ -175,8 +251,13 @@ async def delete_all_events(relay_id: str):
|
|||
await db.execute(query, (relay_id,))
|
||||
# todo: delete tags
|
||||
|
||||
|
||||
async def create_event_tags(
|
||||
relay_id: str, event_id: str, tag_name: str, tag_value: str, extra_values: Optional[str]
|
||||
relay_id: str,
|
||||
event_id: str,
|
||||
tag_name: str,
|
||||
tag_value: str,
|
||||
extra_values: Optional[str],
|
||||
):
|
||||
await db.execute(
|
||||
"""
|
||||
|
|
@ -192,9 +273,8 @@ async def create_event_tags(
|
|||
(relay_id, event_id, tag_name, tag_value, extra_values),
|
||||
)
|
||||
|
||||
async def get_event_tags(
|
||||
relay_id: str, event_id: str
|
||||
) -> List[List[str]]:
|
||||
|
||||
async def get_event_tags(relay_id: str, event_id: str) -> List[List[str]]:
|
||||
rows = await db.fetchall(
|
||||
"SELECT * FROM nostrrelay.event_tags WHERE relay_id = ? and event_id = ?",
|
||||
(relay_id, event_id),
|
||||
|
|
@ -211,7 +291,7 @@ async def get_event_tags(
|
|||
return tags
|
||||
|
||||
|
||||
def build_select_events_query(relay_id:str, filter:NostrFilter):
|
||||
def build_select_events_query(relay_id: str, filter: NostrFilter):
|
||||
inner_joins, where, values = filter.to_sql_components(relay_id)
|
||||
|
||||
query = f"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue