from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.sql import func from .system import Persona from webinterface import db class Documento(db.Model): __tablename__ = 'archivos' __table_args__ = { 'schema': 'doc' } __bind_key__ = 'system' hash = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, autoincrement=False) nombre = db.Column(db.String, nullable=False) descripcion = db.Column(db.Text) tamano = db.Column(db.Integer, default=0) reemplazahash = db.Column(UUID(as_uuid=True), db.ForeignKey('doc.archivos.hash'), nullable=True) creado = db.Column(db.DateTime, server_default=func.now()) autorid = db.Column(db.BigInteger, db.ForeignKey('usuarios.personas.id')) reemplaza = db.relationship('Documento') # evidenciade = db.relationship('Evidencia') autor = db.relationship('Persona') @property def humansize(self): if self.tamano == 0: return "link" if self.tamano < 1000: return "{} B".format(self.tamano) elif self.tamano < 1000000: return "{:.2f} KB".format(self.tamano/1024) elif self.tamano < 1000000000: return "{:.2f} MB".format(self.tamano/1048576) else: return "{:.2fs} GB".format(self.tamano/1073741824) def get_file(self): if self.tamano == 0: return None else: hashstr = str(self.hash) return 'ilab_app/archivos/{}/{}-{}'.format(hashstr[:2],hashstr, self.nombre[:150]) def get_dir(self): if self.tamano == 0: return None else: hashstr = str(self.hash) return 'ilab_app/archivos/{}'.format(hashstr[:2]) @property def placeholder(self): if self.tamano > 0: return False elif self.nombre[:7] == 'http://' or self.nombre[:8] == 'https://': return False else: return True # @property # def objetivos(self): # for evidencia in self.evidenciade: # yield evidencia.actividad.objetivo # # @property # def visible(self): # from flask import current_app # from ilab_app.models.system import pertenece # comisiones = [] # for objetivo in self.objetivos: # comisiones = comisiones + [objetivo.responsableid, objetivo.invitadosid] # return pertenece(0, comisiones)