Exemple #1
0
def generate_resource(request, resource_slug):
    """View for generated PDF of a specific resource.

    Args:
        request: HttpRequest object.
        resource_slug: The slug of the requested resource.

    Returns:
        HTML response containing PDF of resource, 404 if not found.
    """
    resource = get_object_or_404(Resource, slug=resource_slug)
    if not request.GET:
        raise Http404("No parameters given for resource generation.")
    try:
        generator = get_resource_generator(resource.generator_module,
                                           request.GET)
    except (QueryParameterMissingError, QueryParameterInvalidError,
            QueryParameterMultipleValuesError) as e:
        raise Http404(e) from e

    # TODO: Weasyprint handling in production
    # TODO: Add creation of PDF as job to job queue
    if settings.DJANGO_PRODUCTION:
        # Return cached static PDF file of resource.
        # Currently developing system for dynamically rendering
        # custom PDFs on request (https://github.com/uccser/render).
        return resource_pdf_cache(resource, generator)
    else:
        (pdf_file, filename) = generator.pdf(resource.name)
        response = HttpResponse(pdf_file, content_type="application/pdf")
        response["Content-Disposition"] = RESPONSE_CONTENT_DISPOSITION.format(
            filename=quote(filename))
        return response
Exemple #2
0
 def test_resources_cache_valid_resource(self):
     resource = self.test_data.create_resource(
         "grid",
         "Grid",
         "resources/grid.html",
         "GridResourceGenerator",
     )
     query = QueryDict("paper_size=a4")
     generator = get_resource_generator(resource.generator_module, query)
     response = resource_pdf_cache(resource.name, generator)
     self.assertEqual(response.status_code, HTTPStatus.FOUND)
     self.assertEqual(response.url,
                      "/staticfiles/resources/Grid%20(a4).pdf")