diff --git a/.gitignore b/.gitignore index 8455a9f..10e2c22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # ---> Python # Secure data +.vscode old/ +data_test/ config_gb.json migration.py diff --git a/config.json b/config.json index 3fdd915..c01c85b 100644 --- a/config.json +++ b/config.json @@ -12,6 +12,6 @@ } }, "file":{ - "repos":["data/files"] + "repos":["data/files", "E:/local_booru/img"] } } \ No newline at end of file diff --git a/run.py b/run.py index 78ebd35..582b9f5 100644 --- a/run.py +++ b/run.py @@ -1,5 +1,5 @@ from system_module import db, gelbooru, logger -from flask import Flask, render_template, jsonify, send_from_directory, render_template_string +from flask import Flask, render_template, jsonify, send_from_directory, render_template_string, request import json import requests from pathlib import Path @@ -13,11 +13,11 @@ GB_ID = CONFIG_ROOT_S["gb"]["id"] GB_HASH = CONFIG_ROOT_S["gb"]["hash"] GB_HEADERS = CONFIG_ROOT["gb"]["headers"] FILE_FOLDERS = CONFIG_ROOT["file"]["repos"] -THUMB_FOLDER = "data/thumb" +THUMB_FOLDER = "data_test/thumb" gb = gelbooru.GB(GB_ID, GB_HASH, GB_HEADERS) log = logger.Logger() -database = db.DB() +database = db.DB(True) app = Flask(__name__) def find_file(filename, file_folders): @@ -85,10 +85,15 @@ def dw_api(): @app.route("/api", methods=["GET", "POST"]) 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 data["type"] == "search": + search_query = data["query"] + search_rating = data["rating"] + if search_query == "" and search_rating == "e+q+s+g": + results = database.get_all() + else: + search_query = search_query.split(" ") + search_rating = search_rating.split("+") + results = database.get_search(search_rating, search_query) 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) @@ -100,6 +105,10 @@ def api(): tag_slise = data["q"] result_autocomplete = database.get_autocomplete(tag_slise) return jsonify(result_autocomplete) + elif data["type"] == "post": + post_id = data["post_id"] + result_post = database.get_from_id(post_id) + return jsonify(result_post) else: pass return "", 204 diff --git a/system_module/db.py b/system_module/db.py index f656a49..bfc800d 100644 --- a/system_module/db.py +++ b/system_module/db.py @@ -2,15 +2,17 @@ from tinydb import TinyDB, Query import os import json from collections import Counter -import gelbooru +from system_module import gelbooru from datetime import datetime class DB: - def __init__(self): - db_path = "datas" - if not os.path.exists(db_path): - os.makedirs(os.path.dirname(db_path), exist_ok=True) - json.dump({}, open(db_path+"/db.json", "w", encoding="utf-8")) + def __init__(self, debug): + if debug: + db_path = "data_test" + else: + db_path = "data" + if not os.path.exists(os.path.join(db_path, "db.json")): + json.dump({}, open(os.path.join(db_path, "db.json"), "w", encoding="utf-8")) self.db = TinyDB(db_path+"/db.json") self.File = Query() @@ -39,7 +41,6 @@ class DB: "height": data_add["height"] } self.db.insert(add_data) - pass def get_all(self): sorted_records = sorted( @@ -52,12 +53,20 @@ class DB: ) return sorted_records - def get_search(self, ratings, tags): - ratings - results = self.db.search( - self.File.rating.one_of(self.ratings) & - self.File.tags.any(self.tags) - ) + def get_search(self, rating_tmp, tags): + mapping_rating = { + "e": "explicit", + "g": "general", + "s": "sensitive", + "q": "questionable" + } + rating = [mapping_rating.get(x, x) for x in rating_tmp] + if rating: + query = self.File.rating.one_of(rating) + if tags != [""]: + tag_query = self.File.tags.test(lambda t: set(tags).issubset(set(t or []))) + query = tag_query if query is None else query & tag_query + results = self.db.search(query) if query else self.db.all() sorted_records = sorted( results, key=lambda x: datetime.strptime( @@ -89,4 +98,7 @@ class DB: return top_10 def edit_data(self, id_file, edit_data): - self.db.update(self.edit_data, self.File.md5 == self.id_file) \ No newline at end of file + self.db.update(self.edit_data, self.File.md5 == self.id_file) + + def get_from_id(self, id_file): + return self.db.get(self.File.md5 == id_file) \ No newline at end of file diff --git a/system_module/gelbooru.py b/system_module/gelbooru.py index 217c545..d3010f9 100644 --- a/system_module/gelbooru.py +++ b/system_module/gelbooru.py @@ -2,7 +2,7 @@ import requests from datetime import datetime def gelbooru_date_parse(date_str): - if not self.date_str: + if not date_str: return 0, "Unknown" try: dt = datetime.strptime(date_str, "%a %b %d %H:%M:%S %z %Y") diff --git a/system_module/logger.py b/system_module/logger.py index 682d56d..ca3e682 100644 --- a/system_module/logger.py +++ b/system_module/logger.py @@ -12,11 +12,11 @@ class Logger: console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) - logger_file.setLevel(logging.DEBUG) - logger_file.addHandler(file_handler) + self.logger_file.setLevel(logging.DEBUG) + self.logger_file.addHandler(file_handler) - logger_cli.setLevel(logging.INFO) - logger_cli.addHandler(console_handler) + self.logger_cli.setLevel(logging.INFO) + self.logger_cli.addHandler(console_handler) def send(self, level_log, type_log, message): if self.type_log == "file": diff --git a/templates/analytics.html b/templates/analytics.html index db523a5..3fe3ee8 100644 --- a/templates/analytics.html +++ b/templates/analytics.html @@ -5,140 +5,47 @@ Analytics - LocalBooru -
📊 Analytics @@ -150,68 +57,42 @@

Database Analytics

-
diff --git a/templates/post.html b/templates/post.html index c601a7d..3c034bb 100644 --- a/templates/post.html +++ b/templates/post.html @@ -6,104 +6,42 @@ Post - LocalBooru -
- +
    @@ -111,11 +49,11 @@
    -
    Загрузка поста...
    +
    Загрузка поста...