[libxml2] A few more fixes for python 3 affecting libxml2.py
- From: Daniel Veillard <veillard src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxml2] A few more fixes for python 3 affecting libxml2.py
- Date: Sat, 30 Mar 2013 14:35:31 +0000 (UTC)
commit 6f18465189dbfdf6efb1e6580243918a4f609d1c
Author: Daniel Veillard <veillard redhat com>
Date: Fri Mar 29 15:17:40 2013 +0800
A few more fixes for python 3 affecting libxml2.py
need a few changes to the generator and the libxml.py stub
python/generator.py | 9 ++++-----
python/libxml.py | 40 +++++++++++++++++++++++++++++++++-------
2 files changed, 37 insertions(+), 12 deletions(-)
---
diff --git a/python/generator.py b/python/generator.py
index e495143..82109e3 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 43ad49d..b634982 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:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]