def file_instance(dbsession, ftypes): from autonomie.models.files import File node = File(name="file01", file_type_id=ftypes['ftype1'].id, size=13, mimetype="text", ) node.data = "test content" dbsession.add(node) dbsession.flush() return node
def migrate_datas(): logger = logging.getLogger("alembic.autonomie") from autonomie_base.models.base import DBSESSION session = DBSESSION() from autonomie.models.config import Config import json from autonomie.models.files import ( File, FileType, ) json_str = Config.get_value("attached_filetypes", "[]") try: configured_filetypes = json.loads(json_str) except: logger.exception(u"Error in json str : %s" % json_str) configured_filetypes = [] if configured_filetypes: result = [] for filetype_label in configured_filetypes: if filetype_label: filetype = FileType(label=filetype_label) session.add(filetype) session.flush() result.append(filetype) for typ_ in result: query = File.query().filter_by(label=typ_.label) for file_ in query: file_.file_type_id = typ_.id session.merge(file_) session.flush()
def resize_headers_command(arguments, env): """ Resize headers to limit their size :param dict arguments: The arguments parsed from the command-line :param obj env: The pyramid environment """ from sqlalchemy import distinct from autonomie.models.files import File from autonomie.models.company import Company from autonomie.forms.company import HEADER_RESIZER limit = get_value(arguments, 'limit', None) offset = get_value(arguments, "offset", None) session = DBSESSION() file_id_query = session.query(distinct(Company.header_id)) if limit: file_id_query = file_id_query.limit(limit) if offset: file_id_query = file_id_query.offset(offset) header_ids = [i[0] for i in file_id_query] header_files = File.query().filter(File.id.in_(header_ids)) for header_file in header_files: file_datas = header_file.data_obj if file_datas: print( u"Resizing header with id : {}".format( header_file.id ) ) header_file.data = HEADER_RESIZER.complete(file_datas) session.merge(header_file)
def logo(self, appstruct): if self.logo_file is None: from autonomie.models.files import File self.logo_file = File() self.logo_file.name = appstruct.get('name', 'logo.png') for key, value in appstruct.items(): setattr(self.logo_file, key, value) self.logo_file.description = 'Logo'
def header(self, appstruct): if self.header_file is None: from autonomie.models.files import File self.header_file = File() for key, value in appstruct.items(): setattr(self.header_file, key, value) if 'name' not in appstruct: self.header_file.name = 'header.png' self.header_file.description = 'Header'
def header(self, appstruct): if self.header_file is None: from autonomie.models.files import File self.header_file = File() appstruct['filename'] = appstruct['name'] = 'header.png' appstruct['mimetype'] = 'image/png' for key, value in appstruct.items(): setattr(self.header_file, key, value) self.header_file.description = 'Header'
def mydocuments_view(context, request): """ View callable collecting datas for showing the social docs associated to the current user's account """ if context.userdatas is not None: query = File.query() documents = query.filter(File.parent_id == context.userdatas.id).all() else: documents = [] return dict( title=u"Mes documents", documents=documents, )
def persist_pdf(self, filename, pdf_buffer): """ Persist the pdf output of this task to the database :param obj pdf_buffer: A buffer (file, StringIO) :param str filename: The name of the pdf file """ from autonomie.models.files import File pdf_buffer.seek(0) self.pdf_file = File( name=filename, mimetype="application/pdf", ) self.pdf_file.data = pdf_buffer.read() DBSESSION().merge(self)
def mydocuments_view(context, request): """ View callable collecting datas for showing the social docs associated to the current user's account """ if context.userdatas is not None: query = File.query() documents = query.filter( File.parent_id == context.userdatas.id ).all() else: documents = [] return dict( title=u"Mes documents", documents=documents, )
def fetch_resource(uri, rel): """ Callback used by pisa to locally retrieve ressources giving the uri if the uri starts with /files : we're looking for a db file else we're looking for a static resource """ f_regex_group = FILEPATH_REGX.match(uri) pf_regex_group = PUBLIC_FILES_REGX.match(uri) if f_regex_group is not None: # C'est un modèle File que l'on doit renvoyer filename = f_regex_group.group('fileid') # On récupère l'objet fichier from autonomie.models.files import File fileobj = File.get(filename) resource = get_db_file_resource(fileobj) elif pf_regex_group is not None: key = pf_regex_group.group('filekey') from autonomie.models.config import ConfigFiles fileobj = ConfigFiles.get(key) resource = get_db_file_resource(fileobj) else: # C'est un fichier statique request = get_current_request() introspector = request.registry.introspector if uri.startswith('/'): uri = uri[1:] mainuri, sep, relative_filepath = uri.partition('/') mainuri = mainuri + '/' resource = '' for staticpath in introspector.get_category('static views'): if mainuri == staticpath['introspectable']['name']: basepath = staticpath['introspectable']['spec'] resource = join(basepath, relative_filepath).encode('utf-8') if ':' in resource: package, filename = resource.split(':') resource = pkg_resources.resource_filename( package, filename, ) break return resource
def store_compiled_file(context, request, output, template): """ Stores the compiled datas in the user's environment :param context: The context of the """ logger.debug(u"Storing the compiled file") name = get_filename(template.name) output.seek(0) datas = output.getvalue() file_obj = File(name=name, description=template.description, data=output, mimetype="application/vnd.oasis.opendocument.text", size=len(datas), parent_id=context.id) request.dbsession.add(file_obj) return file_obj