Changeset 1322
- Timestamp:
- 10/13/08 08:16:43
- Files:
-
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml (modified) (2 diffs)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/export.cfg (modified) (2 diffs)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/import.cfg (modified) (2 diffs)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/manifest.py (modified) (4 diffs)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/manifest.txt (modified) (2 diffs)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/manifest_import.txt (deleted)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/propertymanager.txt (modified) (1 diff)
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/tests.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml
r1321 r1322 20 20 21 21 <utility 22 component=".manifest.ManifestSection" 23 name="quintagroup.transmogrifier.manifest" 22 component=".manifest.ManifestExporterSection" 23 name="quintagroup.transmogrifier.manifestexporter" 24 /> 25 26 <utility 27 component=".manifest.ManifestImporterSection" 28 name="quintagroup.transmogrifier.manifestimporter" 24 29 /> 25 30 … … 70 75 component=".reader.ReaderSection" 71 76 name="quintagroup.transmogrifier.reader" 72 />73 74 <utility75 component=".manifest.ManifestImportSection"76 name="quintagroup.transmogrifier.manifestimport"77 77 /> 78 78 quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/export.cfg
r1321 r1322 2 2 pipeline = 3 3 sitewalker 4 manifest 4 manifestexporter 5 5 marshaller 6 6 propertiesexporter … … 13 13 blueprint = quintagroup.transmogrifier.sitewalker 14 14 15 [manifest ]16 blueprint = quintagroup.transmogrifier.manifest 15 [manifestexporter] 16 blueprint = quintagroup.transmogrifier.manifestexporter 17 17 18 18 [marshaller] quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/import.cfg
r1321 r1322 2 2 pipeline = 3 3 reader 4 manifestimport 4 manifestimporter 5 5 constructor 6 6 datacorrector … … 18 18 .comments.xml = comments 19 19 20 [manifestimport ]21 blueprint = quintagroup.transmogrifier.manifestimport 20 [manifestimporter] 21 blueprint = quintagroup.transmogrifier.manifestimporter 22 22 23 23 [constructor] quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/manifest.py
r1314 r1322 7 7 from collective.transmogrifier.utils import defaultMatcher 8 8 9 class Manifest Section(object):9 class ManifestExporterSection(object): 10 10 classProvides(ISectionBlueprint) 11 11 implements(ISection) … … 16 16 17 17 self.entrieskey = defaultMatcher(options, 'entries-key', name, 'entries') 18 self.fileskey = options.get('files-key', '_files').strip() 18 19 19 20 def __iter__(self): … … 27 28 if manifest: 28 29 files = item.setdefault('_files', {}) 29 item[ '_files']['manifest'] = {30 item[self.fileskey]['manifest'] = { 30 31 'name': '.objects.xml', 31 32 'data': manifest, … … 34 35 yield item 35 36 36 def createManifest(self, data):37 if not data:37 def createManifest(self, entries): 38 if not entries: 38 39 return None 39 40 manifest = '<?xml version="1.0" ?>\n<manifest>\n' 40 for obj_id, obj_type in data:41 for obj_id, obj_type in entries: 41 42 manifest += ' <record type="%s">%s</record>\n' % (obj_type, obj_id) 42 43 manifest += "</manifest>\n" 43 44 return manifest 44 45 45 class ManifestImport Section(object):46 class ManifestImporterSection(object): 46 47 classProvides(ISectionBlueprint) 47 48 implements(ISection) quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/manifest.txt
r1321 r1322 1 Manifest section2 ================ 1 Manifest exporter and importer sections 2 ======================================= 3 3 4 A manifest section is used to create listing in XML format of all objects 5 contained in some folder. Manifest section blueprint name is 6 ``quintagroup.transmogrifier.manifest``. 4 A manifest exporter and importer sections are used to generate and parse 5 manifest files - listings of objects contained in some folder in XML format. 6 These listings are needed to set portal types for pipeline items and also act 7 as filter on them - items not listed in manifest will be removed. The manifest 8 exporter section blueprint name is 9 ``quintagroup.transmogrifier.manifestsexporter`` and importer section blueprint 10 name is ``quintagroup.transmogrifier.manifestimporter``. 11 12 Both sections has ``files-key`` option that gives key in item where XML data 13 will be or is stored (default is ``_files``). Exporter section has 14 ``entries-key`` option, which specifies key in item where list of 15 (object_id, portal_type) pairs that represents folder contents is stored 16 (default is ``_entries``). Importer section has ``path-key`` option which 17 specifies key in item where path to object is stored (default is ``_path``). 7 18 8 19 >>> manifest = """ … … 10 21 ... pipeline = 11 22 ... manifestsource 12 ... manifest 23 ... manifestexporter 24 ... manifestimporter 13 25 ... printer 26 ... dataprinter 14 27 ... 15 28 ... [manifestsource] 16 29 ... blueprint = quintagroup.transmogrifier.tests.manifestsource 17 30 ... 18 ... [manifest ]19 ... blueprint = quintagroup.transmogrifier.manifest 31 ... [manifestexporter] 32 ... blueprint = quintagroup.transmogrifier.manifestexporter 20 33 ... 34 ... [manifestimporter] 35 ... blueprint = quintagroup.transmogrifier.manifestimporter 36 ... 21 37 ... [printer] 22 38 ... blueprint = collective.transmogrifier.sections.tests.pprinter 39 ... 40 ... [dataprinter] 41 ... blueprint = quintagroup.transmogrifier.tests.dataprinter 42 ... print = 43 ... _files 44 ... manifest 45 ... data 23 46 ... """ 24 47 >>> registerConfig(u'quintagroup.transmogrifier.tests.manifest', 25 48 ... manifest) 26 >>> transmogrifier(u'quintagroup.transmogrifier.tests.manifest') # doctest: +ELLIPSIS 27 {'_entries': ((' document1', 'Document'),28 (' folder1', 'Folder'),29 (' document3', 'Document')),49 >>> transmogrifier(u'quintagroup.transmogrifier.tests.manifest') # doctest: +ELLIPSIS, +REPORT_NDIFF 50 {'_entries': (('news', 'Folder'), 51 ('events', 'Folder'), 52 ('front-page', 'Document')), 30 53 '_files': {'manifest': {'data': ... 31 'name': '.objects.xml'}}} 32 {} 33 >>> print data 54 'name': '.objects.xml'}}, 55 '_path': ''} 34 56 <?xml version="1.0" ?> 35 57 <manifest> 36 <record type=" Document">document1</record>37 <record type="Folder"> folder1</record>38 <record type="Document"> document3</record>58 <record type="Folder">news</record> 59 <record type="Folder">events</record> 60 <record type="Document">front-page</record> 39 61 </manifest> 40 62 <BLANKLINE> 63 {'_entries': (('aggregator', 'Topic'), ('not-existing', 'SomeType')), 64 '_files': {'manifest': {'data': ... 65 'name': '.objects.xml'}}, 66 '_path': 'news', 67 '_type': 'Folder'} 68 <?xml version="1.0" ?> 69 <manifest> 70 <record type="Topic">aggregator</record> 71 <record type="SomeType">not-existing</record> 72 </manifest> 73 <BLANKLINE> 74 {'_type': 'Topic', '_path': 'news/aggregator'} 75 {'_type': 'Folder', '_path': 'events'} 76 {'_type': 'Document', '_path': 'front-page'} quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/propertymanager.txt
r1318 r1322 13 13 properties. 14 14 15 Both sections has ``path-key`` option which specif ykey in item where path to15 Both sections has ``path-key`` option which specifies key in item where path to 16 16 object is stored (``_path`` is default) and ``files-key`` option that gives 17 17 key where XML data will be or is stored. Exporter section also has ``exclude`` quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/tests.py
r1321 r1322 117 117 sectionsSetUp(test) 118 118 119 item = {'_entries' : ( 120 ('document1', 'Document'), 121 ('folder1', 'Folder'), 122 ('document3', 'Document'),) 123 } 119 root = dict( 120 _path='', 121 _entries=( 122 ('news', 'Folder'), 123 ('events', 'Folder'), 124 ('front-page', 'Document') 125 ) 126 ) 127 128 news = dict( 129 _path='news', 130 _entries=( 131 ('aggregator', 'Topic'), 132 ('not-existing', 'SomeType') 133 ) 134 ) 135 136 aggregator = dict( 137 _path='news/aggregator', 138 ) 139 140 events = dict( 141 _path='events' 142 ) 143 144 front_page = dict( 145 _path='front-page', 146 ) 147 148 members = dict( 149 _path='Memebers' 150 ) 124 151 125 152 class ManifestSource(SampleSource): … … 129 156 def __init__(self, *args, **kw): 130 157 super(ManifestSource, self).__init__(*args, **kw) 131 self.sample = ( item, dict())158 self.sample = (root, dict(), news, aggregator, events, front_page, members) 132 159 133 160 provideUtility(ManifestSource, 134 161 name=u'quintagroup.transmogrifier.tests.manifestsource') 135 136 from quintagroup.transmogrifier.manifest import ManifestSection137 section = ManifestSection(test.globs['transmogrifier'],138 'manifest', {'blueprint': ''}, iter(()))139 data = section.createManifest(item['_entries'])140 test.globs['data'] = data141 162 142 163 def marshallSetUp(test): … … 576 597 context.SnapshotImportContext = type('Snapshot', (MockImportContext,), 577 598 {'listDirectory': lambda self, path: []}) 578 579 def manifestImportSetUp(test):580 sectionsSetUp(test)581 582 man1 = """<?xml version="1.0" ?>583 <manifest>584 <record type="Document">document1</record>585 <record type="Folder">folder1</record>586 </manifest>587 """588 589 man2 = """<?xml version="1.0" ?>590 <manifest>591 <record type="Document">document2</record>592 <record type="Document">document3</record>593 </manifest>594 """595 596 item1 = dict(597 _path='',598 _files=dict(599 manifest=dict(600 name='.objects.xml',601 data=man1602 )603 )604 )605 606 item2 = dict(607 _path='document1',608 )609 610 item3 = dict(611 _path='folder1',612 _files=dict(613 manifest=dict(614 name='.objects.xml',615 data=man2616 )617 )618 )619 620 item4 = dict(621 _path='folder1/document2',622 )623 624 item5 = dict(625 _path='document4',626 )627 628 class ManifestSource(SampleSource):629 classProvides(ISectionBlueprint)630 implements(ISection)631 632 def __init__(self, *args, **kw):633 super(ManifestSource, self).__init__(*args, **kw)634 self.sample = (item1, dict(), item2, item3, item4, item5)635 636 provideUtility(ManifestSource,637 name=u'quintagroup.transmogrifier.tests.manifestsource')638 599 639 600 def substitutionSetUp(test): … … 769 730 setUp=readerSetUp, tearDown=tearDown), 770 731 doctest.DocFileSuite( 771 'manifest_import.txt',772 setUp=manifestImportSetUp, tearDown=tearDown),773 doctest.DocFileSuite(774 732 'substitution.txt', 775 733 setUp=substitutionSetUp, tearDown=tearDown),
