def project_detail(app, request, project_name, version=None): # Get the real project name for this project project = app.models.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.models.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.models.packaging.get_release(project, version) if release.get("description"): # Render the project description description_html = htmlize(release["description"]) # If our description wasn't able to be rendered, wrap it in <pre></pre> if not description_html.rendered: description_html = "<pre>" + description_html + "</pre>" 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.models.packaging.get_download_counts(project), downloads=app.models.packaging.get_downloads(project, version), classifiers=app.models.packaging.get_classifiers(project, version), documentation=app.models.packaging.get_documentation_url(project), bugtracker=app.models.packaging.get_bugtrack_url(project), maintainers=app.models.packaging.get_users_for_project(project), )
counter = collections.Counter() unexpected = [] packages = client.list_packages() for package in Bar("Processing", max=len(packages)).iter(packages): for version in client.package_releases(package, True): release_data = client.release_data(package, version) description = release_data.get("description", "") if description is None: continue html = recliner.htmlize(description) pypi = pypi_render(description) counter["total"] += 1 if html.rendered: counter["recliner"] += 1 if pypi is not None: counter["pypi"] += 1 if not html.rendered and pypi is not None: unexpected.append((package, version)) for key, count in counter.items(): print key, "=>", count