Example #1
0
 def list_versions(self, projectname=None):
     if projectname is None:
         projectname = self.projectname
     try:
         return self.stage.list_versions(projectname)
     except UpstreamError as e:
         abort(self.request, 502, str(e))
Example #2
0
 def getstage(self, user, index):
     stage = self.model.getstage(user, index)
     if not stage:
         abort(self.request, 404,
               "The stage %s/%s could not be found." % (user, index))
     stage.__acl__ = StageACL(stage, self.restrict_modify).__acl__
     return stage
Example #3
0
 def verified_project(self):
     name = self.project
     try:
         if not self.stage.has_project(name):
             abort(self.request, 404, "The project %s does not exist." %(name))
     except UpstreamError as e:
         abort(self.request, 502, str(e))
     return name
Example #4
0
 def list_versions(self, project=None):
     if project is None:
         project = self.project
     try:
         res = self.stage.list_versions(project)
     except UpstreamError as e:
         abort(self.request, 502, str(e))
     if not res and not self.stage.has_project(project):
         abort(self.request, 404, "no project %r" % (project))
     return res
def json_info_view(context, request):
    baseurl = URL(request.application_url).asdir()
    version = context.stage.get_latest_version(context.project, stable=True)
    info = get_mutable_deepcopy(
        context.stage.get_versiondata(context.project, version))
    if not info:
        abort(request, 404, 'no info found')
    info.pop("+elinks", None)
    result = dict(info=info, releases={})
    for release in context.stage.get_releaselinks(context.project):
        result["releases"].setdefault(release.version, []).append(
            dict(url=baseurl.joinpath(release.relpath).url))
    return result
Example #6
0
 def filtered_list_all(self):
     stage = self.context.stage
     try:
         stage_results = list(stage.op_sro("list_projects_perstage"))
     except stage.UpstreamError as e:
         threadlog.error(e.msg)
         abort(self.request, 502, e.msg)
     releasefilter = set(get_release_filter(stage))
     results = []
     for stage, names in stage_results:
         filtered_names = releasefilter.intersection(names)
         results.append((stage, filtered_names))
     # at this point we are sure we can produce the data without
     # depending on remote networks
     return Response(body=b"".join(self._simple_list_all(stage, results)))
Example #7
0
 def callback(self, username, request):
     # Username arg is ignored.  Unfortunately _get_credentials winds up
     # getting called twice when authenticated_userid is called.  Avoiding
     # that, however, winds up duplicating logic from the superclass.
     credentials = self._get_credentials(request)
     if credentials:
         status, auth_user = self.auth.get_auth_status(credentials)
         request.log.debug("got auth status %r for user %r" % (status, auth_user))
         if status == "ok":
             return []
         elif status == "nouser":
             abort(request, 404, "user %r does not exist" % auth_user)
         elif status == "expired":
             abort_authenticate(request, msg="auth expired for %r" % auth_user)
         raise ValueError("Unknown authentication status: %s" % status)
Example #8
0
 def callback(self, username, request):
     # Username arg is ignored.  Unfortunately _get_credentials winds up
     # getting called twice when authenticated_userid is called.  Avoiding
     # that, however, winds up duplicating logic from the superclass.
     credentials = self._get_credentials(request)
     if credentials:
         status, auth_user = self.auth.get_auth_status(credentials)
         request.log.debug("got auth status %r for user %r" %
                           (status, auth_user))
         if status == "ok":
             return []
         elif status == "nouser":
             abort(request, 404, "user %r does not exist" % auth_user)
         elif status == "expired":
             abort_authenticate(request,
                                msg="auth expired for %r" % auth_user)
         raise ValueError("Unknown authentication status: %s" % status)
