work in progress: configurable reports - basic interfaces and classes

This commit is contained in:
Helmut Merz 2011-11-09 10:53:05 +01:00
parent ef334a50fb
commit f7fd4ef30f
4 changed files with 91 additions and 0 deletions

View file

@ -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.

View file

@ -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
=============

View file

@ -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>

View file

@ -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>