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
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