Files
photoassistant/states.py

112 lines
5.4 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 )
last_used = db.Column(db.DateTime(timezone=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 )
st_offset = 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 )
## for now being lazy and not doing a separate table until I settle on needed fields and when
# only used if ptype == View
view_eid = db.Column(db.Integer, unique=False, nullable=False )
orig_ptype = db.Column(db.String, unique=False, nullable=False )
# only used if view and orig_ptype was search
orig_search_term = db.Column(db.String, unique=False, nullable=False )
orig_url = db.Column(db.String, unique=False, nullable=False )
current = db.Column(db.Integer)
first_eid = db.Column(db.Integer)
last_eid = db.Column(db.Integer)
num_entries = db.Column(db.Integer)
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}, st_offset: {self.st_offset}, size: {self.size}, folders: {self.folders}, root: {self.root}, cwd: {self.cwd}, view_eid: {self.view_eid}, orig_ptype: {self.orig_ptype}, orig_search_term: {self.orig_search_term}, orig_url: {self.orig_url}, current={self.current}, first_eid={self.first_eid}, last_eid={self.last_eid}, num_entries={self.num_entries}>"
################################################################################
# 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
################################################################################
# /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 )