[Kimchi-devel] [PATCH 2/6] Use objectify to Remove metadata namespace

Daniel Henrique Barboza danielhb at linux.vnet.ibm.com
Thu Nov 13 15:49:17 UTC 2014


Reviewed-by: Daniel Barboza <danielhb at linux.vnet.ibm.com>

On 11/11/2014 06:46 PM, Aline Manera wrote:
> When libvirt does not support virDomain.metadata() we need to do string
> manupulation to remove the Kimchi namespace. It was done using regex
> which was causing problems to remove undesirable content.
>
> Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
> ---
>   src/kimchi/model/utils.py | 22 ++++++++++------------
>   1 file changed, 10 insertions(+), 12 deletions(-)
>
> diff --git a/src/kimchi/model/utils.py b/src/kimchi/model/utils.py
> index 7dcabf8..d084f74 100644
> --- a/src/kimchi/model/utils.py
> +++ b/src/kimchi/model/utils.py
> @@ -18,10 +18,9 @@
>   # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
>
>   import libvirt
> -import re
>   import socket
>   import urlparse
> -from lxml import etree
> +from lxml import etree, objectify
>   from lxml.builder import E, ElementMaker
>
>   from kimchi.exception import OperationFailed
> @@ -136,17 +135,16 @@ def _kimchi_get_metadata_node(dom, tag):
>       root = etree.fromstring(xml)
>       kimchi = root.find("metadata/{%s}kimchi" % KIMCHI_META_URL)
>       # remove the "kimchi" prefix of xml
> -    # some developers may do not like to remove prefix by children iteration
> -    # so here, use re to remove the "kimchi" prefix of xml
> -    # and developers please don not define element like this:
> -    #     <foo attr="foo<kimchi:abcd>foo"></foo>
>       if kimchi is not None:
> -        kimchi_xml = etree.tostring(kimchi)
> -        ns_pattern = re.compile(" xmlns:.*?=((\".*?\")|('.*?'))")
> -        kimchi_xml = ns_pattern.sub("", kimchi_xml)
> -        prefix_pattern = re.compile("(?<=<)[^/]*?:|(?<=</).*?:")
> -        kimchi_xml = prefix_pattern.sub("", kimchi_xml)
> -        return etree.fromstring(kimchi_xml)
> +        for elem in kimchi.getiterator():
> +            if not hasattr(elem.tag, 'find'):
> +                continue
> +            i = elem.tag.find('}')
> +            if i >= 0:
> +                elem.tag = elem.tag[i+1:]
> +
> +        objectify.deannotate(kimchi, cleanup_namespaces=True)
> +        return kimchi
>       return None
>
>




More information about the Kimchi-devel mailing list