about summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
authorFrederik Rietdijk <freddyrietdijk@fridh.nl>2019-12-30 18:09:22 +0100
committerGitHub <noreply@github.com>2019-12-30 18:09:22 +0100
commit5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b (patch)
tree60410e4024a49a821f15ece8e8ec64cbdf22e7b1 /pkgs/development
parent31fffc6a698940535ef06f52f0363705b231afdc (diff)
parent708d34a5c5a420b8b539e5d400c2848f49438bbf (diff)
downloadnixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.tar
nixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.tar.gz
nixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.tar.bz2
nixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.tar.lz
nixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.tar.xz
nixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.tar.zst
nixlib-5a3cbd01f78db54f6f5bc46cd00b4a30005d3c5b.zip
Merge pull request #76652 from costrouc/python-httpx-init
Packaging several async python web libraries / databases connectors
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/python-modules/aiocontextvars/default.nix48
-rw-r--r--pkgs/development/python-modules/aiomysql/default.nix47
-rw-r--r--pkgs/development/python-modules/aiosqlite/default.nix36
-rw-r--r--pkgs/development/python-modules/aiounittest/default.nix36
-rw-r--r--pkgs/development/python-modules/databases/default.nix49
-rw-r--r--pkgs/development/python-modules/fastapi/default.nix38
-rw-r--r--pkgs/development/python-modules/fastapi/setup.py.patch13
-rw-r--r--pkgs/development/python-modules/hstspreload/default.nix28
-rw-r--r--pkgs/development/python-modules/httpx/default.nix68
-rw-r--r--pkgs/development/python-modules/orm/default.nix43
-rw-r--r--pkgs/development/python-modules/pydantic/default.nix35
-rw-r--r--pkgs/development/python-modules/python-multipart/default.nix41
-rw-r--r--pkgs/development/python-modules/starlette/default.nix28
-rw-r--r--pkgs/development/python-modules/typesystem/default.nix44
14 files changed, 502 insertions, 52 deletions
diff --git a/pkgs/development/python-modules/aiocontextvars/default.nix b/pkgs/development/python-modules/aiocontextvars/default.nix
new file mode 100644
index 000000000000..38fdf14164eb
--- /dev/null
+++ b/pkgs/development/python-modules/aiocontextvars/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestrunner
+, pytest
+, pytest-asyncio
+, contextvars
+, sqlalchemy
+, isPy27
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "aiocontextvars";
+  version = "0.2.2";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "fantix";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0a2gmrm9csiknc8n3si67sgzffkydplh9d7ga1k87ygk2aj22mmk";
+  };
+
+  buildInputs = [
+    pytestrunner
+  ];
+
+  checkInputs = [
+    pytest
+    pytest-asyncio
+  ];
+
+  propagatedBuildInputs = [
+    sqlalchemy
+  ] ++ lib.optionals (pythonOlder "3.7") [ contextvars ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "Asyncio support for PEP-567 contextvars backport";
+    homepage = https://github.com/fantix/aiocontextvars;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/aiomysql/default.nix b/pkgs/development/python-modules/aiomysql/default.nix
new file mode 100644
index 000000000000..891e9f216ce8
--- /dev/null
+++ b/pkgs/development/python-modules/aiomysql/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pymysql
+, pytest
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "aiomysql";
+  version = "0.0.20";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "aio-libs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1mxih81zc2k64briirpp5wz4f72l8v05avfyfibaq9fr6lcbih9b";
+  };
+
+  propagatedBuildInputs = [
+    pymysql
+  ];
+
+  checkInputs = [
+    pytest
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "PyMySQL>=0.9,<=0.9.2" "PyMySQL"
+  '';
+
+  checkPhase = ''
+    pytest
+  '';
+
+  # tests require mysql database
+  doCheck = false;
+
+  meta = with lib; {
+    description = "MySQL driver for asyncio";
+    homepage = https://github.com/aio-libs/aiomysql;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/aiosqlite/default.nix b/pkgs/development/python-modules/aiosqlite/default.nix
new file mode 100644
index 000000000000..1032485e9801
--- /dev/null
+++ b/pkgs/development/python-modules/aiosqlite/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, setuptools
+, aiounittest
+, isPy27
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "aiosqlite";
+  version = "0.11.0";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "jreese";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0pmkp4iy738yv2sl08kvhd0ma6wjqbmfnwid72gvg4zqsr1hnn0z";
+  };
+
+  buildInputs = [
+    setuptools
+  ];
+
+  checkInputs = [
+    aiounittest
+  ];
+
+  meta = with lib; {
+    description = "Asyncio bridge to the standard sqlite3 module";
+    homepage = https://github.com/jreese/aiosqlite;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/aiounittest/default.nix b/pkgs/development/python-modules/aiounittest/default.nix
new file mode 100644
index 000000000000..743600a0d3b0
--- /dev/null
+++ b/pkgs/development/python-modules/aiounittest/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, nose
+, coverage
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "aiounittest";
+  version = "1.3.1";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "kwarunek";
+    repo = pname;
+    rev = version;
+    sha256 = "0mlic2q49cb0vv62mixy4i4x8c91qb6jlji7khiamcxcg676nasl";
+  };
+
+  checkInputs = [
+    nose
+    coverage
+  ];
+
+  checkPhase = ''
+    nosetests
+  '';
+
+  meta = with lib; {
+    description = "Test asyncio code more easily";
+    homepage = https://github.com/kwarunek/aiounittest;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/databases/default.nix b/pkgs/development/python-modules/databases/default.nix
new file mode 100644
index 000000000000..e4129ed9bbf3
--- /dev/null
+++ b/pkgs/development/python-modules/databases/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, sqlalchemy
+, aiocontextvars
+, isPy27
+, pytest
+, asyncpg
+, aiomysql
+, aiosqlite
+}:
+
+buildPythonPackage rec {
+  pname = "databases";
+  version = "0.2.6";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "encode";
+    repo = pname;
+    rev = version;
+    sha256 = "0cdb4vln4zdmqbbcj7711b81b2l64jg1miihqcg8gpi35v404h2q";
+  };
+
+  propagatedBuildInputs = [
+    sqlalchemy
+    aiocontextvars
+  ];
+
+  checkInputs = [
+    pytest
+    asyncpg
+    aiomysql
+    aiosqlite
+  ];
+
+  # big chunk to tests depend on existing posgresql and mysql databases
+  # some tests are better than no tests
+  checkPhase = ''
+    pytest --ignore=tests/test_integration.py --ignore=tests/test_databases.py
+  '';
+
+  meta = with lib; {
+    description = "Async database support for Python";
+    homepage = https://github.com/encode/databases;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/fastapi/default.nix b/pkgs/development/python-modules/fastapi/default.nix
index c90b64dca811..75edf5dc424c 100644
--- a/pkgs/development/python-modules/fastapi/default.nix
+++ b/pkgs/development/python-modules/fastapi/default.nix
@@ -1,22 +1,28 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , uvicorn
 , starlette
 , pydantic
-, python
 , isPy3k
-, which
+, pytest
+, pytestcov
+, pyjwt
+, passlib
+, aiosqlite
 }:
 
 buildPythonPackage rec {
   pname = "fastapi";
-  version = "0.42.0";
+  version = "0.45.0";
+  format = "flit";
   disabled = !isPy3k;
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "48cb522c1c993e238bfe272fbb18049cbd4bf5b9d6c0d4a4fa113cc790e8196c";
+  src = fetchFromGitHub {
+    owner = "tiangolo";
+    repo = "fastapi";
+    rev = version;
+    sha256 = "1qwh382ny6qa3zi64micdq4j7dc64zv4rfd8g91j0digd4rhs6i1";
   };
 
   propagatedBuildInputs = [
@@ -25,10 +31,24 @@ buildPythonPackage rec {
     pydantic
   ];
 
-  patches = [ ./setup.py.patch ];
+  checkInputs = [
+    pytest
+    pytestcov
+    pyjwt
+    passlib
+    aiosqlite
+  ];
+
+  # starlette pinning kept in place due to 0.12.9 being a hard
+  # dependency luckily fastapi is currently the only dependent on
+  # starlette. Please remove pinning when possible
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace "pydantic >=0.32.2,<=0.32.2" "pydantic"
+  '';
 
   checkPhase = ''
-    ${python.interpreter} -c "from fastapi import FastAPI; app = FastAPI()"
+    pytest --ignore=tests/test_default_response_class.py
   '';
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/fastapi/setup.py.patch b/pkgs/development/python-modules/fastapi/setup.py.patch
deleted file mode 100644
index 43661343d744..000000000000
--- a/pkgs/development/python-modules/fastapi/setup.py.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/setup.py b/setup.py
-index ccc3d2b..77ce446 100644
---- a/setup.py
-+++ b/setup.py
-@@ -10,7 +10,7 @@ package_data = \
- {'': ['*']}
- 
- install_requires = \
--['starlette >=0.11.1,<=0.12.0', 'pydantic >=0.30,<=0.30.0']
-+['starlette >=0.11.1', 'pydantic >=0.30']
- 
- extras_require = \
- {'all': ['requests',
diff --git a/pkgs/development/python-modules/hstspreload/default.nix b/pkgs/development/python-modules/hstspreload/default.nix
new file mode 100644
index 000000000000..a276bd33b592
--- /dev/null
+++ b/pkgs/development/python-modules/hstspreload/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "hstspreload";
+  version = "2019.12.25";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "sethmlarson";
+    repo = pname;
+    rev = version;
+    sha256 = "1aa7jccwldxw3s0z668qqb0i0plsark1q3jvkmqkyp645w5bfilk";
+  };
+
+  # tests require network connection
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Chromium HSTS Preload list as a Python package and updated daily";
+    homepage = https://github.com/sethmlarson/hstspreload;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/httpx/default.nix b/pkgs/development/python-modules/httpx/default.nix
new file mode 100644
index 000000000000..04a0592d7506
--- /dev/null
+++ b/pkgs/development/python-modules/httpx/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, certifi
+, hstspreload
+, chardet
+, h11
+, h2
+, idna
+, rfc3986
+, sniffio
+, isPy27
+, pytest
+, pytestcov
+, trustme
+, uvicorn
+, trio
+, brotli
+}:
+
+buildPythonPackage rec {
+  pname = "httpx";
+  version = "0.9.5";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "encode";
+    repo = pname;
+    rev = version;
+    sha256 = "140z2j7b5hlcxvfb433hqv5b8irqa88hpq33lzr9m992djbhj2hb";
+  };
+
+  propagatedBuildInputs = [
+    certifi
+    hstspreload
+    chardet
+    h11
+    h2
+    idna
+    rfc3986
+    sniffio
+  ];
+
+  checkInputs = [
+    pytest
+    pytestcov
+    trustme
+    uvicorn
+    trio
+    brotli
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+          --replace "h11==0.8.*" "h11"
+  '';
+
+  checkPhase = ''
+    PYTHONPATH=.:$PYTHONPATH pytest
+  '';
+
+  meta = with lib; {
+    description = "The next generation HTTP client";
+    homepage = https://github.com/encode/httpx;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/orm/default.nix b/pkgs/development/python-modules/orm/default.nix
new file mode 100644
index 000000000000..c2f6bc4fc570
--- /dev/null
+++ b/pkgs/development/python-modules/orm/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, databases
+, typesystem
+, aiosqlite
+, pytest
+, pytestcov
+}:
+
+buildPythonPackage rec {
+  pname = "orm";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "encode";
+    repo = "orm";
+    rev = version;
+    sha256 = "1g70cr0559iyqfzidwh6n2qq6d4dcnrr4sg0jkn1s4qzka828mj7";
+  };
+
+  propagatedBuildInputs = [
+    databases
+    typesystem
+  ];
+
+  checkInputs = [
+    aiosqlite
+    pytest
+    pytestcov
+  ];
+
+  checkPhase = ''
+    PYTHONPATH=$PYTHONPATH:. pytest
+  '';
+
+  meta = with lib; {
+    description = "An async ORM";
+    homepage = https://github.com/encode/orm;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/pydantic/default.nix b/pkgs/development/python-modules/pydantic/default.nix
index 3e8e5086eadd..088c6636fdca 100644
--- a/pkgs/development/python-modules/pydantic/default.nix
+++ b/pkgs/development/python-modules/pydantic/default.nix
@@ -1,21 +1,25 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , ujson
 , email_validator
 , typing-extensions
 , python
 , isPy3k
+, pytest
+, pytestcov
 }:
 
 buildPythonPackage rec {
   pname = "pydantic";
-  version = "1.0";
+  version = "1.3";
   disabled = !isPy3k;
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "bf474cebe007701806f5f8b076fb8508116606e5c721734bb855bfec4185263c";
+  src = fetchFromGitHub {
+    owner = "samuelcolvin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0s85nzlsyj97j54zsgv569hkzv617z0vqsifsxkkyiimgbvnx7g8";
   };
 
   propagatedBuildInputs = [
@@ -24,22 +28,13 @@ buildPythonPackage rec {
     typing-extensions
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -c """
-from datetime import datetime
-from typing import List
-from pydantic import BaseModel
-
-class User(BaseModel):
-    id: int
-    name = 'John Doe'
-    signup_ts: datetime = None
-    friends: List[int] = []
+  checkInputs = [
+    pytest
+    pytestcov
+  ];
 
-external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
-user = User(**external_data)
-assert user.id is "123"
-"""
+  checkPhase = ''
+    pytest
   '';
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/python-multipart/default.nix b/pkgs/development/python-modules/python-multipart/default.nix
new file mode 100644
index 000000000000..e3e75d886043
--- /dev/null
+++ b/pkgs/development/python-modules/python-multipart/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytest
+, pytestcov
+, mock
+, pyyaml
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "python-multipart";
+  version = "0.0.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43";
+  };
+
+  checkInputs = [
+    pytest
+    pytestcov
+    mock
+    pyyaml
+  ];
+
+  propagatedBuildInputs = [
+    six
+  ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "A streaming multipart parser for Python";
+    homepage = https://github.com/andrew-d/python-multipart;
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/starlette/default.nix b/pkgs/development/python-modules/starlette/default.nix
index 6580a87b2fee..9fd1d56ea1aa 100644
--- a/pkgs/development/python-modules/starlette/default.nix
+++ b/pkgs/development/python-modules/starlette/default.nix
@@ -1,7 +1,7 @@
 { lib
 , stdenv
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , aiofiles
 , graphene
 , itsdangerous
@@ -9,21 +9,25 @@
 , pyyaml
 , requests
 , ujson
+, python-multipart
 , pytest
-, python
 , uvicorn
 , isPy27
 , darwin
+, databases
+, aiosqlite
 }:
 
 buildPythonPackage rec {
   pname = "starlette";
-  version = "0.12.13";
+  version = "0.12.9";
   disabled = isPy27;
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "9597bc28e3c4659107c1c4a45ec32dc45e947d78fe56230222be673b2c36454a";
+  src = fetchFromGitHub {
+    owner = "encode";
+    repo = "starlette";
+    rev = version;
+    sha256 = "0w44s8ynzy8w8dgm755c8jina9i4dd87vqkcv7jc1kwkg384w9i5";
   };
 
   propagatedBuildInputs = [
@@ -35,13 +39,17 @@ buildPythonPackage rec {
     requests
     ujson
     uvicorn
+    python-multipart
+    databases
   ] ++ stdenv.lib.optional stdenv.isDarwin [ darwin.apple_sdk.frameworks.ApplicationServices ];
 
+  checkInputs = [
+    pytest
+    aiosqlite
+  ];
+
   checkPhase = ''
-    ${python.interpreter} -c """
-from starlette.applications import Starlette
-app = Starlette(debug=True)
-"""
+    pytest --ignore=tests/test_graphql.py
   '';
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/typesystem/default.nix b/pkgs/development/python-modules/typesystem/default.nix
new file mode 100644
index 000000000000..8a66d6cbcc9f
--- /dev/null
+++ b/pkgs/development/python-modules/typesystem/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy27
+, pytest
+, pytestcov
+, jinja2
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "typesystem";
+  version = "0.2.4";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "encode";
+    repo = pname;
+    rev = version;
+    sha256 = "1k0jwcky17zwaz2vx4x2zbsnp270g4mgn7kx5bpl8jgx76qmsnba";
+  };
+
+  propagatedBuildInputs = [
+    jinja2
+    pyyaml
+  ];
+
+  checkInputs = [
+    pytest
+    pytestcov
+  ];
+
+  # for some reason jinja2 not picking up forms directory (1% of tests)
+  checkPhase = ''
+    pytest --ignore=tests/test_forms.py
+  '';
+
+  meta = with lib; {
+    description = "A type system library for Python";
+    homepage = https://github.com/encode/typesystem;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.costrouc ];
+  };
+}