Browse Source

[compat] add compat_etree_register_namespace

Remita Amine 8 years ago
parent
commit
c2d9c25f81
1 changed files with 18 additions and 0 deletions
  1. 18 0
      youtube_dl/compat.py

+ 18 - 0
youtube_dl/compat.py

@@ -2529,6 +2529,24 @@ else:
                 el.text = el.text.decode('utf-8')
                 el.text = el.text.decode('utf-8')
         return doc
         return doc
 
 
+if hasattr(etree, 'register_namespace'):
+    compat_etree_register_namespace = etree.register_namespace
+else:
+    def compat_etree_register_namespace(prefix, uri):
+        """Register a namespace prefix.
+        The registry is global, and any existing mapping for either the
+        given prefix or the namespace URI will be removed.
+        *prefix* is the namespace prefix, *uri* is a namespace uri. Tags and
+        attributes in this namespace will be serialized with prefix if possible.
+        ValueError is raised if prefix is reserved or is invalid.
+        """
+        if re.match(r"ns\d+$", prefix):
+            raise ValueError("Prefix format reserved for internal use")
+        for k, v in list(etree._namespace_map.items()):
+            if k == uri or v == prefix:
+                del etree._namespace_map[k]
+        etree._namespace_map[uri] = prefix
+
 if sys.version_info < (2, 7):
 if sys.version_info < (2, 7):
     # Here comes the crazy part: In 2.6, if the xpath is a unicode,
     # Here comes the crazy part: In 2.6, if the xpath is a unicode,
     # .//node does not match if a node is a direct child of . !
     # .//node does not match if a node is a direct child of . !