#!/usr/bin/env python # -*- coding: utf-8 -*- """------------------------------------------------------------------------------------------- -- IMPORTS -------------------------------------------------------------------------------------------""" """ --- PYTHON IMPORTS --- """ import os, pathlib from os.path import dirname, abspath """ --- STASHR CORE IMPORTS --- """ from stashr import database as stashr_database from stashr.stashr import stashr_image_downloaded from stashr.api import create_json_return, api """ --- STASHR PLUGIN IMPORTS --- """ from . import thumbnailer, tasks, forms from .config import thumbconfig """ --- FLASK EXTENSION IMPORTS --- """ from flask_login import current_user """ --- STASHR DEPENDENCY IMPORTS --- """ from flask import Blueprint, render_template, request, flash, redirect, url_for from flask_login import login_required, current_user """------------------------------------------------------------------------------------------- -- PLUGIN -------------------------------------------------------------------------------------------""" # PLUGIN DETAILS __plugin_name__ = "Image Thumbnailer" __version__ = "0.1.0" __author__ = "Stashr" __description__ = "Shrink image filesize" """------------------------------ - PLUGIN ROUTES ------------------------------""" """ --- DEFINE BLUEPRINT --- """ bp = Blueprint('thumbnailer', __name__, root_path=dirname(abspath(__file__)), template_folder='templates', static_folder='static') """ --- PAGES --- """ @bp.route('/settings', methods=['GET', 'POST']) @login_required def thumbnailer_settings_page(): if current_user.role != 'admin': flash('Permission Denied', 'error') return redirect(url_for('index_page')) settings_form = forms.settings_form() if request.method == 'POST': if settings_form.validate(): thumbconfig['THUMBNAILER']['max_width'] = settings_form.max_width.data thumbconfig['THUMBNAILER']['quality'] = settings_form.quality.data thumbconfig['THUMBNAILER']['save_original_file'] = settings_form.save_original_file.data thumbconfig.write() flash('Thumbnailer Settings Updated', 'success') else: for error in settings_form.errors.items(): flash(f'{error[0]}: {error[1]}', 'error') return render_template( 'thumbnailer_settings.html', settings_form=settings_form, title='Thumbnailer Settings' ) """ --- API --- """ # SCAN IMAGES @bp.route('/api/scan', methods=['POST']) def api_post_scan_images(): user = current_user if not user.is_authenticated: if not request.json: return create_json_return('400') if "api_key" not in request.json: return create_json_return('400') if request.json['api_key'] == "": return create_json_return('100') user = stashr_database.session \ .query(stashr_database.Users) \ .filter(stashr_database.Users.api_key == request.json['api_key']) \ .first() if user is None: return create_json_return('100') if user.role.lower() != 'admin': return create_json_return('401') tasks.scan_images_task() return create_json_return('200') # PROCESS IMAGES @bp.route('/api/process/images', methods=['POST']) def api_post_process_images(): user = current_user if not user.is_authenticated: if not request.json: return create_json_return('400') if "api_key" not in request.json: return create_json_return('400') if request.json['api_key'] == "": return create_json_return('100') user = stashr_database.session \ .query(stashr_database.Users) \ .filter(stashr_database.Users.api_key == request.json['api_key']) \ .first() if user is None: return create_json_return('100') if user.role.lower() != 'admin': return create_json_return('401') tasks.process_images_task() return create_json_return('200') @bp.route('/api/settings', methods=['GET']) def api_get_settings(): user = current_user if not user.is_authenticated: api_key = request.args.get('api_key') if api_key == "": return create_json_return('100') user = stashr_database.session \ .query(stashr_database.Users) \ .filter(stashr_database.Users.api_key == api_key) \ .first() if user is None: return create_json_return('100') if user.role.lower() != 'admin': return create_json_return('401') settings = thumbconfig return create_json_return('200', results=settings) """------------------------------ - PLUGIN FUNCTIONS ------------------------------""" @stashr_image_downloaded.connect def do_something(*args, **kwargs): pass """------------------------------ - REGISTER PLUGIN ------------------------------""" def register(): return dict( bep=dict( blueprint=bp, prefix='/thumbnailer' ), tep = dict( settings_menu='thumbnailer_tep_settings_menu.html', ) )