loops/organize/tracking/README.txt
helmutm a6559dfdf9 add doctests to access tracking
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2983 fd906abe-77d9-0310-91a1-e0d9ade77398
2008-11-13 13:34:13 +00:00

120 lines
3.9 KiB
Text

===============================================================
loops - Linked Objects for Organization and Processing Services
===============================================================
($Id$)
Let's do some basic setup
>>> from zope.app.testing.setup import placefulSetUp, placefulTearDown
>>> site = placefulSetUp(True)
>>> from zope import component, interface
and set up a simple loops site with a concept manager and some concepts
(with all the type machinery, what in real life is done via standard
ZCML setup):
>>> from loops.organize.setup import SetupManager
>>> component.provideAdapter(SetupManager, name='organize')
>>> from loops.organize.tracking.setup import SetupManager
>>> component.provideAdapter(SetupManager, name='organize.tracking')
>>> from loops.tests.setup import TestSite
>>> t = TestSite(site)
>>> concepts, resources, views = t.setup()
Tracking Changes
================
>>> loopsRoot = concepts.getLoopsRoot()
>>> records = loopsRoot.getRecordManager()
>>> changes = records['changes']
User management setup
---------------------
In order to be able to login and store personal data
we have to prepare our environment. We need some basic adapter registrations,
and a pluggable authentication utility with a principal folder.
>>> from loops.organize.tests import setupObjectsForTesting
>>> setupData = setupObjectsForTesting(site, concepts)
>>> johnC = setupData.johnC
Recording changes to objects
----------------------------
>>> from loops.organize.tracking.change import recordModification
>>> component.provideHandler(recordModification)
>>> loopsRoot.options = ['organize.tracking.changes']
>>> tTask = concepts['task']
>>> from loops.concept import Concept
>>> from loops.setup import addAndConfigureObject
>>> t01 = addAndConfigureObject(concepts, Concept, 't01', conceptType=tTask,
... title='Develop change tracking')
>>> len(changes)
1
Recording assignment changes
----------------------------
>>> from loops.organize.tracking.change import recordAssignment, recordDeassignment
>>> component.provideHandler(recordAssignment)
>>> component.provideHandler(recordDeassignment)
>>> t01.assignChild(johnC)
>>> len(changes)
2
Tracking Object Access
======================
Access records are not directly stored in the ZODB (in order to avoid
conflict errors) but first stored to a log file.
>>> from loops.organize.tracking.access import logfile_option, record, logAccess
>>> from loops.organize.tracking.access import AccessRecordManager
>>> from loops.organize.tracking.tests import testDir
>>> from loops.browser.node import NodeView
>>> from loops.browser.resource import ResourceView
>>> from loops import util
>>> from zope.app.publication.interfaces import EndRequestEvent
>>> from zope.publisher.browser import TestRequest
>>> loopsRoot.options = [logfile_option + ':test.log']
>>> request = TestRequest()
>>> home = views['home']
>>> record(request, principal='users.john', view='render',
... node=util.getUidForObject(home),
... target=util.getUidForObject(resources['d001.txt']),
... )
>>> record(request, principal='users.john', view='render',
... node=util.getUidForObject(home),
... target=util.getUidForObject(resources['d002.txt']),
... )
>>> logAccess(EndRequestEvent(NodeView(home, request), request), testDir)
They can then be read in via an AccessRecordManager object, i.e. a view
that may be called via ``wget`` using a crontab entry or some other kind
of job control.
>>> rm = AccessRecordManager(loopsRoot, TestRequest())
>>> rm.baseDir = testDir
>>> rm.loadRecordsFromLog()
Fin de partie
=============
>>> import os
>>> for fn in os.listdir(testDir):
... if '.log' in fn:
... os.unlink(os.path.join(testDir, fn))
>>> placefulTearDown()