Spaces:
Runtime error
Runtime error
move filter to backend
Browse files
app.py
CHANGED
|
@@ -224,8 +224,16 @@ class Sort(str, Enum):
|
|
| 224 |
likes = "likes"
|
| 225 |
|
| 226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
@ app.get("/api/models")
|
| 228 |
-
def get_page(page: int = 1, sort: Sort = Sort.trending):
|
| 229 |
page = page if page > 0 else 1
|
| 230 |
if sort == Sort.trending:
|
| 231 |
sort_query = "((likes + downloads)/2) / MYPOWER((JULIANDAY('now') - JULIANDAY(datetime(json_extract(data, '$.lastModified')))) + 2, 1.5) DESC"
|
|
@@ -233,13 +241,27 @@ def get_page(page: int = 1, sort: Sort = Sort.trending):
|
|
| 233 |
sort_query = "datetime(json_extract(data, '$.lastModified')) DESC"
|
| 234 |
elif sort == Sort.likes:
|
| 235 |
sort_query = "likes DESC"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
|
| 237 |
with database.get_db() as db:
|
| 238 |
cursor = db.cursor()
|
| 239 |
cursor.execute(f"""
|
| 240 |
-
SELECT *, COUNT(*) OVER() AS total
|
| 241 |
-
FROM
|
| 242 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 243 |
ORDER BY {sort_query}
|
| 244 |
LIMIT {MAX_PAGE_SIZE} OFFSET {(page - 1) * MAX_PAGE_SIZE}
|
| 245 |
""")
|
|
@@ -248,10 +270,12 @@ def get_page(page: int = 1, sort: Sort = Sort.trending):
|
|
| 248 |
total_pages = (total + MAX_PAGE_SIZE - 1) // MAX_PAGE_SIZE
|
| 249 |
models_data = []
|
| 250 |
for result in results:
|
|
|
|
| 251 |
data = json.loads(result['data'])
|
| 252 |
# update downloads and likes from db table
|
| 253 |
data['downloads'] = result['downloads']
|
| 254 |
data['likes'] = result['likes']
|
|
|
|
| 255 |
models_data.append(data)
|
| 256 |
|
| 257 |
return {
|
|
|
|
| 224 |
likes = "likes"
|
| 225 |
|
| 226 |
|
| 227 |
+
class Style(str, Enum):
|
| 228 |
+
all = "all"
|
| 229 |
+
anime = "anime"
|
| 230 |
+
s3D = "3d"
|
| 231 |
+
realistic = "realistic"
|
| 232 |
+
nsfw = "nsfw"
|
| 233 |
+
|
| 234 |
+
|
| 235 |
@ app.get("/api/models")
|
| 236 |
+
def get_page(page: int = 1, sort: Sort = Sort.trending, style: Style = Style.all):
|
| 237 |
page = page if page > 0 else 1
|
| 238 |
if sort == Sort.trending:
|
| 239 |
sort_query = "((likes + downloads)/2) / MYPOWER((JULIANDAY('now') - JULIANDAY(datetime(json_extract(data, '$.lastModified')))) + 2, 1.5) DESC"
|
|
|
|
| 241 |
sort_query = "datetime(json_extract(data, '$.lastModified')) DESC"
|
| 242 |
elif sort == Sort.likes:
|
| 243 |
sort_query = "likes DESC"
|
| 244 |
+
if style == Style.all:
|
| 245 |
+
style_query = "1"
|
| 246 |
+
elif style == Style.anime:
|
| 247 |
+
style_query = "json_extract(data, '$.class.anime') > 0.1 AND isNFSW = false"
|
| 248 |
+
elif style == Style.s3D:
|
| 249 |
+
style_query = "json_extract(data, '$.class.3d') > 0.1 AND isNFSW = false"
|
| 250 |
+
elif style == Style.realistic:
|
| 251 |
+
style_query = "json_extract(data, '$.class.real_life') > 0.1 AND isNFSW = false"
|
| 252 |
+
elif style == Style.nsfw:
|
| 253 |
+
style_query = "isNFSW = true"
|
| 254 |
|
| 255 |
with database.get_db() as db:
|
| 256 |
cursor = db.cursor()
|
| 257 |
cursor.execute(f"""
|
| 258 |
+
SELECT *, COUNT(*) OVER() AS total, isNFSW
|
| 259 |
+
FROM (
|
| 260 |
+
SELECT * ,
|
| 261 |
+
json_extract(data, '$.class.explicit') > 0.3 OR json_extract(data, '$.class.suggestive') > 0.3 AS isNFSW
|
| 262 |
+
FROM models
|
| 263 |
+
)
|
| 264 |
+
WHERE likes > 0 AND {style_query}
|
| 265 |
ORDER BY {sort_query}
|
| 266 |
LIMIT {MAX_PAGE_SIZE} OFFSET {(page - 1) * MAX_PAGE_SIZE}
|
| 267 |
""")
|
|
|
|
| 270 |
total_pages = (total + MAX_PAGE_SIZE - 1) // MAX_PAGE_SIZE
|
| 271 |
models_data = []
|
| 272 |
for result in results:
|
| 273 |
+
print(list(result))
|
| 274 |
data = json.loads(result['data'])
|
| 275 |
# update downloads and likes from db table
|
| 276 |
data['downloads'] = result['downloads']
|
| 277 |
data['likes'] = result['likes']
|
| 278 |
+
data['isNFSW'] = bool(result['isNFSW'])
|
| 279 |
models_data.append(data)
|
| 280 |
|
| 281 |
return {
|