def get(self): q = Package.select( Package.name, Package.is_proxy, Package.owner, Users.login, ).join( Users, peewee.JOIN.LEFT_OUTER ).order_by( Package.is_proxy.asc(), Package.lower_name.asc(), ) self.response( list( map( lambda x: dict( name=x.name, owner={ 'id': x.owner_id, 'name': x.owner.login if x.owner else None }, is_proxy=x.is_proxy, ), q ) ) )
def get(self): q = Package.select( Package, Users.login, ).join( Users, peewee.JOIN.LEFT_OUTER ).order_by( Package.is_proxy.asc(), Package.lower_name.asc(), ) self.response( list( map( lambda x: dict( name=x.name, owner={ 'id': x.owner_id, 'name': x.owner.login }, is_proxy=x.is_proxy, ), q ) ) )
def packages_list(cls, package): q = Package.select().join(PackageVersion).join(PackageFile).where( Package.lower_name == package.lower()).limit(1) exists = q.count() is_proxy = q.where(Package.is_proxy == True).count() return exists, is_proxy, q[0] if exists else None
def get_package(package): q = Package.select().where( Package.lower_name == package.lower() or Package.lower_name == normalize_package_name(package)).limit(1) if not q.count(): raise HTTPError(404) return q[0]
def get_package(package): q = Package.select().where( Package.lower_name == package.lower() or Package.lower_name == normalize_package_name(package) ).limit(1) if not q.count(): raise HTTPError(404) return q[0]
def action_file_upload(self): with DB.transaction(): package_name = self.get_body_argument('name').lower() if not Package.select().where( Package.lower_name == package_name).count(): raise HTTPError(404) package = Package.get(lower_name=package_name) if package.owner != self.current_user and not self.current_user.is_admin: raise HTTPError(403) version = package.create_version(self.get_body_argument('version')) uploaded_file = self.request.files['content'][0] if not str(hashlib.md5(uploaded_file.body).hexdigest()) == str( self.get_body_argument('md5_digest')): raise HTTPError(406) list_values = (u'classifiers', u'keywords') for key in self.METADATA_KEYS: val = self.get_body_argument(key, 'UNKNOWN') if key in list_values and not isinstance(val, (list, tuple)): val = [val] setattr(version, key, val) version.save() try: pkg_file = version.create_file(uploaded_file.filename) pkg_file.fetched = True pkg_file.md5 = str(self.get_body_argument('md5_digest')) if pkg_file.exists(): raise HTTPError(409) with pkg_file.open("wb+") as f: f.write(uploaded_file.body) pkg_file.save() except peewee.DataError: raise HTTPError(409)
def action_file_upload(self): with DB.transaction(): package_name = self.get_body_argument('name').lower() if not Package.select().where(Package.lower_name == package_name).count(): raise HTTPError(404) package = Package.get(lower_name=package_name) if package.owner != self.current_user and not self.current_user.is_admin: raise HTTPError(403) version = package.create_version(self.get_body_argument('version')) uploaded_file = self.request.files['content'][0] if not str(hashlib.md5(uploaded_file.body).hexdigest()) == str(self.get_body_argument('md5_digest')): raise HTTPError(406) list_values = (u'classifiers', u'keywords') for key in self.METADATA_KEYS: val = self.get_body_argument(key, 'UNKNOWN') if key in list_values and not isinstance(val, (list, tuple)): val = [val] setattr(version, key, val) version.save() try: pkg_file = version.create_file(uploaded_file.filename) pkg_file.fetched = True pkg_file.md5 = str(self.get_body_argument('md5_digest')) if pkg_file.exists(): raise HTTPError(409) with pkg_file.open("wb+") as f: f.write(uploaded_file.body) pkg_file.save() except peewee.DataError: raise HTTPError(409)
def packages_list(cls, package): q = Package.select().join( PackageVersion ).join( PackageFile ).where( Package.lower_name == package.lower() ).limit(1) exists = q.count() is_proxy = q.where(Package.is_proxy == True).count() return exists, is_proxy, q[0] if exists else None
def action_submit(self): name = self.get_body_argument('name') q = Package.select().where( Package.name == name, Package.owner == self.current_user ) if q.count(): raise HTTPError(409) if not self.current_user.is_admin: q = Package.select().where( Package.name == name, Package.owner != self.current_user ) if q.count(): raise HTTPError(403) pkg = Package(name=name, lower_name=name.lower(), owner=self.current_user) pkg.save()
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 find_file(self, package, version, filename): if not isinstance(package, Package): package = Package.find(package) pkg_file = PackageFile.select( PackageFile.id).join(Package).join(PackageVersion).where( PackageFile.package == package, PackageFile.basename == filename, PackageVersion.version == HashVersion(version), ).limit(1) if not pkg_file.count(): raise LookupError("Not found") return PackageFile.get(id=pkg_file[0].id)
def find_file(self, package, version, filename): if not isinstance(package, Package): package = Package.find(package) pkg_file = PackageFile.select( PackageFile.id ).join( Package ).join( PackageVersion ).where( PackageFile.package == package, PackageFile.basename == filename, PackageVersion.version == HashVersion(version), ).limit(1) if not pkg_file.count(): raise LookupError("Not found") return PackageFile.get(id=pkg_file[0].id)
def action_submit(self): name = self.get_body_argument('name') q = Package.select().where(Package.name == name, Package.owner == self.current_user) if q.count(): raise HTTPError(409) if not self.current_user.is_admin: q = Package.select().where(Package.name == name, Package.owner != self.current_user) if q.count(): raise HTTPError(403) pkg = Package(name=name, lower_name=name.lower(), owner=self.current_user) pkg.save()
def pkg_list(cls): return list(Package.select().order_by(Package.lower_name))
def rpc_list_packages(cls): return list(map(lambda x: x.name, Package.select()))
def rpc_package_releases(cls, package_name, show_hidden=False): package = Package.select().where(Package.name == package_name) return list(map(lambda x: str(x.name), package.versions()))