python2.pkgs: move expressions into python2-modules/ folder

Another step in further separating python2 from python3.
This commit is contained in:
Frederik Rietdijk
2022-01-16 10:00:16 +01:00
committed by Frederik Rietdijk
parent 2027fb600d
commit ae18d68b6b
82 changed files with 251 additions and 96 deletions
@@ -0,0 +1,37 @@
{ lib
, buildPythonPackage
, fetchPypi
, fetchpatch
, docutils
}:
buildPythonPackage rec {
pname = "Pygments";
version = "2.5.2";
src = fetchPypi {
inherit pname version;
sha256 = "98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe";
};
patches = [
(fetchpatch {
name = "CVE-2021-27291.patch";
url = "https://github.com/pygments/pygments/commit/2e7e8c4a7b318f4032493773732754e418279a14.patch";
sha256 = "0ap7jgkmvkkzijabsgnfrwl376cjsxa4jmzvqysrkwpjq3q4rxpa";
excludes = ["CHANGES"];
})
];
propagatedBuildInputs = [ docutils ];
# Circular dependency with sphinx
doCheck = false;
meta = {
homepage = "https://pygments.org/";
description = "A generic syntax highlighter";
license = lib.licenses.bsd2;
maintainers = with lib.maintainers; [ ];
};
}
@@ -0,0 +1,26 @@
{ lib
, buildPythonPackage
, fetchPypi
, cheetah
, nose
}:
buildPythonPackage rec {
pname = "TurboCheetah";
version = "1.0";
src = fetchPypi {
inherit pname version;
sha256 = "9e4c7ecb0d061bfb58281363ee1b09337083f013a8b4d0355326a5d8668f450c";
};
propagatedBuildInputs = [ cheetah ];
checkInputs = [ nose ];
meta = {
description = "TurboGears plugin to support use of Cheetah templates";
homepage = "http://docs.turbogears.org/TurboCheetah";
license = lib.licenses.mit;
};
}
@@ -0,0 +1,66 @@
{ lib, stdenv, python, makeWrapper, unzip
, pipInstallHook
, setuptoolsBuildHook
, wheel, pip, setuptools
}:
stdenv.mkDerivation rec {
pname = "pip";
inherit (pip) version;
name = "${python.libPrefix}-bootstrapped-${pname}-${version}";
srcs = [ wheel.src pip.src setuptools.src ];
sourceRoot = ".";
dontUseSetuptoolsBuild = true;
dontUsePipInstall = true;
# Should be propagatedNativeBuildInputs
propagatedBuildInputs = [
# Override to remove dependencies to prevent infinite recursion.
(pipInstallHook.override{pip=null;})
(setuptoolsBuildHook.override{setuptools=null; wheel=null;})
];
postPatch = ''
mkdir -p $out/bin
'';
nativeBuildInputs = [ makeWrapper unzip ];
buildInputs = [ python ];
dontBuild = true;
installPhase = lib.optionalString (!stdenv.hostPlatform.isWindows) ''
export SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES=0
'' + ''
# Give folders a known name
mv pip* pip
mv setuptools* setuptools
mv wheel* wheel
# Set up PYTHONPATH. The above folders need to be on PYTHONPATH
# $out is where we are installing to and takes precedence
export PYTHONPATH="$out/${python.sitePackages}:$(pwd)/pip/src:$(pwd)/setuptools:$(pwd)/setuptools/pkg_resources:$(pwd)/wheel:$PYTHONPATH"
echo "Building setuptools wheel..."
pushd setuptools
${python.pythonForBuild.interpreter} -m pip install --no-build-isolation --no-index --prefix=$out --ignore-installed --no-dependencies --no-cache .
popd
echo "Building wheel wheel..."
pushd wheel
${python.pythonForBuild.interpreter} -m pip install --no-build-isolation --no-index --prefix=$out --ignore-installed --no-dependencies --no-cache .
popd
echo "Building pip wheel..."
pushd pip
${python.pythonForBuild.interpreter} -m pip install --no-build-isolation --no-index --prefix=$out --ignore-installed --no-dependencies --no-cache .
popd
'';
meta = {
description = "Version of pip used for bootstrapping";
license = lib.unique (pip.meta.license ++ setuptools.meta.license ++ wheel.meta.license);
homepage = pip.meta.homepage;
};
}
@@ -0,0 +1,50 @@
{ lib
, buildPythonPackage
, fetchPypi
, botocore
, jmespath
, s3transfer
, futures ? null
, docutils
, nose
, mock
, isPy3k
}:
buildPythonPackage rec {
pname = "boto3";
version = "1.17.97"; # N.B: if you change this, change botocore and awscli to a matching version
src = fetchPypi {
inherit pname version;
sha256 = "0ab5afc51461c30f27aebef944211d16f47697b98ff8d2e2f6e49e59584853bb";
};
propagatedBuildInputs = [ botocore jmespath s3transfer ] ++ lib.optionals (!isPy3k) [ futures ];
checkInputs = [ docutils nose mock ];
checkPhase = ''
runHook preCheck
# This method is not in mock. It might have appeared in some versions.
sed -i 's/action.assert_called_once()/self.assertEqual(action.call_count, 1)/' \
tests/unit/resources/test_factory.py
nosetests -d tests/unit --verbose
runHook postCheck
'';
# Network access
doCheck = false;
pythonImportsCheck = [ "boto3" ];
meta = {
homepage = "https://github.com/boto/boto3";
license = lib.licenses.asl20;
description = "AWS SDK for Python";
longDescription = ''
Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for
Python, which allows Python developers to write software that makes use of
services like Amazon S3 and Amazon EC2.
'';
};
}
@@ -0,0 +1,48 @@
{ lib
, buildPythonPackage
, fetchPypi
, python-dateutil
, jmespath
, docutils
, ordereddict
, simplejson
, mock
, nose
, urllib3
}:
buildPythonPackage rec {
pname = "botocore";
version = "1.20.97"; # N.B: if you change this, change boto3 and awscli to a matching version
src = fetchPypi {
inherit pname version;
sha256 = "f7e119cf3e0f4a36100f0e983583afa91a84fb27c479a1716820aee4f2e190ab";
};
propagatedBuildInputs = [
python-dateutil
jmespath
docutils
ordereddict
simplejson
urllib3
];
checkInputs = [ mock nose ];
checkPhase = ''
nosetests -v
'';
# Network access
doCheck = false;
pythonImportsCheck = [ "botocore" ];
meta = with lib; {
homepage = "https://github.com/boto/botocore";
license = licenses.asl20;
description = "A low-level interface to a growing number of Amazon Web Services";
};
}
@@ -0,0 +1,34 @@
{ lib
, fetchPypi
, buildPythonPackage
, python3
}:
let
inherit (python3.pkgs) certifi;
in buildPythonPackage rec {
pname = "certifi";
version = "2019.11.28";
src = fetchPypi {
inherit pname version;
sha256 = "25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f";
};
postPatch = ''
cp ${certifi.src}/certifi/cacert.pem certifi/cacert.pem
'';
pythonImportsCheck = [ "certifi" ];
# no tests implemented
doCheck = false;
meta = with lib; {
homepage = "https://github.com/certifi/python-certifi";
description = "Python package for providing Mozilla's CA Bundle";
license = licenses.isc;
maintainers = with maintainers; [ ]; # NixOps team
};
}
@@ -0,0 +1,29 @@
{ lib, buildPythonPackage, fetchPypi, fetchpatch
, pytest, pytest-runner, hypothesis }:
buildPythonPackage rec {
pname = "chardet";
version = "3.0.4";
src = fetchPypi {
inherit pname version;
sha256 = "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4";
};
patches = [
# Add pytest 4 support. See: https://github.com/chardet/chardet/pull/174
(fetchpatch {
url = "https://github.com/chardet/chardet/commit/0561ddcedcd12ea1f98b7ddedb93686ed8a5ffa4.patch";
sha256 = "1y1xhjf32rdhq9sfz58pghwv794f3w2f2qcn8p6hp4pc8jsdrn2q";
})
];
checkInputs = [ pytest pytest-runner hypothesis ];
meta = with lib; {
homepage = "https://github.com/chardet/chardet";
description = "Universal encoding detector";
license = licenses.lgpl2;
maintainers = with maintainers; [ domenkozar ];
};
}
@@ -0,0 +1,33 @@
{ lib
, buildPythonPackage
, fetchPypi
, markdown
, isPy3k
, TurboCheetah
}:
buildPythonPackage rec {
pname = "cheetah";
version = "2.4.4";
disabled = isPy3k;
src = fetchPypi {
inherit pname version;
sha256 = "be308229f0c1e5e5af4f27d7ee06d90bb19e6af3059794e5fd536a6f29a9b550";
};
propagatedBuildInputs = [ markdown ];
doCheck = false; # Circular dependency
checkInputs = [
TurboCheetah
];
meta = {
homepage = "http://www.cheetahtemplate.org/";
description = "A template engine and code generation tool";
license = lib.licenses.mit;
};
}
@@ -0,0 +1,28 @@
{ lib, buildPythonPackage, fetchPypi, locale, pytestCheckHook }:
buildPythonPackage rec {
pname = "click";
version = "7.1.2";
src = fetchPypi {
inherit pname version;
sha256 = "d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a";
};
postPatch = ''
substituteInPlace src/click/_unicodefun.py \
--replace "'locale'" "'${locale}/bin/locale'"
'';
checkInputs = [ pytestCheckHook ];
meta = with lib; {
homepage = "https://click.palletsprojects.com/";
description = "Create beautiful command line interfaces in Python";
longDescription = ''
A Python package for creating beautiful command line interfaces in a
composable way, with as little code as necessary.
'';
license = licenses.bsd3;
};
}
@@ -0,0 +1,26 @@
{ lib, stdenv, buildPythonPackage, fetchPypi, setuptools-scm }:
buildPythonPackage rec {
pname = "configparser";
version = "4.0.2";
src = fetchPypi {
inherit pname version;
sha256 = "c7d282687a5308319bf3d2e7706e575c635b0a470342641c93bea0ea3b5331df";
};
# No tests available
doCheck = false;
nativeBuildInputs = [ setuptools-scm ];
preConfigure = ''
export LC_ALL=${if stdenv.isDarwin then "en_US" else "C"}.UTF-8
'';
meta = with lib; {
description = "Updated configparser from Python 3.7 for Python 2.6+.";
license = licenses.mit;
homepage = "https://github.com/jaraco/configparser";
};
}
@@ -0,0 +1,39 @@
{ lib, stdenv, buildPythonPackage, fetchFromGitHub
, pytestCheckHook, pytest-benchmark, enum34, numpy, arrow, ruamel-yaml
}:
buildPythonPackage rec {
pname = "construct";
version = "2.10.54";
# no tests in PyPI tarball
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = "v${version}";
sha256 = "1mqspsn6bf3ibvih1zna2glkg8iw7vy5zg9gzg0d1m8zcndk2c48";
};
checkInputs = [ pytestCheckHook enum34 numpy ];
# these have dependencies that are broken on Python 2
disabledTestPaths = [
"tests/gallery/test_gallery.py"
"tests/test_benchmarks.py"
"tests/test_compiler.py"
];
disabledTests = [
"test_benchmarks"
"test_timestamp"
] ++ lib.optionals stdenv.isDarwin [
"test_multiprocessing"
];
meta = with lib; {
description = "Powerful declarative parser (and builder) for binary data";
homepage = "https://construct.readthedocs.org/";
license = licenses.mit;
maintainers = with maintainers; [ dotlambda ];
};
}
@@ -0,0 +1,23 @@
{ lib
, buildPythonPackage
, fetchPypi
, unittest2
}:
buildPythonPackage rec {
pname = "contextlib2";
version = "0.6.0.post1";
src = fetchPypi {
inherit pname version;
sha256 = "01f490098c18b19d2bd5bb5dc445b2054d2fa97f09a4280ba2c5f3c394c8162e";
};
checkInputs = [ unittest2 ];
meta = {
description = "Backports and enhancements for the contextlib module";
homepage = "https://contextlib2.readthedocs.org/";
license = lib.licenses.psfl;
};
}
@@ -0,0 +1,23 @@
{ buildPythonPackage, fetchPypi, lib, cryptography }:
buildPythonPackage rec {
pname = "cryptography_vectors";
# The test vectors must have the same version as the cryptography package:
version = cryptography.version;
src = fetchPypi {
inherit pname version;
sha256 = "1yhaps0f3h2yjb6lmz953z1l1d84y9swk4k3gj9nqyk4vbx5m7cc";
};
# No tests included
doCheck = false;
meta = with lib; {
description = "Test vectors for the cryptography package";
homepage = "https://cryptography.io/en/latest/development/test-vectors/";
# Source: https://github.com/pyca/cryptography/tree/master/vectors;
license = with licenses; [ asl20 bsd3 ];
maintainers = with maintainers; [ primeos ];
};
}
@@ -0,0 +1,81 @@
{ lib, stdenv
, buildPythonPackage
, fetchPypi
, isPy27
, ipaddress
, openssl
, cryptography_vectors
, darwin
, packaging
, six
, isPyPy
, cffi
, pytest
, pretend
, iso8601
, pytz
, hypothesis
, enum34
}:
buildPythonPackage rec {
pname = "cryptography";
version = "3.3.2"; # Also update the hash in vectors-3.3.nix
src = fetchPypi {
inherit pname version;
sha256 = "1vcvw4lkw1spiq322pm1256kail8nck6bbgpdxx3pqa905wd6q2s";
};
patches = [ ./cryptography-py27-warning.patch ];
outputs = [ "out" "dev" ];
nativeBuildInputs = lib.optionals (!isPyPy) [
cffi
];
buildInputs = [ openssl ]
++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
propagatedBuildInputs = [
packaging
six
] ++ lib.optionals (!isPyPy) [
cffi
] ++ lib.optionals isPy27 [
ipaddress enum34
];
checkInputs = [
cryptography_vectors
hypothesis
iso8601
pretend
pytest
pytz
];
checkPhase = ''
py.test --disable-pytest-warnings tests
'';
# IOKit's dependencies are inconsistent between OSX versions, so this is the best we
# can do until nix 1.11's release
__impureHostDeps = [ "/usr/lib" ];
meta = with lib; {
description = "A package which provides cryptographic recipes and primitives";
longDescription = ''
Cryptography includes both high level recipes and low level interfaces to
common cryptographic algorithms such as symmetric ciphers, message
digests, and key derivation functions.
Our goal is for it to be your "cryptographic standard library". It
supports Python 2.7, Python 3.5+, and PyPy 5.4+.
'';
homepage = "https://github.com/pyca/cryptography";
changelog = "https://cryptography.io/en/latest/changelog/#v"
+ replaceStrings [ "." ] [ "-" ] version;
license = with licenses; [ asl20 bsd3 psfl ];
maintainers = with maintainers; [ primeos ];
};
}
@@ -0,0 +1,21 @@
{ lib
, buildPythonPackage
, fetchPypi
}:
buildPythonPackage rec {
pname = "decorator";
version = "4.4.2";
src = fetchPypi {
inherit pname version;
sha256 = "1rxzhk5zwiggk45hl53zydvy70lk654kg0nc1p54090p402jz9p3";
};
meta = with lib; {
homepage = "https://pypi.python.org/pypi/decorator";
description = "Better living through Python with decorators";
license = lib.licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}
@@ -0,0 +1,26 @@
{ lib
, buildPythonPackage
, fetchPypi
, isPy3k
, isPyPy
}:
buildPythonPackage rec {
pname = "enum";
version = "0.4.7";
disabled = isPy3k;
src = fetchPypi {
inherit pname version;
sha256 = "001iq0yqs9f5bslvl793bhkcs71k5km9kv8yrj5h0lfsgrcg6z4c";
};
doCheck = !isPyPy;
meta = with lib; {
homepage = "https://pypi.python.org/pypi/enum/";
description = "Robust enumerated type support in Python";
license = licenses.gpl2;
};
}
@@ -0,0 +1,22 @@
{ lib, buildPythonPackage, fetchPypi, setuptools-scm }:
buildPythonPackage rec {
pname = "filelock";
version = "3.2.1";
src = fetchPypi {
inherit pname version;
sha256 = "1qry67zv2pmz8px6wdfbjqv75nmryy2ac7asqgs6q6db2722kpcw";
};
nativeBuildInputs = [
setuptools-scm
];
meta = with lib; {
homepage = "https://github.com/benediktschmitt/py-filelock";
description = "A platform independent file lock for Python";
license = licenses.unlicense;
maintainers = with maintainers; [ henkkalkwater ];
};
}
@@ -0,0 +1,28 @@
{ lib, buildPythonPackage, fetchPypi
, itsdangerous, click, werkzeug, jinja2, pytest }:
buildPythonPackage rec {
version = "1.1.2";
pname = "Flask";
src = fetchPypi {
inherit pname version;
sha256 = "4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060";
};
checkInputs = [ pytest ];
propagatedBuildInputs = [ itsdangerous click werkzeug jinja2 ];
checkPhase = ''
py.test
'';
# Tests require extra dependencies
doCheck = false;
meta = with lib; {
homepage = "http://flask.pocoo.org/";
description = "A microframework based on Werkzeug, Jinja 2, and good intentions";
license = licenses.bsd3;
};
}
@@ -0,0 +1,29 @@
{ lib
, buildPythonPackage
, fetchPypi
, python-dateutil
, six
, mock
, nose
, pytest
}:
buildPythonPackage rec {
pname = "freezegun";
version = "0.3.15";
src = fetchPypi {
inherit pname version;
sha256 = "e2062f2c7f95cc276a834c22f1a17179467176b624cc6f936e8bc3be5535ad1b";
};
propagatedBuildInputs = [ python-dateutil six ];
checkInputs = [ mock nose pytest ];
meta = with lib; {
description = "FreezeGun: Let your Python tests travel through time";
homepage = "https://github.com/spulec/freezegun";
license = licenses.asl20;
};
}
@@ -0,0 +1,27 @@
{ lib, buildPythonPackage, fetchPypi, isPy3k, python, stdenv }:
buildPythonPackage rec {
pname = "futures";
version = "3.3.0";
src = fetchPypi {
inherit pname version;
sha256 = "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794";
};
# This module is for backporting functionality to Python 2.x, it's builtin in py3k
disabled = isPy3k;
checkPhase = ''
${python.interpreter} test_futures.py
'';
doCheck = !stdenv.isDarwin;
meta = with lib; {
description = "Backport of the concurrent.futures package from Python 3.2";
homepage = "https://github.com/agronholm/pythonfutures";
license = licenses.bsd2;
maintainers = with maintainers; [ ];
};
}
@@ -0,0 +1,41 @@
{ lib
, buildPythonPackage
, fetchPypi
, isPy3k
, pytz
, gflags
, python-dateutil
, mox
, python
}:
buildPythonPackage rec {
pname = "google-apputils";
version = "0.4.2";
disabled = isPy3k;
src = fetchPypi {
inherit pname version;
sha256 = "0afw0gxmh0yw5g7xsmw49gs8bbp0zyhbh6fr1b0h48f3a439v5a7";
};
preConfigure = ''
sed -i '/ez_setup/d' setup.py
'';
propagatedBuildInputs = [ pytz gflags python-dateutil mox ];
checkPhase = ''
${python.executable} setup.py google_test
'';
# ERROR:root:Trying to access flag test_tmpdir before flags were parsed.
doCheck = false;
meta = with lib; {
description = "Google Application Utilities for Python";
homepage = "https://github.com/google/google-apputils";
license = licenses.asl20;
maintainers = with maintainers; [ SuperSandro2000 ];
};
}
@@ -0,0 +1,52 @@
{ lib
, buildPythonPackage
, fetchPypi
, tornado
, requests
, httplib2
, sure
, nose
, nose-exclude
, coverage
, rednose
, nose-randomly
, six
, mock
}:
buildPythonPackage rec {
pname = "httpretty";
version = "0.9.7";
# drop this for version > 0.9.7
# Flaky tests: https://github.com/gabrielfalcao/HTTPretty/pull/394
doCheck = lib.versionAtLeast version "0.9.8";
src = fetchPypi {
inherit pname version;
sha256 = "66216f26b9d2c52e81808f3e674a6fb65d4bf719721394a1a9be926177e55fbe";
};
propagatedBuildInputs = [ six ];
checkInputs = [ nose sure coverage mock rednose
# Following not declared in setup.py
nose-randomly requests tornado httplib2 nose-exclude
];
__darwinAllowLocalNetworking = true;
# Those flaky tests are failing intermittently on all platforms
NOSE_EXCLUDE = lib.concatStringsSep "," [
"tests.functional.test_httplib2.test_callback_response"
"tests.functional.test_requests.test_streaming_responses"
"tests.functional.test_httplib2.test_callback_response"
"tests.functional.test_requests.test_httpretty_should_allow_adding_and_overwritting_by_kwargs_u2"
];
meta = with lib; {
homepage = "https://httpretty.readthedocs.org/";
description = "HTTP client request mocking tool";
license = licenses.mit;
};
}
@@ -0,0 +1,45 @@
{ lib, buildPythonPackage, fetchFromGitHub
, isPy3k, attrs, coverage, enum34, pexpect
, doCheck ? true, pytest, pytest-xdist, flaky, mock
, sortedcontainers
}:
buildPythonPackage rec {
# https://hypothesis.readthedocs.org/en/latest/packaging.html
# Hypothesis has optional dependencies on the following libraries
# pytz fake_factory django numpy pytest
# If you need these, you can just add them to your environment.
version = "4.57.1";
pname = "hypothesis";
# Use github tarballs that includes tests
src = fetchFromGitHub {
owner = "HypothesisWorks";
repo = "hypothesis-python";
rev = "hypothesis-python-${version}";
sha256 = "1qcpcrk6892hzyjsdr581pw6i4fj9035nv89mcjrcrzcmycdlfds";
};
postUnpack = "sourceRoot=$sourceRoot/hypothesis-python";
propagatedBuildInputs = [
attrs
coverage
sortedcontainers
] ++ lib.optional (!isPy3k) enum34;
checkInputs = [ pytest pytest-xdist flaky mock pexpect ];
inherit doCheck;
checkPhase = ''
rm tox.ini # This file changes how py.test runs and breaks it
py.test tests/cover
'';
meta = with lib; {
description = "A Python library for property based testing";
homepage = "https://github.com/HypothesisWorks/hypothesis";
license = licenses.mpl20;
};
}
@@ -0,0 +1,23 @@
{ lib
, buildPythonPackage
, fetchPypi
, pytestCheckHook
}:
buildPythonPackage rec {
pname = "idna";
version = "2.10";
src = fetchPypi {
inherit pname version;
sha256 = "b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6";
};
checkInputs = [ pytestCheckHook ];
meta = {
homepage = "https://github.com/kjd/idna/";
description = "Internationalized Domain Names in Applications (IDNA)";
license = lib.licenses.bsd3;
};
}
@@ -0,0 +1,37 @@
{ lib
, buildPythonPackage
, fetchPypi
, setuptools-scm
, zipp
, pathlib2
, contextlib2
, configparser
, isPy3k
}:
buildPythonPackage rec {
pname = "importlib-metadata";
version = "2.1.1";
src = fetchPypi {
pname = "importlib_metadata";
inherit version;
sha256 = "1pdmsmwagimn0lsl4x7sg3skcr2fvzqpv2pjd1rh7yrm5gzrxpmq";
};
nativeBuildInputs = [ setuptools-scm ];
propagatedBuildInputs = [ zipp ]
++ lib.optionals (!isPy3k) [ pathlib2 contextlib2 configparser ];
# Cyclic dependencies
doCheck = false;
pythonImportsCheck = [ "importlib_metadata" ];
meta = with lib; {
description = "Read metadata from Python packages";
homepage = "https://importlib-metadata.readthedocs.io/";
license = licenses.asl20;
};
}
@@ -0,0 +1,23 @@
{ lib
, buildPythonPackage
, fetchPypi
, isPy3k
}:
buildPythonPackage rec {
pname = "ipaddr";
version = "2.2.0";
disabled = isPy3k;
src = fetchPypi {
inherit pname version;
sha256 = "1ml8r8z3f0mnn381qs1snbffa920i9ycp6mm2am1d3aqczkdz4j0";
};
meta = with lib; {
description = "Google's IP address manipulation library";
homepage = "https://github.com/google/ipaddr-py";
license = licenses.asl20;
};
}
@@ -0,0 +1,21 @@
{ lib
, buildPythonPackage
, fetchPypi
}:
buildPythonPackage rec {
pname = "itsdangerous";
version = "1.1.0";
src = fetchPypi {
inherit pname version;
sha256 = "321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19";
};
meta = with lib; {
description = "Helpers to pass trusted data to untrusted environments and back";
homepage = "https://pypi.python.org/pypi/itsdangerous/";
license = licenses.bsd0;
};
}
@@ -0,0 +1,42 @@
{ lib, stdenv
, buildPythonPackage
, isPy3k
, fetchPypi
, pytest
, markupsafe
, setuptools
}:
buildPythonPackage rec {
pname = "Jinja2";
version = "2.11.3";
src = fetchPypi {
inherit pname version;
sha256 = "a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6";
};
checkInputs = [ pytest ];
propagatedBuildInputs = [ markupsafe setuptools ];
# Multiple tests run out of stack space on 32bit systems with python2.
# See https://github.com/pallets/jinja/issues/1158
# warnings are no longer being filtered correctly for python2
doCheck = !stdenv.is32bit && isPy3k;
checkPhase = ''
pytest -v tests -W ignore::DeprecationWarning
'';
meta = with lib; {
homepage = "http://jinja.pocoo.org/";
description = "Stand-alone template engine";
license = licenses.bsd3;
longDescription = ''
Jinja2 is a template engine written in pure Python. It provides a
Django inspired non-XML syntax but supports inline expressions and
an optional sandboxed environment.
'';
maintainers = with maintainers; [ pierron sjourdois ];
};
}
@@ -0,0 +1,39 @@
{ lib
, buildPythonPackage
, fetchPypi
, isPy27
, mock
, pycrypto
, requests
, pytest-runner
, pytest
, requests-mock
, typing
, backports_ssl_match_hostname
}:
buildPythonPackage rec {
pname = "apache-libcloud";
version = "2.8.3";
src = fetchPypi {
inherit pname version;
sha256 = "70096690b24a7832cc5abdfda1954b49fddc1c09a348a1e6caa781ac867ed4c6";
};
checkInputs = [ mock pytest pytest-runner requests-mock ];
propagatedBuildInputs = [ pycrypto requests ]
++ lib.optionals isPy27 [ typing backports_ssl_match_hostname ];
preConfigure = "cp libcloud/test/secrets.py-dist libcloud/test/secrets.py";
# requires a certificates file
doCheck = false;
meta = with lib; {
description = "A unified interface to many cloud providers";
homepage = "https://libcloud.apache.org/";
license = licenses.asl20;
};
}
@@ -0,0 +1,31 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, lxml
, docutils
, pillow
, isPy3k
}:
buildPythonPackage {
version = "1.1.7";
pname = "python-lpod";
# lpod library currently does not support Python 3.x
disabled = isPy3k;
propagatedBuildInputs = [ lxml docutils pillow ];
src = fetchFromGitHub {
owner = "lpod";
repo = "lpod-python";
rev = "dee32120ee582ff337b0c52a95a9a87cca71fd67";
sha256 = "1mikvzp27wxkzpr2lii4wg1hhx8h610agckqynvsrdc8v3nw9ciw";
};
meta = with lib; {
homepage = "https://github.com/lpod/lpod-python/";
description = "Library implementing the ISO/IEC 26300 OpenDocument Format standard (ODF) ";
license = licenses.gpl3;
};
}
@@ -0,0 +1,29 @@
{ lib, buildPythonPackage, fetchFromGitHub, marisa, swig
, isPy3k
}:
buildPythonPackage rec {
pname = "marisa";
version = "1.3.40";
disabled = isPy3k;
src = fetchFromGitHub {
owner = "s-yata";
repo = "marisa-trie";
rev = "8dba9850b89d7828ebf33b8ab84df2b54d31260b";
sha256 = "0pkp9fggk53lxlicfwrskgx33qplc4v6njbavlnz4x4z63zd4933";
};
nativeBuildInputs = [ swig marisa ];
buildInputs = [ marisa ];
sourceRoot = "${src.name}/bindings/python";
meta = with lib; {
description = "Python binding for marisa package (do not confuse with marisa-trie python bindings)";
homepage = "https://github.com/s-yata/marisa-trie";
license = with licenses; [ bsd2 lgpl2 ];
maintainers = with maintainers; [ vanzef ];
};
}
@@ -0,0 +1,33 @@
{ lib
, buildPythonPackage
, fetchPypi
, setuptools
, nose
, pyyaml
, pythonOlder
, importlib-metadata
}:
buildPythonPackage rec {
pname = "Markdown";
version = "3.1.1";
src = fetchPypi {
inherit pname version;
sha256 = "2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a";
};
propagatedBuildInputs = [
setuptools
] ++ lib.optionals (pythonOlder "3.8") [
importlib-metadata
];
checkInputs = [ nose pyyaml ];
meta = {
description = "A Python implementation of John Gruber's Markdown with Extension support";
homepage = "https://github.com/Python-Markdown/markdown";
license = lib.licenses.bsd3;
};
}
@@ -0,0 +1,22 @@
{ lib
, buildPythonPackage
, fetchPypi
}:
buildPythonPackage rec {
pname = "MarkupSafe";
version = "1.1.1";
src = fetchPypi {
inherit pname version;
sha256 = "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b";
};
meta = with lib; {
description = "Implements a XML/HTML/XHTML Markup safe string";
homepage = "http://dev.pocoo.org";
license = licenses.bsd3;
maintainers = with maintainers; [ domenkozar ];
};
}
@@ -0,0 +1,44 @@
{ lib
, buildPythonPackage
, fetchPypi
, isPy27
, funcsigs
, six
, pbr
, python
, pytest
}:
buildPythonPackage rec {
pname = "mock";
version = "3.0.5";
src = fetchPypi {
inherit pname version;
sha256 = "83657d894c90d5681d62155c82bda9c1187827525880eda8ff5df4ec813437c3";
};
propagatedBuildInputs = [ six pbr ] ++ lib.optionals isPy27 [ funcsigs ];
# On PyPy for Python 2.7 in particular, Mock's tests have a known failure.
# Mock upstream has a decoration to disable the failing test and make
# everything pass, but it is not yet released. The commit:
# https://github.com/testing-cabal/mock/commit/73bfd51b7185#diff-354f30a63fb0907d4ad57269548329e3L12
#doCheck = !(python.isPyPy && python.isPy27);
doCheck = false; # Infinite recursion pytest
checkPhase = ''
${python.interpreter} -m unittest discover
'';
checkInputs = [
pytest
];
meta = with lib; {
description = "Mock objects for Python";
homepage = "http://python-mock.sourceforge.net/";
license = licenses.bsd2;
};
}
@@ -0,0 +1,31 @@
{ lib
, buildPythonPackage
, fetchPypi
, nose
, six
, stdenv
}:
buildPythonPackage rec {
pname = "more-itertools";
version = "5.0.0";
src = fetchPypi {
inherit pname version;
sha256 = "38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4";
};
checkInputs = [ nose ];
propagatedBuildInputs = [ six ];
# iterable = range(10 ** 10) # Is efficiently reversible
# OverflowError: Python int too large to convert to C long
doCheck = !stdenv.hostPlatform.is32bit;
meta = {
homepage = "https://more-itertools.readthedocs.org";
description = "Expansion of the itertools module";
license = lib.licenses.mit;
};
}
@@ -0,0 +1,34 @@
{ lib
, buildPythonPackage
, fetchPypi
, hypothesis
, pycodestyle
, pyflakes
, pytest
, setuptools
, pkgs
}:
buildPythonPackage rec {
pname = "mutagen";
version = "1.43.1";
src = fetchPypi {
inherit pname version;
sha256 = "d873baeb7815311d3420aab0a1d83f050f628228cbc2d6045a14a16460411bc9";
};
propagatedBuildInputs = [ setuptools ];
checkInputs = [
pkgs.faad2 pkgs.flac pkgs.vorbis-tools pkgs.liboggz
pkgs.glibcLocales pycodestyle pyflakes pytest hypothesis
];
LC_ALL = "en_US.UTF-8";
meta = with lib; {
description = "Python multimedia tagging library";
homepage = "https://mutagen.readthedocs.io";
license = licenses.lgpl2Plus;
platforms = platforms.all;
};
}
@@ -0,0 +1,99 @@
{ lib
, fetchPypi
, python
, buildPythonPackage
, gfortran
, pytest
, blas
, lapack
, writeTextFile
, isPyPy
, cython
, setuptoolsBuildHook
}:
assert (!blas.isILP64) && (!lapack.isILP64);
let
cfg = writeTextFile {
name = "site.cfg";
text = (lib.generators.toINI {} {
${blas.implementation} = {
include_dirs = "${lib.getDev blas}/include:${lib.getDev lapack}/include";
library_dirs = "${blas}/lib:${lapack}/lib";
runtime_library_dirs = "${blas}/lib:${lapack}/lib";
libraries = "lapack,lapacke,blas,cblas";
};
lapack = {
include_dirs = "${lib.getDev lapack}/include";
library_dirs = "${lapack}/lib";
runtime_library_dirs = "${lapack}/lib";
};
blas = {
include_dirs = "${lib.getDev blas}/include";
library_dirs = "${blas}/lib";
runtime_library_dirs = "${blas}/lib";
};
});
};
in buildPythonPackage rec {
pname = "numpy";
version = "1.16.6";
format = "pyproject.toml";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "e5cf3fdf13401885e8eea8170624ec96225e2174eb0c611c6f26dd33b489e3ff";
};
nativeBuildInputs = [ gfortran pytest cython setuptoolsBuildHook ];
buildInputs = [ blas lapack ];
patches = lib.optionals python.hasDistutilsCxxPatch [
# We patch cpython/distutils to fix https://bugs.python.org/issue1222585
# Patching of numpy.distutils is needed to prevent it from undoing the
# patch to distutils.
./numpy-distutils-C++.patch
];
preConfigure = ''
sed -i 's/-faltivec//' numpy/distutils/system_info.py
export NPY_NUM_BUILD_JOBS=$NIX_BUILD_CORES
export OMP_NUM_THREADS=$((NIX_BUILD_CORES > 64 ? 64 : NIX_BUILD_CORES))
'';
preBuild = ''
ln -s ${cfg} site.cfg
'';
enableParallelBuilding = true;
doCheck = !isPyPy; # numpy 1.16+ hits a bug in pypy's ctypes, using either numpy or pypy HEAD fixes this (https://github.com/numpy/numpy/issues/13807)
checkPhase = ''
runHook preCheck
pushd dist
${python.interpreter} -c 'import numpy; numpy.test("fast", verbose=10)'
popd
runHook postCheck
'';
passthru = {
# just for backwards compatibility
blas = blas.provider;
blasImplementation = blas.implementation;
inherit cfg;
};
# Disable test
# - test_large_file_support: takes a long time and can cause the machine to run out of disk space
NOSE_EXCLUDE="test_large_file_support";
meta = {
description = "Scientific tools for Python";
homepage = "https://numpy.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ fridh ];
};
}
@@ -0,0 +1,30 @@
diff --git a/numpy/distutils/unixccompiler.py b/numpy/distutils/unixccompiler.py
--- a/numpy/distutils/unixccompiler.py
+++ b/numpy/distutils/unixccompiler.py
@@ -44,8 +44,6 @@ def UnixCCompiler__compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts
if opt not in llink_s:
self.linker_so = llink_s.split() + opt.split()
- display = '%s: %s' % (os.path.basename(self.compiler_so[0]), src)
-
# gcc style automatic dependencies, outputs a makefile (-MF) that lists
# all headers needed by a c file as a side effect of compilation (-MMD)
if getattr(self, '_auto_depends', False):
@@ -54,8 +52,15 @@ def UnixCCompiler__compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts
deps = []
try:
- self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + deps +
- extra_postargs, display = display)
+ if self.detect_language(src) == 'c++':
+ display = '%s: %s' % (os.path.basename(self.compiler_so_cxx[0]), src)
+ self.spawn(self.compiler_so_cxx + cc_args + [src, '-o', obj] + deps +
+ extra_postargs, display = display)
+ else:
+ display = '%s: %s' % (os.path.basename(self.compiler_so[0]), src)
+ self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + deps +
+ extra_postargs, display = display)
+
except DistutilsExecError:
msg = str(get_exception())
raise CompileError(msg)
@@ -0,0 +1,39 @@
{ lib
, buildPythonPackage
, fetchPypi
, pyparsing
, six
, pytestCheckHook
, pretend
}:
# We keep 20.4 because it uses setuptools instead of flit-core
# which requires Python 3 to build a universal wheel.
buildPythonPackage rec {
pname = "packaging";
version = "20.4";
format = "setuptools";
src = fetchPypi {
inherit pname version;
sha256 = "4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8";
};
propagatedBuildInputs = [ pyparsing six ];
checkInputs = [
pytestCheckHook
pretend
];
# Prevent circular dependency
doCheck = false;
meta = with lib; {
description = "Core utilities for Python packages";
homepage = "https://github.com/pypa/packaging";
license = [ licenses.bsd2 licenses.asl20 ];
maintainers = with maintainers; [ bennofs ];
};
}
@@ -0,0 +1,47 @@
{ lib, stdenv, buildPythonPackage, fetchPypi, isPyPy, isPy3k
, olefile, freetype, libjpeg, zlib, libtiff, libwebp, tcl, lcms2, tk, libX11
, openjpeg, libimagequant, pyroma, numpy, pytestCheckHook
}@args:
import ./generic.nix (rec {
pname = "Pillow";
version = "6.2.2";
disabled = !isPy3k;
src = fetchPypi {
inherit pname version;
sha256 = "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv";
};
meta = with lib; {
homepage = "https://python-pillow.org/";
description = "The friendly PIL fork (Python Imaging Library)";
longDescription = ''
The Python Imaging Library (PIL) adds image processing
capabilities to your Python interpreter. This library
supports many file formats, and provides powerful image
processing and graphics capabilities.
'';
license = "http://www.pythonware.com/products/pil/license.htm";
maintainers = with maintainers; [ goibhniu prikhi SuperSandro2000 ];
knownVulnerabilities = [
"CVE-2020-10177"
"CVE-2020-10378"
"CVE-2020-10379"
"CVE-2020-10994"
"CVE-2020-11538"
"CVE-2020-35653"
"CVE-2020-35654"
"CVE-2020-35655"
"CVE-2021-25289"
"CVE-2021-25290"
"CVE-2021-25291"
"CVE-2021-25292"
"CVE-2021-25293"
"CVE-2021-27921"
"CVE-2021-27922"
"CVE-2021-27923"
];
};
} // args )
@@ -0,0 +1,77 @@
{ pname
, version
, disabled
, src
, meta
, ...
}@args:
with args;
buildPythonPackage rec {
inherit pname version src meta;
# Disable imagefont tests, because they don't work well with infinality:
# https://github.com/python-pillow/Pillow/issues/1259
postPatch = ''
rm Tests/test_imagefont.py
'';
# Disable darwin tests which require executables: `iconutil` and `screencapture`
disabledTests = lib.optionals stdenv.isDarwin [
"test_grab"
"test_grabclipboard"
"test_save"
# pillow-simd
"test_roundtrip"
"test_basic"
] ++ lib.optionals (lib.versions.major version == "6") [
# RuntimeError: Error setting from dictionary
"test_custom_metadata"
];
propagatedBuildInputs = [ olefile ]
++ lib.optionals (lib.versionAtLeast version "8.2.0") [ defusedxml ];
checkInputs = [ pytestCheckHook pyroma numpy ];
buildInputs = [ freetype libjpeg openjpeg libimagequant zlib libtiff libwebp tcl lcms2 ]
++ lib.optionals (lib.versionAtLeast version "7.1.0") [ libxcb ]
++ lib.optionals (isPyPy) [ tk libX11 ];
# NOTE: we use LCMS_ROOT as WEBP root since there is not other setting for webp.
# NOTE: The Pillow install script will, by default, add paths like /usr/lib
# and /usr/include to the search paths. This can break things when building
# on a non-NixOS system that has some libraries installed that are not
# installed in Nix (for example, Arch Linux has jpeg2000 but Nix doesn't
# build Pillow with this support). We patch the `disable_platform_guessing`
# setting here, instead of passing the `--disable-platform-guessing`
# command-line option, since the command-line option doesn't work when we run
# tests.
preConfigure = let
libinclude' = pkg: ''"${pkg.out}/lib", "${pkg.out}/include"'';
libinclude = pkg: ''"${pkg.out}/lib", "${pkg.dev}/include"'';
in ''
sed -i "setup.py" \
-e 's|^FREETYPE_ROOT =.*$|FREETYPE_ROOT = ${libinclude freetype}|g ;
s|^JPEG_ROOT =.*$|JPEG_ROOT = ${libinclude libjpeg}|g ;
s|^JPEG2K_ROOT =.*$|JPEG2K_ROOT = ${libinclude openjpeg}|g ;
s|^IMAGEQUANT_ROOT =.*$|IMAGEQUANT_ROOT = ${libinclude' libimagequant}|g ;
s|^ZLIB_ROOT =.*$|ZLIB_ROOT = ${libinclude zlib}|g ;
s|^LCMS_ROOT =.*$|LCMS_ROOT = ${libinclude lcms2}|g ;
s|^TIFF_ROOT =.*$|TIFF_ROOT = ${libinclude libtiff}|g ;
s|^TCL_ROOT=.*$|TCL_ROOT = ${libinclude' tcl}|g ;
s|self\.disable_platform_guessing = None|self.disable_platform_guessing = True|g ;'
export LDFLAGS="$LDFLAGS -L${libwebp}/lib"
export CFLAGS="$CFLAGS -I${libwebp}/include"
'' + lib.optionalString (lib.versionAtLeast version "7.1.0") ''
export LDFLAGS="$LDFLAGS -L${libxcb}/lib"
export CFLAGS="$CFLAGS -I${libxcb.dev}/include"
'' + lib.optionalString stdenv.isDarwin ''
# Remove impurities
substituteInPlace setup.py \
--replace '"/Library/Frameworks",' "" \
--replace '"/System/Library/Frameworks"' ""
'';
}
@@ -0,0 +1,41 @@
{ lib
, buildPythonPackage
, bootstrapped-pip
, fetchFromGitHub
, mock
, scripttest
, virtualenv
, pretend
, pytest
}:
buildPythonPackage rec {
pname = "pip";
version = "20.3.4";
format = "other";
src = fetchFromGitHub {
owner = "pypa";
repo = pname;
rev = version;
sha256 = "0hkhs9yc1cjdj1gn9wkycd3sy65c05q8k8rhqgsm5jbpksfssiwn";
name = "${pname}-${version}-source";
};
nativeBuildInputs = [ bootstrapped-pip ];
# pip detects that we already have bootstrapped_pip "installed", so we need
# to force it a little.
pipInstallFlags = [ "--ignore-installed" ];
checkInputs = [ mock scripttest virtualenv pretend pytest ];
# Pip wants pytest, but tests are not distributed
doCheck = false;
meta = {
description = "The PyPA recommended tool for installing Python packages";
license = with lib.licenses; [ mit ];
homepage = "https://pip.pypa.io/";
priority = 10;
};
}
@@ -0,0 +1,34 @@
{ buildPythonPackage
, lib
, fetchPypi
, setuptools-scm
, importlib-metadata
}:
buildPythonPackage rec {
pname = "pluggy";
version = "0.13.1";
src = fetchPypi {
inherit pname version;
sha256 = "15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0";
};
checkPhase = ''
py.test
'';
# To prevent infinite recursion with pytest
doCheck = false;
nativeBuildInputs = [ setuptools-scm ];
propagatedBuildInputs = [ importlib-metadata ];
meta = {
description = "Plugin and hook calling mechanisms for Python";
homepage = "https://github.com/pytest-dev/pluggy";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ];
};
}
@@ -0,0 +1,37 @@
{ lib
, buildPythonPackage
, fetchPypi
, glibcLocales
, setuptools-scm
, wcwidth
}:
buildPythonPackage rec {
pname = "prettytable";
version = "1.0.1";
src = fetchPypi {
inherit pname version;
sha256 = "0wcpp1nkicrswb353yn6xd2x535cpif62nw5rgz33c1wj0wzbdvb";
};
nativeBuildInputs = [ setuptools-scm ];
buildInputs = [ glibcLocales ];
propagatedBuildInputs = [ wcwidth ];
preCheck = ''
export LANG="en_US.UTF-8"
'';
# no test no longer available in pypi package
doCheck = false;
pythonImportsCheck = [ "prettytable" ];
meta = with lib; {
description = "Simple Python library for easily displaying tabular data in a visually appealing ASCII table format";
homepage = "http://code.google.com/p/prettytable/";
license = licenses.bsd3;
};
}
@@ -0,0 +1,59 @@
{ buildPackages
, lib
, fetchpatch
, python
, buildPythonPackage
, isPy37
, protobuf
, google-apputils ? null
, six
, pyext
, isPy27
, disabled
, doCheck ? true
}:
buildPythonPackage {
inherit (protobuf) pname src version;
inherit disabled;
doCheck = doCheck && !isPy27; # setuptools>=41.4 no longer collects correctly on python2
propagatedBuildInputs = [ six ] ++ lib.optionals isPy27 [ google-apputils ];
propagatedNativeBuildInputs = [ buildPackages.protobuf ]; # For protoc.
nativeBuildInputs = [ pyext ] ++ lib.optionals isPy27 [ google-apputils ];
buildInputs = [ protobuf ];
patches = lib.optional (isPy37 && (lib.versionOlder protobuf.version "3.6.1.2"))
# Python 3.7 compatibility (not needed for protobuf >= 3.6.1.2)
(fetchpatch {
url = "https://github.com/protocolbuffers/protobuf/commit/0a59054c30e4f0ba10f10acfc1d7f3814c63e1a7.patch";
sha256 = "09hw22y3423v8bbmc9xm07znwdxfbya6rp78d4zqw6fisdvjkqf1";
stripLen = 1;
})
;
prePatch = ''
while [ ! -d python ]; do
cd *
done
cd python
'';
setupPyGlobalFlags = lib.optional (lib.versionAtLeast protobuf.version "2.6.0")
"--cpp_implementation";
pythonImportsCheck = [
"google.protobuf"
] ++ lib.optionals (lib.versionAtLeast protobuf.version "2.6.0") [
"google.protobuf.internal._api_implementation" # Verify that --cpp_implementation worked
];
meta = with lib; {
description = "Protocol Buffers are Google's data interchange format";
homepage = "https://developers.google.com/protocol-buffers/";
license = licenses.bsd3;
maintainers = with maintainers; [ knedlsepp ];
};
passthru.protobuf = protobuf;
}
@@ -0,0 +1,52 @@
{ lib
, fetchFromGitHub
, meson
, ninja
, buildPythonPackage
, pytestCheckHook
, pkg-config
, cairo
, python
}:
buildPythonPackage rec {
pname = "pycairo";
version = "1.18.2";
format = "other";
src = fetchFromGitHub {
owner = "pygobject";
repo = "pycairo";
rev = "v${version}";
sha256 = "142145a2whvlk92jijrbf3i2bqrzmspwpysj0bfypw0krzi0aa6j";
};
nativeBuildInputs = [
meson
ninja
pkg-config
];
buildInputs = [
cairo
];
checkInputs = [
pytestCheckHook
];
mesonFlags = [
# This is only used for figuring out what version of Python is in
# use, and related stuff like figuring out what the install prefix
# should be, but it does need to be able to execute Python code.
"-Dpython=${python.pythonForBuild.interpreter}"
];
meta = with lib; {
description = "Python 2 bindings for cairo";
homepage = "https://pycairo.readthedocs.io/";
license = with licenses; [ lgpl21Only mpl11 ];
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}
@@ -0,0 +1,33 @@
{ lib, stdenv, fetchurl, buildPythonPackage, pkg-config, glib, gobject-introspection,
pycairo, cairo, which, ncurses, meson, ninja, isPy3k, gnome }:
buildPythonPackage rec {
pname = "pygobject";
version = "3.36.1";
format = "other";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "0b9CgC0c7BE7Wtqg579/N0W0RSHcIWNYjSdtXNYdcY8=";
};
outputs = [ "out" "dev" ];
mesonFlags = [
"-Dpython=python${if isPy3k then "3" else "2" }"
];
nativeBuildInputs = [ pkg-config meson ninja gobject-introspection ];
buildInputs = [ glib gobject-introspection ]
++ lib.optionals stdenv.isDarwin [ which ncurses ];
propagatedBuildInputs = [ pycairo cairo ];
meta = with lib; {
homepage = "https://pygobject.readthedocs.io/";
description = "Python bindings for Glib";
license = licenses.gpl2;
maintainers = with maintainers; [ orivej ];
platforms = platforms.unix;
};
}
@@ -0,0 +1,74 @@
{ lib, stdenv, fetchurl, fetchpatch, python, pkg-config, gtk2, pygobject2, pycairo, pango
, buildPythonPackage, libglade ? null, isPy3k }:
buildPythonPackage rec {
pname = "pygtk";
version = "2.24.0";
disabled = isPy3k;
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
sha256 = "04k942gn8vl95kwf0qskkv6npclfm31d78ljkrkgyqxxcni1w76d";
};
patches = [
# https://bugzilla.gnome.org/show_bug.cgi?id=660216 - fixes some memory leaks
(fetchpatch {
url = "https://gitlab.gnome.org/Archive/pygtk/commit/eca72baa5616fbe4dbebea43c7e5940847dc5ab8.diff";
sha256 = "031px4w5cshcx1sns430sdbr2i007b9zyb2carb3z65nzr77dpdd";
})
(fetchpatch {
url = "https://gitlab.gnome.org/Archive/pygtk/commit/4aaa48eb80c6802aec6d03e5695d2a0ff20e0fc2.patch";
sha256 = "0z8cg7nr3qki8gg8alasdzzyxcihfjlxn518glq5ajglk3q5pzsn";
})
];
nativeBuildInputs = [ pkg-config ];
buildInputs = [
pango
] ++ lib.optional (libglade != null) libglade;
propagatedBuildInputs = [ gtk2 pygobject2 pycairo ];
configurePhase = "configurePhase";
buildPhase = "buildPhase";
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-ObjC";
installPhase = "installPhase";
checkPhase = lib.optionalString (libglade == null)
''
sed -i -e "s/glade = importModule('gtk.glade', buildDir)//" \
tests/common.py
sed -i -e "s/, glade$//" \
-e "s/.*testGlade.*//" \
-e "s/.*(glade.*//" \
tests/test_api.py
'' + ''
sed -i -e "s/sys.path.insert(0, os.path.join(buildDir, 'gtk'))//" \
-e "s/sys.path.insert(0, buildDir)//" \
tests/common.py
make check
'';
# XXX: TypeError: Unsupported type: <class 'gtk._gtk.WindowType'>
# The check phase was not executed in the previous
# non-buildPythonPackage setup - not sure why not.
doCheck = false;
postInstall = ''
rm $out/bin/pygtk-codegen-2.0
ln -s ${pygobject2}/bin/pygobject-codegen-2.0 $out/bin/pygtk-codegen-2.0
ln -s ${pygobject2}/lib/${python.libPrefix}/site-packages/pygobject-${pygobject2.version}.pth \
$out/lib/${python.libPrefix}/site-packages/${pname}-${version}.pth
'';
meta = with lib; {
description = "GTK 2 Python bindings";
homepage = "https://gitlab.gnome.org/Archive/pygtk";
platforms = platforms.all;
license = with licenses; [ lgpl21Plus ];
};
}
@@ -0,0 +1,44 @@
{ lib
, buildPythonPackage
, fetchPypi
, cryptography
, ecdsa
, pytestCheckHook
, pythonOlder
}:
buildPythonPackage rec {
pname = "pyjwt";
version = "1.7.1";
src = fetchPypi {
pname = "PyJWT";
inherit version;
sha256 = "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96";
};
postPatch = ''
sed -i '/^addopts/d' setup.cfg
'';
propagatedBuildInputs = [
cryptography
ecdsa
];
checkInputs = [
pytestCheckHook
];
disabledTests = [
"test_ec_verify_should_return_false_if_signature_invalid"
];
pythonImportsCheck = [ "jwt" ];
meta = with lib; {
description = "JSON Web Token implementation in Python";
homepage = "https://github.com/jpadilla/pyjwt";
license = licenses.mit;
};
}
@@ -0,0 +1,26 @@
{ lib, buildPythonPackage, fetchPypi
, docutils, pygments, setuptools
}:
buildPythonPackage rec {
pname = "pyroma";
version = "2.6.1";
src = fetchPypi {
inherit pname version;
sha256 = "2527423e3a24ccd56951f3ce1b0ebbcc4fa0518c82fca882e696c78726ab9c2f";
};
postPatch = ''
substituteInPlace setup.py \
--replace "pygments < 2.6" "pygments"
'';
propagatedBuildInputs = [ docutils pygments setuptools ];
meta = with lib; {
description = "Test your project's packaging friendliness";
homepage = "https://github.com/regebro/pyroma";
license = licenses.mit;
};
}
@@ -0,0 +1,57 @@
{ lib, stdenv
, buildPythonPackage
, fetchPypi
, isPy3k
, pkgs
}:
buildPythonPackage rec {
pname = "pysqlite";
version = "2.8.3";
src = fetchPypi {
inherit pname version;
sha256 = "17d3335863e8cf8392eea71add33dab3f96d060666fe68ab7382469d307f4490";
};
# Need to use the builtin sqlite3 on Python 3
disabled = isPy3k;
# Since the `.egg' file is zipped, the `NEEDED' of the `.so' files
# it contains is not taken into account. Thus, we must explicitly make
# it a propagated input.
propagatedBuildInputs = [ pkgs.sqlite ];
patchPhase = ''
substituteInPlace "setup.cfg" \
--replace "/usr/local/include" "${pkgs.sqlite.dev}/include" \
--replace "/usr/local/lib" "${pkgs.sqlite.out}/lib"
${lib.optionalString (!stdenv.isDarwin) ''export LDSHARED="$CC -pthread -shared"''}
'';
meta = with lib; {
homepage = "https://pysqlite.org/";
description = "Python bindings for the SQLite embedded relational database engine";
longDescription = ''
pysqlite is a DB-API 2.0-compliant database interface for SQLite.
SQLite is a relational database management system contained in
a relatively small C library. It is a public domain project
created by D. Richard Hipp. Unlike the usual client-server
paradigm, the SQLite engine is not a standalone process with
which the program communicates, but is linked in and thus
becomes an integral part of the program. The library
implements most of SQL-92 standard, including transactions,
triggers and most of complex queries.
pysqlite makes this powerful embedded SQL engine available to
Python programmers. It stays compatible with the Python
database API specification 2.0 as much as possible, but also
exposes most of SQLite's native API, so that it is for example
possible to create user-defined SQL functions and aggregates
in Python.
'';
license = licenses.bsd3;
};
}
@@ -0,0 +1,30 @@
{ lib, buildPythonPackage, fetchPypi, setuptools-scm, pytest }:
buildPythonPackage rec {
pname = "pytest-runner";
version = "5.2";
src = fetchPypi {
inherit pname version;
sha256 = "96c7e73ead7b93e388c5d614770d2bae6526efd997757d3543fe17b557a0942b";
};
nativeBuildInputs = [ setuptools-scm pytest ];
postPatch = ''
rm pytest.ini
'';
checkPhase = ''
py.test tests
'';
# Fixture not found
doCheck = false;
meta = with lib; {
description = "Invoke py.test as distutils command with dependency resolution";
homepage = "https://github.com/pytest-dev/pytest-runner";
license = licenses.mit;
};
}
@@ -0,0 +1,36 @@
{ lib, fetchPypi, buildPythonPackage, execnet, pytest
, setuptools-scm, pytest-forked, filelock, psutil, six, isPy3k }:
buildPythonPackage rec {
pname = "pytest-xdist";
version = "1.34.0";
src = fetchPypi {
inherit pname version;
sha256 = "1vh4ps32lp5ignch5adbl3pgchvigdfmrl6qpmhxih54wa1qw3il";
};
nativeBuildInputs = [ setuptools-scm pytest ];
checkInputs = [ pytest filelock ];
propagatedBuildInputs = [ execnet pytest-forked psutil six ];
# Encountered a memory leak
# https://github.com/pytest-dev/pytest-xdist/issues/462
doCheck = !isPy3k;
checkPhase = ''
# Excluded tests access file system
py.test testing -k "not test_distribution_rsyncdirs_example \
and not test_rsync_popen_with_path \
and not test_popen_rsync_subdir \
and not test_init_rsync_roots \
and not test_rsyncignore"
'';
meta = with lib; {
description = "py.test xdist plugin for distributed testing and loop-on-failing modes";
homepage = "https://github.com/pytest-dev/pytest-xdist";
license = licenses.mit;
maintainers = with maintainers; [ dotlambda ];
};
}
@@ -0,0 +1,68 @@
{ lib, buildPythonPackage, pythonOlder, fetchPypi, attrs, hypothesis, py
, setuptools-scm, setuptools, six, pluggy, funcsigs, isPy3k, more-itertools
, atomicwrites, mock, writeText, pathlib2, wcwidth, packaging, isPyPy
}:
buildPythonPackage rec {
version = "4.6.11";
pname = "pytest";
src = fetchPypi {
inherit pname version;
sha256 = "50fa82392f2120cc3ec2ca0a75ee615be4c479e66669789771f1758332be4353";
};
postPatch = ''
substituteInPlace setup.py \
--replace "pluggy>=0.12,<1.0" "pluggy>=0.12,<2.0"
'';
checkInputs = [ hypothesis mock ];
buildInputs = [ setuptools-scm ];
propagatedBuildInputs = [ attrs py setuptools six pluggy more-itertools atomicwrites wcwidth packaging ]
++ lib.optionals (!isPy3k) [ funcsigs ]
++ lib.optionals (pythonOlder "3.6") [ pathlib2 ];
doCheck = !isPyPy; # https://github.com/pytest-dev/pytest/issues/3460
checkPhase = ''
runHook preCheck
# don't test bash builtins
rm testing/test_argcomplete.py
# determinism - this test writes non deterministic bytecode
rm -rf testing/test_assertrewrite.py
PYTHONDONTWRITEBYTECODE=1 $out/bin/py.test -x testing/ -k "not test_collect_pyargs_with_testpaths"
runHook postCheck
'';
# Remove .pytest_cache when using py.test in a Nix build
setupHook = writeText "pytest-hook" ''
pytestcachePhase() {
find $out -name .pytest_cache -type d -exec rm -rf {} +
}
preDistPhases+=" pytestcachePhase"
# pytest generates it's own bytecode files to improve assertion messages.
# These files similar to cpython's bytecode files but are never laoded
# by python interpreter directly. We remove them for a few reasons:
# - files are non-deterministic: https://github.com/NixOS/nixpkgs/issues/139292
# (file headers are generatedt by pytest directly and contain timestamps)
# - files are not needed after tests are finished
pytestRemoveBytecodePhase () {
# suffix is defined at:
# https://github.com/pytest-dev/pytest/blob/4.6.11/src/_pytest/assertion/rewrite.py#L32-L47
find $out -name "*-PYTEST.py[co]" -delete
}
preDistPhases+=" pytestRemoveBytecodePhase"
'';
meta = with lib; {
homepage = "https://docs.pytest.org";
description = "Framework for writing tests";
maintainers = with maintainers; [ domenkozar lovek323 madjar lsix ];
license = licenses.mit;
platforms = platforms.unix;
};
}
@@ -0,0 +1,38 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, cython
, libyaml
, isPy27
, python
}:
buildPythonPackage rec {
pname = "PyYAML";
version = "5.4.1.1";
src = fetchFromGitHub {
owner = "yaml";
repo = "pyyaml";
rev = version;
sha256 = "1v386gzdvsjg0mgix6v03rd0cgs9dl81qvn3m547849jm8r41dx8";
};
nativeBuildInputs = [ cython ];
buildInputs = [ libyaml ];
checkPhase = ''
runHook preCheck
PYTHONPATH=""tests/lib":$PYTHONPATH" ${python.interpreter} -m test_all
runHook postCheck
'';
pythonImportsCheck = [ "yaml" ];
meta = with lib; {
description = "The next generation YAML parser and emitter for Python";
homepage = "https://github.com/yaml/pyyaml";
license = licenses.mit;
};
}
@@ -0,0 +1,26 @@
{ lib
, buildPythonPackage
, fetchurl
, isPy3k
}:
buildPythonPackage rec {
pname = "qpid-python";
version = "0.32";
disabled = isPy3k;
src = fetchurl {
url = "http://www.us.apache.org/dist/qpid/${version}/${pname}-${version}.tar.gz";
sha256 = "09hdfjgk8z4s3dr8ym2r6xn97j1f9mkb2743pr6zd0bnj01vhsv4";
};
# needs a broker running and then ./qpid-python-test
doCheck = false;
meta = with lib; {
homepage = "https://qpid.apache.org/";
description = "Python client implementation and AMQP conformance tests for Apache Qpid";
license = licenses.asl20;
};
}
@@ -0,0 +1,52 @@
{ lib
, fetchPypi
, pythonOlder
, buildPythonPackage
, docutils
, mock
, nose
, coverage
, wheel
, unittest2
, botocore
, futures ? null
}:
buildPythonPackage rec {
pname = "s3transfer";
version = "0.4.2";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-ywIvSxZVHt67sxo3fT8JYA262nNj2MXbeXbn9Hcy4bI=";
};
propagatedBuildInputs =
[
botocore
] ++ lib.optional (pythonOlder "3") futures;
buildInputs = [
docutils
mock
nose
coverage
wheel
unittest2
];
checkPhase = ''
pushd s3transfer/tests
nosetests -v unit/ functional/
popd
'';
# version on pypi has no tests/ dir
doCheck = false;
meta = with lib; {
homepage = "https://github.com/boto/s3transfer";
license = licenses.asl20;
description = "A library for managing Amazon S3 transfers";
};
}
@@ -0,0 +1,20 @@
{ lib, python, buildPythonPackage, fetchPypi }:
buildPythonPackage rec {
pname = "scandir";
version = "1.10.0";
src = fetchPypi {
inherit pname version;
sha256 ="1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd";
};
checkPhase = "${python.interpreter} test/run_tests.py";
meta = with lib; {
description = "A better directory iterator and faster os.walk()";
homepage = "https://github.com/benhoyt/scandir";
license = licenses.gpl3;
maintainers = with maintainers; [ abbradar ];
};
}
@@ -0,0 +1,24 @@
{ lib, buildPythonPackage, fetchPypi, toml }:
buildPythonPackage rec {
pname = "setuptools_scm";
version = "5.0.2";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-g6DO3TRJ45RjB4EaTHudicS1/UZKL7XuzNCluxWK5cg=";
};
propagatedBuildInputs = [ toml ];
# Requires pytest, circular dependency
doCheck = false;
pythonImportsCheck = [ "setuptools_scm" ];
meta = with lib; {
homepage = "https://github.com/pypa/setuptools_scm/";
description = "Handles managing your python package versions in scm metadata";
license = licenses.mit;
maintainers = with maintainers; [ SuperSandro2000 ];
};
}
@@ -0,0 +1,80 @@
{ stdenv
, buildPythonPackage
, fetchFromGitHub
, python
, bootstrapped-pip
, lib
, pipInstallHook
, setuptoolsBuildHook
}:
let
pname = "setuptools";
version = "44.0.0";
# Create an sdist of setuptools
sdist = stdenv.mkDerivation rec {
name = "${pname}-${version}-sdist.tar.gz";
src = fetchFromGitHub {
owner = "pypa";
repo = pname;
rev = "v${version}";
sha256 = "0z3q0qinyp1rmnxkw3y5f6nbsxhqlfq5k7skfrqa6ymb3zr009y1";
name = "${pname}-${version}-source";
};
patches = [
./tag-date.patch
];
buildPhase = ''
${python.pythonForBuild.interpreter} bootstrap.py
${python.pythonForBuild.interpreter} setup.py sdist --formats=gztar
# Here we untar the sdist and retar it in order to control the timestamps
# of all the files included
tar -xzf dist/${pname}-${version}.post0.tar.gz -C dist/
tar -czf dist/${name} -C dist/ --mtime="@$SOURCE_DATE_EPOCH" ${pname}-${version}.post0
'';
installPhase = ''
echo "Moving sdist..."
mv dist/${name} $out
'';
};
in buildPythonPackage rec {
inherit pname version;
# Because of bootstrapping we don't use the setuptoolsBuildHook that comes with format="setuptools" directly.
# Instead, we override it to remove setuptools to avoid a circular dependency.
# The same is done for pip and the pipInstallHook.
format = "other";
src = sdist;
nativeBuildInputs = [
bootstrapped-pip
(pipInstallHook.override{pip=null;})
(setuptoolsBuildHook.override{setuptools=null; wheel=null;})
];
preBuild = lib.optionalString (!stdenv.hostPlatform.isWindows) ''
export SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES=0
'';
pipInstallFlags = [ "--ignore-installed" ];
# Adds setuptools to nativeBuildInputs causing infinite recursion.
catchConflicts = false;
# Requires pytest, causing infinite recursion.
doCheck = false;
meta = with lib; {
description = "Utilities to facilitate the installation of Python packages";
homepage = "https://pypi.python.org/pypi/setuptools";
license = with licenses; [ psfl zpl20 ];
platforms = python.meta.platforms;
priority = 10;
};
}
@@ -0,0 +1,12 @@
diff --git a/setup.cfg b/setup.cfg
index f23714b6..8aaeb330 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[egg_info]
tag_build = .post
-tag_date = 1
+tag_date = 0
[aliases]
clean_egg_info = egg_info -Db ''
@@ -0,0 +1,82 @@
{ lib
, buildPythonPackage
, fetchPypi
, pytest
, simplejson
, mock
, glibcLocales
, html5lib
, pythonOlder
, enum34
, python
, docutils
, jinja2
, pygments
, alabaster
, Babel
, snowballstemmer
, six
, sqlalchemy
, whoosh
, imagesize
, requests
, typing
, sphinxcontrib-websupport
, setuptools
}:
buildPythonPackage rec {
pname = "sphinx";
version = "1.8.5";
src = fetchPypi {
pname = "Sphinx";
inherit version;
sha256 = "c7658aab75c920288a8cf6f09f244c6cfdae30d82d803ac1634d9f223a80ca08";
};
LC_ALL = "en_US.UTF-8";
checkInputs = [ pytest ];
buildInputs = [ simplejson mock glibcLocales html5lib ] ++ lib.optional (pythonOlder "3.4") enum34;
# Disable two tests that require network access.
checkPhase = ''
cd tests; ${python.interpreter} run.py --ignore py35 -k 'not test_defaults and not test_anchors_ignored'
'';
propagatedBuildInputs = [
docutils
jinja2
pygments
alabaster
Babel
setuptools
snowballstemmer
six
sphinxcontrib-websupport
sqlalchemy
whoosh
imagesize
requests
] ++ lib.optional (pythonOlder "3.5") typing;
# Lots of tests. Needs network as well at some point.
doCheck = false;
patches = [
# Since pygments 2.5, PythonLexer refers to python3. If we want to use
# python2, we need to explicitly specify Python2Lexer.
# Not upstreamed since there doesn't seem to be any upstream maintenance
# branch for 1.8 (and this patch doesn't make any sense for 2.x).
./python2-lexer.patch
];
# https://github.com/NixOS/nixpkgs/issues/22501
# Do not run `python sphinx-build arguments` but `sphinx-build arguments`.
postPatch = ''
substituteInPlace sphinx/make_mode.py --replace "sys.executable, " ""
'';
meta = {
description = "A tool that makes it easy to create intelligent and beautiful documentation for Python projects";
homepage = "http://sphinx.pocoo.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ ];
};
}
@@ -0,0 +1,22 @@
diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py
index ac2bd1b06..63ca52de2 100644
--- a/sphinx/highlighting.py
+++ b/sphinx/highlighting.py
@@ -16,7 +16,7 @@ from pygments.filters import ErrorToken
from pygments.formatters import HtmlFormatter, LatexFormatter
from pygments.lexer import Lexer # NOQA
from pygments.lexers import get_lexer_by_name, guess_lexer
-from pygments.lexers import PythonLexer, Python3Lexer, PythonConsoleLexer, \
+from pygments.lexers import Python2Lexer, Python3Lexer, PythonConsoleLexer, \
CLexer, TextLexer, RstLexer
from pygments.styles import get_style_by_name
from pygments.util import ClassNotFound
@@ -40,7 +40,7 @@ logger = logging.getLogger(__name__)
lexers = dict(
none = TextLexer(stripnl=False),
- python = PythonLexer(stripnl=False),
+ python = Python2Lexer(stripnl=False),
python3 = Python3Lexer(stripnl=False),
pycon = PythonConsoleLexer(stripnl=False),
pycon3 = PythonConsoleLexer(python3=True, stripnl=False),
@@ -0,0 +1,25 @@
{ lib
, buildPythonPackage
, fetchPypi
, six
}:
buildPythonPackage rec {
pname = "sphinxcontrib-websupport";
version = "1.1.2";
src = fetchPypi {
inherit pname version;
sha256 = "1501befb0fdf1d1c29a800fdbf4ef5dc5369377300ddbdd16d2cd40e54c6eefc";
};
propagatedBuildInputs = [ six ];
doCheck = false;
meta = {
description = "Sphinx API for Web Apps";
homepage = "http://sphinx-doc.org/";
license = lib.licenses.bsd2;
};
}
@@ -0,0 +1,33 @@
{ lib, buildPythonPackage, fetchPypi, pythonOlder, isPy3k, isPyPy, python
, pythonAtLeast }:
let
testDir = if isPy3k then "src" else "python2";
in buildPythonPackage rec {
pname = "typing";
version = "3.10.0.0";
src = fetchPypi {
inherit pname version;
sha256 = "13b4ad211f54ddbf93e5901a9967b1e07720c1d1b78d596ac6a439641aa1b130";
};
disabled = pythonAtLeast "3.5";
# Error for Python3.6: ImportError: cannot import name 'ann_module'
# See https://github.com/python/typing/pull/280
# Also, don't bother on PyPy: AssertionError: TypeError not raised
doCheck = pythonOlder "3.6" && !isPyPy;
checkPhase = ''
cd ${testDir}
${python.interpreter} -m unittest discover
'';
meta = with lib; {
description = "Backport of typing module to Python versions older than 3.5";
homepage = "https://docs.python.org/3/library/typing.html";
license = licenses.psfl;
};
}
@@ -0,0 +1,81 @@
{ lib
, brotli
, buildPythonPackage
, certifi
, cryptography
, python-dateutil
, fetchpatch
, fetchPypi
, idna
, mock
, pyopenssl
, pysocks
, pytest-freezegun
, pytest-timeout
, pytestCheckHook
, tornado
, trustme
}:
buildPythonPackage rec {
pname = "urllib3";
version = "1.26.2";
src = fetchPypi {
inherit pname version;
sha256 = "19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08";
};
patches = [
(fetchpatch {
name = "CVE-2021-28363.patch";
url = "https://github.com/urllib3/urllib3/commit/8d65ea1ecf6e2cdc27d42124e587c1b83a3118b0.patch";
sha256 = "1lqhrd11p03iv14bp89rh67ynf000swmwsfvr3jpfdycdqr3ka9q";
})
];
propagatedBuildInputs = [
brotli
certifi
cryptography
idna
pyopenssl
pysocks
];
checkInputs = [
python-dateutil
mock
pytest-freezegun
pytest-timeout
pytestCheckHook
tornado
trustme
];
# Tests in urllib3 are mostly timeout-based instead of event-based and
# are therefore inherently flaky. On your own machine, the tests will
# typically build fine, but on a loaded cluster such as Hydra random
# timeouts will occur.
#
# The urllib3 test suite has two different timeouts in their test suite
# (see `test/__init__.py`):
# - SHORT_TIMEOUT
# - LONG_TIMEOUT
# When CI is in the env, LONG_TIMEOUT will be significantly increased.
# Still, failures can occur and for that reason tests are disabled.
doCheck = false;
preCheck = ''
export CI # Increases LONG_TIMEOUT
'';
pythonImportsCheck = [ "urllib3" ];
meta = with lib; {
description = "Powerful, sanity-friendly HTTP client for Python";
homepage = "https://github.com/shazow/urllib3";
license = licenses.mit;
maintainers = with maintainers; [ fab ];
};
}
@@ -0,0 +1,48 @@
{ buildPythonPackage
, lib
, six
, fetchPypi
, pyyaml
, mock
, contextlib2
, wrapt
, pytest
, pytest-httpbin
, yarl
, pythonOlder
, pythonAtLeast
}:
buildPythonPackage rec {
pname = "vcrpy";
version = "3.0.0";
src = fetchPypi {
inherit pname version;
sha256 = "21168d5ae14263a833d4b71acfd8278d8841114f24be1b4ab4a5719d0c7f07bc";
};
checkInputs = [
pytest
pytest-httpbin
];
propagatedBuildInputs = [
pyyaml
wrapt
six
]
++ lib.optionals (pythonOlder "3.3") [ contextlib2 mock ]
++ lib.optionals (pythonAtLeast "3.4") [ yarl ];
checkPhase = ''
py.test --ignore=tests/integration -k "not TestVCRConnection"
'';
meta = with lib; {
description = "Automatically mock your HTTP interactions to simplify and speed up testing";
homepage = "https://github.com/kevin1024/vcrpy";
license = licenses.mit;
};
}
@@ -0,0 +1,60 @@
{ lib, stdenv, buildPythonPackage, fetchPypi
, itsdangerous, hypothesis
, pytestCheckHook, requests
, pytest-timeout
}:
buildPythonPackage rec {
pname = "Werkzeug";
version = "1.0.1";
src = fetchPypi {
inherit pname version;
sha256 = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c";
};
propagatedBuildInputs = [ itsdangerous ];
checkInputs = [ pytestCheckHook requests hypothesis pytest-timeout ];
postPatch = ''
# ResourceWarning causes tests to fail
rm tests/test_routing.py
'';
disabledTests = [
"test_save_to_pathlib_dst"
"test_cookie_maxsize"
"test_cookie_samesite_attribute"
"test_cookie_samesite_invalid"
"test_range_parsing"
"test_content_range_parsing"
"test_http_date_lt_1000"
"test_best_match_works"
"test_date_to_unix"
"test_easteregg"
# Seems to be a problematic test-case:
#
# > warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
# E pytest.PytestUnraisableExceptionWarning: Exception ignored in: <_io.FileIO [closed]>
# E
# E Traceback (most recent call last):
# E File "/nix/store/cwv8aj4vsqvimzljw5dxsxy663vjgibj-python3.9-Werkzeug-1.0.1/lib/python3.9/site-packages/werkzeug/formparser.py", line 318, in parse_multipart_headers
# E return Headers(result)
# E ResourceWarning: unclosed file <_io.FileIO name=11 mode='rb+' closefd=True>
"test_basic_routing"
"test_merge_slashes_match"
"test_merge_slashes_build"
"TestMultiPart"
"TestHTTPUtility"
] ++ lib.optionals stdenv.isDarwin [
"test_get_machine_id"
];
meta = with lib; {
homepage = "https://palletsprojects.com/p/werkzeug/";
description = "A WSGI utility library for Python";
license = licenses.bsd3;
maintainers = [ ];
};
}
@@ -0,0 +1,25 @@
{ lib, buildPythonPackage, fetchPypi, h11, enum34, pytest }:
buildPythonPackage rec {
pname = "wsproto";
version = "0.14.1";
src = fetchPypi {
inherit pname version;
sha256 = "051s127qb5dladxa14n9nqajwq7xki1dz1was5r5v9df5a0jq8pd";
};
propagatedBuildInputs = [ h11 enum34 ];
checkInputs = [ pytest ];
checkPhase = ''
py.test
'';
meta = with lib; {
description = "Pure Python, pure state-machine WebSocket implementation";
homepage = "https://github.com/python-hyper/wsproto/";
license = licenses.mit;
};
}
@@ -0,0 +1,91 @@
{ fetchurl
, lib
, stdenv
, darwin
, openglSupport ? true
, libX11
, wxGTK
, wxmac
, pkg-config
, buildPythonPackage
, pyopengl
, isPy3k
, isPyPy
, python
, cairo
, pango
}:
assert wxGTK.unicode;
buildPythonPackage rec {
pname = "wxPython";
version = "3.0.2.0";
disabled = isPy3k || isPyPy;
doCheck = false;
src = fetchurl {
url = "mirror://sourceforge/wxpython/wxPython-src-${version}.tar.bz2";
sha256 = "0qfzx3sqx4mwxv99sfybhsij4b5pc03ricl73h4vhkzazgjjjhfm";
};
dontUseSetuptoolsBuild = true;
dontUsePipInstall = true;
hardeningDisable = [ "format" ];
nativeBuildInputs = [ pkg-config ]
++ (lib.optionals (!stdenv.isDarwin) [ wxGTK libX11 ])
++ (lib.optionals stdenv.isDarwin [ wxmac ]);
buildInputs = [ ]
++ (lib.optionals (!stdenv.isDarwin) [ (wxGTK.gtk) ])
++ (lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
ApplicationServices
AudioToolbox
CFNetwork
Carbon
Cocoa
CoreGraphics
CoreServices
CoreText
DiskArbitration
IOKit
ImageIO
OpenGL
Security
]))
++ (lib.optional openglSupport pyopengl);
preConfigure = ''
cd wxPython
# remove wxPython's darwin hack that interference with python-2.7-distutils-C++.patch
substituteInPlace config.py \
--replace "distutils.unixccompiler.UnixCCompiler = MyUnixCCompiler" ""
# set the WXPREFIX to $out instead of the storepath of wxwidgets
substituteInPlace config.py \
--replace "WXPREFIX = getWxConfigValue('--prefix')" "WXPREFIX = '$out'"
# this check is supposed to only return false on older systems running non-framework python
substituteInPlace src/osx_cocoa/_core_wrap.cpp \
--replace "return wxPyTestDisplayAvailable();" "return true;"
'' + lib.optionalString (!stdenv.isDarwin) ''
substituteInPlace wx/lib/wxcairo.py \
--replace 'cairoLib = None' 'cairoLib = ctypes.CDLL("${cairo}/lib/libcairo.so")'
substituteInPlace wx/lib/wxcairo.py \
--replace '_dlls = dict()' '_dlls = {k: ctypes.CDLL(v) for k, v in [
("gdk", "${wxGTK.gtk}/lib/libgtk-x11-2.0.so"),
("pangocairo", "${pango.out}/lib/libpangocairo-1.0.so"),
("appsvc", None)
]}'
'';
buildPhase = "";
installPhase = ''
${python.interpreter} setup.py install WXPORT=${if stdenv.isDarwin then "osx_cocoa" else "gtk2"} NO_HEADERS=0 BUILD_GLCANVAS=${if openglSupport then "1" else "0"} UNICODE=1 --prefix=$out
wrapPythonPrograms
'';
passthru = { inherit wxGTK openglSupport; };
}
@@ -0,0 +1,37 @@
{ lib
, buildPythonPackage
, fetchPypi
, setuptools-scm
, pytest
, pytest-flake8
, more-itertools
}:
buildPythonPackage rec {
pname = "zipp";
version = "1.0.0";
src = fetchPypi {
inherit pname version;
sha256 = "0v3qayhqv7vyzydpydwcp51bqciw8p2ajddw68x5k8zppc0vx3yk";
};
nativeBuildInputs = [ setuptools-scm ];
propagatedBuildInputs = [ more-itertools ];
checkInputs = [ pytest pytest-flake8 ];
checkPhase = ''
pytest
'';
# Prevent infinite recursion with pytest
doCheck = false;
meta = with lib; {
description = "Pathlib-compatible object wrapper for zip files";
homepage = "https://github.com/jaraco/zipp";
license = licenses.mit;
};
}