Merge pull request #73074 from obsidiansystems/python3-airflow

python3Packages.apache-airflow init 1.10.5
This commit is contained in:
Florian Klink 2019-11-18 14:28:40 +01:00 committed by GitHub
commit 93f5c85d66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 929 additions and 0 deletions

View File

@ -0,0 +1,188 @@
{ lib
, stdenv
, buildPythonPackage
, fetchPypi
, fetchFromGitHub
, fetchpatch
, alembic
, cached-property
, configparser
, colorlog
, croniter
, dill
, flask
, flask-appbuilder
, flask-admin
, flask-caching
, flask_login
, flask-swagger
, flask_wtf
, flask-bcrypt
, funcsigs
, future
, GitPython
, gunicorn
, iso8601
, json-merge-patch
, jinja2
, ldap3
, lxml
, lazy-object-proxy
, markdown
, pandas
, pendulum
, psutil
, pygments
, python-daemon
, python-dateutil
, requests
, setproctitle
, snakebite
, sqlalchemy
, tabulate
, tenacity
, termcolor
, text-unidecode
, thrift
, tzlocal
, unicodecsv
, werkzeug
, zope_deprecation
, enum34
, typing
, nose
, python
, isPy3k
}:
buildPythonPackage rec {
pname = "apache-airflow";
version = "1.10.5";
disabled = (!isPy3k);
src = fetchFromGitHub rec {
owner = "apache";
repo = "airflow";
rev = version;
sha256 = "14fmhfwx977c9jdb2kgm93i6acx43l45ggj30rb37r68pzpb6l6h";
};
patches = [
# Not yet accepted: https://github.com/apache/airflow/pull/6562
(fetchpatch {
name = "avoid-warning-from-abc.collections";
url = https://patch-diff.githubusercontent.com/raw/apache/airflow/pull/6562.patch;
sha256 = "0swpay1qlb7f9kgc56631s1qd9k82w4nw2ggvkm7jvxwf056k61z";
})
# Not yet accepted: https://github.com/apache/airflow/pull/6561
(fetchpatch {
name = "pendulum2-compatibility";
url = https://patch-diff.githubusercontent.com/raw/apache/airflow/pull/6561.patch;
sha256 = "17hw8qyd4zxvib9zwpbn32p99vmrdz294r31gnsbkkcl2y6h9knk";
})
];
propagatedBuildInputs = [
alembic
cached-property
colorlog
configparser
croniter
dill
flask
flask-admin
flask-appbuilder
flask-bcrypt
flask-caching
flask_login
flask-swagger
flask_wtf
funcsigs
future
GitPython
gunicorn
iso8601
json-merge-patch
jinja2
ldap3
lxml
lazy-object-proxy
markdown
pandas
pendulum
psutil
pygments
python-daemon
python-dateutil
requests
setproctitle
sqlalchemy
tabulate
tenacity
termcolor
text-unidecode
thrift
tzlocal
unicodecsv
werkzeug
zope_deprecation
];
checkInputs = [
snakebite
nose
];
postPatch = ''
substituteInPlace setup.py \
--replace "flask>=1.1.0, <2.0" "flask" \
--replace "flask-caching>=1.3.3, <1.4.0" "flask-caching" \
--replace "flask-appbuilder>=1.12.5, <2.0.0" "flask-appbuilder" \
--replace "pendulum==1.4.4" "pendulum" \
--replace "cached_property~=1.5" "cached_property" \
--replace "dill>=0.2.2, <0.3" "dill" \
--replace "configparser>=3.5.0, <3.6.0" "configparser" \
--replace "jinja2>=2.7.3, <=2.10.0" "jinja2" \
--replace "funcsigs==1.0.0" "funcsigs" \
--replace "flask-swagger==0.2.13" "flask-swagger" \
--replace "python-daemon>=2.1.1, <2.2" "python-daemon" \
--replace "alembic>=0.9, <1.0" "alembic" \
--replace "markdown>=2.5.2, <3.0" "markdown" \
--replace "future>=0.16.0, <0.17" "future" \
--replace "tenacity==4.12.0" "tenacity" \
--replace "text-unidecode==1.2" "text-unidecode" \
--replace "tzlocal>=1.4,<2.0.0" "tzlocal" \
--replace "sqlalchemy~=1.3" "sqlalchemy" \
--replace "werkzeug>=0.14.1, <0.15.0" "werkzeug"
# dumb-init is only needed for CI and Docker, not relevant for NixOS.
substituteInPlace setup.py \
--replace "'dumb-init>=1.2.2'," ""
substituteInPlace tests/core.py \
--replace "/bin/bash" "${stdenv.shell}"
'';
checkPhase = ''
export HOME=$(mktemp -d)
export AIRFLOW_HOME=$HOME
export AIRFLOW__CORE__UNIT_TEST_MODE=True
export AIRFLOW_DB="$HOME/airflow.db"
export PATH=$PATH:$out/bin
airflow version
airflow initdb
airflow resetdb -y
nosetests tests.core.CoreTest
## all tests
# nosetests --cover-package=airflow
'';
meta = with lib; {
description = "Programmatically author, schedule and monitor data pipelines";
homepage = http://airflow.apache.org/;
license = licenses.asl20;
maintainers = [ maintainers.costrouc maintainers.ingenieroariel ];
};
}

