Adds some reporting documentation

This commit is contained in:
Christopher Neugebauer 2016-12-07 10:18:54 +11:00
parent ea07469634
commit 37fbc2ee40

View file

@ -213,8 +213,21 @@ def report_view(title, form_type=None):
class ReportView(object): class ReportView(object):
''' View objects that can render report data into HTML or CSV. '''
def __init__(self, inner_view, title, form_type): def __init__(self, inner_view, title, form_type):
'''
Arguments:
inner_view: Callable that returns either a Report or a sequence of
Report objects.
title: The title that appears at the top of all of the reports.
form_type: A Form class that can be used to query the report.
'''
# Consolidate form_type so it has content type and section # Consolidate form_type so it has content type and section
self.inner_view = inner_view self.inner_view = inner_view
self.title = title self.title = title
@ -226,6 +239,8 @@ class ReportView(object):
def get_form(self, request): def get_form(self, request):
''' Creates an instance of self.form_type using request.GET '''
# Create a form instance # Create a form instance
if self.form_type is not None: if self.form_type is not None:
form = self.form_type(request.GET) form = self.form_type(request.GET)
@ -239,6 +254,10 @@ class ReportView(object):
@classmethod @classmethod
def wrap_reports(cls, reports, content_type): def wrap_reports(cls, reports, content_type):
''' Wraps the reports in a _ReportTemplateWrapper for the given
content_type -- this allows data to be returned as HTML links, for
instance. '''
reports = [ reports = [
_ReportTemplateWrapper(content_type, report) _ReportTemplateWrapper(content_type, report)
for report in reports for report in reports
@ -247,6 +266,16 @@ class ReportView(object):
return reports return reports
def render(self, data): def render(self, data):
''' Renders the reports based on data.content_type's value.
Arguments:
data (ReportViewRequestData): The report data. data.content_type
is used to determine how the reports are rendered.
Returns:
HTTPResponse: The rendered version of the report.
'''
renderers = { renderers = {
"text/csv": self._render_as_csv, "text/csv": self._render_as_csv,
"text/html": self._render_as_html, "text/html": self._render_as_html,
@ -280,8 +309,20 @@ class ReportView(object):
class ReportViewRequestData(object): class ReportViewRequestData(object):
'''
Attributes:
form (Form): form based on request
reports ([Report, ...]): The reports rendered from the request
Arguments:
report_view (ReportView): The ReportView to call back to.
request (HTTPRequest): A django HTTP request
'''
def __init__(self, report_view, request, *a, **k): def __init__(self, report_view, request, *a, **k):
self.report_view = report_view self.report_view = report_view
self.request = request self.request = request