You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
stashr_image_thumbnailer/__init__.py

184 lines
5.1 KiB

#!/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',
)
)