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 ) def __repr__(self): return f"" ################################################################################ # 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 )