104 lines
4.6 KiB
Python
104 lines
4.6 KiB
Python
from flask import request, render_template, redirect, url_for
|
|
from settings import Settings, SettingsIPath, SettingsSPath, SettingsRBPath
|
|
from flask_login import login_required, current_user
|
|
from main import db, app, ma
|
|
from shared import PA
|
|
from user import PAUser
|
|
from datetime import datetime
|
|
from job import SetFELog
|
|
from shared import SymlinkName
|
|
import pytz
|
|
import re
|
|
|
|
################################################################################
|
|
# PA_UserState: preference data for a given user / path_type combo, so a given user
|
|
# and their prefs for say the import path(s) and storage path(s) etc, each
|
|
# path_type has different defaults, and keeping those works better
|
|
################################################################################
|
|
class PA_UserState(db.Model):
|
|
__tablename__ = "pa_user_state"
|
|
id = db.Column(db.Integer, db.Sequence('pa_user_state_id_seq'), primary_key=True )
|
|
pa_user_dn = db.Column(db.String, db.ForeignKey('pa_user.dn'), primary_key=True )
|
|
path_type = db.Column(db.String, primary_key=True, unique=False, nullable=False )
|
|
noo = db.Column(db.String, unique=False, nullable=False )
|
|
grouping = db.Column(db.String, unique=False, nullable=False )
|
|
how_many = db.Column(db.Integer, unique=False, nullable=False )
|
|
size = db.Column(db.Integer, unique=False, nullable=False )
|
|
folders = db.Column(db.Boolean, unique=False, nullable=False )
|
|
root = db.Column(db.String, unique=False, nullable=False )
|
|
cwd = db.Column(db.String, unique=False, nullable=False )
|
|
search_term = db.Column(db.String, unique=False, nullable=False )
|
|
|
|
def __repr__(self):
|
|
return f"<pa_user_dn: {self.pa_user_dn}, path_type: {self.path_type}, noo: {self.noo}, grouping: {self.grouping}, how_many: {self.how_many}, size: {self.size}, folders: {self.folders}, root: {self.root}, cwd: {self.cwd}, search_term: {self.orig_search_term}>"
|
|
|
|
|
|
################################################################################
|
|
# States: class to store set of default values for viewing (order/size, etc.)
|
|
# and if a request object (from a POST) is passed in, it returns those instead
|
|
# it also handles the cwd appropriately, paths, search, etc.
|
|
################################################################################
|
|
class States(PA):
|
|
def __init__(self, request):
|
|
self.url = request.path
|
|
|
|
# set the prefix based on path
|
|
path=None
|
|
if 'files_ip' in self.url or 'file_list_ip' in self.url:
|
|
self.path_type = 'Import'
|
|
path = SettingsIPath()
|
|
elif 'files_sp' in self.url:
|
|
self.path_type = 'Storage'
|
|
path = SettingsSPath()
|
|
elif 'files_rbp' in self.url:
|
|
self.path_type = 'Bin'
|
|
path = SettingsRBPath()
|
|
elif 'search' in self.url:
|
|
self.path_type = 'Search'
|
|
self.search_term = ''
|
|
else:
|
|
self.path_type=''
|
|
|
|
if path:
|
|
self.prefix = SymlinkName(self.path_type,path,path+'/')
|
|
else:
|
|
self.prefix=None
|
|
|
|
# retreive defaults from 'PAUser' where defaults are stored
|
|
u=PAUser.query.filter(PAUser.dn==current_user.dn).one()
|
|
self.grouping=u.default_grouping
|
|
self.how_many=u.default_how_many
|
|
self.size=u.default_size
|
|
self.root='static/' + self.path_type
|
|
if self.path_type == 'Import':
|
|
self.noo = u.default_import_noo
|
|
self.folders = u.default_import_folders
|
|
elif self.path_type == 'Storage':
|
|
self.noo = u.default_storage_noo
|
|
self.folders = u.default_storage_folders
|
|
else:
|
|
# search so force folders to be false (rather see images, # than series of folders that dont match search themselves)
|
|
self.noo=u.default_search_noo
|
|
self.folders=False
|
|
|
|
self.default_flat_noo=u.default_import_noo
|
|
self.default_folder_noo=u.default_storage_noo
|
|
self.default_search_noo=u.default_search_noo
|
|
self.cwd=self.root
|
|
return
|
|
|
|
def to_dict(self):
|
|
# Automatically include all instance attributes
|
|
return {key: value for key, value in vars(self).items()}
|
|
|
|
|
|
################################################################################
|
|
# /states -> GET only -> prints out list of all prefs (simple for now)
|
|
################################################################################
|
|
@app.route("/states", methods=["GET"])
|
|
@login_required
|
|
def states():
|
|
user = PAUser.query.filter( PAUser.dn==current_user.dn ).one()
|
|
states = PA_UserState.query.filter( PA_UserState.pa_user_dn==current_user.dn ).all()
|
|
return render_template("states.html", user=user, states=states )
|