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:
parent
68fe787feb
commit
b85d120ad2
1 changed files with 23 additions and 17 deletions
40
external/dsv.py
vendored
40
external/dsv.py
vendored
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue