""" file containing all classes/functions to handle Path from the database """ from flask import url_for from shared import PA, ICON from main import db ################################################################################ class PathType(db.Model): """Class describing the type of Paths in the database Attributes: id (int): database id of row in PathType table / primary key name (str): name of path type (e.g. import, storage, bin) """ __tablename__ = "path_type" id:int = db.Column(db.Integer, db.Sequence("path_type_id_seq"), primary_key=True ) name:str = db.Column(db.String, unique=True, nullable=False ) def __repr__(self): return f"" ################################################################################ class Path(db.Model): __allow_unmapped__ = True """Class describing a Path in the database Attributes: id (int): database id of row in Path table / primary key type_id (int): id of row in PathType table / foreign key type (PathType): sqlalchemy relationship of PathType using type_id path_prefix (str): The actual dir on the filesystem that defines this Path num_files (int): number of files in this Path """ __tablename__ = "path" id:int = db.Column(db.Integer, db.Sequence("path_id_seq"), primary_key=True ) type_id:int = db.Column(db.Integer, db.ForeignKey("path_type.id")) type:PathType = db.relationship("PathType") path_prefix:str = db.Column(db.String, unique=True, nullable=False ) num_files:int = db.Column(db.Integer) def __repr__(self): return f"" ################################################################################ # Class describing PathDetail (quick connvenence class for MovePathDetails()) ################################################################################ class PathDetail(PA): """Class describing details of a Path [internal class used in MovePathDetais()]""" def __init__(self,ptype,path): """Initialisation function for PathDetail class Args: id (int): database id of row in PathDetail table / primary key ptype (int): database id of row in PathType table / foreign key """ self.type:int=ptype self.path:str=path # construct icon_url based on type of storage path (icons.svg contains icons for each) self.icon_url:str=url_for("internal", filename="icons.svg") + "#" + ICON[self.type] ################################################################################ # helper function to find path details for move destinations - used in html # for move DBox to show potential storage paths to move files into ################################################################################ def MovePathDetails(): """helper function to find path details for move destinations used in html/javascript for move Dialog Box to show potential storage paths to move files into Args: None Returns: ret (List[PathDetail]): a list of Path Details for where files can be moved """ ret=[] sps=Path.query.join(PathType).filter(PathType.name=="Storage").all() for p in sps: obj = PathDetail( ptype="Storage", path=p.path_prefix.replace("static/Storage/","") ) ret.append( obj ) ips=Path.query.join(PathType).filter(PathType.name=="Import").all() for p in ips: obj = PathDetail( ptype="Import", path=p.path_prefix.replace("static/Import/","") ) ret.append( obj ) return ret