aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@redhat.com>2013-03-29 15:17:40 +0800
committerDaniel Veillard <veillard@redhat.com>2013-03-30 22:33:06 +0800
commit6f18465189dbfdf6efb1e6580243918a4f609d1c (patch)
tree3a68061ac25987ced41e736c4312fc850029f910 /python
parent3798c4adbb91f80bef1e9f1b4b61dae72577a244 (diff)
downloadandroid_external_libxml2-6f18465189dbfdf6efb1e6580243918a4f609d1c.tar.gz
android_external_libxml2-6f18465189dbfdf6efb1e6580243918a4f609d1c.tar.bz2
android_external_libxml2-6f18465189dbfdf6efb1e6580243918a4f609d1c.zip
A few more fixes for python 3 affecting libxml2.py
need a few changes to the generator and the libxml.py stub
Diffstat (limited to 'python')
-rwxr-xr-xpython/generator.py9
-rw-r--r--python/libxml.py40
2 files changed, 37 insertions, 12 deletions
diff --git a/python/generator.py b/python/generator.py
index e4951437..82109e3f 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -1038,10 +1038,9 @@ def buildWrappers():
classes.write(" def __init__(self, _obj=None):\n")
if classes_ancestor[classname] == "xmlCore" or \
classes_ancestor[classname] == "xmlNode":
- classes.write(" if type(_obj).__name__ != ")
- classes.write("'PyCObject':\n")
- classes.write(" raise TypeError, ")
- classes.write("'%s needs a PyCObject argument'\n" % \
+ classes.write(" if checkWrapper(_obj) != 0:")
+ classes.write(" raise TypeError")
+ classes.write("('%s got a wrong wrapper object type')\n" % \
classname)
if classname in reference_keepers:
rlist = reference_keepers[classname]
@@ -1054,7 +1053,7 @@ def buildWrappers():
classes_ancestor[classname] == "xmlNode":
classes.write(" def __repr__(self):\n")
format = "<%s (%%s) object at 0x%%x>" % (classname)
- classes.write(" return \"%s\" %% (self.name, long(pos_id (self)))\n\n" % (
+ classes.write(" return \"%s\" %% (self.name, int(pos_id (self)))\n\n" % (
format))
else:
txt.write("Class %s()\n" % (classname))
diff --git a/python/libxml.py b/python/libxml.py
index 43ad49d0..b6349820 100644
--- a/python/libxml.py
+++ b/python/libxml.py
@@ -5,6 +5,16 @@ import sys
# The root of all libxml2 errors.
class libxmlError(Exception): pass
+# Type of the wrapper class for the C objects wrappers
+def checkWrapper(obj):
+ try:
+ n = type(_obj).__name__
+ if n != 'PyCObject' and n != 'PyCapsule':
+ return 1
+ except:
+ return 0
+ return 0
+
#
# id() is sometimes negative ...
#
@@ -62,9 +72,18 @@ class ioWrapper:
def io_read(self, len = -1):
if self.__io == None:
return(-1)
- if len < 0:
- return(self.__io.read())
- return(self.__io.read(len))
+ try:
+ if len < 0:
+ ret = self.__io.read()
+ else:
+ ret = self.__io.read(len)
+ except Exception as e:
+ print("failed to read from Python:", type(e))
+ print("on IO:", self.__io)
+ self.__io == None
+ return(-1)
+
+ return(ret)
def io_write(self, str, len = -1):
if self.__io == None:
@@ -97,10 +116,17 @@ class ioWriteWrapper(ioWrapper):
if type(_obj) == type(''):
print("write io from a string")
self.o = None
- elif type(_obj) == types.InstanceType:
- print("write io from instance of %s" % (_obj.__class__))
- ioWrapper.__init__(self, _obj)
- self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
+ elif type(_obj).__name__ == 'PyCapsule':
+ file = libxml2mod.outputBufferGetPythonFile(_obj)
+ if file != None:
+ ioWrapper.__init__(self, file)
+ else:
+ ioWrapper.__init__(self, _obj)
+ self._o = _obj
+# elif type(_obj) == types.InstanceType:
+# print(("write io from instance of %s" % (_obj.__class__)))
+# ioWrapper.__init__(self, _obj)
+# self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
else:
file = libxml2mod.outputBufferGetPythonFile(_obj)
if file != None: