[Kimchi-devel] [WIP PATCH 2/5] Register Kimchi's namespace when updating XML

Aline Manera alinefm at linux.vnet.ibm.com
Wed Oct 22 11:49:43 UTC 2014


On 10/21/2014 05:17 PM, Crístian Viana wrote:
> On 21-10-2014 16:58, Aline Manera wrote:
>>> +import kimchi.model
>>> +
>>
>> Instead of importing the whole module, import only the constants you 
>> need here.
>
> If I import anything longer than kimchi.model.* (e.g. 
> kimchi.model.utils), I get a cyclic import error. And in order to 
> actually solve that, we'd have to do a big refactoring on the code. 
> Importing kimchi.model seemed much simpler for now.
>
> Here's the error I get when I import only the constants instead of the 
> whole module:
>
> $ git diff
> diff --git a/src/kimchi/xmlutils/utils.py b/src/kimchi/xmlutils/utils.py
> index fcb6b14..d40664e 100644
> --- a/src/kimchi/xmlutils/utils.py
> +++ b/src/kimchi/xmlutils/utils.py
> @@ -22,7 +22,7 @@ from lxml import objectify
>
>  from xml.etree import ElementTree
>
> -import kimchi.model
> +from kimchi.model.utils import KIMCHI_NAMESPACE, KIMCHI_META_URL
>
>
>  def xpath_get_text(xml, expr):
> @@ -35,8 +35,7 @@ def xpath_get_text(xml, expr):
>
>
>  def xml_item_update(xml, xpath, value, attr=None):
> - ElementTree.register_namespace(kimchi.model.utils.KIMCHI_NAMESPACE,
> - kimchi.model.utils.KIMCHI_META_URL)
> +    ElementTree.register_namespace(KIMCHI_NAMESPACE, KIMCHI_META_URL)
>
>      root = ElementTree.fromstring(xml)
>      item = root.find(xpath)
>
> $ sudo src/kimchid
> Traceback (most recent call last):
>   File "src/kimchid", line 28, in <module>
>     import kimchi.server
>   File "/home/vianac/LTC/kimchi/src/kimchi/server.py", line 26, in 
> <module>
>     from kimchi import auth
>   File "/home/vianac/LTC/kimchi/src/kimchi/auth.py", line 33, in <module>
>     from kimchi import template
>   File "/home/vianac/LTC/kimchi/src/kimchi/template.py", line 25, in 
> <module>
>     from kimchi.config import paths
>   File "/home/vianac/LTC/kimchi/src/kimchi/config.py", line 30, in 
> <module>
>     from kimchi.xmlutils.utils import xpath_get_text
>   File "/home/vianac/LTC/kimchi/src/kimchi/xmlutils/utils.py", line 
> 25, in <module>
>     from kimchi.model.utils import KIMCHI_NAMESPACE, KIMCHI_META_URL
>   File "/home/vianac/LTC/kimchi/src/kimchi/model/utils.py", line 21, 
> in <module>
>     from kimchi.exception import OperationFailed
>   File "/home/vianac/LTC/kimchi/src/kimchi/exception.py", line 25, in 
> <module>
>     from kimchi.template import get_lang, validate_language
> ImportError: cannot import name get_lang
>
> I had to do this on patch 5/5 as well, for the same reason.
>
> If you have a better suggestion (which does not require refactoring 
> most classes), please let me know.

Hmm... got it
I think it can be solved when all XML manipulation is on xmlutils module.
But keep it as you did by now.




More information about the Kimchi-devel mailing list