1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2024-10-26 12:25:09 +03:00

A few more fixes for python 3 affecting libxml2.py

need a few changes to the generator and the libxml.py stub
This commit is contained in:
Daniel Veillard 2013-03-29 15:17:40 +08:00
parent 3798c4adbb
commit 6f18465189
2 changed files with 37 additions and 12 deletions

View File

@ -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))

View File

@ -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: