def get(self, package, version, filename): try: package = yield PYPIClient.find_real_name(package) except (LookupError, HTTPClientError) as e: if isinstance(e, HTTPClientError): log.warning("PYPI backend return an error: %s", e) package = yield self.thread_pool.submit(Package.find, package) try: pkg_file = yield self.find_file(package, version, filename) if not pkg_file.fetched: yield self.fetch_remote_file(pkg_file) except LookupError: self.send_error(404) else: self.set_header("MD5", pkg_file.md5) self.set_header("ETag", pkg_file.md5) self.set_header("Content-Length", pkg_file.size) self.set_header("Content-Type", 'application/octet-stream') self.set_header("Date", pkg_file.ts.strftime("%a, %d %b %Y %H:%M:%S %Z")) with pkg_file.open() as f: reader = threaded(f.read) data = yield reader(self.CHUNK_SIZE) self.write(data) yield Task(self.flush) while data: data = yield reader(self.CHUNK_SIZE) self.write(data) yield Task(self.flush) self.finish()
def proxy_package(cls, package): try: remote_package_exists = yield PYPIClient.exists(package) if remote_package_exists: pkg_real_name = yield PYPIClient.find_real_name(package) pkg = yield proxy_remote_package(pkg_real_name) raise Return(pkg) raise LookupError("Remote package not found") except (LookupError, HTTPClientError) as e: if isinstance(e, HTTPClientError): log.warning("PYPI backend return an error: %s", e) raise Return(Package.find(package))
def proxy_package(cls, package): try: remote_package_exists = yield PYPIClient.exists(package) if remote_package_exists: pkg_real_name = yield PYPIClient.find_real_name(package) pkg = yield proxy_remote_package(pkg_real_name) raise Return(pkg) raise LookupError("Remote package not found") except (LookupError, HTTPClientError) as e: if isinstance(e, HTTPClientError): log.warning("PYPI backend return an error: %s", e) raise Return(Package.find(package))
def get(self, package, version, filename): try: package = yield PYPIClient.find_real_name(package) except (LookupError, HTTPClientError) as e: if isinstance(e, HTTPClientError): log.warning("PYPI backend return an error: %s", e) package = yield self.thread_pool.submit(Package.find, package) try: pkg_file = yield self.find_file(package, version, filename) if not pkg_file.fetched: yield self.fetch_remote_file(pkg_file) except LookupError: self.send_error(404) else: self.set_header("MD5", pkg_file.md5) self.set_header("ETag", pkg_file.md5) self.set_header("Content-Length", pkg_file.size) self.set_header("Content-Type", 'application/octet-stream') self.set_header("Date", pkg_file.ts.strftime("%a, %d %b %Y %H:%M:%S %Z")) with pkg_file.open() as f: reader = threaded(f.read) data = yield reader(self.CHUNK_SIZE) self.write(data) yield Task(self.flush) for chunk in iter(lambda: reader(self.CHUNK_SIZE), None): data = yield chunk if not data: break self.write(data) yield Task(self.flush) self.finish()