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