source: products/quintagroup.transmogrifier/branches/plone-2.1/quintagroup.transmogrifier/quintagroup/transmogrifier/datacorrector.py @ 1413

Last change on this file since 1413 was 277, checked in by mylan, 18 years ago

Fix publishing bug

File size: 2.1 KB
Line 
1from zope.interface import classProvides, implements
2from zope.component import queryAdapter
3
4from collective.transmogrifier.interfaces import ISection, ISectionBlueprint
5from collective.transmogrifier.utils import defaultMatcher
6
7from quintagroup.transmogrifier.interfaces import IExportDataCorrector
8from quintagroup.transmogrifier.interfaces import IImportDataCorrector
9
10class DataCorrectorSection(object):
11    classProvides(ISectionBlueprint)
12    implements(ISection)
13
14    def __init__(self, transmogrifier, name, options, previous):
15        self.previous = previous
16        self.context = transmogrifier.context
17
18        self.pathkey = defaultMatcher(options, 'path-key', name, 'path')
19        self.fileskey = defaultMatcher(options, 'files-key', name, 'files')
20
21        # 'type' options specifies adapter interface
22        self.type_ = options.get('type', 'export')
23        if self.type_ == 'export':
24            self.interface = IExportDataCorrector
25        elif self.type_ == 'import':
26            self.interface = IImportDataCorrector
27        else:
28            self.interface = None
29
30        # 'sources' specifies names of adapters
31        self.sources = options.get('sources', '')
32        self.sources = filter(None, [i.strip() for i in self.sources.splitlines()])
33
34    def __iter__(self):
35        for item in self.previous:
36            pathkey = self.pathkey(*item.keys())[0]
37            fileskey = self.fileskey(*item.keys())[0]
38
39            if not (pathkey and fileskey and self.sources):
40                yield item; continue
41
42            path = item[pathkey]
43            obj = self.context.unrestrictedTraverse(path, None)
44            if obj is None:         # path doesn't exist
45                yield item; continue
46
47            file_store = item[fileskey]
48            if not file_store:
49                yield item; continue
50
51            for name in self.sources:
52                if not name in file_store:
53                    continue
54                adapter = queryAdapter(obj, self.interface, name)
55                if adapter:
56                    file_store[name] = adapter(file_store[name])
57
58            yield item
Note: See TracBrowser for help on using the repository browser.