def user_profile(app, request, username): user = app.db.accounts.get_user(username) if user is None: raise NotFound("Could not find user {}".format(username)) if user["username"] != username: return redirect( url_for( request, "warehouse.accounts.views.user_profile", username=user["username"], ), code=301, ) return render_response( app, request, "accounts/profile.html", user=user, projects=app.db.packaging.get_projects_for_user(user["username"]), )
def test_redirect_unicode(): resp = redirect(six.text_type("/foo/")) assert resp.status_code == 302 assert resp.headers["Location"] == "/foo/"
def test_redirect_bytes(): resp = redirect(b"/foo/") assert resp.status_code == 302 assert resp.headers["Location"] == "/foo/"
def project_detail(app, request, project_name, version=None): # Get the real project name for this project project = app.db.packaging.get_project(project_name) if project is None: raise NotFound("Cannot find a project named {}".format(project_name)) # Look up all the releases for the given project releases = app.db.packaging.get_releases(project["name"]) if not releases: # If there are no releases then we need to return a simpler response # that simply states the project exists but that there is no versions # registered. raise NotFound( "There are no releases registered for the {} project".format( project["name"], ), ) if project["name"] != project_name: # We've found the project, and the version exists, but the project name # isn't quite right so we'll redirect them to the correct one. return redirect( url_for( request, "warehouse.packaging.views.project_detail", project_name=project["name"], version=version, ), code=301, ) if version is None: # If there's no version specified, then we use the latest version version = releases[0]["version"] elif version not in (r["version"] for r in releases): # If a version was specified then we need to ensure it's one of the # versions this project has, else raise a NotFound raise NotFound( "Cannot find the {} version of the {} project".format( version, project["name"], ), ) # Get the release data for the version release = app.db.packaging.get_release(project["name"], version) # Get the number of reverse dependencies for this project project_url = lambda name: url_for( request, 'warehouse.packaging.views.project_detail', project_name=name) reverse_dependencies = [{ 'name': row['name'], 'url': project_url(row['name']) } for row in app.db.packaging.get_reverse_dependencies(project["name"] + ' %')] if release.get("description"): # Render the project description description_html, rendered = readme.rst.render(release["description"]) if not rendered: description_html = description_html.replace("\n", "<br>") if app.config.camo: description_html = camouflage_images( app.config.camo.url, app.config.camo.key, description_html, ) else: description_html = "" # Mark our description_html as safe as it's already been cleaned by bleach description_html = jinja2.Markup(description_html) # Split the requirement string to (project name, the rest) requirements = [] for req in release.get('requires_dist', []): project_name, *other = req.split(' ', 1) url = url_for(request, 'warehouse.packaging.views.project_detail', project_name=project_name) requirements.append({ 'project_name': project_name, 'project_url': url, 'other': other[0] if other else '' }) return render_response( app, request, "projects/detail.html", project=project["name"], release=release, releases=releases, requirements=requirements, reverse_dependencies=reverse_dependencies, description_html=description_html, download_counts=app.db.packaging.get_download_counts(project["name"]), downloads=app.db.packaging.get_downloads(project["name"], version), classifiers=app.db.packaging.get_classifiers(project["name"], version), documentation=app.db.packaging.get_documentation_url(project["name"]), bugtracker=app.db.packaging.get_bugtrack_url(project["name"]), maintainers=app.db.packaging.get_users_for_project(project["name"]), )
def project_detail(app, request, project_name, version=None): # Get the real project name for this project project = app.db.packaging.get_project(project_name) if project is None: raise NotFound("Cannot find a project named {}".format(project_name)) # Look up all the releases for the given project releases = app.db.packaging.get_releases(project) if not releases: # If there are no releases then we need to return a simpler response # that simply states the project exists but that there is no versions # registered. raise NotFound( "There are no releases registered for the {} project".format( project, ), ) if project != project_name: # We've found the project, and the version exists, but the project name # isn't quite right so we'll redirect them to the correct one. return redirect( url_for( request, "warehouse.packaging.views.project_detail", project_name=project, version=version, ), code=301, ) if version is None: # If there's no version specified, then we use the latest version version = releases[0]["version"] elif not version in (r["version"] for r in releases): # If a version was specified then we need to ensure it's one of the # versions this project has, else raise a NotFound raise NotFound( "Cannot find the {} version of the {} project".format( version, project, ), ) # Get the release data for the version release = app.db.packaging.get_release(project, version) if release.get("description"): # Render the project description description_html, rendered = readme.rst.render(release["description"]) if not rendered: description_html = description_html.replace("\n", "<br>") if app.config.camo: description_html = camouflage_images( app.config.camo.url, app.config.camo.key, description_html, ) else: description_html = "" # Mark our description_html as safe as it's already been cleaned by bleach description_html = jinja2.Markup(description_html) return render_response( app, request, "projects/detail.html", project=project, release=release, releases=releases, description_html=description_html, download_counts=app.db.packaging.get_download_counts(project), downloads=app.db.packaging.get_downloads(project, version), classifiers=app.db.packaging.get_classifiers(project, version), documentation=app.db.packaging.get_documentation_url(project), bugtracker=app.db.packaging.get_bugtrack_url(project), maintainers=app.db.packaging.get_users_for_project(project), )