meme/misc/rm karma
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user