Ejemplo n.º 1
0
    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
                )
            )
        )
Ejemplo n.º 2
0
    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
                )
            )
        )
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
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]
Ejemplo n.º 5
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]
Ejemplo n.º 6
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)
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
    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))
Ejemplo n.º 11
0
    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))
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    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()
Ejemplo n.º 15
0
 def pkg_list(cls):
     return list(Package.select().order_by(Package.lower_name))
Ejemplo n.º 16
0
 def rpc_list_packages(cls):
     return list(map(lambda x: x.name, Package.select()))
Ejemplo n.º 17
0
 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()))