* a makepath function, opposite of splitpath
* fix: path splitting in last tag, but encode is still wrong. u-uh!
This commit is contained in:
+9
-1
@@ -82,7 +82,7 @@ def unzip(seq):
|
|||||||
|
|
||||||
def concat(l):
|
def concat(l):
|
||||||
'''concatenate a list of lists'''
|
'''concatenate a list of lists'''
|
||||||
return reduce( lambda x,y: x+y, l )
|
return reduce( operator.concat, l )
|
||||||
|
|
||||||
def strlist(l):
|
def strlist(l):
|
||||||
"""concatenate string reps of l's elements"""
|
"""concatenate string reps of l's elements"""
|
||||||
@@ -169,6 +169,14 @@ def splitpath(a):
|
|||||||
comps.pop()
|
comps.pop()
|
||||||
return comps
|
return comps
|
||||||
|
|
||||||
|
def makepath(comps, relative = False, sep = os.path.sep):
|
||||||
|
"""reconstruct a path from components"""
|
||||||
|
path = reduce(lambda x,y: x + sep + y, comps, '')
|
||||||
|
if relative:
|
||||||
|
return path[len(sep):]
|
||||||
|
else:
|
||||||
|
return path
|
||||||
|
|
||||||
# I'm not sure how necessary this is. Ahem.
|
# I'm not sure how necessary this is. Ahem.
|
||||||
def commonprefix(l):
|
def commonprefix(l):
|
||||||
"""an improved version of os.path.commonprefix,
|
"""an improved version of os.path.commonprefix,
|
||||||
|
|||||||
+7
-5
@@ -591,11 +591,10 @@ class autoxml(oo.autosuper):
|
|||||||
def gen_list_tag(cls, tag, spec):
|
def gen_list_tag(cls, tag, spec):
|
||||||
"""generate a list datatype. stores comps in tag/comp_tag"""
|
"""generate a list datatype. stores comps in tag/comp_tag"""
|
||||||
name, tag_type, req, path = cls.parse_spec(tag, spec)
|
name, tag_type, req, path = cls.parse_spec(tag, spec)
|
||||||
#head, last = cls.tagpath_head_last(path)
|
|
||||||
pathcomps = path.split('/')
|
pathcomps = path.split('/')
|
||||||
list_tagpath = path[:path.rfind('/')]
|
comp_tag = pathcomps.pop()
|
||||||
comp_tag = pathcomps[len(pathcomps)-1]
|
list_tagpath = util.makepath(pathcomps, sep='/', relative=True)
|
||||||
#TODO: make default path ... tag + '/' + comp_tag when comp is class!
|
|
||||||
|
|
||||||
if len(tag_type) != 1:
|
if len(tag_type) != 1:
|
||||||
raise Error(_('List type must contain only one element'))
|
raise Error(_('List type must contain only one element'))
|
||||||
@@ -623,7 +622,10 @@ class autoxml(oo.autosuper):
|
|||||||
dom = node.ownerDocument
|
dom = node.ownerDocument
|
||||||
if l and len(l) > 0:
|
if l and len(l) > 0:
|
||||||
for item in l:
|
for item in l:
|
||||||
listnode = addNode(dom, node, list_tagpath)
|
if list_tagpath:
|
||||||
|
listnode = addNode(dom, node, list_tagpath)
|
||||||
|
else:
|
||||||
|
listnode = node
|
||||||
encode_item(xml, listnode, item, errs)
|
encode_item(xml, listnode, item, errs)
|
||||||
else:
|
else:
|
||||||
if req is mandatory:
|
if req is mandatory:
|
||||||
|
|||||||
Reference in New Issue
Block a user