def simple(prefix=""): fp = request.fullpath if not fp.endswith("/"): fp += "/" files = [x.relfn for x in sorted(find_packages(packages(), prefix=prefix), key=lambda x: x.parsed_version)] if not files: if config.redirect_to_fallback: return redirect("%s/%s/" % (config.fallback_url.rstrip("/"), prefix)) return HTTPError(404) links = [(os.path.basename(f), urljoin(fp, "../../packages/%s" % f.replace("\\", "/"))) for f in files] tmpl = """\ <html> <head> <title>Links for {{prefix}}</title> </head> <body> <h1>Links for {{prefix}}</h1> % for file, href in links: <a href="{{href}}">{{file}}</a><br> </body> </html> """ return template(tmpl, prefix=prefix, links=links)
def update(): if not request.auth or request.auth[1] is None: raise HTTPError(401, header={"WWW-Authenticate": 'Basic realm="pypi"'}) if not validate_user(*request.auth): raise HTTPError(403) try: action = request.forms[':action'] except KeyError: raise HTTPError(400, output=":action field not found") if action in ("verify", "submit"): return "" if action == "doc_upload": try: content = request.files['content'] except KeyError: raise HTTPError(400, output="content file field not found") zip_data = content.file.read() try: zf = zipfile.ZipFile(BytesIO(zip_data)) info = zf.getinfo('index.html') except Exception: raise HTTPError(400, output="not a zip file") return "" if action == "remove_pkg": name = request.forms.get("name") version = request.forms.get("version") if not name or not version: raise HTTPError(400, "Name or version not specified") found = None for pkg in find_packages(packages()): if pkg.pkgname == name and pkg.version == version: found = pkg break if found is None: raise HTTPError(404, "%s (%s) not found" % (name, version)) os.unlink(found.fn) return "" if action != "file_upload": raise HTTPError(400, output="action not supported: %s" % action) try: content = request.files['content'] except KeyError: raise HTTPError(400, output="content file field not found") if "/" in content.filename: raise HTTPError(400, output="bad filename") if not config.overwrite and exists(packages.root, content.filename): raise HTTPError(409, output="file already exists") store(packages.root, content.filename, content.value) return ""
def server_static(filename): entries = find_packages(packages()) for x in entries: f = x.relfn.replace("\\", "/") if f == filename: return static_file(filename, root=x.root, mimetype=mimetypes.guess_type(filename)[0]) return HTTPError(404)
def server_static(filename): entries = find_packages(packages()) for x in entries: f = x.relfn.replace("\\", "/") if f == filename: return static_file(filename, root=x.root) return HTTPError(404)
def update(): try: action = request.forms[':action'] except KeyError: raise HTTPError(400, output=":action field not found") if action in ("verify", "submit"): return "" if action == "doc_upload": try: content = request.files['content'] except KeyError: raise HTTPError(400, output="content file field not found") zip_data = content.file.read() try: zf = zipfile.ZipFile(BytesIO(zip_data)) zf.getinfo('index.html') except Exception: raise HTTPError(400, output="not a zip file") return "" if action == "remove_pkg": name = request.forms.get("name") version = request.forms.get("version") if not name or not version: raise HTTPError(400, "Name or version not specified") found = None for pkg in find_packages(packages()): if pkg.pkgname == name and pkg.version == version: found = pkg break if found is None: raise HTTPError(404, "%s (%s) not found" % (name, version)) os.unlink(found.fn) return "" if action != "file_upload": raise HTTPError(400, output="action not supported: %s" % action) try: content = request.files['content'] except KeyError: raise HTTPError(400, output="content file field not found") if "/" in content.filename: raise HTTPError(400, output="bad filename") if not config.overwrite and exists(packages.root, content.filename): log.warn("Cannot upload package(%s) since it already exists! \n" + " You may use `--overwrite` option when starting server to disable this check. ", content.filename) raise HTTPError(409, output="file already exists") store(packages.root, content.filename, content.value) return ""
def server_static(filename): entries = find_packages(packages()) for x in entries: f = x.relfn.replace("\\", "/") if f == filename: response = static_file(filename, root=x.root, mimetype=mimetypes.guess_type(filename)[0]) if config.cache_control: response.set_header("Cache-Control", "public, max-age=%s" % config.cache_control) return response return HTTPError(404)
def list_packages(): fp = request.fullpath if not fp.endswith("/"): fp += "/" files = [x.relfn for x in sorted(find_packages(packages()), key=lambda x: (os.path.dirname(x.relfn), x.pkgname, x.parsed_version))] res = ["<html><head><title>Index of packages</title></head><body>\n"] for x in files: x = x.replace("\\", "/") res.append('<a href="%s">%s</a><br>\n' % (urljoin(fp, x), x)) res.append("</body></html>\n") return "".join(res)
def server_static(filename): entries = find_packages(packages()) for x in entries: f = x.relfn.replace("\\", "/") if f == filename: if request.get('HTTP_SERVER', '').lower().startswith('nginx'): response.headers.update({ 'X-Accel-Redirect': x.root + '/' + filename, 'Content-Type': mimetypes.guess_type(filename)[0], }) return None return static_file(filename, root=x.root, mimetype=mimetypes.guess_type(filename)[0]) return HTTPError(404)
def list_packages(): fp = request.fullpath if not fp.endswith("/"): fp += "/" files = [ x.relfn for x in sorted(find_packages(packages()), key=lambda x: (os.path.dirname(x.relfn), x. pkgname, x.parsed_version)) ] res = ["<html><head><title>Index of packages</title></head><body>\n"] for x in files: x = x.replace("\\", "/") res.append('<a href="%s">%s</a><br>\n' % (urljoin(fp, x), x)) res.append("</body></html>\n") return "".join(res)
def simple(prefix=""): fp = request.fullpath if not fp.endswith("/"): fp += "/" files = [x.relfn for x in sorted(find_packages(packages(), prefix=prefix), key=lambda x: x.parsed_version)] if not files: if config.redirect_to_fallback: return redirect("%s/%s/" % (config.fallback_url.rstrip("/"), prefix)) return HTTPError(404) res = ["<html><head><title>Links for %s</title></head><body>\n" % prefix] res.append("<h1>Links for %s</h1>\n" % prefix) for x in files: abspath = urljoin(fp, "../../packages/%s" % x.replace("\\", "/")) res.append('<a href="%s">%s</a><br>\n' % (abspath, os.path.basename(x))) res.append("</body></html>\n") return "".join(res)
def list_packages(): fp = request.fullpath if not fp.endswith("/"): fp += "/" files = [x.relfn for x in sorted(find_packages(packages()), key=lambda x: (os.path.dirname(x.relfn), x.pkgname, x.parsed_version))] links = [(f.replace("\\", "/"), urljoin(fp, f)) for f in files] tmpl = """\ <html> <head> <title>Index of packages</title> </head> <body> <h1>Index of packages</h1> % for file, href in links: <a href="{{href}}">{{file}}</a><br> </body> </html> """ return template(tmpl, links=links)
def simple(prefix=""): fp = request.fullpath if not fp.endswith("/"): fp += "/" files = [ x.relfn for x in sorted(find_packages(packages(), prefix=prefix), key=lambda x: x.parsed_version) ] if not files: if config.redirect_to_fallback: return redirect("%s/%s/" % (config.fallback_url.rstrip("/"), prefix)) return HTTPError(404) res = ["<html><head><title>Links for %s</title></head><body>\n" % prefix] res.append("<h1>Links for %s</h1>\n" % prefix) for x in files: abspath = urljoin(fp, "../../packages/%s" % x.replace("\\", "/")) res.append('<a href="%s">%s</a><br>\n' % (abspath, os.path.basename(x))) res.append("</body></html>\n") return "".join(res)