meme/misc/rm karma

This commit is contained in:
2025-05-20 11:14:08 -04:00
parent 5c351a6e0f
commit 0d58ae2a96
8 changed files with 67 additions and 299 deletions

View File

@ -92,11 +92,16 @@ class LastFM:
) as request:
request.raise_for_status()
data: dict = await request.json()
if not data:
return None
data = data.get("track", None)
if not isinstance(data.get("artist"), dict):
return None
artist_mbid: int = data.get("artist", None).get("mbid")
album: str = data.get("album", None).get("title")
album: str = data.get("album", None)
if not isinstance(album, dict):
return None
album = album.get("title")
ret_obj: dict = {
"artist_mbid": artist_mbid,
"album": album,

View File

@ -1,6 +1,7 @@
import os
import logging
import io
import math
from typing import Optional
import aiosqlite as sqlite3
from PIL import Image
@ -77,13 +78,38 @@ class MemeUtil:
ret_image = result["image"]
return ret_image
async def get_random_meme(self) -> Optional[bytes]:
"""
Get random meme
Returns:
Optional[bytes]
"""
ret_image: Optional[bytes] = None
buffer: Optional[io.BytesIO] = None
async with sqlite3.connect(self.meme_db_path, timeout=5) as db_conn:
db_conn.row_factory = sqlite3.Row
query: str = "SELECT id, image FROM memes ORDER BY RANDOM() LIMIT 1"
async with await db_conn.execute(query) as db_cursor:
result = await db_cursor.fetchone()
if not result:
return None
meme_id = result["id"]
buffer = io.BytesIO(result["image"])
is_png = self.is_png(buffer)
if not is_png:
logging.debug("Converting %s, not detected as PNG", meme_id)
ret_image = self.convert_to_png(buffer)
else:
ret_image = result["image"]
return ret_image
async def list_memes(self, page: int) -> Optional[list]:
"""
List memes (paginated)
Args:
page (id)
Returns:
list
Optional[list]
"""
out_result: list = []
async with sqlite3.connect(self.meme_db_path, timeout=5) as db_conn:
@ -103,3 +129,22 @@ class MemeUtil:
}
)
return out_result
async def get_page_count(self) -> Optional[int]:
"""
Get page count
Returns:
Optional[int]
"""
async with sqlite3.connect(self.meme_db_path, timeout=5) as db_conn:
db_conn.row_factory = sqlite3.Row
rows_per_page: int = 10
pages: Optional[int] = None
query: str = "SELECT count(id) AS count FROM memes"
async with await db_conn.execute(query) as db_cursor:
result = await db_cursor.fetchone()
count = result["count"]
if not isinstance(count, int):
return None
pages = math.ceil(count / rows_per_page)
return pages