debian-zeep/src/zeep/xsd/utils.py

64 lines
1.6 KiB
Python

from six.moves import range
from zeep import ns
class NamePrefixGenerator(object):
def __init__(self, prefix='_value_'):
self._num = 1
self._prefix = prefix
def get_name(self):
retval = '%s%d' % (self._prefix, self._num)
self._num += 1
return retval
class UniqueNameGenerator(object):
def __init__(self):
self._unique_count = {}
def create_name(self, name):
if name in self._unique_count:
self._unique_count[name] += 1
return '%s__%d' % (name, self._unique_count[name])
else:
self._unique_count[name] = 0
return name
def max_occurs_iter(max_occurs, items=None):
assert max_occurs is not None
generator = range(0, max_occurs if max_occurs != 'unbounded' else 2**31-1)
if items is not None:
for i, sub_kwargs in zip(generator, items):
yield sub_kwargs
else:
for i in generator:
yield i
def create_prefixed_name(qname, schema):
"""Convert a QName to a xsd:name ('ns1:myType').
:type qname: lxml.etree.QName
:type schema: zeep.xsd.schema.Schema
:rtype: str
"""
if not qname:
return
if schema and qname.namespace:
prefix = schema.get_shorthand_for_ns(qname.namespace)
if prefix:
return '%s:%s' % (prefix, qname.localname)
elif qname.namespace in ns.NAMESPACE_TO_PREFIX:
prefix = ns.NAMESPACE_TO_PREFIX[qname.namespace]
return '%s:%s' % (prefix, qname.localname)
if qname.namespace:
return qname.text
return qname.localname