Hello community,

here is the log from the commit of package python-nss for openSUSE:Factory 
checked in at 2020-12-16 11:01:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-nss (Old)
 and      /work/SRC/openSUSE:Factory/.python-nss.new.2328 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-nss"

Wed Dec 16 11:01:31 2020 rev:4 rq:856065 version:1.0.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-nss/python-nss.changes    2019-03-04 
09:11:42.396694546 +0100
+++ /work/SRC/openSUSE:Factory/.python-nss.new.2328/python-nss.changes  
2020-12-16 11:01:33.087632601 +0100
@@ -1,0 +2,10 @@
+Tue Dec 15 19:07:03 UTC 2020 - Matej Cepl <mc...@suse.com>
+
+- Add missing patches from Fedora package
+  (https://src.fedoraproject.org/rpms/python-nss/tree/master):
+  - 0001-Rename-DSA-RSA-PublicKey-to-Py-DSA-RSA-PublicKey.patch
+    (bmo#1474274)
+  - sphinx.patch
+- Add generated documentation to -doc subpackage.
+
+-------------------------------------------------------------------

New:
----
  0001-Rename-DSA-RSA-PublicKey-to-Py-DSA-RSA-PublicKey.patch
  sphinx.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-nss.spec ++++++
--- /var/tmp/diff_new_pack.gKEAMe/_old  2020-12-16 11:01:33.799633301 +0100
+++ /var/tmp/diff_new_pack.gKEAMe/_new  2020-12-16 11:01:33.803633305 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-nss
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -22,11 +22,19 @@
 Summary:        Python bindings for mozilla-nss and mozilla-nspr
 License:        MPL-1.1+ OR GPL-2.0-or-later OR LGPL-2.0-or-later
 Group:          Development/Languages/Python
-URL:            http://www.mozilla.org/projects/security/pki/python-nss
+URL:            
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Python_binding_for_NSS
 Source:         
https://files.pythonhosted.org/packages/source/p/python-nss/python-nss-%{version}.tar.bz2
+# PATCH-FIX-UPSTREAM 
0001-Rename-DSA-RSA-PublicKey-to-Py-DSA-RSA-PublicKey.patch bmo#1474274 
mc...@suse.com
+# Incompatibility with NSS 3.58+
+Patch0:         0001-Rename-DSA-RSA-PublicKey-to-Py-DSA-RSA-PublicKey.patch
+# PATCH-FIX-UPSTREAM sphinx.patch bsc#[0-9]+ mc...@suse.com
+# this patch makes things totally awesome
+Patch1:         sphinx.patch
+BuildRequires:  %{python_module Sphinx}
 BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module docutils}
 BuildRequires:  %{python_module setuptools}
+BuildRequires:  fdupes
 BuildRequires:  mozilla-nspr-devel
 BuildRequires:  mozilla-nss-devel
 # Required for tests
@@ -40,14 +48,23 @@
 alternative to OpenSSL and used extensively by major software
 projects. NSS is FIPS-140 certified.
 
+%package -n %{name}-doc
+Summary:        Documentation files for %name
+Group:          Documentation/Other
+
+%description -n %{name}-doc
+HTML Documentation and examples for %name.
+
 %prep
-%setup -q -n python-nss-%{version}
+%autosetup -p1 -n python-nss-%{version}
 
 %build
-%python_build
+%python_build build_doc
+rm -rf build/sphinx/html/.buildinfo
 
 %install
 %python_install
+%python_expand %fdupes %{buildroot}%{$python_sitearch}
 
 %check
 %{python_expand export PYTHONPATH=%{buildroot}%{$python_sitearch}
@@ -59,4 +76,8 @@
 %doc README doc/ChangeLog
 %{python_sitearch}/*
 
+%files -n %{name}-doc
+%license LICENSE.mpl LICENSE.lgpl LICENSE.gpl
+%doc build/sphinx/html
+
 %changelog

++++++ 0001-Rename-DSA-RSA-PublicKey-to-Py-DSA-RSA-PublicKey.patch ++++++
From 079d4f65a743fb9e952ab109c1a24997c15398a7 Mon Sep 17 00:00:00 2001
From: Alexander Scheel <asch...@redhat.com>
Date: Thu, 3 Dec 2020 10:03:50 -0500
Subject: [PATCH] Rename {DSA,RSA}PublicKey to Py{DSA,RSA}PublicKey

These two structs have also been added to NSS as of v3.58. Because we
duplicate the name with different members, we should prefix the
python-nss classes with "Py" in the C code to distinguish them.

Signed-off-by: Alexander Scheel <asch...@redhat.com>
---
 src/py_nss.c | 180 +++++++++++++++++++++++++--------------------------
 src/py_nss.h |   8 +--
 2 files changed, 94 insertions(+), 94 deletions(-)

diff --git a/src/py_nss.c b/src/py_nss.c
index 3e8ccdb..d033ac2 100644
--- a/src/py_nss.c
+++ b/src/py_nss.c
@@ -7091,7 +7091,7 @@ KEYPQGParams_new_from_SECKEYPQGParams(const 
SECKEYPQGParams *params)
 }
 
 /* ========================================================================== 
*/
-/* =========================== RSAPublicKey Class =========================== 
*/
+/* ========================== PyRSAPublicKey Class ========================== 
*/
 /* ========================================================================== 
*/
 
 /* ============================ Attribute Access ============================ 
*/
@@ -7100,7 +7100,7 @@ KEYPQGParams_new_from_SECKEYPQGParams(const 
SECKEYPQGParams *params)
 // via integer_secitem_to_pylong()
 
 static PyObject *
-RSAPublicKey_get_modulus(RSAPublicKey *self, void *closure)
+PyRSAPublicKey_get_modulus(PyRSAPublicKey *self, void *closure)
 {
     TraceMethodEnter(self);
 
@@ -7109,7 +7109,7 @@ RSAPublicKey_get_modulus(RSAPublicKey *self, void 
*closure)
 }
 
 static PyObject *
-RSAPublicKey_get_exponent(RSAPublicKey *self, void *closure)
+PyRSAPublicKey_get_exponent(PyRSAPublicKey *self, void *closure)
 {
     TraceMethodEnter(self);
 
@@ -7118,20 +7118,20 @@ RSAPublicKey_get_exponent(RSAPublicKey *self, void 
*closure)
 }
 
 static
-PyGetSetDef RSAPublicKey_getseters[] = {
-    {"modulus",  (getter)RSAPublicKey_get_modulus,  (setter)NULL, "RSA 
modulus", NULL},
-    {"exponent", (getter)RSAPublicKey_get_exponent, (setter)NULL, "RSA 
exponent", NULL},
+PyGetSetDef PyRSAPublicKey_getseters[] = {
+    {"modulus",  (getter)PyRSAPublicKey_get_modulus,  (setter)NULL, "RSA 
modulus", NULL},
+    {"exponent", (getter)PyRSAPublicKey_get_exponent, (setter)NULL, "RSA 
exponent", NULL},
     {NULL}  /* Sentinel */
 };
 
-static PyMemberDef RSAPublicKey_members[] = {
+static PyMemberDef PyRSAPublicKey_members[] = {
     {NULL}  /* Sentinel */
 };
 
 /* ============================== Class Methods ============================= 
*/
 
 static PyObject *
-RSAPublicKey_format_lines(RSAPublicKey *self, PyObject *args, PyObject *kwds)
+PyRSAPublicKey_format_lines(PyRSAPublicKey *self, PyObject *args, PyObject 
*kwds)
 {
     static char *kwlist[] = {"level", NULL};
     int level = 0;
@@ -7147,12 +7147,12 @@ RSAPublicKey_format_lines(RSAPublicKey *self, PyObject 
*args, PyObject *kwds)
         return NULL;
     }
 
-    if ((obj = RSAPublicKey_get_modulus(self, NULL)) == NULL) {
+    if ((obj = PyRSAPublicKey_get_modulus(self, NULL)) == NULL) {
         goto fail;
     }
     FMT_SEC_INT_OBJ_APPEND_AND_CLEAR(lines, _("Modulus"), obj, level, fail);
 
-    if ((obj = RSAPublicKey_get_exponent(self, NULL)) == NULL) {
+    if ((obj = PyRSAPublicKey_get_exponent(self, NULL)) == NULL) {
         goto fail;
     }
     FMT_SEC_INT_OBJ_APPEND_AND_CLEAR(lines, _("Exponent"), obj, level, fail);
@@ -7165,41 +7165,41 @@ RSAPublicKey_format_lines(RSAPublicKey *self, PyObject 
*args, PyObject *kwds)
 }
 
 static PyObject *
-RSAPublicKey_format(RSAPublicKey *self, PyObject *args, PyObject *kwds)
+PyRSAPublicKey_format(PyRSAPublicKey *self, PyObject *args, PyObject *kwds)
 {
     TraceMethodEnter(self);
 
-    return format_from_lines((format_lines_func)RSAPublicKey_format_lines, 
(PyObject *)self, args, kwds);
+    return format_from_lines((format_lines_func)PyRSAPublicKey_format_lines, 
(PyObject *)self, args, kwds);
 }
 
 static PyObject *
-RSAPublicKey_str(RSAPublicKey *self)
+PyRSAPublicKey_str(PyRSAPublicKey *self)
 {
     PyObject *py_formatted_result = NULL;
 
     TraceMethodEnter(self);
 
-    py_formatted_result =  RSAPublicKey_format(self, empty_tuple, NULL);
+    py_formatted_result =  PyRSAPublicKey_format(self, empty_tuple, NULL);
     return py_formatted_result;
 
 }
 
-static PyMethodDef RSAPublicKey_methods[] = {
-    {"format_lines", (PyCFunction)RSAPublicKey_format_lines,   
METH_VARARGS|METH_KEYWORDS, generic_format_lines_doc},
-    {"format",       (PyCFunction)RSAPublicKey_format,         
METH_VARARGS|METH_KEYWORDS, generic_format_doc},
+static PyMethodDef PyRSAPublicKey_methods[] = {
+    {"format_lines", (PyCFunction)PyRSAPublicKey_format_lines,   
METH_VARARGS|METH_KEYWORDS, generic_format_lines_doc},
+    {"format",       (PyCFunction)PyRSAPublicKey_format,         
METH_VARARGS|METH_KEYWORDS, generic_format_doc},
     {NULL, NULL}  /* Sentinel */
 };
 
 /* =========================== Class Construction =========================== 
*/
 
 static PyObject *
-RSAPublicKey_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+PyRSAPublicKey_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-    RSAPublicKey *self;
+    PyRSAPublicKey *self;
 
     TraceObjNewEnter(type);
 
-    if ((self = (RSAPublicKey *)type->tp_alloc(type, 0)) == NULL) {
+    if ((self = (PyRSAPublicKey *)type->tp_alloc(type, 0)) == NULL) {
         return NULL;
     }
 
@@ -7211,7 +7211,7 @@ RSAPublicKey_new(PyTypeObject *type, PyObject *args, 
PyObject *kwds)
 }
 
 static int
-RSAPublicKey_traverse(RSAPublicKey *self, visitproc visit, void *arg)
+PyRSAPublicKey_traverse(PyRSAPublicKey *self, visitproc visit, void *arg)
 {
     TraceMethodEnter(self);
 
@@ -7221,7 +7221,7 @@ RSAPublicKey_traverse(RSAPublicKey *self, visitproc 
visit, void *arg)
 }
 
 static int
-RSAPublicKey_clear(RSAPublicKey* self)
+PyRSAPublicKey_clear(PyRSAPublicKey* self)
 {
     TraceMethodEnter(self);
 
@@ -7231,31 +7231,31 @@ RSAPublicKey_clear(RSAPublicKey* self)
 }
 
 static void
-RSAPublicKey_dealloc(RSAPublicKey* self)
+PyRSAPublicKey_dealloc(PyRSAPublicKey* self)
 {
     TraceMethodEnter(self);
 
-    RSAPublicKey_clear(self);
+    PyRSAPublicKey_clear(self);
     Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
-PyDoc_STRVAR(RSAPublicKey_doc,
+PyDoc_STRVAR(PyRSAPublicKey_doc,
 "An object representing an RSA Public Key");
 
 static int
-RSAPublicKey_init(RSAPublicKey *self, PyObject *args, PyObject *kwds)
+PyRSAPublicKey_init(PyRSAPublicKey *self, PyObject *args, PyObject *kwds)
 {
     TraceMethodEnter(self);
 
     return 0;
 }
 
-static PyTypeObject RSAPublicKeyType = {
+static PyTypeObject PyRSAPublicKeyType = {
     PyVarObject_HEAD_INIT(NULL, 0)
-    "nss.nss.RSAPublicKey",                    /* tp_name */
-    sizeof(RSAPublicKey),                      /* tp_basicsize */
+    "nss.nss.PyRSAPublicKey",                  /* tp_name */
+    sizeof(PyRSAPublicKey),                    /* tp_basicsize */
     0,                                         /* tp_itemsize */
-    (destructor)RSAPublicKey_dealloc,          /* tp_dealloc */
+    (destructor)PyRSAPublicKey_dealloc,                /* tp_dealloc */
     0,                                         /* tp_print */
     0,                                         /* tp_getattr */
     0,                                         /* tp_setattr */
@@ -7266,39 +7266,39 @@ static PyTypeObject RSAPublicKeyType = {
     0,                                         /* tp_as_mapping */
     0,                                         /* tp_hash */
     0,                                         /* tp_call */
-    (reprfunc)RSAPublicKey_str,                        /* tp_str */
+    (reprfunc)PyRSAPublicKey_str,                      /* tp_str */
     0,                                         /* tp_getattro */
     0,                                         /* tp_setattro */
     0,                                         /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,     /* 
tp_flags */
-    RSAPublicKey_doc,                          /* tp_doc */
-    (traverseproc)RSAPublicKey_traverse,       /* tp_traverse */
-    (inquiry)RSAPublicKey_clear,               /* tp_clear */
+    PyRSAPublicKey_doc,                                /* tp_doc */
+    (traverseproc)PyRSAPublicKey_traverse,     /* tp_traverse */
+    (inquiry)PyRSAPublicKey_clear,             /* tp_clear */
     0,                                         /* tp_richcompare */
     0,                                         /* tp_weaklistoffset */
     0,                                         /* tp_iter */
     0,                                         /* tp_iternext */
-    RSAPublicKey_methods,                      /* tp_methods */
-    RSAPublicKey_members,                      /* tp_members */
-    RSAPublicKey_getseters,                    /* tp_getset */
+    PyRSAPublicKey_methods,                    /* tp_methods */
+    PyRSAPublicKey_members,                    /* tp_members */
+    PyRSAPublicKey_getseters,                  /* tp_getset */
     0,                                         /* tp_base */
     0,                                         /* tp_dict */
     0,                                         /* tp_descr_get */
     0,                                         /* tp_descr_set */
     0,                                         /* tp_dictoffset */
-    (initproc)RSAPublicKey_init,               /* tp_init */
+    (initproc)PyRSAPublicKey_init,             /* tp_init */
     0,                                         /* tp_alloc */
-    RSAPublicKey_new,                          /* tp_new */
+    PyRSAPublicKey_new,                                /* tp_new */
 };
 
 PyObject *
-RSAPublicKey_new_from_SECKEYRSAPublicKey(SECKEYRSAPublicKey *rsa)
+PyRSAPublicKey_new_from_SECKEYRSAPublicKey(SECKEYRSAPublicKey *rsa)
 {
-    RSAPublicKey *self = NULL;
+    PyRSAPublicKey *self = NULL;
 
     TraceObjNewEnter(NULL);
 
-    if ((self = (RSAPublicKey *) RSAPublicKeyType.tp_new(&RSAPublicKeyType, 
NULL, NULL)) == NULL) {
+    if ((self = (PyRSAPublicKey *) 
PyRSAPublicKeyType.tp_new(&PyRSAPublicKeyType, NULL, NULL)) == NULL) {
         return NULL;
     }
 
@@ -7317,13 +7317,13 @@ 
RSAPublicKey_new_from_SECKEYRSAPublicKey(SECKEYRSAPublicKey *rsa)
 }
 
 /* ========================================================================== 
*/
-/* =========================== DSAPublicKey Class =========================== 
*/
+/* ========================== PyDSAPublicKey Class ========================== 
*/
 /* ========================================================================== 
*/
 
 /* ============================ Attribute Access ============================ 
*/
 
 static PyObject *
-DSAPublicKey_get_pqg_params(DSAPublicKey *self, void *closure)
+PyDSAPublicKey_get_pqg_params(PyDSAPublicKey *self, void *closure)
 {
     TraceMethodEnter(self);
 
@@ -7332,7 +7332,7 @@ DSAPublicKey_get_pqg_params(DSAPublicKey *self, void 
*closure)
 }
 
 static PyObject *
-DSAPublicKey_get_public_value(DSAPublicKey *self, void *closure)
+PyDSAPublicKey_get_public_value(PyDSAPublicKey *self, void *closure)
 {
     TraceMethodEnter(self);
 
@@ -7341,20 +7341,20 @@ DSAPublicKey_get_public_value(DSAPublicKey *self, void 
*closure)
 }
 
 static
-PyGetSetDef DSAPublicKey_getseters[] = {
-    {"pqg_params",   (getter)DSAPublicKey_get_pqg_params,   (setter)NULL, "DSA 
P,Q,G params as a KEYPQGParams object", NULL},
-    {"public_value", (getter)DSAPublicKey_get_public_value, (setter)NULL, "DSA 
public_value", NULL},
+PyGetSetDef PyDSAPublicKey_getseters[] = {
+    {"pqg_params",   (getter)PyDSAPublicKey_get_pqg_params,   (setter)NULL, 
"DSA P,Q,G params as a KEYPQGParams object", NULL},
+    {"public_value", (getter)PyDSAPublicKey_get_public_value, (setter)NULL, 
"DSA public_value", NULL},
     {NULL}  /* Sentinel */
 };
 
-static PyMemberDef DSAPublicKey_members[] = {
+static PyMemberDef PyDSAPublicKey_members[] = {
     {NULL}  /* Sentinel */
 };
 
 /* ============================== Class Methods ============================= 
*/
 
 static PyObject *
-DSAPublicKey_format_lines(DSAPublicKey *self, PyObject *args, PyObject *kwds)
+PyDSAPublicKey_format_lines(PyDSAPublicKey *self, PyObject *args, PyObject 
*kwds)
 {
     static char *kwlist[] = {"level", NULL};
     int level = 0;
@@ -7371,13 +7371,13 @@ DSAPublicKey_format_lines(DSAPublicKey *self, PyObject 
*args, PyObject *kwds)
         return NULL;
     }
 
-    if ((obj = DSAPublicKey_get_pqg_params(self, NULL)) == NULL) {
+    if ((obj = PyDSAPublicKey_get_pqg_params(self, NULL)) == NULL) {
         goto fail;
     }
     CALL_FORMAT_LINES_AND_APPEND(lines, obj, level, fail);
     Py_CLEAR(obj);
 
-    if ((obj = DSAPublicKey_get_public_value(self, NULL)) == NULL) {
+    if ((obj = PyDSAPublicKey_get_public_value(self, NULL)) == NULL) {
         goto fail;
     }
     FMT_SEC_INT_OBJ_APPEND_AND_CLEAR(lines, _("Public Value"), obj, level, 
fail);
@@ -7390,41 +7390,41 @@ DSAPublicKey_format_lines(DSAPublicKey *self, PyObject 
*args, PyObject *kwds)
 }
 
 static PyObject *
-DSAPublicKey_format(DSAPublicKey *self, PyObject *args, PyObject *kwds)
+PyDSAPublicKey_format(PyDSAPublicKey *self, PyObject *args, PyObject *kwds)
 {
     TraceMethodEnter(self);
 
-    return format_from_lines((format_lines_func)DSAPublicKey_format_lines, 
(PyObject *)self, args, kwds);
+    return format_from_lines((format_lines_func)PyDSAPublicKey_format_lines, 
(PyObject *)self, args, kwds);
 }
 
 static PyObject *
-DSAPublicKey_str(DSAPublicKey *self)
+PyDSAPublicKey_str(PyDSAPublicKey *self)
 {
     PyObject *py_formatted_result = NULL;
 
     TraceMethodEnter(self);
 
-    py_formatted_result =  DSAPublicKey_format(self, empty_tuple, NULL);
+    py_formatted_result =  PyDSAPublicKey_format(self, empty_tuple, NULL);
     return py_formatted_result;
 
 }
 
-static PyMethodDef DSAPublicKey_methods[] = {
-    {"format_lines", (PyCFunction)DSAPublicKey_format_lines,   
METH_VARARGS|METH_KEYWORDS, generic_format_lines_doc},
-    {"format",       (PyCFunction)DSAPublicKey_format,         
METH_VARARGS|METH_KEYWORDS, generic_format_doc},
+static PyMethodDef PyDSAPublicKey_methods[] = {
+    {"format_lines", (PyCFunction)PyDSAPublicKey_format_lines,   
METH_VARARGS|METH_KEYWORDS, generic_format_lines_doc},
+    {"format",       (PyCFunction)PyDSAPublicKey_format,         
METH_VARARGS|METH_KEYWORDS, generic_format_doc},
     {NULL, NULL}  /* Sentinel */
 };
 
 /* =========================== Class Construction =========================== 
*/
 
 static PyObject *
-DSAPublicKey_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+PyDSAPublicKey_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-    DSAPublicKey *self;
+    PyDSAPublicKey *self;
 
     TraceObjNewEnter(type);
 
-    if ((self = (DSAPublicKey *)type->tp_alloc(type, 0)) == NULL) {
+    if ((self = (PyDSAPublicKey *)type->tp_alloc(type, 0)) == NULL) {
         return NULL;
     }
 
@@ -7436,7 +7436,7 @@ DSAPublicKey_new(PyTypeObject *type, PyObject *args, 
PyObject *kwds)
 }
 
 static int
-DSAPublicKey_traverse(DSAPublicKey *self, visitproc visit, void *arg)
+PyDSAPublicKey_traverse(PyDSAPublicKey *self, visitproc visit, void *arg)
 {
     TraceMethodEnter(self);
 
@@ -7446,7 +7446,7 @@ DSAPublicKey_traverse(DSAPublicKey *self, visitproc 
visit, void *arg)
 }
 
 static int
-DSAPublicKey_clear(DSAPublicKey* self)
+PyDSAPublicKey_clear(PyDSAPublicKey* self)
 {
     TraceMethodEnter(self);
 
@@ -7456,31 +7456,31 @@ DSAPublicKey_clear(DSAPublicKey* self)
 }
 
 static void
-DSAPublicKey_dealloc(DSAPublicKey* self)
+PyDSAPublicKey_dealloc(PyDSAPublicKey* self)
 {
     TraceMethodEnter(self);
 
-    DSAPublicKey_clear(self);
+    PyDSAPublicKey_clear(self);
     Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
-PyDoc_STRVAR(DSAPublicKey_doc,
+PyDoc_STRVAR(PyDSAPublicKey_doc,
 "A object representing a DSA Public Key");
 
 static int
-DSAPublicKey_init(DSAPublicKey *self, PyObject *args, PyObject *kwds)
+PyDSAPublicKey_init(PyDSAPublicKey *self, PyObject *args, PyObject *kwds)
 {
     TraceMethodEnter(self);
 
     return 0;
 }
 
-static PyTypeObject DSAPublicKeyType = {
+static PyTypeObject PyDSAPublicKeyType = {
     PyVarObject_HEAD_INIT(NULL, 0)
-    "nss.nss.DSAPublicKey",                    /* tp_name */
-    sizeof(DSAPublicKey),                      /* tp_basicsize */
+    "nss.nss.PyDSAPublicKey",                  /* tp_name */
+    sizeof(PyDSAPublicKey),                    /* tp_basicsize */
     0,                                         /* tp_itemsize */
-    (destructor)DSAPublicKey_dealloc,          /* tp_dealloc */
+    (destructor)PyDSAPublicKey_dealloc,                /* tp_dealloc */
     0,                                         /* tp_print */
     0,                                         /* tp_getattr */
     0,                                         /* tp_setattr */
@@ -7491,39 +7491,39 @@ static PyTypeObject DSAPublicKeyType = {
     0,                                         /* tp_as_mapping */
     0,                                         /* tp_hash */
     0,                                         /* tp_call */
-    (reprfunc)DSAPublicKey_str,                        /* tp_str */
+    (reprfunc)PyDSAPublicKey_str,                      /* tp_str */
     0,                                         /* tp_getattro */
     0,                                         /* tp_setattro */
     0,                                         /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,     /* 
tp_flags */
-    DSAPublicKey_doc,                          /* tp_doc */
-    (traverseproc)DSAPublicKey_traverse,       /* tp_traverse */
-    (inquiry)DSAPublicKey_clear,               /* tp_clear */
+    PyDSAPublicKey_doc,                                /* tp_doc */
+    (traverseproc)PyDSAPublicKey_traverse,     /* tp_traverse */
+    (inquiry)PyDSAPublicKey_clear,             /* tp_clear */
     0,                                         /* tp_richcompare */
     0,                                         /* tp_weaklistoffset */
     0,                                         /* tp_iter */
     0,                                         /* tp_iternext */
-    DSAPublicKey_methods,                      /* tp_methods */
-    DSAPublicKey_members,                      /* tp_members */
-    DSAPublicKey_getseters,                    /* tp_getset */
+    PyDSAPublicKey_methods,                    /* tp_methods */
+    PyDSAPublicKey_members,                    /* tp_members */
+    PyDSAPublicKey_getseters,                  /* tp_getset */
     0,                                         /* tp_base */
     0,                                         /* tp_dict */
     0,                                         /* tp_descr_get */
     0,                                         /* tp_descr_set */
     0,                                         /* tp_dictoffset */
-    (initproc)DSAPublicKey_init,               /* tp_init */
+    (initproc)PyDSAPublicKey_init,             /* tp_init */
     0,                                         /* tp_alloc */
-    DSAPublicKey_new,                          /* tp_new */
+    PyDSAPublicKey_new,                                /* tp_new */
 };
 
 PyObject *
-DSAPublicKey_new_from_SECKEYDSAPublicKey(SECKEYDSAPublicKey *dsa)
+PyDSAPublicKey_new_from_SECKEYDSAPublicKey(SECKEYDSAPublicKey *dsa)
 {
-    DSAPublicKey *self = NULL;
+    PyDSAPublicKey *self = NULL;
 
     TraceObjNewEnter(NULL);
 
-    if ((self = (DSAPublicKey *) DSAPublicKeyType.tp_new(&DSAPublicKeyType, 
NULL, NULL)) == NULL) {
+    if ((self = (PyDSAPublicKey *) 
PyDSAPublicKeyType.tp_new(&PyDSAPublicKeyType, NULL, NULL)) == NULL) {
         return NULL;
     }
 
@@ -7882,8 +7882,8 @@ static
 PyGetSetDef PublicKey_getseters[] = {
     {"key_type",     (getter)PublicKey_get_key_type,     (setter)NULL, "key 
type (e.g. rsaKey, dsaKey, etc.) as an int", NULL},
     {"key_type_str", (getter)PublicKey_get_key_type_str, (setter)NULL, "key 
type as a string", NULL},
-    {"rsa",          (getter)PublicKey_get_rsa,          (setter)NULL, "RSA 
key as a RSAPublicKey object", NULL},
-    {"dsa",          (getter)PublicKey_get_dsa,          (setter)NULL, "RSA 
key as a RSAPublicKey object", NULL},
+    {"rsa",          (getter)PublicKey_get_rsa,          (setter)NULL, "RSA 
key as a PyRSAPublicKey object", NULL},
+    {"dsa",          (getter)PublicKey_get_dsa,          (setter)NULL, "RSA 
key as a PyRSAPublicKey object", NULL},
     {NULL}  /* Sentinel */
 };
 
@@ -8087,13 +8087,13 @@ PublicKey_new_from_SECKEYPublicKey(SECKEYPublicKey *pk)
 
     switch(pk->keyType) {       /* FIXME: handle the other cases */
     case rsaKey:
-        if ((self->py_rsa_key = 
RSAPublicKey_new_from_SECKEYRSAPublicKey(&pk->u.rsa)) == NULL) {
+        if ((self->py_rsa_key = 
PyRSAPublicKey_new_from_SECKEYRSAPublicKey(&pk->u.rsa)) == NULL) {
             Py_CLEAR(self);
             return NULL;
         }
         break;
     case dsaKey:
-        if ((self->py_dsa_key = 
DSAPublicKey_new_from_SECKEYDSAPublicKey(&pk->u.dsa)) == NULL) {
+        if ((self->py_dsa_key = 
PyDSAPublicKey_new_from_SECKEYDSAPublicKey(&pk->u.dsa)) == NULL) {
             Py_CLEAR(self);
             return NULL;
         }
@@ -25310,8 +25310,8 @@ MOD_INIT(nss)
     TYPE_READY(AlgorithmIDType);
     TYPE_READY(RSAGenParamsType);
     TYPE_READY(KEYPQGParamsType);
-    TYPE_READY(RSAPublicKeyType);
-    TYPE_READY(DSAPublicKeyType);
+    TYPE_READY(PyRSAPublicKeyType);
+    TYPE_READY(PyDSAPublicKeyType);
     TYPE_READY(SignedDataType);
     TYPE_READY(PublicKeyType);
     TYPE_READY(SubjectPublicKeyInfoType);
diff --git a/src/py_nss.h b/src/py_nss.h
index c93b3a2..4bc94e6 100644
--- a/src/py_nss.h
+++ b/src/py_nss.h
@@ -116,24 +116,24 @@ typedef struct {
 } SignedCRL;
 
 /* ========================================================================== 
*/
-/* ============================ RSAPublicKey Class ========================== 
*/
+/* =========================== PyRSAPublicKey Class ========================= 
*/
 /* ========================================================================== 
*/
 
 typedef struct {
     PyObject_HEAD
     PyObject *py_modulus;
     PyObject *py_exponent;
-} RSAPublicKey;
+} PyRSAPublicKey;
 
 /* ========================================================================== 
*/
-/* ============================ DSAPublicKey Class ========================== 
*/
+/* =========================== PyDSAPublicKey Class ========================= 
*/
 /* ========================================================================== 
*/
 
 typedef struct {
     PyObject_HEAD
     PyObject *py_pqg_params;
     PyObject *py_public_value;
-} DSAPublicKey;
+} PyDSAPublicKey;
 
 /* ========================================================================== 
*/
 /* ============================ RSAGenParams Class ========================== 
*/
-- 
2.26.2

From 51343db2e865b05054f0204dc6116a5633c671c7 Mon Sep 17 00:00:00 2001
From: Alexander Scheel <asch...@redhat.com>
Date: Mon, 7 Dec 2020 08:41:32 -0500
Subject: [PATCH] Fix python names of RSAPublicKey, DSAPublicKey

In 079d4f65a743fb9e952ab109c1a24997c15398a7, I was a little greedy on my
find/replace and ended up adjusting the Python names of these structs as
well as the C names. We wish to keep the Python names the same, so
revert that part of the patch.

Credit to Stanislav Levin for finding and reporting this.

Signed-off-by: Alexander Scheel <asch...@redhat.com>
---
 src/py_nss.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/py_nss.c b/src/py_nss.c
index d033ac2..a01dd07 100644
--- a/src/py_nss.c
+++ b/src/py_nss.c
@@ -7252,7 +7252,7 @@ PyRSAPublicKey_init(PyRSAPublicKey *self, PyObject *args, 
PyObject *kwds)
 
 static PyTypeObject PyRSAPublicKeyType = {
     PyVarObject_HEAD_INIT(NULL, 0)
-    "nss.nss.PyRSAPublicKey",                  /* tp_name */
+    "nss.nss.RSAPublicKey",                    /* tp_name */
     sizeof(PyRSAPublicKey),                    /* tp_basicsize */
     0,                                         /* tp_itemsize */
     (destructor)PyRSAPublicKey_dealloc,                /* tp_dealloc */
@@ -7477,7 +7477,7 @@ PyDSAPublicKey_init(PyDSAPublicKey *self, PyObject *args, 
PyObject *kwds)
 
 static PyTypeObject PyDSAPublicKeyType = {
     PyVarObject_HEAD_INIT(NULL, 0)
-    "nss.nss.PyDSAPublicKey",                  /* tp_name */
+    "nss.nss.DSAPublicKey",                    /* tp_name */
     sizeof(PyDSAPublicKey),                    /* tp_basicsize */
     0,                                         /* tp_itemsize */
     (destructor)PyDSAPublicKey_dealloc,                /* tp_dealloc */
-- 
2.26.2

++++++ sphinx.patch ++++++
diff -r d767ac371ee3 doc/sphinx/source/conf.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/sphinx/source/conf.py Fri Jul 06 11:24:08 2018 -0400
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+#
+# Configuration file for the Sphinx documentation builder.
+#
+# This file does only contain a selection of the most common options. For a
+# full list see the documentation:
+# http://www.sphinx-doc.org/en/master/config
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'python-nss'
+copyright = '2018, John Dennis'
+author = 'John Dennis'
+
+# The short X.Y version
+version = ''
+# The full version, including alpha/beta/rc tags
+release = ''
+
+
+# -- General configuration ---------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#
+# needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.autosummary',
+]
+
+autodoc_default_flags = ['members']
+autosummary_generate = True
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path .
+exclude_patterns = []
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'alabaster'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#
+# html_theme_options = {}
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# The default sidebars (for documents that don't match any pattern) are
+# defined by theme itself.  Builtin themes are using these templates by
+# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
+# 'searchbox.html']``.
+#
+# html_sidebars = {}
+
+
+# -- Options for HTMLHelp output ---------------------------------------------
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'python-nssdoc'
+
+
+# -- Options for LaTeX output ------------------------------------------------
+
+latex_elements = {
+    # The paper size ('letterpaper' or 'a4paper').
+    #
+    # 'papersize': 'letterpaper',
+
+    # The font size ('10pt', '11pt' or '12pt').
+    #
+    # 'pointsize': '10pt',
+
+    # Additional stuff for the LaTeX preamble.
+    #
+    # 'preamble': '',
+
+    # Latex figure (float) alignment
+    #
+    # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+    (master_doc, 'python-nss.tex', 'python-nss Documentation',
+     'John Dennis', 'manual'),
+]
+
+
+# -- Options for manual page output ------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'python-nss', 'python-nss Documentation',
+     [author], 1)
+]
+
+
+# -- Options for Texinfo output ----------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+    (master_doc, 'python-nss', 'python-nss Documentation',
+     author, 'python-nss', 'One line description of project.',
+     'Miscellaneous'),
+]
+
+
+# -- Extension configuration -------------------------------------------------
diff -r d767ac371ee3 doc/sphinx/source/index.rst
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/sphinx/source/index.rst       Fri Jul 06 11:24:08 2018 -0400
@@ -0,0 +1,43 @@
+.. python-nss documentation master file, created by
+   sphinx-quickstart on Thu Jun 28 09:36:37 2018.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to python-nss's documentation!
+======================================
+
+Sub-modules
+===========
+
+The functionality of python-nss is implemented in several sub-modules.
+Each sub-module focuses on related functions, classes and data. The
+bulk of NSS functionality (e.g. general cryptography) appears in the
+`nss.nss` module. You can detailed information on the module, it's
+data, it's classes and functions by following the link to the
+sub-module in the table below. You can also use the `Index` in the
+next section to jump directly to a specific item.
+
+
+.. autosummary::
+   :toctree: generated
+          
+   nss.io
+   nss.ssl
+   nss.nss
+   nss.error
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
+.. automodule:: nss
+   :members:
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
diff -r d767ac371ee3 setup.py
--- a/setup.py  Tue Feb 28 18:24:19 2017 -0500
+++ b/setup.py  Fri Jul 06 11:24:08 2018 -0400
@@ -15,21 +15,25 @@
 from distutils.util import subst_vars, change_root
 from distutils.command.build_py import build_py as _build_py
 from distutils.command.sdist import sdist as _sdist
+from sphinx.setup_command import BuildDoc as SphinxBuildDoc
 
+name = 'python-nss'
 version = "1.0.1"
+release = version
 
 doc_manifest = [
     [['include README LICENSE* doc/ChangeLog',
       'recursive-include doc *.py *.txt',
-      'prune doc/examples/pki'],
+      'prune doc/examples/pki',
+      'prune doc/sphinx'],
      [('^doc/', '')], None],
     [['recursive-include test run_tests setup_certs.py test_*.py util.py 
*.txt',
       'prune test/pki'],
      None , None],
     [['recursive-include lib *.py *.txt',],
      [('^lib/', '')] , 'examples'],
-    [['recursive-include build/doc/html *'],
-     [('^build/doc/', 'api/')], None],
+    [['recursive-include build/sphinx/html *'],
+     [('^build/sphinx/', 'api/')], None],
 ]
 
 def update_version():
@@ -114,13 +118,13 @@
     user_options = [('docdir=', 'd', "directory root for documentation"),
                    ]
 
-    def has_epydoc (self):
-        if find_executable('epydoc'):
+    def has_sphinx (self):
+        if find_executable('sphinx-build'):
             return True
         else:
             return False
 
-    sub_commands = [('build_api_doc', has_epydoc),
+    sub_commands = [('build_sphinx', has_sphinx),
                    ]
 
     def initialize_options(self):
@@ -137,46 +141,15 @@
 
     def run(self):
         self.run_command('build')
+        # Add build directory to Python path so doc builder can import
+        # in-tree built modules
+        sys.path.insert(0, self.build_lib)
         for cmd_name in self.get_sub_commands():
             self.run_command(cmd_name)
+        # Remove the build directory from Python path
+        del sys.path[0]
 
 
-class BuildApiDoc(Command):
-    description = 'generate the API documentation'
-    user_options = [('docdir=',  'd', "directory root for documentation"),
-                    ('action=',  'a', "epydoc action (html, latex, dvi, ps, 
pdf, check, pickle"),
-                    ('htmldir',  'H', "directory to locate the API HTML files 
under"),
-                   ]
-
-    def initialize_options(self):
-        self.build_base = None
-        self.build_lib = None
-        self.docdir = None
-        self.action = None
-        self.htmldir = None
-
-    def finalize_options(self):
-        self.set_undefined_options('build',
-                                   ('build_base', 'build_base'),
-                                   ('build_lib', 'build_lib'))
-
-        if self.action is None:
-            self.action = 'html'
-
-        if self.docdir is None:
-            if self.action == 'html':
-                self.docdir = 
change_root(self.get_finalized_command('build_doc').docdir, 'html')
-            else:
-                self.docdir = self.get_finalized_command('build_doc').docdir
-
-    def run(self):
-        prog = find_executable('epydoc')
-        pkg_dirs = [change_root(self.build_lib, pkg) for pkg in 
self.distribution.packages]
-        cmd = [prog, '-v', '--%s' % self.action, '--docformat', 
'restructuredtext', '-o', self.docdir]
-        #if self.verbose: cmd.append('-v')
-        cmd.extend(pkg_dirs)
-        self.mkpath(self.docdir)
-        spawn(cmd)
 
 class InstallDoc(Command):
     description = 'install documentation'
@@ -373,7 +346,7 @@
 
           #bug_tracker       = 
'https://bugzilla.redhat.com/buglist.cgi?submit&component=python-nss&product=Fedora&classification=Fedora'
           #bug_enter     = 
'https://bugzilla.redhat.com/enter_bug.cgi?component=python-nss&product=Fedora&classification=Fedora',
-    setup(name             = 'python-nss',
+    setup(name             = name,
           version          = version,
           description      = 'Python bindings for Network Security Services 
(NSS) and Netscape Portable Runtime (NSPR)',
           long_description = long_description,
@@ -393,12 +366,17 @@
           package_dir      = {'nss':'src'},
           packages         = ['nss'],
           cmdclass         = {'build_doc'     : BuildDoc,
-                              'build_api_doc' : BuildApiDoc,
+                              'build_sphinx'  : SphinxBuildDoc,
                               'install_doc'   : InstallDoc,
                               'build_py'      : BuildPy,
                               'sdist'         : SDist,
                              },
-
+          command_options={
+              'build_sphinx': {
+                  'project': ('setup.py', name),
+                  'version': ('setup.py', version),
+                  'release': ('setup.py', release),
+                  'source_dir': ('setup.py', 'doc/sphinx/source')}},
     )
 
     return 0
_______________________________________________
openSUSE Commits mailing list -- commit@lists.opensuse.org
To unsubscribe, email commit-le...@lists.opensuse.org
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives: 
https://lists.opensuse.org/archives/list/commit@lists.opensuse.org

Reply via email to