예제 #1
0
    def target_node(self):
        if self._target_node is not None:
            return self._target_node
        env_name = self.environment_identifier()
        if not env_name:
            conf.log.warning("Failed reading identifier")
            raise NodeError('Target node was invalid: env_name not found')
        project = Project.get(env_name=env_name)
        # env_name might be different from project.env_name!
        base_url = project.get_dav_url(relative=True)
        path_info = normalized_base_url(self.req.uri)
        project_id = project.id
        download_config = FilesDownloadConfig(project.env_name, base_url=base_url)
        if not path_info.startswith(download_config.base_url):
            raise NodeError('Target node was invalid: uri %s does not start with %s',
                path_info, base_url)
        self._download_config = download_config
        try:
            node_factory = MappedFileNode(project_id,
                download_config.base_path, download_config.base_url, download_config.downloads_dir)
            self._target_node = MappedFileNode.from_request_path_info(path_info, node_factory)
        except Exception as e:
            conf.log.warning("Not node %s", str(e))
            raise NodeError('Target node was invalid: %s', str(e))

        return self._target_node
예제 #2
0
 def files_node_factory_and_config(self, req=None, context_name='files'):
     """
     :param req: Request object
     :param str context_name: either 'files' or 'webdav'
     :return:
     """
     ctx = None
     ctx_key = 'files.node_factory.' + context_name
     if req:
         ctx = get_context(req)
         try:
             return ctx[ctx_key], self.files_download_config(context_name, req=req)
         except KeyError:
             pass
     download_config = self.files_download_config(context_name=context_name, req=req)
     project = Project.get(self.env)
     project_id = project.id
     node_factory = MappedFileNode(project_id,
         download_config.base_path, download_config.base_url, download_config.downloads_dir)
     if ctx:
         ctx[ctx_key] = node_factory
     return node_factory, download_config