diff --git a/organize/tracking/README.txt b/organize/tracking/README.txt index 569a9d1..0c3c6ec 100644 --- a/organize/tracking/README.txt +++ b/organize/tracking/README.txt @@ -136,9 +136,15 @@ Tracking Reports 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['macro'][4][1][u'define-macro'] u'overview' @@ -149,7 +155,7 @@ Recent changes -------------- >>> from loops.organize.tracking.report import RecentChanges - >>> view = RecentChanges(home, TestRequest()) + >>> view = RecentChanges(statQuery, TestRequest()) >>> result = view.getData() >>> result['macro'][4][1][u'define-macro'] u'recent_changes' diff --git a/organize/tracking/report.pt b/organize/tracking/report.pt index 45d2574..3af8895 100644 --- a/organize/tracking/report.pt +++ b/organize/tracking/report.pt @@ -1,7 +1,7 @@ -

Statistics Report


+ +
diff --git a/organize/tracking/report.py b/organize/tracking/report.py index 36f0b0d..f94712a 100644 --- a/organize/tracking/report.py +++ b/organize/tracking/report.py @@ -30,6 +30,7 @@ from zope.cachedescriptors.property import Lazy from zope.traversing.browser import absoluteURL from zope.traversing.api import getName +from cybertools.meta.interfaces import IOptions from cybertools.util import format from loops.browser.common import BaseView from loops.interfaces import IResource @@ -53,6 +54,10 @@ class TrackingStats(BaseView): def macros(self): return self.template.macros + @Lazy + def options(self): + return IOptions(self.adapted) + @Lazy def accessRecords(self): return self.filter(reversed(self.loopsRoot.getRecordManager()['access'].values())) @@ -128,11 +133,15 @@ class RecentChanges(TrackingStats): title = _(u'Recent Changes') 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 = {} changed = {} result = [] for track in self.changeRecords: + if len(result) >= size: + break if track.data['action'] == 'add' and track.taskId not in new: sameChanged = changed.get(track.taskId) if sameChanged and sameChanged.timeStamp < track.timeStamp + 60: @@ -146,8 +155,6 @@ class RecentChanges(TrackingStats): changed[track.taskId] = track result.append(track) continue - if len(result) > length: - break return dict(data=[TrackDetails(self, tr) for tr in result], macro=self.macros['recent_changes']) diff --git a/tests/setup.py b/tests/setup.py index f4b2959..7101e78 100644 --- a/tests/setup.py +++ b/tests/setup.py @@ -50,7 +50,7 @@ from loops.browser.node import ViewPropertiesConfigurator from loops.common import NameChooser from loops.concept import Concept 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 IDocument, IFile, ITextDocument from loops.layout.base import LayoutNode @@ -129,6 +129,7 @@ class TestSite(object): component.provideHandler(revokeAcquiredSecurity) component.provideAdapter(BaseSecuritySetter) component.provideAdapter(LoopsOptions) + component.provideAdapter(QueryOptions) component.provideUtility(GlobalOptions()) component.provideAdapter(Instance)