pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/devel/py-sysctl py-sysctl: port to python 3.



details:   https://anonhg.NetBSD.org/pkgsrc/rev/88ccc8954698
branches:  trunk
changeset: 401001:88ccc8954698
user:      maya <maya%pkgsrc.org@localhost>
date:      Mon Sep 09 07:09:47 2019 +0000

description:
py-sysctl: port to python 3.

One remaining test fails, but it seems it failed before.
PR pkg/54530

diffstat:

 devel/py-sysctl/Makefile                     |    4 +-
 devel/py-sysctl/PLIST                        |    4 +-
 devel/py-sysctl/distinfo                     |    5 +-
 devel/py-sysctl/patches/patch-setup.py       |   11 +
 devel/py-sysctl/patches/patch-sysctlmodule.c |  202 +++++++++++++++++
 devel/py-sysctl/patches/patch-test.py        |  304 +++++++++++++++++++++++++++
 6 files changed, 525 insertions(+), 5 deletions(-)

diffs (truncated from 565 to 300 lines):

diff -r beca456014d3 -r 88ccc8954698 devel/py-sysctl/Makefile
--- a/devel/py-sysctl/Makefile  Mon Sep 09 03:11:23 2019 +0000
+++ b/devel/py-sysctl/Makefile  Mon Sep 09 07:09:47 2019 +0000
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.6 2015/01/04 05:43:31 dholland Exp $
+# $NetBSD: Makefile,v 1.7 2019/09/09 07:09:47 maya Exp $
 
 DISTNAME=      py-sysctl-0.1
 PKGNAME=       ${PYPKGPREFIX}-sysctl-0.1
-PKGREVISION=   1
+PKGREVISION=   2
 CATEGORIES=    devel python
 MASTER_SITES=  ftp://ftp.NetBSD.org/pub/NetBSD/misc/cherry/
 
diff -r beca456014d3 -r 88ccc8954698 devel/py-sysctl/PLIST
--- a/devel/py-sysctl/PLIST     Mon Sep 09 03:11:23 2019 +0000
+++ b/devel/py-sysctl/PLIST     Mon Sep 09 07:09:47 2019 +0000
@@ -1,2 +1,2 @@
-@comment $NetBSD: PLIST,v 1.1.1.1 2010/04/11 06:48:41 cherry Exp $
-${PYSITELIB}/sysctlmodule.so
+@comment $NetBSD: PLIST,v 1.2 2019/09/09 07:09:47 maya Exp $
+${PYSITELIB}/sysctl.so
diff -r beca456014d3 -r 88ccc8954698 devel/py-sysctl/distinfo
--- a/devel/py-sysctl/distinfo  Mon Sep 09 03:11:23 2019 +0000
+++ b/devel/py-sysctl/distinfo  Mon Sep 09 07:09:47 2019 +0000
@@ -1,6 +1,9 @@
-$NetBSD: distinfo,v 1.2 2015/11/03 03:29:16 agc Exp $
+$NetBSD: distinfo,v 1.3 2019/09/09 07:09:47 maya Exp $
 
 SHA1 (py-sysctl-0.1.tar.gz) = 120483a57fc85790702223317b1e29ece62f5bb0
 RMD160 (py-sysctl-0.1.tar.gz) = 053144711e41f5518efc418795eec5e6e06750a1
 SHA512 (py-sysctl-0.1.tar.gz) = 4b6123625a212364ef5a2a367f13ec32194503b8881248e3909f5958adac05149ed2c22aa49b67468c3d1fc23386c16d97af747b8045b322c749f37d1a086005
 Size (py-sysctl-0.1.tar.gz) = 6746 bytes
