Merge pull request #76652 from costrouc/python-httpx-init

Packaging several async python web libraries / databases connectors
This commit is contained in:
Frederik Rietdijk 2019-12-30 18:09:22 +01:00 committed by GitHub
commit 5a3cbd01f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 522 additions and 52 deletions

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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; {

View File

@ -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',

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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
];
checkInputs = [
pytest
pytestcov
];
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] = []
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"
"""
pytest
'';
meta = with lib; {

View File

@ -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 ];
};
}

View File

@ -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; {

View File

@ -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 ];
};
}

View File

@ -550,6 +550,8 @@ in {
inherit (pkgs.llvmPackages) openmp libcxx libcxxabi;
};
databases = callPackage ../development/python-modules/databases { };
datamodeldict = callPackage ../development/python-modules/datamodeldict { };
datasette = callPackage ../development/python-modules/datasette { };
@ -1454,16 +1456,22 @@ in {
aiohttp-swagger = callPackage ../development/python-modules/aiohttp-swagger { };
aiomysql = callPackage ../development/python-modules/aiomysql { };
aioprocessing = callPackage ../development/python-modules/aioprocessing { };
aioresponses = callPackage ../development/python-modules/aioresponses { };
aiosqlite = callPackage ../development/python-modules/aiosqlite { };
aiorpcx = callPackage ../development/python-modules/aiorpcx { };
aiosmtpd = callPackage ../development/python-modules/aiosmtpd { };
aiounifi = callPackage ../development/python-modules/aiounifi { };
aiounittest = callPackage ../development/python-modules/aiounittest { };
aiozeroconf = callPackage ../development/python-modules/aiozeroconf { };
ajpy = callPackage ../development/python-modules/ajpy { };
@ -2620,10 +2628,14 @@ in {
hsaudiotag3k = callPackage ../development/python-modules/hsaudiotag3k { };
hstspreload = callPackage ../development/python-modules/hstspreload { };
htmlmin = callPackage ../development/python-modules/htmlmin {};
httpauth = callPackage ../development/python-modules/httpauth { };
httpx = callPackage ../development/python-modules/httpx { };
idna-ssl = callPackage ../development/python-modules/idna-ssl { };
identify = callPackage ../development/python-modules/identify { };
@ -4315,6 +4327,8 @@ in {
orderedset = callPackage ../development/python-modules/orderedset { };
python-multipart = callPackage ../development/python-modules/python-multipart { };
python-otr = callPackage ../development/python-modules/python-otr { };
plone-testing = callPackage ../development/python-modules/plone-testing { };
@ -4363,6 +4377,8 @@ in {
fasteners = callPackage ../development/python-modules/fasteners { };
aiocontextvars = callPackage ../development/python-modules/aiocontextvars { };
aioeventlet = callPackage ../development/python-modules/aioeventlet { };
aiokafka = callPackage ../development/python-modules/aiokafka { };
@ -5115,6 +5131,8 @@ in {
typesentry = callPackage ../development/python-modules/typesentry { };
typesystem = callPackage ../development/python-modules/typesystem { };
s3transfer = callPackage ../development/python-modules/s3transfer { };
seqdiag = callPackage ../development/python-modules/seqdiag { };
@ -6086,6 +6104,8 @@ in {
ofxtools = callPackage ../development/python-modules/ofxtools { };
orm = callPackage ../development/python-modules/orm { };
basemap = callPackage ../development/python-modules/basemap { };
dict2xml = callPackage ../development/python-modules/dict2xml { };