Adds a Links report type, which can be used to generate a list of links to display with a report.
This commit is contained in:
		
							parent
							
								
									e8cfd024d3
								
							
						
					
					
						commit
						53e6278116
					
				
					 1 changed files with 35 additions and 5 deletions
				
			
		|  | @ -47,13 +47,17 @@ class Report(object): | ||||||
| 
 | 
 | ||||||
|         if content_type == "text/html": |         if content_type == "text/html": | ||||||
|             return Report._html_link(address, text) |             return Report._html_link(address, text) | ||||||
|  |         else: | ||||||
|  |             return text | ||||||
| 
 | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def _html_link(address, text): |     def _html_link(address, text): | ||||||
|         return '<a href="%s">%s</a>' % (address, text) |         return '<a href="%s">%s</a>' % (address, text) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ReportTemplateWrapper(object): | class _ReportTemplateWrapper(object): | ||||||
|  |     ''' Used internally to pass `Report` objects to templates. They effectively | ||||||
|  |     are used to specify the content_type for a report. ''' | ||||||
| 
 | 
 | ||||||
|     def __init__(self, content_type, report): |     def __init__(self, content_type, report): | ||||||
|         self.content_type = content_type |         self.content_type = content_type | ||||||
|  | @ -93,14 +97,40 @@ class OldReport(Report): | ||||||
|             if index > 0 or not self._link_view: |             if index > 0 or not self._link_view: | ||||||
|                 return text |                 return text | ||||||
|             else: |             else: | ||||||
|                 address = reverse(self._link_view, args=[text]) |                 address = self.get_link(text) | ||||||
|                 return self._linked_text(content_type, address, text) |                 return self._linked_text(content_type, address, text) | ||||||
| 
 | 
 | ||||||
|         for row in self._data: |         for row in self._data: | ||||||
|             yield [cell_text(i, cell) for i, cell in enumerate(row)] |             yield [cell_text(i, cell) for i, cell in enumerate(row)] | ||||||
| 
 | 
 | ||||||
|     def _get_link(self, argument): |     def get_link(self, argument): | ||||||
|         return reverse(self._link_view, argument) |         return reverse(self._link_view, args=[argument]) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Links(Report): | ||||||
|  | 
 | ||||||
|  |     def __init__(self, title, links): | ||||||
|  |         ''' | ||||||
|  |         Arguments: | ||||||
|  |             links ([tuple, ...]): a list of 2-tuples: | ||||||
|  |                 (url, link_text) | ||||||
|  | 
 | ||||||
|  |         ''' | ||||||
|  |         self._title = title | ||||||
|  |         self._links = links | ||||||
|  | 
 | ||||||
|  |     def title(self): | ||||||
|  |         return self._title | ||||||
|  | 
 | ||||||
|  |     def headings(self): | ||||||
|  |         return [] | ||||||
|  | 
 | ||||||
|  |     def rows(self, content_type): | ||||||
|  |         print self._links | ||||||
|  |         for url, link_text in self._links: | ||||||
|  |             yield [ | ||||||
|  |                 self._linked_text(content_type, url, link_text) | ||||||
|  |             ] | ||||||
| 
 | 
 | ||||||
| def report_view(title, form_type=None): | def report_view(title, form_type=None): | ||||||
|     ''' Decorator that converts a report view function into something that |     ''' Decorator that converts a report view function into something that | ||||||
|  | @ -133,7 +163,7 @@ def report_view(title, form_type=None): | ||||||
|                 reports = [reports] |                 reports = [reports] | ||||||
| 
 | 
 | ||||||
|             reports = [ |             reports = [ | ||||||
|                 ReportTemplateWrapper("text/html", report) |                 _ReportTemplateWrapper("text/html", report) | ||||||
|                 for report in reports |                 for report in reports | ||||||
|             ] |             ] | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer