Version 0.5 master
authorEric Mc Sween <eric.mcsween@auf.org>
Wed, 25 Sep 2013 15:18:22 +0000 (11:18 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Wed, 25 Sep 2013 15:18:22 +0000 (11:18 -0400)
CHANGES [deleted file]
CHANGES.rst [new file with mode: 0644]
codaxmli/utils.py
setup.py

diff --git a/CHANGES b/CHANGES
deleted file mode 100644 (file)
index fd5d689..0000000
--- a/CHANGES
+++ /dev/null
@@ -1,22 +0,0 @@
-Version 0.1
-===========
-
-* Version initiale du client XMLi
-
-Version 0.2
-===========
-
-* Packaging des classes Java
-
-Version 0.3
-===========
-
-* Gestion des échecs de connexion
-
-Version 0.4
-===========
-
-* Utilise xml.etree plutôt que lxml
-
-* On retire maintenant tous les namespaces de la réponse pour faciliter le
-  traitement.
diff --git a/CHANGES.rst b/CHANGES.rst
new file mode 100644 (file)
index 0000000..d971688
--- /dev/null
@@ -0,0 +1,31 @@
+Version 0.1
+===========
+
+* Version initiale du client XMLi
+
+Version 0.2
+===========
+
+* Packaging des classes Java
+
+Version 0.3
+===========
+
+* Gestion des échecs de connexion
+
+Version 0.4
+===========
+
+* Utilise xml.etree plutôt que lxml
+
+* On retire maintenant tous les namespaces de la réponse pour faciliter le
+  traitement.
+
+Version 0.5
+===========
+
+* Gestion des dates, booléens, entiers et floats dans la construction des
+  requêtes XML
+
+* Nouvelles fonctions utilitaires pour la construction de requêtes: get_node,
+  set_value
index d9dc358..f2c233d 100644 (file)
@@ -1,5 +1,6 @@
 import xml.etree.cElementTree as ET
 import functools
+from datetime import date
 
 
 class Builder(object):
@@ -9,15 +10,13 @@ class Builder(object):
         for item in children:
             if isinstance(item, dict):
                 elem.attrib.update(item)
-            elif isinstance(item, basestring):
-                if len(elem):
-                    elem[-1].tail = (elem[-1].tail or "") + item
-                else:
-                    elem.text = (elem.text or "") + item
             elif ET.iselement(item):
                 elem.append(item)
             else:
-                raise TypeError("bad argument: %r" % item)
+                if len(elem):
+                    elem[-1].tail = (elem[-1].tail or "") + xmli_str(item)
+                else:
+                    elem.text = (elem.text or "") + xmli_str(item)
         return elem
 
     def __getattr__(self, tag):
@@ -26,8 +25,25 @@ class Builder(object):
 E = Builder()
 
 
-def get_or_create_child(elem, name):
-    child = elem.find(name)
-    if child is None:
-        child = ET.SubElement(elem, name)
-    return child
+def xmli_str(value):
+    if isinstance(value, bool):
+        return 'true' if value else 'false'
+    elif isinstance(value, date):
+        return value.strftime('%Y-%m-%dT00:00:00.000Z')
+    else:
+        return unicode(value)
+
+
+def get_node(root, path):
+    node = root
+    for name in path.split('/'):
+        child = node.find(name)
+        if child is None:
+            child = ET.SubElement(node, name)
+        node = child
+    return node
+
+
+def set_value(root, path, value):
+    node = get_node(root, path)
+    node.text = xmli_str(value)
index d016184..c7c519f 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
 from setuptools import setup, find_packages
 
 name = 'coda-xmli'
-version = '0.4'
+version = '0.5'
 
 setup(
     name=name,