diff --git a/networkx-2.3.zip b/networkx-2.3.zip
deleted file mode 100644
index 47e79ba..0000000
--- a/networkx-2.3.zip
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8311ddef63cf5c5c5e7c1d0212dd141d9a1fe3f474915281b73597ed5f1d4e3d
-size 1743914
diff --git a/networkx-2.4.tar.gz b/networkx-2.4.tar.gz
new file mode 100644
index 0000000..912332f
--- /dev/null
+++ b/networkx-2.4.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64
+size 1462338
diff --git a/numpy-38-test.patch b/numpy-38-test.patch
new file mode 100644
index 0000000..3c0e4c1
--- /dev/null
+++ b/numpy-38-test.patch
@@ -0,0 +1,69 @@
+diff --git a/networkx/readwrite/tests/test_gexf.py b/networkx/readwrite/tests/test_gexf.py
+index afc40111..f16504c0 100644
+--- a/networkx/readwrite/tests/test_gexf.py
++++ b/networkx/readwrite/tests/test_gexf.py
+@@ -404,7 +404,8 @@ gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd" version="1.2">
+ nx.set_node_attributes(G, {n: n for n in numpy.arange(4)}, 'number')
+ G[0][1]['edge-number'] = numpy.float64(1.1)
+
+- expected = """
+
+@@ -449,6 +450,54 @@ gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd" version="1.2">
+
+
+
++""".format(time.strftime('%Y-%m-%d'), nx.__version__)
++ else:
++ expected = """
++
++ NetworkX {}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+ """.format(time.strftime('%Y-%m-%d'), nx.__version__)
+ obtained = '\n'.join(nx.generate_gexf(G))
+ assert expected == obtained
diff --git a/python-networkx.changes b/python-networkx.changes
index 03bc975..222a166 100644
--- a/python-networkx.changes
+++ b/python-networkx.changes
@@ -1,3 +1,17 @@
+-------------------------------------------------------------------
+Sun Nov 17 23:53:12 UTC 2019 - Steve Kowalik
+
+- Update to version 2.4
+ Highlights:
+ * Remove deprecated code from 1.x
+ * Support for Python 3.8
+ * Switched to pytest for testing
+ * Last release to support Python 3.5
+ * Fifteen new fuctions, including onion decomposition and linear prufing
+ * Three new generators, such as a directed joint degree generator
+- Add numpy-38-test.patch, to correct test failure under Python 3.8
+- Update URL, upstream changed to tarballs from zipfiles.
+
-------------------------------------------------------------------
Tue Jul 23 17:28:58 UTC 2019 - Todd R
diff --git a/python-networkx.spec b/python-networkx.spec
index f742fa0..7e339f2 100644
--- a/python-networkx.spec
+++ b/python-networkx.spec
@@ -19,19 +19,21 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-networkx
-Version: 2.3
+Version: 2.4
Release: 0
Summary: Python package for the study of complex networks
License: BSD-3-Clause
Group: Development/Languages/Python
URL: https://networkx.github.io/
-Source: https://files.pythonhosted.org/packages/source/n/networkx/networkx-%{version}.zip
+Source: https://files.pythonhosted.org/packages/source/n/networkx/networkx-%{version}.tar.gz
+# UPSTREAM PATCH: gh#networkx/networkx#3724
+Patch0: numpy-38-test.patch
BuildRequires: %{python_module PyYAML}
BuildRequires: %{python_module decorator >= 3.4.0}
BuildRequires: %{python_module matplotlib}
-BuildRequires: %{python_module nose >= 0.10.1}
BuildRequires: %{python_module pydot}
BuildRequires: %{python_module pyparsing}
+BuildRequires: %{python_module pytest3}
BuildRequires: %{python_module scipy}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
@@ -69,6 +71,7 @@ Documentation and examples for %{name}.
%prep
%setup -q -n networkx-%{version}
+%autopatch -p1
%build
%python_build
@@ -98,7 +101,7 @@ popd
%check
# test excluded because it leads to crashes on i586, gh#networkx/networkx#3304
-%python_exec setup.py nosetests -v -e 'test_subgraph_centrality_big_graph'
+py.test3 -vv -k 'not test_subgraph_centrality_big_graph'
%files %{python_files}
%license LICENSE.txt