work in progress: configurable reports - basic interfaces and classes
This commit is contained in:
		
							parent
							
								
									ef334a50fb
								
							
						
					
					
						commit
						f7fd4ef30f
					
				
					 4 changed files with 91 additions and 0 deletions
				
			
		|  | @ -422,6 +422,8 @@ class BaseView(GenericView, I18NView): | |||
|     def renderDescription(self, text=None): | ||||
|         if text is None: | ||||
|             text = self.description | ||||
|         if text is None: | ||||
|             return u'' | ||||
|         htmlPattern = re.compile(r'<(.+)>.+</\1>') | ||||
|         if htmlPattern.search(text): | ||||
|             return text | ||||
|  | @ -827,6 +829,27 @@ class SimpleTerms(object): | |||
|         return (token, self.terms[token]) | ||||
| 
 | ||||
| 
 | ||||
| class AdapterTerms(SimpleTerms): | ||||
|     """ Allows the selection of a named adapter from a list of tuples | ||||
|         (name, adapter). | ||||
| 
 | ||||
|         The adapter class may have a 'label' attribute for display. | ||||
|         The translation domain may be overridden by subclasses. | ||||
|     """ | ||||
| 
 | ||||
|     translate = _ | ||||
| 
 | ||||
|     def getTerm(self, value): | ||||
|         token, adapter = value | ||||
|         adapter = removeSecurityProxy(adapter) | ||||
|         label = getattr(adapter.__class__, 'label', token) | ||||
|         return SimpleTerm(token, token, self.translate(label)) | ||||
| 
 | ||||
|     def getValue(self, token): | ||||
|         # just store the name of the adapter | ||||
|         return (token, token) | ||||
| 
 | ||||
| 
 | ||||
| class LoopsTerms(object): | ||||
|     """ Provide the ITerms interface, e.g. for usage in selection | ||||
|         lists. | ||||
|  |  | |||
|  | @ -219,6 +219,25 @@ Query Concepts and Query Views | |||
|   >>> from loops.expert.browser.base import BaseQueryView | ||||
| 
 | ||||
| 
 | ||||
| Reports | ||||
| ======= | ||||
| 
 | ||||
|   >>> from loops.expert.report import IReport, Report | ||||
|   >>> component.provideAdapter(Report, provides=IReport) | ||||
| 
 | ||||
|   >>> report = Report(None) | ||||
| 
 | ||||
|   >>> from loops.expert.report import DefaultConceptReportInstance | ||||
|   >>> component.provideAdapter(DefaultConceptReportInstance, | ||||
|   ...                          name='default_concept_report') | ||||
| 
 | ||||
|   >>> from loops.expert.report import ReportTypeSourceList | ||||
|   >>> source = ReportTypeSourceList(report) | ||||
|   >>> list(source) | ||||
|   [(u'default_concept_report', | ||||
|     <loops.expert.report.DefaultConceptReportInstance object at ...>)] | ||||
| 
 | ||||
| 
 | ||||
| Fin de partie | ||||
| ============= | ||||
| 
 | ||||
|  |  | |||
|  | @ -54,4 +54,25 @@ | |||
|         factory="loops.expert.browser.search.ActionExecutor" | ||||
|         permission="zope.ManageContent" /> | ||||
| 
 | ||||
|   <!-- reporting --> | ||||
| 
 | ||||
|   <zope:adapter | ||||
|         factory="loops.browser.common.AdapterTerms" | ||||
|         for="loops.expert.report.ReportTypeSourceList | ||||
|              zope.publisher.interfaces.browser.IBrowserRequest" /> | ||||
| 
 | ||||
|   <zope:adapter | ||||
|         name="report.html" | ||||
|         for="loops.interfaces.IConcept | ||||
|              zope.publisher.interfaces.browser.IBrowserRequest" | ||||
|         provides="zope.interface.Interface" | ||||
|         factory="loops.expert.browser.report.ReportView" | ||||
|         permission="zope.View" /> | ||||
| 
 | ||||
|   <browser:page | ||||
|         name="results.html" | ||||
|         for="loops.interfaces.INode" | ||||
|         class="loops.expert.browser.report.ResultsView" | ||||
|         permission="zope.View" /> | ||||
| 
 | ||||
| </configure> | ||||
|  |  | |||
|  | @ -16,6 +16,34 @@ | |||
|   <adapter factory="loops.expert.setup.SetupManager" | ||||
|            name="expert" /> | ||||
| 
 | ||||
|   <!-- reporting --> | ||||
| 
 | ||||
|   <adapter factory="loops.expert.report.Report" | ||||
|            provides="loops.expert.report.IReport" trusted="True" /> | ||||
|   <class class="loops.expert.report.Report"> | ||||
|     <require permission="zope.View" | ||||
|              interface="loops.expert.report.IReport" /> | ||||
|     <require permission="zope.ManageContent" | ||||
|              set_schema="loops.expert.report.IReport" /> | ||||
|   </class> | ||||
| 
 | ||||
|   <adapter factory="loops.expert.report.DefaultConceptReportInstance" | ||||
|            name="default_concept_report" | ||||
|            trusted="True" /> | ||||
|   <class class="loops.expert.report.DefaultConceptReportInstance"> | ||||
|     <require permission="zope.View" | ||||
|              interface="loops.expert.report.IReportInstance" /> | ||||
|     <require permission="zope.ManageContent" | ||||
|              set_schema="loops.expert.report.IReportInstance" /> | ||||
|   </class> | ||||
| 
 | ||||
|   <utility | ||||
|       provides="zope.schema.interfaces.IVocabularyFactory" | ||||
|       component="loops.expert.report.ReportTypeSourceList" | ||||
|       name="loops.expert.reportTypeSource" /> | ||||
| 
 | ||||
|   <!-- includes --> | ||||
| 
 | ||||
|   <include package=".browser" /> | ||||
| 
 | ||||
| </configure> | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue