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):
|
def renderDescription(self, text=None):
|
||||||
if text is None:
|
if text is None:
|
||||||
text = self.description
|
text = self.description
|
||||||
|
if text is None:
|
||||||
|
return u''
|
||||||
htmlPattern = re.compile(r'<(.+)>.+</\1>')
|
htmlPattern = re.compile(r'<(.+)>.+</\1>')
|
||||||
if htmlPattern.search(text):
|
if htmlPattern.search(text):
|
||||||
return text
|
return text
|
||||||
|
@ -827,6 +829,27 @@ class SimpleTerms(object):
|
||||||
return (token, self.terms[token])
|
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):
|
class LoopsTerms(object):
|
||||||
""" Provide the ITerms interface, e.g. for usage in selection
|
""" Provide the ITerms interface, e.g. for usage in selection
|
||||||
lists.
|
lists.
|
||||||
|
|
|
@ -219,6 +219,25 @@ Query Concepts and Query Views
|
||||||
>>> from loops.expert.browser.base import BaseQueryView
|
>>> 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
|
Fin de partie
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
|
@ -54,4 +54,25 @@
|
||||||
factory="loops.expert.browser.search.ActionExecutor"
|
factory="loops.expert.browser.search.ActionExecutor"
|
||||||
permission="zope.ManageContent" />
|
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>
|
</configure>
|
||||||
|
|
|
@ -16,6 +16,34 @@
|
||||||
<adapter factory="loops.expert.setup.SetupManager"
|
<adapter factory="loops.expert.setup.SetupManager"
|
||||||
name="expert" />
|
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" />
|
<include package=".browser" />
|
||||||
|
|
||||||
</configure>
|
</configure>
|
||||||
|
|
Loading…
Add table
Reference in a new issue