From 06960ac6a7b58af84aeccd208b663443b39a6600 Mon Sep 17 00:00:00 2001 From: Jonathan Ringer Date: Tue, 9 Jul 2019 17:42:01 -0700 Subject: [PATCH] pythonPackages.pyproj: unstable-2018-11-13 -> 2.2.1 --- .../python-modules/pyproj/001.proj.patch | 47 ++++++++++++++++ .../python-modules/pyproj/default.nix | 55 +++++++++++-------- pkgs/top-level/python-packages.nix | 6 +- 3 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 pkgs/development/python-modules/pyproj/001.proj.patch diff --git a/pkgs/development/python-modules/pyproj/001.proj.patch b/pkgs/development/python-modules/pyproj/001.proj.patch new file mode 100644 index 000000000000..b024c28156c1 --- /dev/null +++ b/pkgs/development/python-modules/pyproj/001.proj.patch @@ -0,0 +1,47 @@ +diff a/pyproj/datadir.py b/pyproj/datadir.py +--- a/pyproj/datadir.py ++++ b/pyproj/datadir.py +@@ -52,6 +52,7 @@ def get_data_dir(): + str: The valid data directory. + + """ ++ return "@proj@/share/proj" + # to avoid re-validating + global _VALIDATED_PROJ_DATA + if _VALIDATED_PROJ_DATA is not None: +diff a/setup.py b/setup.py +--- a/setup.py ++++ b/setup.py +@@ -16,7 +16,7 @@ INTERNAL_PROJ_DIR = os.path.join(CURRENT_FILE_PATH, "pyproj", BASE_INTERNAL_PROJ + + def check_proj_version(proj_dir): + """checks that the PROJ library meets the minimum version""" +- proj = os.path.join(proj_dir, "bin", "proj") ++ proj = "@proj@/bin/proj" + proj_ver_bytes = subprocess.check_output(proj, stderr=subprocess.STDOUT) + proj_ver_bytes = (proj_ver_bytes.decode("ascii").split()[1]).strip(",") + proj_version = parse_version(proj_ver_bytes) +@@ -33,6 +33,7 @@ def get_proj_dir(): + """ + This function finds the base PROJ directory. + """ ++ return "@proj@" + proj_dir = os.environ.get("PROJ_DIR") + if proj_dir is None and os.path.exists(INTERNAL_PROJ_DIR): + proj_dir = INTERNAL_PROJ_DIR +@@ -56,6 +57,7 @@ def get_proj_libdirs(proj_dir): + """ + This function finds the library directories + """ ++ return ["@proj@/lib"] + proj_libdir = os.environ.get("PROJ_LIBDIR") + libdirs = [] + if proj_libdir is None: +@@ -77,6 +79,7 @@ def get_proj_incdirs(proj_dir): + """ + This function finds the include directories + """ ++ return ["@proj@/include"] + proj_incdir = os.environ.get("PROJ_INCDIR") + incdirs = [] + if proj_incdir is None: diff --git a/pkgs/development/python-modules/pyproj/default.nix b/pkgs/development/python-modules/pyproj/default.nix index f08625f62b6d..ddfecbe8ec51 100644 --- a/pkgs/development/python-modules/pyproj/default.nix +++ b/pkgs/development/python-modules/pyproj/default.nix @@ -1,38 +1,49 @@ -{ lib -, buildPythonPackage -, fetchFromGitHub -, python -, nose2 +{ lib, buildPythonPackage, fetchPypi, python, pkgs, pythonOlder, substituteAll +, aenum , cython -, proj ? null +, pytest +, mock +, numpy }: -buildPythonPackage (rec { +buildPythonPackage rec { pname = "pyproj"; - version = "unstable-2018-11-13"; + version = "2.2.1"; - src = fetchFromGitHub { - owner = "jswhit"; - repo = pname; - rev = "78540f5ff40da92160f80860416c91ee74b7643c"; - sha256 = "1vq5smxmpdjxialxxglsfh48wx8kaq9sc5mqqxn4fgv1r5n1m3n9"; + src = fetchPypi { + inherit pname version; + sha256 = "0yigcxwmx5cczipf2mpmy2gq1dnl0635yjvjq86ay47j1j5fd2gc"; }; - buildInputs = [ cython ]; + # force pyproj to use ${pkgs.proj} + patches = [ + (substituteAll { + src = ./001.proj.patch; + proj = pkgs.proj; + }) + ]; - checkInputs = [ nose2 ]; + buildInputs = [ cython pkgs.proj ]; + propagatedBuildInputs = [ + numpy + ] ++ lib.optional (pythonOlder "3.6") aenum; + + checkInputs = [ pytest mock ]; + + # ignore rounding errors, and impure docgen + # datadir is ignored because it does the proj look up logic, which isn't relevant checkPhase = '' - runHook preCheck - pushd unittest # changing directory should ensure we're importing the global pyproj - ${python.interpreter} test.py && ${python.interpreter} -c "import doctest, pyproj, sys; sys.exit(doctest.testmod(pyproj)[0])" - popd - runHook postCheck + pytest . -k 'not alternative_grid_name \ + and not transform_wgs84_to_alaska \ + and not repr' \ + --ignore=test/test_doctest_wrapper.py \ + --ignore=test/test_datadir.py ''; meta = { description = "Python interface to PROJ.4 library"; - homepage = https://github.com/jswhit/pyproj; + homepage = "https://github.com/jswhit/pyproj"; license = with lib.licenses; [ isc ]; }; -} // (if proj == null then {} else { PROJ_DIR = proj; })) +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5dac3b894f56..2150ed83c414 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4032,11 +4032,7 @@ in { pyotp = callPackage ../development/python-modules/pyotp { }; - pyproj = callPackage ../development/python-modules/pyproj { - # pyproj does *work* if you want to use a system supplied proj, but with the current version(s) the tests fail by - # a few decimal places, so caveat emptor. - proj = null; - }; + pyproj = callPackage ../development/python-modules/pyproj { }; pyqrcode = callPackage ../development/python-modules/pyqrcode { };