Exemplo n.º 1
0
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()
Exemplo n.º 3
0
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 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()
Exemplo n.º 5
0
    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'
Exemplo n.º 6
0
    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'
Exemplo n.º 7
0
    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'
Exemplo n.º 8
0
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,
    )
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
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,
    )
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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