[Python-modules-commits] r32340 - in packages/python-dmidecode/trunk/debian (5 files)
morph at users.alioth.debian.org
morph at users.alioth.debian.org
Sun Apr 12 16:27:55 UTC 2015
Date: Sunday, April 12, 2015 @ 16:27:54
Author: morph
Revision: 32340
* debian/patches/*
- patches to support Python 3, still not enables as there is no py3k support
for libxml2 yet
Added:
packages/python-dmidecode/trunk/debian/patches/
packages/python-dmidecode/trunk/debian/patches/3b32d9d05a785a744f5e315ef9267d67723e082c.patch
packages/python-dmidecode/trunk/debian/patches/5cc3d02060f67317049b6e0549c87a407e030e61.patch
packages/python-dmidecode/trunk/debian/patches/series
Modified:
packages/python-dmidecode/trunk/debian/changelog
Modified: packages/python-dmidecode/trunk/debian/changelog
===================================================================
--- packages/python-dmidecode/trunk/debian/changelog 2015-04-12 16:06:27 UTC (rev 32339)
+++ packages/python-dmidecode/trunk/debian/changelog 2015-04-12 16:27:54 UTC (rev 32340)
@@ -17,8 +17,11 @@
* Switch to dh_python2
* debian/python-dmidecode-dbg.postinst
- removed
+ * debian/patches/*
+ - patches to support Python 3, still not enables as there is no py3k support
+ for libxml2 yet
- -- Sandro Tosi <morph at debian.org> Sun, 12 Apr 2015 17:06:21 +0100
+ -- Sandro Tosi <morph at debian.org> Sun, 12 Apr 2015 17:27:03 +0100
python-dmidecode (3.10.13-3) unstable; urgency=low
Added: packages/python-dmidecode/trunk/debian/patches/3b32d9d05a785a744f5e315ef9267d67723e082c.patch
===================================================================
--- packages/python-dmidecode/trunk/debian/patches/3b32d9d05a785a744f5e315ef9267d67723e082c.patch (rev 0)
+++ packages/python-dmidecode/trunk/debian/patches/3b32d9d05a785a744f5e315ef9267d67723e082c.patch 2015-04-12 16:27:54 UTC (rev 32340)
@@ -0,0 +1,41 @@
+From 3b32d9d05a785a744f5e315ef9267d67723e082c Mon Sep 17 00:00:00 2001
+From: David Sommerseth <davids at redhat.com>
+Date: Tue, 3 Feb 2015 21:19:13 +0100
+Subject: Fix failing dmidecode.pythonmap() on Python 3
+
+Python 3 uses the Unicode type for strings but it did only support the
+Bytes type. So the loading of XML-to-Python-dict-map would fail.
+
+This patch preserves the Bytes type support while adding Unicode support,
+which is what is done other places in the code as well.
+
+Signed-off-by: David Sommerseth <davids at redhat.com>
+
+diff --git a/src/dmidecodemodule.c b/src/dmidecodemodule.c
+index 8db99cb..b31c002 100644
+--- a/src/dmidecodemodule.c
++++ b/src/dmidecodemodule.c
+@@ -659,12 +659,17 @@ static PyObject *dmidecode_set_dev(PyObject * self, PyObject * arg)
+
+ static PyObject *dmidecode_set_pythonxmlmap(PyObject * self, PyObject * arg)
+ {
+- if(PyBytes_Check(arg)) {
++ char *fname = NULL;
++
++ if (PyUnicode_Check(arg)) {
++ fname = PyUnicode_AsUTF8(arg);
++ } else if (PyBytes_Check(arg)) {
++ fname = PyBytes_AsString(arg);
++ }
++ if (fname) {
+ struct stat fileinfo;
+- char *fname = PyBytes_AsString(arg);
+
+ memset(&fileinfo, 0, sizeof(struct stat));
+-
+ if( stat(fname, &fileinfo) != 0 ) {
+ PyReturnError(PyExc_IOError, "Could not access the file '%s'", fname);
+ }
+--
+cgit v0.10.2
+
Added: packages/python-dmidecode/trunk/debian/patches/5cc3d02060f67317049b6e0549c87a407e030e61.patch
===================================================================
--- packages/python-dmidecode/trunk/debian/patches/5cc3d02060f67317049b6e0549c87a407e030e61.patch (rev 0)
+++ packages/python-dmidecode/trunk/debian/patches/5cc3d02060f67317049b6e0549c87a407e030e61.patch 2015-04-12 16:27:54 UTC (rev 32340)
@@ -0,0 +1,658 @@
+From 5cc3d02060f67317049b6e0549c87a407e030e61 Mon Sep 17 00:00:00 2001
+From: Slavek Kabrda <bkabrda at redhat.com>
+Date: Wed, 21 Jan 2015 12:57:35 +0100
+Subject: Port to Python 3 while maintaining compatibility with Python >= 2.6
+
+Signed-off-by: David Sommerseth <davids at redhat.com>
+
+diff --git a/Makefile b/Makefile
+index d468b70..76d23de 100644
+--- a/Makefile
++++ b/Makefile
+@@ -38,11 +38,19 @@
+ #. $AutoHeaderSerial::20100225 $
+ #. ******* AUTOHEADER END v1.2 *******
+
+-VERSION := $(shell cd src;python -c "from setup_common import *; print get_version();")
++PY_BIN := python2
++VERSION := $(shell cd src;$(PY_BIN) -c "from setup_common import *; print(get_version());")
+ PACKAGE := python-dmidecode
+-PY_VER := $(shell python -c 'import sys; print "%d.%d"%sys.version_info[0:2]')
++PY_VER := $(shell $(PY_BIN) -c 'import sys; print("%d.%d"%sys.version_info[0:2])')
++PY_MV := $(shell echo $(PY_VER) | cut -b 1)
+ PY := python$(PY_VER)
+-SO := build/lib.linux-$(shell uname -m)-$(PY_VER)/dmidecodemod.so
++SO_PATH := build/lib.linux-$(shell uname -m)-$(PY_VER)
++ifeq ($(PY_MV),2)
++ SO := $(SO_PATH)/dmidecodemod.so
++else
++ SOABI := $(shell $(PY_BIN) -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))')
++ SO := $(SO_PATH)/dmidecodemod.$(SOABI).so
++endif
+ SHELL := /bin/bash
+
+ ###############################################################################
+@@ -71,6 +79,7 @@ clean:
+ -rm -rf build
+ -rm -rf rpm
+ -rm -rf src/setup_common.py[oc]
++ -rm -rf __pycache__ src/__pycache__
+ -rm -rf $(PACKAGE)-$(VERSION) $(PACKAGE)-$(VERSION).tar.gz
+ $(MAKE) -C unit-tests clean
+
+diff --git a/dmidecode.py b/dmidecode.py
+index cd37b40..ac81365 100644
+--- a/dmidecode.py
++++ b/dmidecode.py
+@@ -48,7 +48,7 @@ class dmidecodeXML:
+ elif type == DMIXML_DOC:
+ self.restype = DMIXML_DOC
+ else:
+- raise TypeError, "Invalid result type value"
++ raise TypeError("Invalid result type value")
+ return True
+
+ def QuerySection(self, sectname):
+@@ -65,7 +65,7 @@ class dmidecodeXML:
+ result_type=self.restype,
+ section=sectname) )
+ else:
+- raise TypeError, "Invalid result type value"
++ raise TypeError("Invalid result type value")
+
+ return ret
+
+@@ -83,7 +83,7 @@ class dmidecodeXML:
+ result_type=self.restype,
+ typeid=tpid))
+ else:
+- raise TypeError, "Invalid result type value"
++ raise TypeError("Invalid result type value")
+
+ return ret
+
+diff --git a/examples/dmidump.py b/examples/dmidump.py
+index 11b04ff..769750d 100755
+--- a/examples/dmidump.py
++++ b/examples/dmidump.py
+@@ -35,24 +35,24 @@ def print_warnings():
+ "Simple function, dumping out warnings with a prefix if warnings are found and clearing warning buffer"
+ warn = dmidecode.get_warnings()
+ if warn:
+- print "### WARNING: %s" % warn
++ print("### WARNING: %s" % warn)
+ dmidecode.clear_warnings()
+
+
+ # Check if running as root .... provide a warning if not
+ root_user = (os.getuid() == 0 and True or False)
+ if not root_user:
+- print "####"
+- print "#### NOT RUNNING AS ROOT"
+- print "####"
+- print "#### The first run must always be done as root for this example to work."
+- print "#### When not run as root, quite some permission errors might appear"
+- print "####"
+- print "#### If this script is first run as root, it should be possible to run this script"
+- print "#### as an unprivileged user afterwards, with less warnings."
+- print "####"
+- print
+- print
++ print("####")
++ print("#### NOT RUNNING AS ROOT")
++ print("####")
++ print("#### The first run must always be done as root for this example to work.")
++ print("#### When not run as root, quite some permission errors might appear")
++ print("####")
++ print("#### If this script is first run as root, it should be possible to run this script")
++ print("#### as an unprivileged user afterwards, with less warnings.")
++ print("####")
++ print()
++ print()
+
+
+ #. Test for presence of important functions using /dev/mem... Using the legacy API
+@@ -61,101 +61,101 @@ if not root_user:
+ #. for presence of the legacy API, which "under the hood" uses
+ #. dmidecode.QuerySection(name), where name can be 'bios', 'system', etc.
+ if root_user:
+- print "*** bios ***\n"; dmidecode.bios()
++ print("*** bios ***\n"); dmidecode.bios()
+ print_warnings()
+- print "*** system ***\n"; dmidecode.system()
++ print("*** system ***\n"); dmidecode.system()
+ print_warnings()
+- print "*** baseboard ***\n"; dmidecode.baseboard()
++ print("*** baseboard ***\n"); dmidecode.baseboard()
+ print_warnings()
+- print "*** chassis ***\n"; dmidecode.chassis()
++ print("*** chassis ***\n"); dmidecode.chassis()
+ print_warnings()
+- print "*** processor ***\n"; dmidecode.processor()
++ print("*** processor ***\n"); dmidecode.processor()
+ print_warnings()
+- print "*** memory ***\n"; dmidecode.memory()
++ print("*** memory ***\n"); dmidecode.memory()
+ print_warnings()
+- print "*** cache ***\n"; dmidecode.cache()
++ print("*** cache ***\n"); dmidecode.cache()
+ print_warnings()
+- print "*** connector ***\n"; dmidecode.connector()
++ print("*** connector ***\n"); dmidecode.connector()
+ print_warnings()
+- print "*** slot ***\n"; dmidecode.slot()
++ print("*** slot ***\n"); dmidecode.slot()
+ print_warnings()
+
+
+ #. Now test get/set of memory device file...
+-print "*** get_dev()"
+-print dmidecode.get_dev()
++print("*** get_dev()")
++print(dmidecode.get_dev())
+ print_warnings()
+-print "*** set_dev('dmidata.dump')"
+-print dmidecode.set_dev("dmidata.dump");
++print("*** set_dev('dmidata.dump')")
++print(dmidecode.set_dev("dmidata.dump"));
+ print_warnings()
+-print "*** get_dev()"
+-print dmidecode.get_dev()
++print("*** get_dev()")
++print(dmidecode.get_dev())
+ print_warnings()
+
+ #. Test taking a dump...
+ if root_user:
+- print "*** Dumping DMI data to dump file"
+- print dmidecode.dump()
++ print("*** Dumping DMI data to dump file")
++ print(dmidecode.dump())
+ print_warnings()
+
+ #. Test reading the dump... Using the preferred API
+-print "*** bios ***\n"; pprint(dmidecode.QuerySection('bios'))
++print("*** bios ***\n"); pprint(dmidecode.QuerySection('bios'))
+ print_warnings()
+-print "*** system ***\n"; pprint(dmidecode.QuerySection('system'))
++print("*** system ***\n"); pprint(dmidecode.QuerySection('system'))
+ print_warnings()
+-print "*** baseboard ***\n"; pprint(dmidecode.QuerySection('baseboard'))
++print("*** baseboard ***\n"); pprint(dmidecode.QuerySection('baseboard'))
+ print_warnings()
+-print "*** chassis ***\n"; pprint(dmidecode.QuerySection('chassis'))
++print("*** chassis ***\n"); pprint(dmidecode.QuerySection('chassis'))
+ print_warnings()
+-print "*** processor ***\n"; pprint(dmidecode.QuerySection('processor'))
++print("*** processor ***\n"); pprint(dmidecode.QuerySection('processor'))
+ print_warnings()
+-print "*** memory ***\n"; pprint(dmidecode.QuerySection('memory'))
++print("*** memory ***\n"); pprint(dmidecode.QuerySection('memory'))
+ print_warnings()
+-print "*** cache ***\n"; pprint(dmidecode.QuerySection('cache'))
++print("*** cache ***\n"); pprint(dmidecode.QuerySection('cache'))
+ print_warnings()
+-print "*** connector ***\n"; pprint(dmidecode.QuerySection('connector'))
++print("*** connector ***\n"); pprint(dmidecode.QuerySection('connector'))
+ print_warnings()
+-print "*** slot ***\n"; pprint(dmidecode.QuerySection('slot'))
++print("*** slot ***\n"); pprint(dmidecode.QuerySection('slot'))
+ print_warnings()
+
+-print "*** Extracting memory information"
++print("*** Extracting memory information")
+ for v in dmidecode.memory().values():
+ if type(v) == dict and v['dmi_type'] == 17:
+ pprint(v['data']['Size']),
+
+-print "*** Querying for DMI type 3 and 7"
++print("*** Querying for DMI type 3 and 7")
+ pprint(dmidecode.type(3)) # <-- Legacy API
+ pprint(dmidecode.QueryTypeId(7)) # <-- preferred API
+ print_warnings()
+
+-print "*** Querying for the BIOS section"
++print("*** Querying for the BIOS section")
+ pprint(dmidecode.QuerySection('bios'))
+ print_warnings()
+
+ #
+ # Test XML stuff
+ #
+-print
+-print
+-print
+-print "---------------------------------------"
+-print "*** *** *** Testing XML API *** *** ***"
+-print "---------------------------------------"
+-print
+-print
++print()
++print()
++print()
++print("---------------------------------------")
++print("*** *** *** Testing XML API *** *** ***")
++print("---------------------------------------")
++print()
++print()
+ dmixml = dmidecode.dmidecodeXML()
+
+ # Fetch all DMI data into a libxml2.xmlDoc object
+-print "*** Getting all DMI data into a XML document variable"
++print("*** Getting all DMI data into a XML document variable")
+ dmixml.SetResultType(dmidecode.DMIXML_DOC) # Valid values: dmidecode.DMIXML_DOC, dmidecode.DMIXML_NODE
+ xmldoc = dmixml.QuerySection('all')
+
+ # Dump the XML to dmidump.xml - formated in UTF-8 decoding
+-print "*** Dumping XML document to dmidump.xml"
++print("*** Dumping XML document to dmidump.xml")
+ xmldoc.saveFormatFileEnc('dmidump.xml','UTF-8',1)
+
+ # Do some XPath queries on the XML document
+-print "*** Doing some XPath queries against the XML document"
++print("*** Doing some XPath queries against the XML document")
+ dmixp = xmldoc.xpathNewContext()
+
+ # What to look for - XPath expressions
+@@ -168,12 +168,12 @@ keys = ['/dmidecode/SystemInfo/Manufacturer',
+ for k in keys:
+ data = dmixp.xpathEval(k)
+ for d in data:
+- print "%s: %s" % (k, d.get_content())
++ print("%s: %s" % (k, d.get_content()))
+
+ del dmixp
+ del xmldoc
+
+ # Query for only a particular DMI TypeID - 0x04 - Processor
+-print "*** Quering for Type ID 0x04 - Processor - dumping XML document to stdout"
++print("*** Quering for Type ID 0x04 - Processor - dumping XML document to stdout")
+ dmixml.QueryTypeId(0x04).saveFormatFileEnc('-','UTF-8',1)
+ print_warnings()
+diff --git a/src/compat.h b/src/compat.h
+index 80a08c6..170f596 100644
+--- a/src/compat.h
++++ b/src/compat.h
+@@ -40,4 +40,19 @@
+ #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
+ #endif
+
++// Python 2 vs Python 3 compat
++#if PY_MAJOR_VERSION >= 3
++#define IS_PY3K
++#define MODINITERROR return NULL
++#define PYNUMBER_FROMLONG PyLong_FromLong
++#define PYTEXT_FROMSTRING PyUnicode_FromString
++#else
++#include <bytesobject.h>
++#define MODINITERROR return
++#define PYNUMBER_FROMLONG PyInt_FromLong
++#define PYTEXT_FROMSTRING PyString_FromString
++#define PyCapsule_New(pointer, name, destructor) \
++ (PyCObject_FromVoidPtr(pointer, destructor))
++#endif
++
+ #endif
+diff --git a/src/dmidecodemodule.c b/src/dmidecodemodule.c
+index 1056a8f..8db99cb 100644
+--- a/src/dmidecodemodule.c
++++ b/src/dmidecodemodule.c
+@@ -53,6 +53,17 @@
+ #include "dmidump.h"
+ #include <mcheck.h>
+
++#if (PY_VERSION_HEX < 0x03030000)
++char *PyUnicode_AsUTF8(PyObject *unicode) {
++ PyObject *as_bytes = PyUnicode_AsUTF8String(unicode);
++ if (!as_bytes) {
++ return NULL;
++ }
++
++ return PyBytes_AsString(as_bytes);
++}
++#endif
++
+ static void init(options *opt)
+ {
+ opt->devmem = DEFAULT_MEM_DEV;
+@@ -470,7 +481,12 @@ static PyObject *dmidecode_get_slot(PyObject * self, PyObject * args)
+
+ static PyObject *dmidecode_get_section(PyObject *self, PyObject *args)
+ {
+- char *section = PyString_AsString(args);
++ char *section = NULL;
++ if (PyUnicode_Check(args)) {
++ section = PyUnicode_AsUTF8(args);
++ } else if (PyBytes_Check(args)) {
++ section = PyBytes_AsString(args);
++ }
+
+ if( section != NULL ) {
+ return dmidecode_get_group(global_options, section);
+@@ -588,7 +604,7 @@ static PyObject *dmidecode_dump(PyObject * self, PyObject * null)
+ static PyObject *dmidecode_get_dev(PyObject * self, PyObject * null)
+ {
+ PyObject *dev = NULL;
+- dev = PyString_FromString((global_options->dumpfile != NULL
++ dev = PYTEXT_FROMSTRING((global_options->dumpfile != NULL
+ ? global_options->dumpfile : global_options->devmem));
+ Py_INCREF(dev);
+ return dev;
+@@ -596,9 +612,14 @@ static PyObject *dmidecode_get_dev(PyObject * self, PyObject * null)
+
+ static PyObject *dmidecode_set_dev(PyObject * self, PyObject * arg)
+ {
+- if(PyString_Check(arg)) {
++ char *f = NULL;
++ if(PyUnicode_Check(arg)) {
++ f = PyUnicode_AsUTF8(arg);
++ } else if(PyBytes_Check(arg)) {
++ f = PyBytes_AsString(arg);
++ }
++ if(f) {
+ struct stat buf;
+- char *f = PyString_AsString(arg);
+
+ if( (f != NULL) && (global_options->dumpfile != NULL )
+ && (strcmp(global_options->dumpfile, f) == 0) ) {
+@@ -638,9 +659,9 @@ static PyObject *dmidecode_set_dev(PyObject * self, PyObject * arg)
+
+ static PyObject *dmidecode_set_pythonxmlmap(PyObject * self, PyObject * arg)
+ {
+- if(PyString_Check(arg)) {
++ if(PyBytes_Check(arg)) {
+ struct stat fileinfo;
+- char *fname = PyString_AsString(arg);
++ char *fname = PyBytes_AsString(arg);
+
+ memset(&fileinfo, 0, sizeof(struct stat));
+
+@@ -664,7 +685,7 @@ static PyObject * dmidecode_get_warnings(PyObject *self, PyObject *null)
+
+ warn = log_retrieve(global_options->logdata, LOG_WARNING);
+ if( warn ) {
+- ret = PyString_FromString(warn);
++ ret = PYTEXT_FROMSTRING(warn);
+ free(warn);
+ } else {
+ ret = Py_None;
+@@ -711,7 +732,7 @@ static PyMethodDef DMIDataMethods[] = {
+ {(char *)"pythonmap", dmidecode_set_pythonxmlmap, METH_O,
+ (char *) "Use another python dict map definition. The default file is " PYTHON_XML_MAP},
+
+- {(char *)"xmlapi", dmidecode_xmlapi, METH_KEYWORDS,
++ {(char *)"xmlapi", dmidecode_xmlapi, METH_VARARGS | METH_KEYWORDS,
+ (char *) "Internal API for retrieving data as raw XML data"},
+
+
+@@ -726,6 +747,9 @@ static PyMethodDef DMIDataMethods[] = {
+
+ void destruct_options(void *ptr)
+ {
++#ifdef IS_PY3K
++ ptr = PyCapsule_GetPointer(ptr, NULL);
++#endif
+ options *opt = (options *) ptr;
+
+ if( opt->mappingxml != NULL ) {
+@@ -763,8 +787,25 @@ void destruct_options(void *ptr)
+ free(ptr);
+ }
+
++#ifdef IS_PY3K
++static struct PyModuleDef dmidecodemod_def = {
++ PyModuleDef_HEAD_INIT,
++ "dmidecodemod",
++ NULL,
++ -1,
++ DMIDataMethods,
++ NULL,
++ NULL,
++ NULL,
++ NULL
++};
+
+-PyMODINIT_FUNC initdmidecodemod(void)
++PyMODINIT_FUNC
++PyInit_dmidecodemod(void)
++#else
++PyMODINIT_FUNC
++initdmidecodemod(void)
++#endif
+ {
+ char *dmiver = NULL;
+ PyObject *module = NULL;
+@@ -777,19 +818,29 @@ PyMODINIT_FUNC initdmidecodemod(void)
+ opt = (options *) malloc(sizeof(options)+2);
+ memset(opt, 0, sizeof(options)+2);
+ init(opt);
++#ifdef IS_PY3K
++ module = PyModule_Create(&dmidecodemod_def);
++#else
+ module = Py_InitModule3((char *)"dmidecodemod", DMIDataMethods,
+ "Python extension module for dmidecode");
++#endif
++ if (module == NULL)
++ MODINITERROR;
+
+- version = PyString_FromString(VERSION);
++ version = PYTEXT_FROMSTRING(VERSION);
+ Py_INCREF(version);
+ PyModule_AddObject(module, "version", version);
+
+ opt->dmiversion_n = dmidecode_get_version(opt);
+ dmiver = dmixml_GetContent(opt->dmiversion_n);
+- PyModule_AddObject(module, "dmi", dmiver ? PyString_FromString(dmiver) : Py_None);
++ PyModule_AddObject(module, "dmi", dmiver ? PYTEXT_FROMSTRING(dmiver) : Py_None);
+
+ // Assign this options struct to the module as well with a destructor, that way it will
+ // clean up the memory for us.
+- PyModule_AddObject(module, "options", PyCObject_FromVoidPtr(opt, destruct_options));
++ // TODO: destructor has wrong type under py3?
++ PyModule_AddObject(module, "options", PyCapsule_New(opt, NULL, destruct_options));
+ global_options = opt;
++#ifdef IS_PY3K
++ return module;
++#endif
+ }
+diff --git a/src/setup_common.py b/src/setup_common.py
+index 209ccef..aec1f9b 100644
+--- a/src/setup_common.py
++++ b/src/setup_common.py
+@@ -26,17 +26,19 @@
+ # are deemed to be part of the source code.
+ #
+
+-import commands, sys
++import subprocess, sys
++if sys.version_info[0] < 3:
++ import commands as subprocess
+ from os import path as os_path
+ from distutils.sysconfig import get_python_lib
+
+ # libxml2 - C flags
+ def libxml2_include(incdir):
+- (res, libxml2_cflags) = commands.getstatusoutput("xml2-config --cflags")
++ (res, libxml2_cflags) = subprocess.getstatusoutput("xml2-config --cflags")
+ if res != 0:
+- print "Could not build python-dmidecode."
+- print "Could not run xml2-config, is libxml2 installed?"
+- print "Also the development libraries?"
++ print("Could not build python-dmidecode.")
++ print("Could not run xml2-config, is libxml2 installed?")
++ print("Also the development libraries?")
+ sys.exit(1)
+
+ # Parse the xml2-config --cflags response
+@@ -52,11 +54,11 @@ def libxml2_lib(libdir, libs):
+ if os_path.exists("/etc/debian_version"): #. XXX: Debian Workaround...
+ libdir.append("/usr/lib/pymodules/python%d.%d"%sys.version_info[0:2])
+
+- (res, libxml2_libs) = commands.getstatusoutput("xml2-config --libs")
++ (res, libxml2_libs) = subprocess.getstatusoutput("xml2-config --libs")
+ if res != 0:
+- print "Could not build python-dmidecode."
+- print "Could not run xml2-config, is libxml2 installed?"
+- print "Also the development libraries?"
++ print("Could not build python-dmidecode.")
++ print("Could not run xml2-config, is libxml2 installed?")
++ print("Also the development libraries?")
+ sys.exit(1)
+
+ # Parse the xml2-config --libs response
+diff --git a/src/xmlpythonizer.c b/src/xmlpythonizer.c
+index e318023..e9c9242 100644
+--- a/src/xmlpythonizer.c
++++ b/src/xmlpythonizer.c
+@@ -85,6 +85,7 @@
+ #include "dmilog.h"
+ #include "xmlpythonizer.h"
+ #include "version.h"
++#include "compat.h"
+
+
+ /**
+@@ -646,7 +647,7 @@ inline PyObject *StringToPyObj(Log_t *logp, ptzMAP *val_m, const char *instr) {
+ switch( val_m->type_value ) {
+ case ptzINT:
+ case ptzLIST_INT:
+- value = PyInt_FromLong(atoi(workstr));
++ value = PYNUMBER_FROMLONG(atoi(workstr));
+ break;
+
+ case ptzFLOAT:
+@@ -661,7 +662,7 @@ inline PyObject *StringToPyObj(Log_t *logp, ptzMAP *val_m, const char *instr) {
+
+ case ptzSTR:
+ case ptzLIST_STR:
+- value = PyString_FromString(workstr);
++ value = PyBytes_FromString(workstr);
+ break;
+
+ default:
+@@ -850,7 +851,7 @@ PyObject *_deep_pythonize(Log_t *logp, PyObject *retdata,
+ switch( map_p->type_value ) {
+ case ptzCONST:
+ if( _get_key_value(logp, key, 256, map_p, xpctx, 0) != NULL ) {
+- value = PyString_FromString(map_p->value);
++ value = PyBytes_FromString(map_p->value);
+ PyADD_DICT_VALUE(retdata, key, value);
+ } else {
+ PyReturnError(PyExc_ValueError, "Could not get key value: %s [%i] (Defining key: %s)",
+diff --git a/unit-tests/Makefile b/unit-tests/Makefile
+index 95086c1..765fd99 100644
+--- a/unit-tests/Makefile
++++ b/unit-tests/Makefile
+@@ -1,5 +1,7 @@
++PY_BIN := python2
++
+ test :
+- python unit -vv
++ $(PY_BIN) unit -vv
+
+ clean :
+ rm -f *.{py[oc],o,so} *~
+diff --git a/unit-tests/unit b/unit-tests/unit
+index 8f9184b..3b06c04 100755
+--- a/unit-tests/unit
++++ b/unit-tests/unit
+@@ -2,8 +2,9 @@
+ #.awk '$0 ~ /case [0-9]+: .. 3/ { sys.stdout.write($2 }' src/dmidecode.c|tr ':\n' ', '
+
+ from pprint import pprint
+-import os, sys, random, tempfile, time
+-import commands
++import os, sys, subprocess, random, tempfile, time
++if sys.version_info[0] < 3:
++ import commands as subprocess
+ from getopt import getopt
+
+ # Setup temporary sys.path() with our build dir
+@@ -32,7 +33,7 @@ try:
+ COLOR = True
+ elif o in ("-h", "--help"):
+ HELP = True
+-except getopt.GetoptError, err:
++except getopt.GetoptError as err:
+ # print help information and exit:
+ HELP = True
+ ERROR = True
+@@ -138,7 +139,7 @@ def vwrite(msg, vLevel=0):
+ ################################################################################
+
+ #. Let's ignore warnings from the module for the test units...
+-err = open('/dev/null', 'a+', 0)
++err = open('/dev/null', 'a+', 1)
+ os.dup2(err.fileno(), sys.stderr.fileno())
+
+ vwrite(LINE, 1)
+@@ -208,7 +209,7 @@ try:
+ "Skip testing API function, missing root privileges: dmidecode.dump()"
+ ), 1)
+
+- types = range(0, 42)+range(126, 128)
++ types = list(range(0, 42))+list(range(126, 128))
+ bad_types = [-1, -1000, 256]
+ sections = [
+ "bios",
+@@ -263,7 +264,7 @@ try:
+ test(output is not False)
+ if output:
+ vwrite(" * %s\n"%black(output.keys()), 1)
+- except LookupError, e:
++ except LookupError as e:
+ failed(e, 1)
+
+ for i in bad_types:
+@@ -279,15 +280,15 @@ try:
+ try:
+ output = dmidecode.type(i)
+ if dmidecode_bin:
+- _output = commands.getoutput("dmidecode -t %d"%i).strip().split('\n')
++ _output = subprocess.getoutput("dmidecode -t %d"%i).strip().split('\n')
+ test(len(_output) == 1 and len(output) == 0 or True)
+ else:
+ test(output is not False)
+ if output:
+ vwrite(" * %s\n"%output.keys(), 1)
+- except IOError, e:
++ except IOError as e:
+ failed(e, 1)
+- except LookupError, e:
++ except LookupError as e:
+ failed(e, 1)
+
+
+@@ -330,7 +331,7 @@ try:
+ try:
+ output_node = dmixml.QueryTypeId(i)
+ test(isinstance(output_node, libxml2.xmlNode))
+- except Exception, e:
++ except Exception as e:
+ failed(e, 1)
+ except:
+ failed()
+@@ -347,7 +348,7 @@ try:
+ try:
+ output_doc = dmixml.QuerySection(section)
+ test(isinstance(output_doc, libxml2.xmlDoc))
+- except Exception, e:
++ except Exception as e:
+ failed(e, 1)
+ except:
+ failed()
+@@ -355,9 +356,9 @@ try:
+ except IOError:
+ skipped()
+
+-except ImportError, err:
++except ImportError as err:
+ failed()
+- print err
++ print(err)
+
+ vwrite(LINE, 1)
+ vwrite("Devices : %s\n"%cyan(len(devices)), 1)
+--
+cgit v0.10.2
+
Added: packages/python-dmidecode/trunk/debian/patches/series
===================================================================
--- packages/python-dmidecode/trunk/debian/patches/series (rev 0)
+++ packages/python-dmidecode/trunk/debian/patches/series 2015-04-12 16:27:54 UTC (rev 32340)
@@ -0,0 +1,2 @@
+5cc3d02060f67317049b6e0549c87a407e030e61.patch
+3b32d9d05a785a744f5e315ef9267d67723e082c.patch
More information about the Python-modules-commits
mailing list