View File

@ -0,0 +1,36 @@
{ lib
, buildPythonPackage
, fetchPypi
, pyyaml
, prance
, marshmallow
, pytestCheckHook
, mock
, openapi-spec-validator
}:
buildPythonPackage rec {
pname = "apispec";
version = "3.1.0";
src = fetchPypi {
inherit pname version;
sha256 = "0rr32z9hbf8w4w1fs5gj2v0ixcq2vq7a3wssrlxagi5ii7ygap7y";
};
checkInputs = [
pyyaml
prance
openapi-spec-validator
marshmallow
mock
pytestCheckHook
];
meta = with lib; {
description = "A pluggable API specification generator. Currently supports the OpenAPI Specification (f.k.a. the Swagger specification";
homepage = https://github.com/marshmallow-code/apispec;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,37 @@
{ lib
, buildPythonPackage
, fetchPypi
, python-dateutil
, pytest
, pytz
}:
buildPythonPackage rec {
pname = "croniter";
version = "0.3.30";
src = fetchPypi {
inherit pname version;
sha256 = "538adeb3a7f7816c3cdec6db974c441620d764c25ff4ed0146ee7296b8a50590";
};
propagatedBuildInputs = [
python-dateutil
];
checkInputs = [
pytest
pytz
];
checkPhase = ''
pytest src/croniter
'';
meta = with lib; {
description = "croniter provides iteration for datetime object with cron like format";
homepage = http://github.com/kiorky/croniter;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,71 @@
{ lib
, buildPythonPackage
, fetchPypi
, nose
, pillow
, mongoengine
, pymongo
, wtf-peewee
, sqlalchemy
, sqlalchemy-citext
, flask-mongoengine
, flask_sqlalchemy
, flask-babelex
, shapely
, geoalchemy2
, psycopg2
, flask
, wtforms
, isPy27
, enum34
}:
buildPythonPackage rec {
pname = "flask-admin";
version = "1.5.3";
src = fetchPypi {
pname = "Flask-Admin";
inherit version;
sha256 = "ca0be6ec11a6913b73f656c65c444ae5be416c57c75638dd3199376ce6bc7422";
};
checkInputs = [
nose
pillow
mongoengine
pymongo
wtf-peewee
sqlalchemy
sqlalchemy-citext
flask-mongoengine
flask_sqlalchemy
flask-babelex
shapely
geoalchemy2
psycopg2
];
propagatedBuildInputs = [
flask
wtforms
] ++ lib.optionals isPy27 [ enum34 ];
checkPhase = ''
# disable tests that require mongodb, postresql
nosetests \
-e "mongoengine" \
-e "pymongo" \
-e "test_form_upload" \
-e "test_postgres" \
-e "geoa" \
flask_admin/tests
'';
meta = with lib; {
description = "Simple and extensible admin interface framework for Flask";
homepage = https://github.com/flask-admin/flask-admin/;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,80 @@
{ lib
, buildPythonPackage
, fetchPypi
, nose
, apispec
, colorama
, click
, flask
, flask-babel
, flask_login
, flask-openid
, flask_sqlalchemy
, flask_wtf
, flask-jwt-extended
, jsonschema
, marshmallow
, marshmallow-enum
, marshmallow-sqlalchemy
, python-dateutil
, prison
, pyjwt
, pyyaml
, sqlalchemy-utils
}:
buildPythonPackage rec {
pname = "flask-appbuilder";
version = "2.1.6";
src = fetchPypi {
pname = "Flask-AppBuilder";
inherit version;
sha256 = "a37d7d6a62407a2e0975af5305c795f2fb5c06ecc34e3cf64659d083b1b2dd5f";
};
checkInputs = [
nose
];
propagatedBuildInputs = [
apispec
colorama
click
flask
flask-babel
flask_login
flask-openid
flask_sqlalchemy
flask_wtf
flask-jwt-extended
jsonschema
marshmallow
marshmallow-enum
marshmallow-sqlalchemy
python-dateutil
prison
pyjwt
sqlalchemy-utils
pyyaml
];
postPatch = ''
substituteInPlace setup.py \
--replace "jsonschema>=3.0.1<4" "jsonschema" \
--replace "marshmallow>=2.18.0,<2.20" "marshmallow" \
--replace "PyJWT>=1.7.1" "PyJWT" \
--replace "Flask-SQLAlchemy>=2.4,<3" "Flask-SQLAlchemy" \
--replace "Flask-JWT-Extended>=3.18,<4" "Flask-JWT-Extended"
'';
# majority of tests require network access or mongo
doCheck = false;
meta = with lib; {
description = "Simple and rapid application development framework, built on top of Flask";
homepage = https://github.com/dpgaspar/flask-appbuilder/;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,47 @@
{ lib
, buildPythonPackage
, fetchPypi
, flask
, Babel
, speaklater
, jinja2
, pytest
}:
buildPythonPackage rec {
pname = "flask-babelex";
version = "0.9.3";
src = fetchPypi {
inherit version;
pname = "Flask-BabelEx";
sha256 = "cf79cdedb5ce860166120136b0e059e9d97b8df07a3bc2411f6243de04b754b4";
};
propagatedBuildInputs = [
flask
Babel
speaklater
jinja2
];
checkInputs = [
pytest
];
checkPhase = ''
# Disabled 3 tests failing due to string representations of dates:
# Like "12. April 2010 um 15:46:00 MESZ" != 12. "April 2010 15:46:00 MESZ"
pytest tests/tests.py -k "not test_init_app \
and not test_custom_locale_selector \
and not test_basics"
'';
meta = with lib; {
description = "Adds i18n/l10n support to Flask applications";
homepage = http://github.com/mrjoes/flask-babelex;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,35 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, flask
, bcrypt
, python
}:
buildPythonPackage rec {
pname = "flask-bcrypt";
version = "0.7.1";
src = fetchFromGitHub {
owner = "maxcountryman";
repo = pname;
rev = version;
sha256 = "0036gag3nj7fzib23lbbpwhlrn1s0kkrfwk5pd90y4cjcfqh8z9x";
};
propagatedBuildInputs = [
flask
bcrypt
];
checkPhase = ''
${python.interpreter} test_bcrypt.py
'';
meta = with lib; {
description = "Brcrypt hashing for Flask";
homepage = https://github.com/maxcountryman/flask-bcrypt;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,47 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, flask
, flask_wtf
, mongoengine
, six
, nose
, rednose
, coverage
}:
buildPythonPackage rec {
pname = "flask-mongoengine";
version = "0.9.5";
src = fetchFromGitHub {
owner = "MongoEngine";
repo = pname;
rev = "v${version}";
sha256 = "05hfddf1dm594wnjyqhj0zmjfsf1kpmx1frjwhypgzx4hf62qcmr";
};
propagatedBuildInputs = [
flask
flask_wtf
mongoengine
six
];
# they set test requirements to setup_requirements...
buildInputs = [
nose
rednose
coverage
];
# tests require working mongodb connection
doCheck = false;
meta = with lib; {
description = "Flask-MongoEngine is a Flask extension that provides integration with MongoEngine and WTF model forms";
homepage = https://github.com/mongoengine/flask-mongoengine;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,34 @@
{ lib
, buildPythonPackage
, fetchPypi
, flask
, python3-openid
, isPy3k
}:
buildPythonPackage rec {
pname = "flask-openid";
version = "1.2.5";
disable = !isPy3k;
src = fetchPypi {
pname = "Flask-OpenID";
inherit version;
sha256 = "5a8ffe1c8c0ad1cc1f5030e1223ea27f8861ee0215a2a58a528cc61379e5ccab";
};
propagatedBuildInputs = [
flask
python3-openid
];
# no tests for repo...
doCheck = false;
meta = with lib; {
description = "OpenID support for Flask";
homepage = http://github.com/mitsuhiko/flask-openid/;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,32 @@
{ lib
, buildPythonPackage
, fetchPypi
, fetchpatch
}:
buildPythonPackage rec {
pname = "json-merge-patch";
version = "0.2";
src = fetchPypi {
inherit pname version;
sha256 = "09898b6d427c08754e2a97c709cf2dfd7e28bd10c5683a538914975eab778d39";
};
patches = [
# This prevented tests from running (was using a relative import)
# https://github.com/OpenDataServices/json-merge-patch/pull/1
(fetchpatch {
name = "fully-qualified-json-merge-patch-import-on-tests";
url = https://patch-diff.githubusercontent.com/raw/OpenDataServices/json-merge-patch/pull/1.patch;
sha256 = "1k6xsrxsmz03nwcqsf4gf0zsfnl2r20n83npic8z6bqlpl4lidl4";
})
];
meta = with lib; {
description = "JSON Merge Patch library";
homepage = https://github.com/open-contracting/json-merge-patch;
license = licenses.bsd3;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,42 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, marshmallow
, pytestCheckHook
, isPy27
, enum34
, pytest-flake8
}:
buildPythonPackage rec {
pname = "marshmallow-enum";
version = "1.5.1";
src = fetchFromGitHub {
owner = "justanr";
repo = "marshmallow_enum";
rev = "v${version}";
sha256 = "1ihrcmyfjabivg6hc44i59hnw5ijlg1byv3zs1rqxfynp8xr7398";
};
propagatedBuildInputs = [
marshmallow
] ++ lib.optionals isPy27 [ enum34 ];
checkInputs = [
pytestCheckHook
pytest-flake8
];
disabledTests = [
"test_custom_error_in_deserialize_by_name"
"test_custom_error_in_deserialize_by_value"
];
meta = with lib; {
description = "Enum field for Marshmallow";
homepage = https://github.com/justanr/marshmallow_enum;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,49 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, pymongo
, six
, blinker
, nose
, pillow
, coverage
}:
buildPythonPackage rec {
pname = "mongoengine";
version = "0.18.2";
src = fetchFromGitHub {
owner = "MongoEngine";
repo = pname;
rev = "v${version}";
sha256 = "0gx091h9rcykdj233srrl3dfc0ly52p6r4qc9ah6z0f694kmqj1v";
};
propagatedBuildInputs = [
pymongo
six
];
checkInputs = [
nose
pillow
coverage
blinker
];
postPatch = ''
substituteInPlace setup.py \
--replace "coverage==4.2" "coverage"
'';
# tests require mongodb running in background
doCheck = false;
meta = with lib; {
description = "MongoEngine is a Python Object-Document Mapper for working with MongoDB";
homepage = http://mongoengine.org/;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,57 @@
{ lib
, buildPythonPackage
, fetchPypi
, chardet
, pyyaml
, requests
, six
, semver
, pytest
, pytestcov
, pytestrunner
, sphinx
, openapi-spec-validator
}:
buildPythonPackage rec {
pname = "prance";
version = "0.15.0";
src = fetchPypi {
inherit pname version;
sha256 = "793f96dc8bba73bf4342f57b3570f5e0a94c30e60f0c802a2aaa302759dd8610";
};
buildInputs = [
pytestrunner
];
propagatedBuildInputs = [
chardet
pyyaml
requests
six
semver
];
checkInputs = [
pytest
pytestcov
openapi-spec-validator
];
postPatch = ''
substituteInPlace setup.py \
--replace "tests_require = dev_require," "tests_require = None,"
'';
# many tests require network connection
doCheck = false;
meta = with lib; {
description = "Resolving Swagger/OpenAPI 2.0 and 3.0.0 Parser";
homepage = https://github.com/jfinkhaeuser/prance;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,33 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, six
, nose
}:
buildPythonPackage rec {
pname = "prison";
version = "0.1.2";
src = fetchFromGitHub {
owner = "betodealmeida";
repo = "python-rison";
rev = version;
sha256 = "14vb468iznf9416z993bbqihywp9ibyslw5vp67wfr200zyxjwak";
};
propagatedBuildInputs = [
six
];
checkInputs = [
nose
];
meta = with lib; {
description = "Rison encoder/decoder";
homepage = https://github.com/betodealmeida/python-rison;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,41 @@
{ lib
, buildPythonPackage
, fetchPypi
, tox
, virtualenv
, protobuf
}:
buildPythonPackage rec {
pname = "snakebite";
version = "2.11.0";
src = fetchPypi {
inherit pname version;
sha256 = "085238b4944cb9c658ee62d5794de936ac3d0c337c504b2cc86424a205ae978a";
};
checkInputs = [
tox
virtualenv
];
propagatedBuildInputs = [
protobuf
];
postPatch = ''
substituteInPlace setup.py \
--replace "'argparse'" ""
'';
# tests require hadoop hdfs
doCheck = false;
meta = with lib; {
description = "Pure Python HDFS client";
homepage = http://github.com/spotify/snakebite;
license = licenses.asl20;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,31 @@
{ lib
, buildPythonPackage
, fetchPypi
, sqlalchemy
, python
}:
buildPythonPackage rec {
pname = "sqlalchemy-citext";
version = "1.3-0";
src = fetchPypi {
inherit pname version;
sha256 = "7d7343037a35153d6f94c3c2f6baf391f88a57651c3bde5d6749d216859ae4c5";
};
propagatedBuildInputs = [
sqlalchemy
];
checkPhase = ''
${python.interpreter} tests/test_citext.py
'';
meta = with lib; {
description = "A sqlalchemy plugin that allows postgres use of CITEXT";
homepage = https://github.com/mahmoudimus/sqlalchemy-citext;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -0,0 +1,33 @@
{ lib
, buildPythonPackage
, fetchPypi
, peewee
, wtforms
, python
}:
buildPythonPackage rec {
pname = "wtf-peewee";
version = "3.0.0";
src = fetchPypi {
inherit pname version;
sha256 = "acd05d136c8595da3327fcf9176fa85fdcec1f2aac51d235e46e6fc7a0871283";
};
propagatedBuildInputs = [
peewee
wtforms
];
checkPhase = ''
${python.interpreter} runtests.py
'';
meta = with lib; {
description = "WTForms integration for peewee models";
homepage = https://github.com/coleifer/wtf-peewee/;
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
};
}

View File

@ -559,6 +559,8 @@ in
airfield = callPackage ../tools/networking/airfield { };
apache-airflow = with python3.pkgs; toPythonApplication apache-airflow;
airsonic = callPackage ../servers/misc/airsonic { };
airspy = callPackage ../applications/radio/airspy { };

View File

@ -1436,8 +1436,12 @@ in {
antlr4-python3-runtime = callPackage ../development/python-modules/antlr4-python3-runtime { antlr4 = pkgs.antlr4; };
apache-airflow = callPackage ../development/python-modules/apache-airflow { };
apipkg = callPackage ../development/python-modules/apipkg {};
apispec = callPackage ../development/python-modules/apispec {};
appdirs = callPackage ../development/python-modules/appdirs { };
appleseed = disabledIf isPy3k
@ -1673,6 +1677,8 @@ in {
crc16 = callPackage ../development/python-modules/crc16 { };
croniter = callPackage ../development/python-modules/croniter { };
csscompressor = callPackage ../development/python-modules/csscompressor {};
csvs-to-sqlite = callPackage ../development/python-modules/csvs-to-sqlite { };
@ -1974,6 +1980,8 @@ in {
jsonlines = callPackage ../development/python-modules/jsonlines { };
json-merge-patch = callPackage ../development/python-modules/json-merge-patch { };
jsonrpc-async = callPackage ../development/python-modules/jsonrpc-async { };
jsonrpc-base = callPackage ../development/python-modules/jsonrpc-base { };
@ -3193,6 +3201,10 @@ in {
flask = callPackage ../development/python-modules/flask { };
flask-admin = callPackage ../development/python-modules/flask-admin { };
flask-appbuilder = callPackage ../development/python-modules/flask-appbuilder { };
flask-api = callPackage ../development/python-modules/flask-api { };
flask_assets = callPackage ../development/python-modules/flask-assets { };
@ -3201,6 +3213,10 @@ in {
flask-babel = callPackage ../development/python-modules/flask-babel { };
flask-babelex = callPackage ../development/python-modules/flask-babelex { };
flask-bcrypt = callPackage ../development/python-modules/flask-bcrypt { };
flask-bootstrap = callPackage ../development/python-modules/flask-bootstrap { };
flask-caching = callPackage ../development/python-modules/flask-caching { };
@ -3227,6 +3243,10 @@ in {
flask_migrate = callPackage ../development/python-modules/flask-migrate { };
flask-mongoengine = callPackage ../development/python-modules/flask-mongoengine { };
flask-openid = callPackage ../development/python-modules/flask-openid { };
flask-paginate = callPackage ../development/python-modules/flask-paginate { };
flask_principal = callPackage ../development/python-modules/flask-principal { };
@ -3253,6 +3273,8 @@ in {
wtforms = callPackage ../development/python-modules/wtforms { };
wtf-peewee = callPackage ../development/python-modules/wtf-peewee { };
graph-tool = callPackage ../development/python-modules/graph-tool/2.x.x.nix {
inherit (pkgs) pkgconfig;
};
@ -3824,6 +3846,8 @@ in {
marshmallow = callPackage ../development/python-modules/marshmallow { };
marshmallow-enum = callPackage ../development/python-modules/marshmallow-enum { };
marshmallow-sqlalchemy = callPackage ../development/python-modules/marshmallow-sqlalchemy { };
manuel = callPackage ../development/python-modules/manuel { };
@ -4419,6 +4443,8 @@ in {
praw = if isPy3k then callPackage ../development/python-modules/praw { }
else callPackage ../development/python-modules/praw/6.3.nix { };
prance = callPackage ../development/python-modules/prance { };
prawcore = callPackage ../development/python-modules/prawcore { };
@ -4478,6 +4504,8 @@ in {
mongodict = callPackage ../development/python-modules/mongodict { };
mongoengine = callPackage ../development/python-modules/mongoengine { };
repoze_who = callPackage ../development/python-modules/repoze_who { };
vobject = callPackage ../development/python-modules/vobject { };
@ -5123,6 +5151,8 @@ in {
sqlalchemy = callPackage ../development/python-modules/sqlalchemy { };
sqlalchemy-citext = callPackage ../development/python-modules/sqlalchemy-citext { };
sqlalchemy_migrate = callPackage ../development/python-modules/sqlalchemy-migrate { };
sqlalchemy-utils = callPackage ../development/python-modules/sqlalchemy-utils { };
@ -5839,6 +5869,8 @@ in {
toposort = callPackage ../development/python-modules/toposort { };
snakebite = callPackage ../development/python-modules/snakebite { };
snapperGUI = callPackage ../development/python-modules/snappergui { };
dm-sonnet = callPackage ../development/python-modules/dm-sonnet { };
@ -6199,6 +6231,8 @@ in {
preggy = callPackage ../development/python-modules/preggy { };
prison = callPackage ../development/python-modules/prison { };
pytoml = callPackage ../development/python-modules/pytoml { };
pypandoc = callPackage ../development/python-modules/pypandoc { };