make size of recent changes report configurable; take title from query concept

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3045 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-12-06 14:54:44 +00:00
parent f0c04d5b36
commit 185deb40f5
4 changed files with 23 additions and 9 deletions

View file

@ -136,9 +136,15 @@ Tracking Reports
Overview (cumulative) statistics Overview (cumulative) statistics
-------------------------------- --------------------------------
>>> from loops.organize.tracking.report import TrackingStats >>> from loops.expert.concept import IQueryConcept
>>> tQuery = concepts['query'] = addAndConfigureObject(concepts, Concept,
... 'query', conceptType=concepts.getTypeConcept(),
... typeInterface=IQueryConcept)
>>> statQuery = addAndConfigureObject(concepts, Concept, 'stats',
... conceptType=tQuery)
>>> view = TrackingStats(home, TestRequest()) >>> from loops.organize.tracking.report import TrackingStats
>>> view = TrackingStats(statQuery, TestRequest())
>>> result = view.getData() >>> result = view.getData()
>>> result['macro'][4][1][u'define-macro'] >>> result['macro'][4][1][u'define-macro']
u'overview' u'overview'
@ -149,7 +155,7 @@ Recent changes
-------------- --------------
>>> from loops.organize.tracking.report import RecentChanges >>> from loops.organize.tracking.report import RecentChanges
>>> view = RecentChanges(home, TestRequest()) >>> view = RecentChanges(statQuery, TestRequest())
>>> result = view.getData() >>> result = view.getData()
>>> result['macro'][4][1][u'define-macro'] >>> result['macro'][4][1][u'define-macro']
u'recent_changes' u'recent_changes'

View file

@ -1,7 +1,7 @@
<metal:report define-macro="report" <metal:report define-macro="report"
tal:define="info item/getData"> tal:define="info item/getData">
<h2 i18n:translate="" <metal:title use-macro="item/conceptMacros/concepttitle" />
tal:content="item/title|default">Statistics Report</h2><br /> <br />
<metal:listing use-macro="info/macro" /> <metal:listing use-macro="info/macro" />
</metal:report> </metal:report>

View file

@ -30,6 +30,7 @@ from zope.cachedescriptors.property import Lazy
from zope.traversing.browser import absoluteURL from zope.traversing.browser import absoluteURL
from zope.traversing.api import getName from zope.traversing.api import getName
from cybertools.meta.interfaces import IOptions
from cybertools.util import format from cybertools.util import format
from loops.browser.common import BaseView from loops.browser.common import BaseView
from loops.interfaces import IResource from loops.interfaces import IResource
@ -53,6 +54,10 @@ class TrackingStats(BaseView):
def macros(self): def macros(self):
return self.template.macros return self.template.macros
@Lazy
def options(self):
return IOptions(self.adapted)
@Lazy @Lazy
def accessRecords(self): def accessRecords(self):
return self.filter(reversed(self.loopsRoot.getRecordManager()['access'].values())) return self.filter(reversed(self.loopsRoot.getRecordManager()['access'].values()))
@ -128,11 +133,15 @@ class RecentChanges(TrackingStats):
title = _(u'Recent Changes') title = _(u'Recent Changes')
def getData(self): def getData(self):
length = int(self.request.form.get('length', 15)) sizeOption = self.options('size')
size = int(self.request.form.get('size') or
(sizeOption and sizeOption[0]) or 15)
new = {} new = {}
changed = {} changed = {}
result = [] result = []
for track in self.changeRecords: for track in self.changeRecords:
if len(result) >= size:
break
if track.data['action'] == 'add' and track.taskId not in new: if track.data['action'] == 'add' and track.taskId not in new:
sameChanged = changed.get(track.taskId) sameChanged = changed.get(track.taskId)
if sameChanged and sameChanged.timeStamp < track.timeStamp + 60: if sameChanged and sameChanged.timeStamp < track.timeStamp + 60:
@ -146,8 +155,6 @@ class RecentChanges(TrackingStats):
changed[track.taskId] = track changed[track.taskId] = track
result.append(track) result.append(track)
continue continue
if len(result) > length:
break
return dict(data=[TrackDetails(self, tr) for tr in result], return dict(data=[TrackDetails(self, tr) for tr in result],
macro=self.macros['recent_changes']) macro=self.macros['recent_changes'])

View file

@ -50,7 +50,7 @@ from loops.browser.node import ViewPropertiesConfigurator
from loops.common import NameChooser from loops.common import NameChooser
from loops.concept import Concept from loops.concept import Concept
from loops.concept import IndexAttributes as ConceptIndexAttributes from loops.concept import IndexAttributes as ConceptIndexAttributes
from loops.config.base import GlobalOptions, LoopsOptions from loops.config.base import GlobalOptions, LoopsOptions, QueryOptions
from loops.interfaces import ILoopsObject, IIndexAttributes from loops.interfaces import ILoopsObject, IIndexAttributes
from loops.interfaces import IDocument, IFile, ITextDocument from loops.interfaces import IDocument, IFile, ITextDocument
from loops.layout.base import LayoutNode from loops.layout.base import LayoutNode
@ -129,6 +129,7 @@ class TestSite(object):
component.provideHandler(revokeAcquiredSecurity) component.provideHandler(revokeAcquiredSecurity)
component.provideAdapter(BaseSecuritySetter) component.provideAdapter(BaseSecuritySetter)
component.provideAdapter(LoopsOptions) component.provideAdapter(LoopsOptions)
component.provideAdapter(QueryOptions)
component.provideUtility(GlobalOptions()) component.provideUtility(GlobalOptions())
component.provideAdapter(Instance) component.provideAdapter(Instance)