Example #9
0
    def filtered_list_project(self):
        request = self.request
        abort_if_invalid_project(request, request.matchdict["project"])
        project = self.context.project
        # we only serve absolute links so we don't care about the route's slash
        stage = self.context.stage
        releasefilter = get_release_filter(stage).get(project)
        if releasefilter is None:
            abort(self.request, 404, "The project %s does not exist." %(project))

        try:
            links = stage.get_simplelinks(project, sorted_links=False)
        except stage.UpstreamError as e:
            threadlog.error(e.msg)
            abort(request, 502, e.msg)

        result = []
        for key, url in links:
            parts = splitext_archive(key)[0].split('-')
            for index in range(1, len(parts)):
                name = normalize_name('-'.join(parts[:index]))
                if name == project:
                    version = '-'.join(parts[index:])
                    break
            else:
                continue
            if version in releasefilter:
                result.append((key, url))

        if not result:
            self.request.context.verified_project  # access will trigger 404 if not found

        # we don't need the extra stuff on the simple page for pip
        embed_form = False
        blocked_index = None
        response = Response(body=b"".join(self._simple_list_project(
            stage, project, result, embed_form, blocked_index)))
        if stage.ixconfig['type'] == 'mirror':
            serial = stage.key_projsimplelinks(project).get().get("serial")
            if serial > 0:
                response.headers[str("X-PYPI-LAST-SERIAL")] = str(serial)
        return response
Example #10
0
 def get_versiondata(self, projectname=None, version=None, perstage=False):
     if projectname is None:
         projectname = self.projectname  # raises 404 if not found
     if version is None:
         version = self.version
     if perstage:
         get = self.stage.get_versiondata_perstage
         msg = " on stage %r" % (self.index,)
     else:
         get = self.stage.get_versiondata
         msg = ""
     try:
         verdata = get(projectname, version)
     except UpstreamError as e:
         abort(self.request, 502, str(e))
     if not verdata:
         abort(
             self.request, 404, "The version %s of project %s does not exist%s." % (self.version, projectname, msg)
         )
     return verdata
Example #11
0
 def projectname(self):
     name = self.stage.get_projectname(self.name)
     if name is None:
         raise abort(self.request, 404, "The project %s does not exist." % self.name)
     if self.request.method == "GET" and name != self.name:
         new_matchdict = dict(self.request.matchdict)
         new_matchdict["name"] = name
         route_name = self.request.matched_route.name
         url = self.request.route_url(route_name, **new_matchdict)
         redirect(url)
     return name
Example #12
0
 def get_versiondata(self, project=None, version=None, perstage=False):
     if project is None:
         project = self.project
     if version is None:
         version = self.version
     if perstage:
         get = self.stage.get_versiondata_perstage
         msg = " on stage %r" %(self.index,)
     else:
         get = self.stage.get_versiondata
         msg = ""
     try:
         verdata = get(project, version)
     except UpstreamError as e:
         abort(self.request, 502, str(e))
     if not verdata:
         abort(self.request, 404,
               "The version %s of project %s does not exist%s." %
                            (self.version, project, msg))
     return verdata
Example #13
0
 def getstage(self, user, index):
     stage = self.model.getstage(user, index)
     if not stage:
         abort(self.request, 404, "The stage %s/%s could not be found." % (user, index))
     stage.__acl__ = StageACL(stage, self.restrict_modify).__acl__
     return stage
Example #14
0
 def user(self):
     user = self.model.get_user(self.username)
     if not user:
         abort(self.request, 404, "no user %r" % self.username)
     return user
Example #15
0
 def getstage(self, user, index):
     stage = self.model.getstage(user, index)
     if not stage:
         abort(self.request, 404,
               "The stage %s/%s could not be found." % (user, index))
     return stage
Example #16
0
 def user(self):
     user = self.model.get_user(self.username)
     if not user:
         abort(self.request, 404, "no user %r" % self.username)
     return user
Example #17
0
 def getstage(self, user, index):
     stage = self.model.getstage(user, index)
     if not stage:
         abort(self.request, 404, "no stage %s/%s" % (user, index))
     return stage
Example #18
0
 def getstage(self, user, index):
     stage = self.model.getstage(user, index)
     if not stage:
         abort(self.request, 404, "no stage %s/%s" % (user, index))
     return stage