work in progress: configurable reports - basic interfaces and classes, example report (work_report)

This commit is contained in:
Helmut Merz 2011-11-10 08:17:12 +01:00
parent f7fd4ef30f
commit f072066b3a
6 changed files with 30 additions and 27 deletions

View file

@ -829,27 +829,6 @@ 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.

View file

@ -227,15 +227,15 @@ Reports
>>> report = Report(None) >>> report = Report(None)
>>> from loops.expert.report import DefaultConceptReportInstance >>> from loops.expert.report import IReportInstance, DefaultConceptReportInstance
>>> component.provideAdapter(DefaultConceptReportInstance, >>> component.provideAdapter(DefaultConceptReportInstance,
... provides=IReportInstance,
... name='default_concept_report') ... name='default_concept_report')
>>> from loops.expert.report import ReportTypeSourceList >>> from loops.expert.report import ReportTypeSourceList
>>> source = ReportTypeSourceList(report) >>> source = ReportTypeSourceList(report)
>>> list(source) >>> list(source)
[(u'default_concept_report', [(u'default_concept_report', u'Default Concept Report')]
<loops.expert.report.DefaultConceptReportInstance object at ...>)]
Fin de partie Fin de partie

View file

@ -57,7 +57,7 @@
<!-- reporting --> <!-- reporting -->
<zope:adapter <zope:adapter
factory="loops.browser.common.AdapterTerms" factory="loops.browser.common.SimpleTerms"
for="loops.expert.report.ReportTypeSourceList for="loops.expert.report.ReportTypeSourceList
zope.publisher.interfaces.browser.IBrowserRequest" /> zope.publisher.interfaces.browser.IBrowserRequest" />

View file

@ -22,13 +22,14 @@
provides="loops.expert.report.IReport" trusted="True" /> provides="loops.expert.report.IReport" trusted="True" />
<class class="loops.expert.report.Report"> <class class="loops.expert.report.Report">
<require permission="zope.View" <require permission="zope.View"
interface="loops.expert.report.IReport" /> interface="loops.expert.report.IReportSchema" />
<require permission="zope.ManageContent" <require permission="zope.ManageContent"
set_schema="loops.expert.report.IReport" /> set_schema="loops.expert.report.IReportSchema" />
</class> </class>
<adapter factory="loops.expert.report.DefaultConceptReportInstance" <adapter factory="loops.expert.report.DefaultConceptReportInstance"
name="default_concept_report" name="default_concept_report"
provides="loops.expert.report.IReportInstance"
trusted="True" /> trusted="True" />
<class class="loops.expert.report.DefaultConceptReportInstance"> <class class="loops.expert.report.DefaultConceptReportInstance">
<require permission="zope.View" <require permission="zope.View"

View file

@ -180,6 +180,16 @@ So we use the PersonWorkItems view, assigning john to the query.
'creator': '33'}>] 'creator': '33'}>]
Work Reports
============
>>> from loops.organize.work.report import WorkReportInstance
>>> from loops.expert.report import IReportInstance
>>> component.provideAdapter(WorkReportInstance,
... provides=IReportInstance,
... name='work_report')
Fin de partie Fin de partie
============= =============

View file

@ -73,6 +73,19 @@
class="loops.organize.work.browser.WorkItemInfo" class="loops.organize.work.browser.WorkItemInfo"
permission="zope.View" /> permission="zope.View" />
<!-- reporting -->
<zope:adapter factory="loops.organize.work.report.WorkReportInstance"
name="work_report"
provides="loops.expert.report.IReportInstance"
trusted="True" />
<zope:class class="loops.organize.work.report.WorkReportInstance">
<require permission="zope.View"
interface="loops.expert.report.IReportInstance" />
<require permission="zope.ManageContent"
set_schema="loops.expert.report.IReportInstance" />
</zope:class>
<!-- setup --> <!-- setup -->
<zope:adapter factory="loops.organize.work.setup.SetupManager" <zope:adapter factory="loops.organize.work.setup.SetupManager"