This commit is contained in:
Hell13Cat
2026-05-26 22:53:39 +03:00
parent 6cdf1cc5eb
commit 270be38d1e
5 changed files with 64 additions and 7 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ Version Naming Rules:
All technical versions are designated as snapshots (s) All technical versions are designated as snapshots (s)
All test versions are designated as alpha and beta (a, b) All test versions are designated as beta (b)
All pre-release and release versions are designated as release candidate and release (rc, r) All pre-release and release versions are designated as release candidate and release (rc, r)
+1 -1
View File
@@ -6,7 +6,7 @@
Все технические версии обозначаються как снапшоты (s) Все технические версии обозначаються как снапшоты (s)
Все тестовые версии обозначаються как альфа и бета (a, b) Все тестовые версии обозначаються как бета (b)
Все предрелизны и релизные версии обозначаються как кандидат в релиз и релиз (rc, r) Все предрелизны и релизные версии обозначаються как кандидат в релиз и релиз (rc, r)
+4 -1
View File
@@ -1,5 +1,8 @@
{ {
"port":8084, "server":{
"port":8084,
"count_page":25
},
"gb":{ "gb":{
"id":"", "id":"",
"hash":"", "hash":"",
+40 -4
View File
@@ -7,7 +7,8 @@ import os
CONFIG_ROOT = json.load(open("config.json", "r", encoding="utf-8")) CONFIG_ROOT = json.load(open("config.json", "r", encoding="utf-8"))
CONFIG_ROOT_S = json.load(open("config_gb.json", "r", encoding="utf-8")) CONFIG_ROOT_S = json.load(open("config_gb.json", "r", encoding="utf-8"))
CONFIG_PORT = CONFIG_ROOT["port"] CONFIG_PORT = CONFIG_ROOT["server"]["port"]
PAGINATION_COUNT = CONFIG_ROOT["server"]["count_page"]
GB_ID = CONFIG_ROOT_S["gb"]["id"] GB_ID = CONFIG_ROOT_S["gb"]["id"]
GB_HASH = CONFIG_ROOT_S["gb"]["hash"] GB_HASH = CONFIG_ROOT_S["gb"]["hash"]
GB_HEADERS = CONFIG_ROOT["gb"]["headers"] GB_HEADERS = CONFIG_ROOT["gb"]["headers"]
@@ -26,7 +27,6 @@ def find_file(filename, file_folders):
continue continue
for file_path in folder_path.rglob(filename): for file_path in folder_path.rglob(filename):
return folder_path return folder_path
return None return None
@app.route("/") @app.route("/")
@@ -84,9 +84,45 @@ def dw_api():
@app.route("/api", methods=["GET", "POST"]) @app.route("/api", methods=["GET", "POST"])
def api(): def api():
data = request.get_json()
if data["type"] == "post":
search_query = data["query"].split(" ")
search_rating = data["rating"].split("+")
results = database.get_search(search_query, search_rating)
if len(results) <= PAGINATION_COUNT:
results_send = {"results_info":{"total":len(results), "page":int(data["page"]), "count_page":PAGINATION_COUNT}, "results":results}
return jsonify(results_send)
else:
results_slile = results[int(data["page"])*PAGINATION_COUNT:(int(data["page"])+1)*PAGINATION_COUNT]
results_send = {"results_info":{"total":len(results), "page":int(data["page"]), "count_page":PAGINATION_COUNT}, "results":results_slile}
return jsonify(results_send)
elif data["type"] == "autocomplete":
tag_slise = data["q"]
result_autocomplete = database.get_autocomplete(tag_slise)
return jsonify(result_autocomplete)
else:
pass
return "", 204 return "", 204
if __name__ == "__main__": if __name__ == "__main__":
app.run(host="0.0.0.0", port=CONFIG_PORT) app.run(host="0.0.0.0", port=CONFIG_PORT)
exit()
DB.append({
"md5": item.get("md5"),
"local_filename": local_filename,
"thumb_url": thumb_url,
"is_video": is_video,
"is_gif": is_gif,
"found": item.get("found_on_gelbooru", False),
"tags": tags,
"rating": data.get("rating", "N/A"),
"score": data.get("score", 0),
"timestamp": timestamp,
"display_date": display_date,
"source": data.get("source", ""),
"width": data.get("width", 0),
"height": data.get("height", 0)
})
+18
View File
@@ -1,6 +1,7 @@
from tinydb import TinyDB, Query from tinydb import TinyDB, Query
import os import os
import json import json
from collections import Counter
class DB: class DB:
def __init__(self): def __init__(self):
@@ -22,6 +23,7 @@ class DB:
return self.db.all() return self.db.all()
def get_search(self, ratings, tags): def get_search(self, ratings, tags):
ratings
results = self.db.search( results = self.db.search(
self.File.rating.one_of(self.ratings) & self.File.rating.one_of(self.ratings) &
self.File.tags.any(self.tags) self.File.tags.any(self.tags)
@@ -32,5 +34,21 @@ class DB:
results = self.db.search(self.File.tags == []) results = self.db.search(self.File.tags == [])
return results return results
def get_autocomplete(self, tag_slise):
counter = Counter()
for record in self.db.all():
counter.update(record.get("tags", []))
results = [
{
"tag": tag,
"count": count
}
for tag, count in counter.items()
if tag.lower().startswith(prefix)
]
results.sort(key=lambda x: x["count"], reverse=True)
top_10 = results[:10]
return top_10
def edit_data(self, id_file, edit_data): def edit_data(self, id_file, edit_data):
self.db.update(self.edit_data, self.File.md5 == self.id_file) self.db.update(self.edit_data, self.File.md5 == self.id_file)