allow for more than one key per CSV column

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3861 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-05-10 12:09:54 +00:00
parent 68fe787feb
commit b85d120ad2

40
external/dsv.py vendored
View file

@ -57,24 +57,27 @@ class CsvReader(BaseReader):
continue
currentElements = {}
for k, v in row.items():
k, v = self.preprocessField(k, v)
if k is None:
keys, v = self.preprocessField(k, v)
if not keys:
continue
type = None
if '.' in k:
type, k = k.split('.', 1)
element = currentElements.get(type)
if element is None:
ef = self.elementFactories.get(type)
if ef is None:
raise ValueError('Missing element factory for %r.' % type)
if ef == 'ignore':
continue
element = currentElements[type] = ef()
element.type = type
if isinstance(v, str):
v = v.decode(self.encoding)
element[k] = v
if not isinstance(keys, (tuple, list)):
keys = [keys]
for k in keys:
type = None
if '.' in k:
type, k = k.split('.', 1)
element = currentElements.get(type)
if element is None:
ef = self.elementFactories.get(type)
if ef is None:
raise ValueError('Missing element factory for %r.' % type)
if ef == 'ignore':
continue
element = currentElements[type] = ef()
element.type = type
if isinstance(v, str):
v = v.decode(self.encoding)
self.setValue(element, k, v)
for element in sorted(currentElements.values(), key=lambda x: x.order):
if element.identifier is None:
result.append(element)
@ -94,6 +97,9 @@ class CsvReader(BaseReader):
def preprocessField(self, k, v):
return k, v
def setValue(self, element, k, v):
element[k] = v
def getDate(self, value, correctBug=False):
if not value:
return value