+SHA1 (patch-setup.py) = eef1ae1e7a6d60f332514670ebcd1ee08dece131
+SHA1 (patch-sysctlmodule.c) = 55c7cec28080a936022e17f6e599f00b6825011c
+SHA1 (patch-test.py) = ff610e1eb2371147454861dd80e4d31878ec0ae7
diff -r beca456014d3 -r 88ccc8954698 devel/py-sysctl/patches/patch-setup.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/py-sysctl/patches/patch-setup.py    Mon Sep 09 07:09:47 2019 +0000
@@ -0,0 +1,11 @@
+$NetBSD: patch-setup.py,v 1.1 2019/09/09 07:09:47 maya Exp $
+
+--- setup.py.orig      2010-04-10 17:41:18.000000000 +0000
++++ setup.py
+@@ -2,5 +2,5 @@
+ from distutils.core import setup, Extension
+ 
+-module1 = Extension('sysctlmodule',
++module1 = Extension('sysctl',
+                     sources = ['sysctlmodule.c'])
+ 
diff -r beca456014d3 -r 88ccc8954698 devel/py-sysctl/patches/patch-sysctlmodule.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/py-sysctl/patches/patch-sysctlmodule.c      Mon Sep 09 07:09:47 2019 +0000
@@ -0,0 +1,202 @@
+$NetBSD: patch-sysctlmodule.c,v 1.1 2019/09/09 07:09:47 maya Exp $
+
+Port to python 3
+
+--- sysctlmodule.c.orig        2010-04-10 17:41:18.000000000 +0000
++++ sysctlmodule.c
+@@ -33,6 +33,21 @@
+ #include <errno.h>
+ #include <sys/sysctl.h>
+ 
++struct module_state {
++    PyObject *error;
++};
++
++#if PY_MAJOR_VERSION >= 3
++#define PyInt_AsLong                  PyLong_AsLong
++#define PyInt_CheckExact              PyLong_CheckExact
++#define PyString_CheckExact(val)      PyUnicode_CheckExact(val)
++#define PyString_FromStringAndSize    PyUnicode_FromStringAndSize
++#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
++#else
++#define GETSTATE(m) (&_state)
++static struct module_state _state;
++#endif
++
+ /* 
+  * create Python object of type similar to the MIB node 'name'
+  * This is basically the laziest way to do this, as we outsource the
+@@ -104,14 +119,12 @@ nodetype(char *nodepath)
+ 
+       int rv;
+       char cname[SYSCTL_NAMELEN];
+-      int csz;
++      size_t csz = SYSCTL_NAMELEN;
+ 
+       struct sysctlnode *rnode = NULL;
+ 
+       assert (nodepath != NULL);
+ 
+-      csz = SYSCTL_NAMELEN;
+-
+       rv = sysctlgetmibinfo(nodepath, NULL, NULL, cname, &csz, &rnode, SYSCTL_VERSION);
+ 
+       if (rv == -1 || rnode == NULL) {
+@@ -149,7 +162,7 @@ write_sysctl_string(char *name, char *va
+       size_t nodelen;
+ 
+       char cname[SYSCTL_NAMELEN];
+-      int csz = SYSCTL_NAMELEN;
++      size_t csz = SYSCTL_NAMELEN;
+ 
+       /* Sanity checks */
+ 
+@@ -237,7 +250,7 @@ read_sysctl(PyObject *self, PyObject *ar
+ {
+       PyObject *o;
+       void *val;
+-      size_t len;
++      size_t len = 0;
+       const char *name;
+       int rv;
+ 
+@@ -245,9 +258,7 @@ read_sysctl(PyObject *self, PyObject *ar
+               return NULL;
+ 
+ getbyname:
+-      val = NULL;
+-      len = 0;
+-
++      len += 4;
+       rv = sysctlbyname(name, NULL, &len, NULL, 0);
+ 
+       if (rv == -1) {
+@@ -256,7 +267,7 @@ getbyname:
+       }
+ 
+       val = malloc(len);
+-      if (val ==NULL) {
++      if (val == NULL) {
+               PyErr_NoMemory();
+               return NULL;
+       }
+@@ -309,7 +320,7 @@ write_sysctl(PyObject *self, PyObject *a
+ 
+       /* Arrange to obtain the oldvalue */
+       oldval = NULL;
+-      len = 0;
++      len = 4;
+ 
+       rv = sysctlbyname(name, NULL, &len, NULL, 0);
+ 
+@@ -445,7 +456,7 @@ create_node(const char *name, int ctl_ty
+ {
+ 
+       int mib[CTL_MAXNAME];
+-      u_int miblen = CTL_MAXNAME;
++      size_t miblen = CTL_MAXNAME;
+ 
+       char cname[SYSCTL_NAMELEN]; /* Canonical name */
+       char pname[SYSCTL_NAMELEN]; /* The Canonical prefix */
+@@ -456,6 +467,7 @@ create_node(const char *name, int ctl_ty
+       struct sysctlnode node;
+       size_t nodelen;
+ 
++
+       /* Check for NULL ptr dereference */
+       assert (value != NULL || vlen == 0);
+ 
+@@ -533,7 +545,7 @@ create_sysctl(PyObject *self, PyObject *
+       const char *typename = NULL;
+       size_t typelen = 0;
+ 
+-      int len, rv;
++      int rv;
+ 
+       /* XXX: Royal mess... needs more thought */
+       if (!PyArg_ParseTuple(args, "s|s#O: Incorrect values passed to sysctl.write", &name, &typename, &typelen, &value)) {
+@@ -546,7 +558,7 @@ create_sysctl(PyObject *self, PyObject *
+       }
+ 
+       /* XXX: Arrange to obtain the oldvalue */
+-      len = 0;
++      /*len = 4;*/
+ 
+       if ((typename == NULL && typelen == 0)
+           || (!strncmp(typename, "CTLTYPE_NODE", typelen)) ) {
+@@ -593,7 +605,12 @@ create_sysctl(PyObject *self, PyObject *
+                               PyErr_SetString(PyExc_TypeError, "Value passed is of wrong type");
+                               return NULL;
+                       }
++#if PY_MAJOR_VERSION >= 3
++                      strval = PyUnicode_AsUTF8AndSize(value, &vlen);
++                      if (strval == NULL) {
++#else
+                       if (-1 == PyString_AsStringAndSize(value, &strval, &vlen)) {
++#endif
+                               PyErr_SetString(PyExc_TypeError, "Error decoding string from buffer \n");
+                               return NULL;
+                       }
+@@ -694,8 +711,61 @@ static PyMethodDef sysctl_methods[] = {
+ };
+ 
+ 
++
++#if PY_MAJOR_VERSION >= 3
++
++static int sysctl_traverse(PyObject *m, visitproc visit, void *arg) {
++    Py_VISIT(GETSTATE(m)->error);
++    return 0;
++}
++
++static int sysctl_clear(PyObject *m) {
++    Py_CLEAR(GETSTATE(m)->error);
++    return 0;
++}
++
++
++static struct PyModuleDef moduledef = {
++        PyModuleDef_HEAD_INIT,
++        "sysctl",
++        NULL,
++        sizeof(struct module_state),
++        sysctl_methods,
++        NULL,
++        sysctl_traverse,
++        sysctl_clear,
++        NULL
++};
++
++#define INITERROR return NULL
++
+ PyMODINIT_FUNC
++PyInit_sysctl(void)
++
++#else
++#define INITERROR return
++
++void
+ initsysctl(void)
++#endif
+ {
+-      (void) Py_InitModule("sysctl", sysctl_methods);
++#if PY_MAJOR_VERSION >= 3
++    PyObject *module = PyModule_Create(&moduledef);
++#else
++    PyObject *module = Py_InitModule("sysctl", sysctl_methods);
++#endif
++
++    if (module == NULL)
++        INITERROR;
++    struct module_state *st = GETSTATE(module);
++
++    st->error = PyErr_NewException("sysctl.Error", NULL, NULL);
++    if (st->error == NULL) {
++        Py_DECREF(module);
++        INITERROR;
++    }
++
++#if PY_MAJOR_VERSION >= 3
++    return module;
++#endif
+ }
diff -r beca456014d3 -r 88ccc8954698 devel/py-sysctl/patches/patch-test.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/py-sysctl/patches/patch-test.py     Mon Sep 09 07:09:47 2019 +0000
@@ -0,0 +1,304 @@
+$NetBSD: patch-test.py,v 1.1 2019/09/09 07:09:47 maya Exp $
+
+Port to python 3.
+
+--- test.py.orig       2010-04-10 17:41:18.000000000 +0000
++++ test.py
+@@ -9,111 +9,111 @@ import sysctl
+ 
+ # Invalid node
+ try:
+-    print "Testing invalid node: sysctl.read(\"unknown\")"
++    print("Testing invalid node: sysctl.read(\"unknown\")")
+     sysctl.read("unknown")
+ except OSError as detail:
+-    print detail
+-    print "PASSED"
++    print(detail)
++    print("PASSED")
+ else:
+-    print "FAILED"
++    print("FAILED")
+ 
+ # Node with Struct/Table val.
+ tmp = 666 #Variable Declaration
+ try:
+-    print "Testing (integer) node sysctl.read(\"kern.maxproc\")"
++    print("Testing (integer) node sysctl.read(\"kern.maxproc\")")
+     tmp = sysctl.read("kern.maxproc")
+ except ValueError as detail:
+-    print detail
+-    print "FAILED"
++    print(detail)
++    print("FAILED")
+ else:
+-    print "kern.maxproc == %i" % tmp
+-    print "PASSED"
++    print("kern.maxproc == %i" % tmp)
++    print("PASSED")
+ 



Home | Main Index | Thread Index | Old Index