def translate_path(self, path): """ Finds the absolute path of the requested file by referring to the `site` variable in the server. """ site = self.server.site path = unquote(self.path) if not PY3: path = path.decode('utf-8') result = parse.urlparse(path) logger.debug( "Trying to load file based on request: [%s]" % result.path) path = result.path.lstrip('/') res = None if path.strip() == "" or File(path).kind.strip() == "": deployed = site.config.deploy_root_path.child(path) deployed = Folder.file_or_folder(deployed) if isinstance(deployed, Folder): node = site.content.node_from_relative_path(path) res = node.get_resource('index.html') elif hasattr(site.config, 'urlcleaner') and hasattr( site.config.urlcleaner, 'strip_extensions'): for ext in site.config.urlcleaner.strip_extensions: res = site.content.resource_from_relative_deploy_path( path + '.' + ext) if res: break for ext in site.config.urlcleaner.strip_extensions: new_path = site.config.deploy_root_path.child( path + '.' + ext) if File(new_path).exists: return new_path else: res = site.content.resource_from_relative_deploy_path(path) if not res: logger.error("Cannot load file: [%s]" % path) return site.config.deploy_root_path.child(path) else: self.server.generate_resource(res) new_path = site.config.deploy_root_path.child( res.relative_deploy_path) return new_path
def urldecode(ctx, url): url = unquote(url) if not PY3: url = url.decode('utf8') return url