
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1686 fd906abe-77d9-0310-91a1-e0d9ade77398
92 lines
2.8 KiB
Text
92 lines
2.8 KiB
Text
===============================================================
|
|
loops - Linked Objects for Organization and Processing Services
|
|
===============================================================
|
|
|
|
Integration of external sources.
|
|
|
|
($Id$)
|
|
|
|
|
|
Setting up a loops Site and Utilities
|
|
=====================================
|
|
|
|
Let's do some basic set up
|
|
|
|
>>> from zope import component, interface
|
|
>>> from zope.traversing.api import getName
|
|
>>> from zope.app.testing.setup import placefulSetUp, placefulTearDown
|
|
>>> site = placefulSetUp(True)
|
|
|
|
and build a simple loops site with a concept manager and some concepts
|
|
(with a relation registry, a catalog, and all the type machinery - what
|
|
in real life is done via standard ZCML setup or via local utility
|
|
configuration):
|
|
|
|
>>> from loops.integrator.testsetup import TestSite
|
|
>>> t = TestSite(site)
|
|
>>> concepts, resources, views = t.setup()
|
|
|
|
>>> len(concepts) + len(resources)
|
|
18
|
|
|
|
|
|
External Collections
|
|
====================
|
|
|
|
The basis of our work will be ExternalCollection objects, i.e. concepts
|
|
of the 'extcollection' type. We use an adapter for providing the attributes
|
|
and methods of the external collect object.
|
|
|
|
>>> from loops.concept import Concept
|
|
>>> from loops.setup import addObject
|
|
>>> from loops.integrator.collection import ExternalCollectionAdapter
|
|
>>> tExternalCollection = concepts['extcollection']
|
|
>>> coll01 = addObject(concepts, Concept, 'coll01',
|
|
... title=u'Collection One', type=tExternalCollection)
|
|
>>> aColl01 = ExternalCollectionAdapter(coll01)
|
|
|
|
An external collection carries a set of attributes that control the access
|
|
to the external system:
|
|
|
|
>>> aColl01.providerName, aColl01.baseAddress, aColl01.address, aColl01.pattern
|
|
(None, None, None, None)
|
|
>>> from loops.integrator.testsetup import dataDir
|
|
>>> aColl01.baseAddress = dataDir
|
|
>>> aColl01.address = 'topics'
|
|
|
|
|
|
Directory Collection Provider
|
|
-----------------------------
|
|
|
|
The DirectoryCollectionProvider collects files from a directory in the
|
|
file system. The parameters (directory paths) are provided by the calling
|
|
object, the external collection itself.
|
|
|
|
>>> from loops.integrator.collection import DirectoryCollectionProvider
|
|
>>> dcp = DirectoryCollectionProvider()
|
|
|
|
>>> sorted(dcp.collect(aColl01))
|
|
['programming/BeautifulProgram.pdf', 'programming/zope/zope3.txt']
|
|
|
|
If we provide a selective pattern we get only part of the files:
|
|
|
|
>>> aColl01.pattern = r'.*\.txt'
|
|
>>> sorted(dcp.collect(aColl01))
|
|
['programming/zope/zope3.txt']
|
|
|
|
Let's now create the corresponding resource objects.
|
|
|
|
>>> aColl01.pattern = ''
|
|
>>> addresses = dcp.collect(aColl01)
|
|
>>> res = list(dcp.createExtFileObjects(aColl01, addresses))
|
|
>>> len(sorted(r.__name__ for r in res))
|
|
2
|
|
>>> xf1 = res[0]
|
|
>>> xf1.__name__
|
|
u'programming/BeautifulProgram.pdf'
|
|
|
|
|
|
Fin de partie
|
|
=============
|
|
|
|
>>> placefulTearDown()
|