about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/python-modules
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2021-04-09 18:28:16 +0000
committerAlyssa Ross <hi@alyssa.is>2021-04-12 18:46:15 +0000
commitfd2e737e0678ee7d8081baef05b305146a2c0034 (patch)
treeac3e9b27576a0382335532d126f9a66d486bc638 /nixpkgs/pkgs/development/python-modules
parentcc207d720b6aa836e256c1ee9842bc739e630a8a (diff)
parent9e377a6ce42dccd9b624ae4ce8f978dc892ba0e2 (diff)
downloadnixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.gz
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.bz2
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.lz
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.xz
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.zst
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.zip
Merge remote-tracking branch 'nixpkgs/nixos-unstable'
Diffstat (limited to 'nixpkgs/pkgs/development/python-modules')
-rw-r--r--nixpkgs/pkgs/development/python-modules/APScheduler/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/Cython/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/HAP-python/default.nix61
-rw-r--r--nixpkgs/pkgs/development/python-modules/Mako/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/Nikola/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/PyRMVtransport/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/Pygments/2_5.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/Pygments/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/Rtree/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/WSME/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/Wand/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/accupy/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/accuweather/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/acme/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/adafruit-platformdetect/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/adal/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/adb-enhanced/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/adb-shell/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/adblock/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/addic7ed-cli/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/adext/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/adguardhome/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/afdko/default.nix11
-rw-r--r--nixpkgs/pkgs/development/python-modules/agate-sql/default.nix53
-rw-r--r--nixpkgs/pkgs/development/python-modules/ailment/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioambient/default.nix57
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioasuswrt/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiobotocore/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiocache/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiodiscover/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioesphomeapi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioflo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioguardian/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiohttp/default.nix75
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiolyric/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiomultiprocess/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/aionotion/default.nix51
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiopylgtv/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiorecollect/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioresponses/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiorpcx/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiorun/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/aioshelly/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiosmb/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiosmtpd/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiosqlite/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/aiostream/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/airly/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/ajsonrpc/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/alarmdecoder/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/alerta-server/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/alerta/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/alot/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/altair/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/android-backup/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/androidtv/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/aniso8601/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/ansible-lint/default.nix67
-rw-r--r--nixpkgs/pkgs/development/python-modules/ansible-runner/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/anyio/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/apache-airflow/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/apispec/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/appnope/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/apprise/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/apptools/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/aqualogic/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/archinfo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/argon2_cffi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/arrayqueues/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/asdf/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/ase/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/asteval/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/astroid/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/asttokens/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/async-dns/default.nix52
-rw-r--r--nixpkgs/pkgs/development/python-modules/async-upnp-client/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/asyncio-dgram/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/asyncio-nats-client/default.nix50
-rw-r--r--nixpkgs/pkgs/development/python-modules/asyncio_mqtt/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/asyncpg/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/asyncwhois/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/asysocks/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/atpublic/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/auroranoaa/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/autopep8/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/avro-python3/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/avro/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/awesomeversion/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/awkward/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/awkward0/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/aws-adfs/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/awslambdaric/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/axis/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-core/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-eventgrid/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-compute/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-cosmosdb/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-hanaonazure/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-iotcentral/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-kusto/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-marketplaceordering/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-media/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-netapp/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-network/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-resource/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-storage/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-mgmt-web/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-multiapi-storage/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-servicebus/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-storage-blob/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-synapse-accesscontrol/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-synapse-artifacts/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/azure-synapse-spark/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/backports_lzma/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/backports_ssl_match_hostname/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/batchgenerators/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/bayespy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/beaker/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/beancount/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/bellows/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/beniget/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/binwalk/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/bip_utils/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/bitarray/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/bitbox02/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/bitlist/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/bleach/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/bleak/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/blinker/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/bokeh/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/boltons/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/boto3/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/botocore/default.nix17
-rw-r--r--nixpkgs/pkgs/development/python-modules/bracex/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/braintree/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/breathe/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/broadlink/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/brother/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/build/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/buildbot/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/buildbot/pkg.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/buildbot/plugins.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/buildbot/worker.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/buildout-nix/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/buildout/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/bx-python/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cachetools/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/cadquery/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/cairocffi/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/cairocffi/generic.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/cairosvg/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/caldav/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/canopen/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/capstone/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/cartopy/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/casbin/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cbor2/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/celery/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/censys/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/certbot/default.nix17
-rw-r--r--nixpkgs/pkgs/development/python-modules/certvalidator/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/cffi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/chalice/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/check-manifest/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/cheroot/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/cherrypy/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/chirpstack-api/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/cirq/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/ciscomobilityexpress/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/ckcc-protocol/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/claripy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cliff/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/clifford/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/clldutils/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cmarkgfm/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/cmigemo/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/cnvkit/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/codecov/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/codespell/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/coinmarketcap/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/colorcet/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/coloredlogs/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/colorlog/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/configargparse/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/configshell/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/construct/2.10.54.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/convertdate/2.2.x.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/convertdate/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/cornice/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/cot/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/coverage/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cozy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/crate/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/croniter/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/cryptography/3.3.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cryptography/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/cryptography/vectors-3.3.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/cryptography/vectors.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/crytic-compile/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cssutils/default.nix46
-rw-r--r--nixpkgs/pkgs/development/python-modules/csvs-to-sqlite/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/csvw/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cufflinks/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/cupy/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/curio/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/cvxopt/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cvxpy/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/cx_freeze/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/cypari2/default.nix17
-rw-r--r--nixpkgs/pkgs/development/python-modules/cysignals/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask-gateway-server/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask-image/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask-jobqueue/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask-ml/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask-mpi/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask-xgboost/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/dask/default.nix42
-rw-r--r--nixpkgs/pkgs/development/python-modules/databricks-cli/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/databricks-connect/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/datadog/default.nix48
-rw-r--r--nixpkgs/pkgs/development/python-modules/datasets/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/datashader/default.nix51
-rw-r--r--nixpkgs/pkgs/development/python-modules/dateparser/0.x.nix55
-rw-r--r--nixpkgs/pkgs/development/python-modules/dateparser/default.nix68
-rw-r--r--nixpkgs/pkgs/development/python-modules/dateutil/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/dbf/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/ddt/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/deepmerge/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/deeptoolsintervals/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/defcon/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/defusedxml/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/deprecated/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/descartes/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/desktop-notifier/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/devolo-home-control-api/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/dftfit/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/dicom2nifti/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/diff_cover/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/digi-xbee/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/discordpy/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/diskcache/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/distributed/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-auth-ldap/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-cacheops/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-extensions/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-q/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django-simple-captcha/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django/3.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django_contrib_comments/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/django_evolution/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/dlib/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/docker/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/docloud/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/docplex/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/docrep/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/docx2python/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/dopy/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/dpkt/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/drf-yasg/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/drivelib/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/duckdb/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/dulwich/0_19.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/dulwich/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/dwdwfsapi/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/easygui/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/easywatch/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/editdistance/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/elementpath/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/elmax/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/enrich/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/entrance/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/envisage/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/etebase/default.nix57
-rw-r--r--nixpkgs/pkgs/development/python-modules/eve/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/eventlet/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/evohome-async/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/exdown/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/execnet/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/executing/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/expiringdict/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/exrex/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/faadelays/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/fakeredis/default.nix51
-rw-r--r--nixpkgs/pkgs/development/python-modules/fastparquet/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/fe25519/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/fido2/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/fints/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/fiona/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/fipy/default.nix65
-rw-r--r--nixpkgs/pkgs/development/python-modules/fixtures/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/flammkuchen/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-compress/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-jwt-extended/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-limiter/default.nix52
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-migrate/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-seasurf/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/flask-sslify/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/flower/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/flowlogs_reader/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/fluent-logger/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/fontparts/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/fonttools/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/forbiddenfruit/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/fountains/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/freebox-api/default.nix54
-rw-r--r--nixpkgs/pkgs/development/python-modules/freezegun/0.3.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/freezegun/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/fritzconnection/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/fs/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/ftfy/default.nix17
-rw-r--r--nixpkgs/pkgs/development/python-modules/ftputil/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/furl/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/fuzzyfinder/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/gdown/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/gdrivefs/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/ge25519/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/geoip2/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/getmac/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/geventhttpclient/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/gipc/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/github3_py/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/glances-api/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/glasgow/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/glymur/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/gmusicapi/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/goobook/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-api-core/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-auth-httplib2/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-auth-oauthlib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-auth/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-asset/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-automl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-bigquery-datatransfer/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-bigquery/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-bigtable/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-container/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-core/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-dataproc/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-dns/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-error-reporting/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-firestore/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-logging/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-monitoring/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-org-policy/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-os-config/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-pubsub/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-redis/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-secret-manager/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-spanner/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-speech/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-storage/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-tasks/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-testutils/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-texttospeech/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-translate/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-videointelligence/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-vision/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-cloud-websecurityscanner/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-i18n-address/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-music-proto/default.nix48
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-music-utils/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/google-music/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/googleapis-common-protos/default.nix (renamed from nixpkgs/pkgs/development/python-modules/googleapis_common_protos/default.nix)5
-rw-r--r--nixpkgs/pkgs/development/python-modules/googlemaps/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/gpsoauth/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/gradient-utils/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/gradient/default.nix59
-rw-r--r--nixpkgs/pkgs/development/python-modules/gradient_statsd/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/graphene/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/graphite-web/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/graphql-relay/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/graphtage/default.nix48
-rw-r--r--nixpkgs/pkgs/development/python-modules/graspologic/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/gremlinpython/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/grpc_google_iam_v1/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/grpcio-tools/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/grpcio/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/gsd/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/gspread/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/gssapi/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/guppy3/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/gviz-api/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/h3/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hass-nabucasa/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/hatasmota/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hcloud/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hdbscan/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/hdmedians/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hetzner/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hg-evolve/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hickle/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/holidays/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/holoviews/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/homepluscontrol/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/howdoi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hstspreload/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/httpbin/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/httpcore/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/httplib2/default.nix50
-rw-r--r--nixpkgs/pkgs/development/python-modules/httpretty/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/httpsig/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/httpx/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/huggingface-hub/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/humanfriendly/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/humanize/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/hupper/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/hvac/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hvplot/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/hwi/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/hypothesis/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/hypothesmith/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/iaqualink/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/icmplib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/identify/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/ijson/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/image-match/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/imagecorruptions/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/imap-tools/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/imbalanced-learn/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/iminuit/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/immutables/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/importlib-resources/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/incomfort-client/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/inflect/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/influxdb-client/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/influxdb/default.nix54
-rw-r--r--nixpkgs/pkgs/development/python-modules/intake/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/intelhex/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/internetarchive/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/ipykernel/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/ipython/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/ircrobots/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/iso8601/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jabberbot/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/jaraco_classes/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/jc/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jellyfin-apiclient-python/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/jenkins-job-builder/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jinja2/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/joblib/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/johnnycanencrypt/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/josepy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jq/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/jsbeautifier/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/json-rpc/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/json5/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/jsonpath-ng/default.nix42
-rw-r--r--nixpkgs/pkgs/development/python-modules/jsonpickle/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyter-packaging/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyter_client/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyter_console/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyter_core/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyter_server/default.nix75
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyterhub/default.nix99
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyterlab/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/jupyterlab_server/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/kaggle/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/keep/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/kerberos/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/kivy-garden/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/kivy/default.nix68
-rw-r--r--nixpkgs/pkgs/development/python-modules/knack/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/kombu/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/labelbox/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/labgrid/0001-serialdriver-remove-pyserial-version-check.patch33
-rw-r--r--nixpkgs/pkgs/development/python-modules/labgrid/default.nix80
-rw-r--r--nixpkgs/pkgs/development/python-modules/labmath/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/lammps-cython/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/lark-parser/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/launchpadlib/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/lazr-restfulclient/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/ldap/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/ldaptor/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/ledgerblue/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/lektor/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/libagent/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/libcst/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/libnacl/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/librouteros/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/libusb1/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/libversion/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/lightgbm/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/lightparam/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/lima/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/limnoria/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/linode-api/default.nix53
-rw-r--r--nixpkgs/pkgs/development/python-modules/livestreamer/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/llfuse/default.nix57
-rw-r--r--nixpkgs/pkgs/development/python-modules/llvmlite/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/localimport/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/locket/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/loguru/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/lsassy/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/luftdaten/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/lupa/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/lxml/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/maestral/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/makefun/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/managesieve/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/marisa-trie/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/mat2/default.nix98
-rw-r--r--nixpkgs/pkgs/development/python-modules/mat2/executable-name.patch13
-rw-r--r--nixpkgs/pkgs/development/python-modules/mat2/paths.patch111
-rw-r--r--nixpkgs/pkgs/development/python-modules/mat2/tests.patch18
-rw-r--r--nixpkgs/pkgs/development/python-modules/matplotlib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mautrix/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/mcstatus/default.nix49
-rw-r--r--nixpkgs/pkgs/development/python-modules/mergedeep/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/meshio/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/metar/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/micawber/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/milc/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/minidump/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/minio/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/mitmproxy/default.nix79
-rw-r--r--nixpkgs/pkgs/development/python-modules/mlxtend/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/mmh3/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mock/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mocket/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/modeled/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/moderngl_window/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/moinmoin/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/more-itertools/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/moto/default.nix219
-rw-r--r--nixpkgs/pkgs/development/python-modules/mpi4py/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/mplfinance/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/mpv/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/msal/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/msldap/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/msrest/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mullvad-api/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/murmurhash/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/mxnet/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/myfitnesspal/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/myjwt/default.nix58
-rw-r--r--nixpkgs/pkgs/development/python-modules/myjwt/pinning.patch21
-rw-r--r--nixpkgs/pkgs/development/python-modules/mypy-protobuf/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/mypy/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/nats-python/default.nix46
-rw-r--r--nixpkgs/pkgs/development/python-modules/natsort/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbclassic/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbclient/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbconvert/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbconvert/templates.patch12
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbdime/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbformat/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbsmoke/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/nbsphinx/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/ndjson/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/netcdf4/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/netdata/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nodepy-runtime/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/nose-timer/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/notebook/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/notify/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/ntc-templates/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/ntlm-auth/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/numba/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/numcodecs/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/numpy-stl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/numpy/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/numtraits/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/nunavut/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/nvchecker/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/oauthenticator/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/objgraph/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/onnx/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/openhomedevice/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/openpyxl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/openrazer/common.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/openrouteservice/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/opensensemap-api/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/openwrt-luci-rpc/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/openwrt-ubus-rpc/default.nix34
-rwxr-xr-xnixpkgs/pkgs/development/python-modules/osmnx/default.nix11
-rw-r--r--nixpkgs/pkgs/development/python-modules/osmpythontools/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/ovito/default.nix42
-rw-r--r--nixpkgs/pkgs/development/python-modules/packageurl-python/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/packaging/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/pandas-datareader/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/pandas/default.nix67
-rw-r--r--nixpkgs/pkgs/development/python-modules/papermill/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/papis/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/param/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/parameterized/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/parso/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/parts/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/pecan/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/percol/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/pex/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pg8000/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/pglast/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/phonemizer/backend-paths.patch21
-rw-r--r--nixpkgs/pkgs/development/python-modules/phonemizer/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/phonenumbers/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/piep/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pikepdf/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pillow-simd/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/pillow/6.nix75
-rw-r--r--nixpkgs/pkgs/development/python-modules/pillow/default.nix73
-rw-r--r--nixpkgs/pkgs/development/python-modules/pillow/generic.nix76
-rw-r--r--nixpkgs/pkgs/development/python-modules/pims/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/pip/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pipx/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pivy/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pkgconfig/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pkutils/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/pleroma-bot/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/plexapi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/plotly/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/plugwise/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/plyfile/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/poetry-core/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pook/default.nix57
-rw-r--r--nixpkgs/pkgs/development/python-modules/poppler-qt5/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/portend/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/powerline/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pplpy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/prance/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/praw/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/prawcore/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pre-commit/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch14
-rw-r--r--nixpkgs/pkgs/development/python-modules/preshed/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/privacyidea/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/privacyidea/fix-tests.patch28
-rw-r--r--nixpkgs/pkgs/development/python-modules/promise/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/prompt_toolkit/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/proto-plus/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/protobuf/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/protobuf3-to-dict/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/proxmoxer/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/psautohint/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/psd-tools/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/psutil/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/ptpython/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/pubnub/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/pure-cdb/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/py-cid/default.nix54
-rw-r--r--nixpkgs/pkgs/development/python-modules/py-cpuinfo/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/py-multiaddr/default.nix51
-rw-r--r--nixpkgs/pkgs/development/python-modules/py-sonic/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyTelegramBotAPI/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyairvisual/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyalmond/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyarrow/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyatv/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyaxmlparser/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/pybids/default.nix11
-rw-r--r--nixpkgs/pkgs/development/python-modules/pybigwig/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pycdio/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pycec/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/pychannels/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pychromecast/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pycryptodomex/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydaikin/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydantic/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydash/0001-Only-build-unit-tests.patch30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydash/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydeconz/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydot/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pydrive/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyeight/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyelftools/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyexcel-xls/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyfakefs/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyfftw/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyflume/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyflunearyou/default.nix56
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyfma/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/pygraphviz/default.nix42
-rw-r--r--nixpkgs/pkgs/development/python-modules/pygraphviz/graphviz-path.patch13
-rw-r--r--nixpkgs/pkgs/development/python-modules/pygraphviz/path.patch13
-rw-r--r--nixpkgs/pkgs/development/python-modules/pygtrie/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyhaversion/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyicu/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyinsteon/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyiqvia/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pykmtronic/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/pykodi/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/pylast/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/pylint/default.nix71
-rw-r--r--nixpkgs/pkgs/development/python-modules/pylitterbot/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyls-mypy/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyls-spyder/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pylutron/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymatgen-lammps/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymatgen/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymazda/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymediaroom/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymeeus/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymemcache/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymfy/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymitv/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymodbus/default.nix15
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymongo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymsteams/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymumble/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymyq/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pymysensors/default.nix55
-rw-r--r--nixpkgs/pkgs/development/python-modules/pynanoleaf/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pynetdicom/default.nix63
-rw-r--r--nixpkgs/pkgs/development/python-modules/pynmea2/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/pynput/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pynws/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyobjc/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyopenssl/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyopenuv/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyosmium/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyowm/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyparted/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pypcap/default.nix56
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyplaato/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/pypoppler/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyppeteer/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pypugjs/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pypykatz/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyqt/5.x.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyqtgraph/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyqtwebengine/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyquery/default.nix17
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyradios/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_beaker/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_chameleon/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_exclog/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_hawkauth/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_jinja2/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_mako/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyramid_multiauth/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyregion/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyrisco/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyrituals/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyro-ppl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyroma/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysam/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyscss/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyserial/001-rfc2217-only-negotiate-on-value-change.patch42
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyserial/002-rfc2217-timeout-setter-for-rfc2217.patch42
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyserial/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyshark/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyshp/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyside/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyside/shiboken.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyside2-tools/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyside2/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysma/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysmappee/default.nix42
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysmbc/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysonos/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyspark/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pystray/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/pysvn/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyswitchbot/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytankerkoenig/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyte/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytenable/default.nix66
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytesseract/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-aiohttp/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-ansible/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-arraydiff/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-astropy-header/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-astropy/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-bdd/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-benchmark/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-black/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-catchlog/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-check/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-cid/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-click/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-dependency/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-doctestplus/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-error-for-skips/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-factoryboy/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-filter-subpackage/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-flake8/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-flakes/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-flask/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-forked/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-freezegun/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-html/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-httpx/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-metadata/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-mock/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-mypy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-openfiles/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-order/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-pylint/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-pythonpath/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-qt/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-raises/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-random-order/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-remotedata/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-rerunfailures/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-sanic/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-services/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-shutil/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-snapshot/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-socket/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-subtests/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-sugar/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-testmon/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-timeout/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-tornasync/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-trio/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-twisted/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-vcr/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-warnings/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-watch/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-xdist/default.nix46
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-xprocess/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest-xvfb/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytest/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-awair/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-binance/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-box/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-didl-lite/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-dotenv/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-engineio/3.nix67
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-gammu/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-igraph/default.nix52
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-levenshtein/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-ly/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-magic/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-magic/libmagic-path.patch17
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-miio/default.nix69
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-nmap/default.nix38
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-olm/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-opendata-transport/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-prctl/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch34
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-rtmidi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-simple-hipchat/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-smarttub/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-socketio/4.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-socketio/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-telegram-bot/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-twitch-client/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/python-velbus/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/python3-saml/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/pythran/default.nix69
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytile/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytools/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytorch/bin.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytorch/binary-hashes.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytorch/default.nix63
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytrafikverket/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytrends/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytube/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyturbojpeg/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyturbojpeg/lib-path.patch28
-rw-r--r--nixpkgs/pkgs/development/python-modules/pytz/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyu2f/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyupgrade/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyusb/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyuv/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyuv/pyuv-external-libuv.patch25
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyvera/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyvex/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyvicare/default.nix35
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyvizio/default.nix42
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyvolumio/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/pywbem/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pywebview/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyxattr/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyxeoma/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyxiaomigateway/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyxml/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyxnat/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyyaml/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/pyzerproc/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit-aer/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit-aer/remove-conan-install.patch63
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit-aqua/default.nix11
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit-ibmq-provider/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit-ignis/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit-terra/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/qiskit/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/qscintilla-qt5/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/qtawesome/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/qtconsole/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/quandl/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/questionary/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/rabbitpy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/radiotherm/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/rapidfuzz/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/ratelimit/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/rdkit/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/readme_renderer/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/readthedocs-sphinx-ext/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/regenmaschine/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/reportlab/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/requests-aws4auth/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/requests-kerberos/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/requests-pkcs12/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/requests/default.nix59
-rw-r--r--nixpkgs/pkgs/development/python-modules/respx/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/restfly/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/restview/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/rethinkdb/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/retworkx/default.nix39
-rw-r--r--nixpkgs/pkgs/development/python-modules/rfcat/default.nix50
-rw-r--r--nixpkgs/pkgs/development/python-modules/ring-doorbell/default.nix44
-rw-r--r--nixpkgs/pkgs/development/python-modules/riprova/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/rnc2rng/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/roboschool/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/robotframework-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/ronin/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/rope/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/ropper/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/rpy2/2.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/rpy2/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/s3fs/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/s3transfer/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/safety/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sagemaker/default.nix55
-rw-r--r--nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/sane/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sanic/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/sasmodels/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/schema/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/scikit-bio/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/scikitlearn/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/scipy/default.nix11
-rw-r--r--nixpkgs/pkgs/development/python-modules/scramp/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/screeninfo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/screenlogicpy/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/seaborn/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/secretstorage/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/semver/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/sendgrid/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/setproctitle/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/setuptools-rust/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/setuptools-rust/pyo3-test/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/setuptools_scm/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/sfepy/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/shap/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/shapely/default.nix50
-rw-r--r--nixpkgs/pkgs/development/python-modules/sharkiqpy/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/shiboken2/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/signify/certificate-expiration-date.patch18
-rw-r--r--nixpkgs/pkgs/development/python-modules/signify/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/simplehound/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/simplejson/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/simplekml/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/simplisafe-python/default.nix61
-rw-r--r--nixpkgs/pkgs/development/python-modules/sklearn-deap/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/skorch/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/skybellpy/default.nix45
-rw-r--r--nixpkgs/pkgs/development/python-modules/slack-sdk/default.nix74
-rw-r--r--nixpkgs/pkgs/development/python-modules/slackclient/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/slicedimage/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/slicer/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/slixmpp/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/smart_open/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/smartypants/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/smartypants/hgtags17
-rw-r--r--nixpkgs/pkgs/development/python-modules/smdebug-rulesconfig/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/smmap/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/snapcast/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/snowflake-connector-python/default.nix19
-rw-r--r--nixpkgs/pkgs/development/python-modules/snowflake-sqlalchemy/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/soco/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/solaredge/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/solax/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/solo-python/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/somajo/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sopel/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/spglib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sphinx-autobuild/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/sphinx-navtree/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/sphinx/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/sphinxcontrib-bibtex/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sphinxcontrib-tikz/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/spotipy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/spyder-kernels/0.x.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/spyder/3.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/spyder/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sqlalchemy/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/sqlite-utils/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/sqlmap/default.nix10
-rw-r--r--nixpkgs/pkgs/development/python-modules/srp/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/starlette/default.nix18
-rw-r--r--nixpkgs/pkgs/development/python-modules/statsmodels/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/streamz/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/strictyaml/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/stripe/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/stytra/default.nix14
-rw-r--r--nixpkgs/pkgs/development/python-modules/subarulink/default.nix27
-rw-r--r--nixpkgs/pkgs/development/python-modules/sunpy/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/supervisor/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/surepy/default.nix61
-rw-r--r--nixpkgs/pkgs/development/python-modules/survey/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/swspotify/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/sybil/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/tabulate/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/tahoma-api/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/tatsu/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/tellduslive/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/terminado/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/termplotlib/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/teslajsonpy/default.nix13
-rw-r--r--nixpkgs/pkgs/development/python-modules/textacy/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/thespian/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/tiledb/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/tiros/default.nix20
-rw-r--r--nixpkgs/pkgs/development/python-modules/tldextract/default.nix48
-rw-r--r--nixpkgs/pkgs/development/python-modules/tlsh/default.nix8
-rw-r--r--nixpkgs/pkgs/development/python-modules/tokenize-rt/default.nix28
-rw-r--r--nixpkgs/pkgs/development/python-modules/tokenizers/default.nix37
-rw-r--r--nixpkgs/pkgs/development/python-modules/torchgpipe/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/torchvision/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/tpm2-pytss/default.nix41
-rw-r--r--nixpkgs/pkgs/development/python-modules/tqdm/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/traitsui/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/traittypes/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/transaction/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/transformers/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/transitions/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/transmission-rpc/default.nix36
-rw-r--r--nixpkgs/pkgs/development/python-modules/transmissionrpc/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/trimesh/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/trio/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/trytond/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/tubeup/default.nix6
-rw-r--r--nixpkgs/pkgs/development/python-modules/tuyaha/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/twentemilieu/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/twill/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/twinkly-client/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/twitterapi/default.nix34
-rw-r--r--nixpkgs/pkgs/development/python-modules/typesystem/default.nix2
-rw-r--r--nixpkgs/pkgs/development/python-modules/tzdata/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/tzlocal/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/ueberzug/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/ujson/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/unidecode/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/update-dotdee/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/uproot3-methods/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/uproot3/default.nix11
-rw-r--r--nixpkgs/pkgs/development/python-modules/uranium/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/urllib3/2.nix73
-rw-r--r--nixpkgs/pkgs/development/python-modules/urllib3/default.nix66
-rw-r--r--nixpkgs/pkgs/development/python-modules/uvloop/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/validators/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/vcrpy/3.nix48
-rw-r--r--nixpkgs/pkgs/development/python-modules/vcrpy/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/vega/default.nix5
-rw-r--r--nixpkgs/pkgs/development/python-modules/venstarcolortouch/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/vidstab/default.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/virtualenv/default.nix55
-rw-r--r--nixpkgs/pkgs/development/python-modules/volkszaehler/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/vsure/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/w3lib/default.nix12
-rw-r--r--nixpkgs/pkgs/development/python-modules/wadllib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/wakeonlan/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/wasabi/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/wasmer/default.nix65
-rw-r--r--nixpkgs/pkgs/development/python-modules/watchdog/default.nix24
-rw-r--r--nixpkgs/pkgs/development/python-modules/wcmatch/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/web-cache/default.nix25
-rw-r--r--nixpkgs/pkgs/development/python-modules/webob/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/weboob/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/websocket_client/default.nix22
-rw-r--r--nixpkgs/pkgs/development/python-modules/werkzeug/default.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/wheel/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/wiffi/default.nix32
-rw-r--r--nixpkgs/pkgs/development/python-modules/winacl/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/wrapio/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/wsgi-intercept/default.nix31
-rw-r--r--nixpkgs/pkgs/development/python-modules/wxPython/4.0.nix3
-rw-r--r--nixpkgs/pkgs/development/python-modules/wxPython/4.1.nix1
-rw-r--r--nixpkgs/pkgs/development/python-modules/xarray/default.nix21
-rw-r--r--nixpkgs/pkgs/development/python-modules/xcffib/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/xdis/default.nix7
-rw-r--r--nixpkgs/pkgs/development/python-modules/xknx/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/xmldiff/default.nix29
-rw-r--r--nixpkgs/pkgs/development/python-modules/xmlsec/default.nix47
-rw-r--r--nixpkgs/pkgs/development/python-modules/xmlsec/reset-lxml-in-tests.patch22
-rw-r--r--nixpkgs/pkgs/development/python-modules/xmpppy/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/xmpppy/ssl.patch25
-rw-r--r--nixpkgs/pkgs/development/python-modules/xpath-expressions/default.nix46
-rw-r--r--nixpkgs/pkgs/development/python-modules/yalesmartalarmclient/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/yalexs/default.nix58
-rw-r--r--nixpkgs/pkgs/development/python-modules/yamllint/default.nix40
-rw-r--r--nixpkgs/pkgs/development/python-modules/yapf/default.nix43
-rw-r--r--nixpkgs/pkgs/development/python-modules/yapsy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/yaswfp/default.nix30
-rw-r--r--nixpkgs/pkgs/development/python-modules/ytmusicapi/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/zerobin/default.nix33
-rw-r--r--nixpkgs/pkgs/development/python-modules/zeroc-ice/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/zeroconf/default.nix16
-rw-r--r--nixpkgs/pkgs/development/python-modules/zetup/default.nix26
-rw-r--r--nixpkgs/pkgs/development/python-modules/zha-quirks/default.nix23
-rw-r--r--nixpkgs/pkgs/development/python-modules/zigpy-deconz/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/zigpy-znp/default.nix9
-rw-r--r--nixpkgs/pkgs/development/python-modules/zigpy/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/zope_schema/default.nix4
-rw-r--r--nixpkgs/pkgs/development/python-modules/zopfli/default.nix5
1109 files changed, 13966 insertions, 4675 deletions
diff --git a/nixpkgs/pkgs/development/python-modules/APScheduler/default.nix b/nixpkgs/pkgs/development/python-modules/APScheduler/default.nix
index d1ac191489ad..1a27c8c1f0fc 100644
--- a/nixpkgs/pkgs/development/python-modules/APScheduler/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/APScheduler/default.nix
@@ -1,26 +1,29 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
-, setuptools_scm
-, pytest
+, setuptools-scm
+, pytestCheckHook
+, pytest-asyncio
+, pytest-tornado
 , pytestcov
 , sqlalchemy
 , tornado
 , twisted
 , mock
-, trollius
 , gevent
 , six
 , pytz
 , tzlocal
 , funcsigs
-, futures
-, isPy3k
+, setuptools
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "APScheduler";
   version = "3.7.0";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
@@ -28,17 +31,18 @@ buildPythonPackage rec {
   };
 
   buildInputs = [
-    setuptools_scm
+    setuptools-scm
   ];
 
   checkInputs = [
-    pytest
+    pytest-asyncio
+    pytest-tornado
+    pytestCheckHook
     pytestcov
     sqlalchemy
     tornado
     twisted
     mock
-    trollius
     gevent
   ];
 
@@ -47,18 +51,19 @@ buildPythonPackage rec {
     pytz
     tzlocal
     funcsigs
-  ] ++ lib.optional (!isPy3k) futures;
+    setuptools
+  ];
 
-  checkPhase = ''
-    py.test
-  '';
+  disabledTests = lib.optionals stdenv.isDarwin [
+    "test_submit_job"
+    "test_max_instances"
+  ];
 
-  # Somehow it cannot find pytestcov
-  doCheck = false;
+  pythonImportsCheck = [ "apscheduler" ];
 
   meta = with lib; {
     description = "A Python library that lets you schedule your Python code to be executed";
-    homepage = "https://pypi.python.org/pypi/APScheduler/";
+    homepage = "https://github.com/agronholm/apscheduler";
     license = licenses.mit;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/Cython/default.nix b/nixpkgs/pkgs/development/python-modules/Cython/default.nix
index 64f5bb3ab656..c09f1586fd6f 100644
--- a/nixpkgs/pkgs/development/python-modules/Cython/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Cython/default.nix
@@ -26,11 +26,11 @@ let
 
 in buildPythonPackage rec {
   pname = "Cython";
-  version = "0.29.21";
+  version = "0.29.22";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1bcwpra7c6k30yvic3sw2v3rq2dr40ypc4zqif6kr52mpn4wnyp5";
+    sha256 = "sha256-32uDx6bR2WfqiaKQPkqTE3djSil0WWUuRVFzTEgZVAY=";
   };
 
   nativeBuildInputs = [
@@ -49,6 +49,15 @@ in buildPythonPackage rec {
       url = "https://github.com/cython/cython/commit/28251032f86c266065e4976080230481b1a1bb29.patch";
       sha256 = "19rg7xs8gr90k3ya5c634bs8gww1sxyhdavv07cyd2k71afr83gy";
     })
+
+    # backport Cython 3.0 trashcan support (https://github.com/cython/cython/pull/2842) to 0.X series.
+    # it does not affect Python code unless the code explicitly uses the feature.
+    # trashcan support is needed to avoid stack overflows during object deallocation in sage (https://trac.sagemath.org/ticket/27267)
+    (fetchpatch {
+      name = "trashcan.patch";
+      url = "https://git.sagemath.org/sage.git/plain/build/pkgs/cython/patches/trashcan.patch?id=4569a839f070a1a38d5dbce2a4d19233d25aeed2";
+      sha256 = "sha256-+pOF1XNTEtNseLpqPzrc1Jfwt5hGx7doUoccIhNneYY=";
+    })
   ];
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/HAP-python/default.nix b/nixpkgs/pkgs/development/python-modules/HAP-python/default.nix
index 3cd211db7559..8380832abd67 100644
--- a/nixpkgs/pkgs/development/python-modules/HAP-python/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/HAP-python/default.nix
@@ -1,41 +1,64 @@
-{ lib, buildPythonPackage, fetchFromGitHub, isPy3k, curve25519-donna, ed25519
-, cryptography, ecdsa, zeroconf, pytestCheckHook }:
+{ lib
+, buildPythonPackage
+, base36
+, cryptography
+, curve25519-donna
+, ecdsa
+, ed25519
+, fetchFromGitHub
+, h11
+, pyqrcode
+, pytest-asyncio
+, pytest-timeout
+, pytestCheckHook
+, pythonOlder
+, zeroconf
+}:
 
 buildPythonPackage rec {
   pname = "HAP-python";
-  version = "3.1.0";
+  version = "3.4.1";
+  disabled = pythonOlder "3.5";
 
   # pypi package does not include tests
   src = fetchFromGitHub {
     owner = "ikalchev";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1qg38lfjby2xfm09chzc40a7i3b84kgyfs7g4xq8f5m8s39hg6d7";
+    sha256 = "sha256-tZ6Zwlx5J62Xqpxxmt8Phdd9ngtKYhP/p3uor1dRfK8=";
   };
 
-  disabled = !isPy3k;
-
   propagatedBuildInputs = [
-    curve25519-donna
-    ed25519
+    base36
     cryptography
+    curve25519-donna
     ecdsa
+    ed25519
+    h11
+    pyqrcode
     zeroconf
   ];
 
-  checkInputs = [ pytestCheckHook ];
+  checkInputs = [
+    pytest-asyncio
+    pytest-timeout
+    pytestCheckHook
+  ];
+
+  # Disable tests requiring network access
+  disabledTestPaths = [
+    "tests/test_accessory_driver.py"
+    "tests/test_hap_handler.py"
+    "tests/test_hap_protocol.py"
+  ];
 
   disabledTests = [
-    #disable tests needing network
-    "test_persist"
-    "test_setup_endpoints"
-    "test_auto_add_aid_mac"
-    "test_service_callbacks"
-    "test_send_events"
-    "test_not_standalone_aid"
-    "test_start_stop_async_acc"
-    "test_external_zeroconf"
-    "test_start_stop_sync_acc"
+    "test_persist_and_load"
+    "test_we_can_connect"
+    "test_idle_connection_cleanup"
+    "test_we_can_start_stop"
+    "test_push_event"
+    "test_bridge_run_stop"
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/Mako/default.nix b/nixpkgs/pkgs/development/python-modules/Mako/default.nix
index c129e411a473..533e1317a091 100644
--- a/nixpkgs/pkgs/development/python-modules/Mako/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Mako/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "Mako";
-  version = "1.1.3";
+  version = "1.1.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27";
+    sha256 = "17831f0b7087c313c0ffae2bcbbd3c1d5ba9eeac9c38f2eb7b50e8c99fe9d5ab";
   };
 
   propagatedBuildInputs = [ markupsafe ];
diff --git a/nixpkgs/pkgs/development/python-modules/Nikola/default.nix b/nixpkgs/pkgs/development/python-modules/Nikola/default.nix
index eeab02fcb75e..d8c49c99eba3 100644
--- a/nixpkgs/pkgs/development/python-modules/Nikola/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Nikola/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , isPy3k
 , fetchPypi
@@ -35,7 +36,7 @@
 
 buildPythonPackage rec {
   pname = "Nikola";
-  version = "8.1.2";
+  version = "8.1.3";
 
   # Nix contains only Python 3 supported version of doit, which is a dependency
   # of Nikola. Python 2 support would require older doit 0.29.0 (which on the
@@ -54,7 +55,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "26f4fb1a2b0105cf0f71187c6c1eb54283767a883d1c8f4ca8c8039033217d27";
+    sha256 = "05eac356bb4273cdd05d2dd6ad676226133496c457af91987c3f0d40e2fe57ef";
   };
 
   patchPhase = ''
@@ -72,5 +73,7 @@ buildPythonPackage rec {
     description = "A modular, fast, simple, static website and blog generator";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ jluttine ];
+    # all tests fail
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/PyRMVtransport/default.nix b/nixpkgs/pkgs/development/python-modules/PyRMVtransport/default.nix
index 86fb75f14548..cfbf3be1c40c 100644
--- a/nixpkgs/pkgs/development/python-modules/PyRMVtransport/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/PyRMVtransport/default.nix
@@ -1,13 +1,19 @@
-{ lib, buildPythonPackage, fetchFromGitHub
-, flit
-, lxml, httpx
-, pytest, pytestcov, pytest-asyncio, pytest-mock, aresponses
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
 , pythonOlder
+, flit
+, async-timeout
+, lxml
+, httpx
+, pytestCheckHook
+, pytest-asyncio
+, pytest-httpx
 }:
 
 buildPythonPackage rec {
   pname = "PyRMVtransport";
-  version = "0.2.10";
+  version = "0.3.1";
   format = "pyproject";
   disabled = pythonOlder "3.6";
 
@@ -15,7 +21,7 @@ buildPythonPackage rec {
     owner = "cgtobi";
     repo = pname;
     rev = "v${version}";
-    sha256 = "03qrylidb1d6zw6a22d1drdf73cvfxqcqaa8qi8x4pli1axcfh5w";
+    sha256 = "1savzndg8l7rrc5dgzgsrdz9hnnjfv6qs5drznqmdw4f2rq84ypa";
   };
 
   nativeBuildInputs = [
@@ -23,24 +29,18 @@ buildPythonPackage rec {
   ];
 
   propagatedBuildInputs = [
+    async-timeout
     httpx
     lxml
   ];
 
-  # requires pytest-httpx
-  doCheck = false;
+  pythonImportsCheck = [ "RMVtransport" ];
 
   checkInputs = [
-    pytest
-    pytestcov
+    pytestCheckHook
     pytest-asyncio
-    pytest-mock
-    # pytest-httpx is missing
-    aresponses
+    pytest-httpx
   ];
-  checkPhase = ''
-    pytest --cov=RMVtransport tests
-  '';
 
   meta = with lib; {
     homepage = "https://github.com/cgtobi/PyRMVtransport";
diff --git a/nixpkgs/pkgs/development/python-modules/Pygments/2_5.nix b/nixpkgs/pkgs/development/python-modules/Pygments/2_5.nix
index a0c40550c9a9..aa59c370d2e7 100644
--- a/nixpkgs/pkgs/development/python-modules/Pygments/2_5.nix
+++ b/nixpkgs/pkgs/development/python-modules/Pygments/2_5.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
 , docutils
 }:
 
@@ -13,6 +14,15 @@ buildPythonPackage rec {
     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
diff --git a/nixpkgs/pkgs/development/python-modules/Pygments/default.nix b/nixpkgs/pkgs/development/python-modules/Pygments/default.nix
index 02f39b3014d4..a879aef02266 100644
--- a/nixpkgs/pkgs/development/python-modules/Pygments/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Pygments/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "Pygments";
-  version = "2.7.2";
+  version = "2.7.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "381985fcc551eb9d37c52088a32914e00517e57f4a21609f48141ba08e193fa0";
+    sha256 = "df49d09b498e83c1a73128295860250b0b7edd4c723a32e9bc0d295c7c2ec337";
   };
 
   propagatedBuildInputs = [ docutils ];
diff --git a/nixpkgs/pkgs/development/python-modules/Rtree/default.nix b/nixpkgs/pkgs/development/python-modules/Rtree/default.nix
index 82c8ced9704b..eb4dae8e3aa2 100644
--- a/nixpkgs/pkgs/development/python-modules/Rtree/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Rtree/default.nix
@@ -1,29 +1,38 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, libspatialindex, numpy }:
+{ lib,
+  stdenv,
+  buildPythonPackage,
+  fetchPypi,
+  libspatialindex,
+  numpy,
+  pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "Rtree";
-  version = "0.9.4";
+  version = "0.9.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0i1zlyz6vczy3cgg7fan5hq9zzjm7s7zdzfh83ma8g9vq3i2gqya";
+    sha256 = "be8772ca34699a9ad3fb4cfe2cfb6629854e453c10b3328039301bbfc128ca3e";
   };
 
-  propagatedBuildInputs = [ libspatialindex ];
+  buildInputs = [ libspatialindex ];
 
   patchPhase = ''
-    substituteInPlace rtree/core.py --replace \
+    substituteInPlace rtree/finder.py --replace \
       "find_library('spatialindex_c')" "'${libspatialindex}/lib/libspatialindex_c${stdenv.hostPlatform.extensions.sharedLibrary}'"
   '';
 
-  # Tests appear to be broken due to mysterious memory unsafe issues. See #36760
-  doCheck = false;
-  checkInputs = [ numpy ];
+  checkInputs = [
+    numpy
+    pytestCheckHook
+  ];
+  pythonImportsCheck = [ "rtree" ];
 
   meta = with lib; {
     description = "R-Tree spatial index for Python GIS";
     homepage = "https://toblerity.org/rtree/";
-    license = licenses.lgpl21;
+    license = licenses.mit;
     maintainers = with maintainers; [ bgamari ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/WSME/default.nix b/nixpkgs/pkgs/development/python-modules/WSME/default.nix
index 50e90ded7622..118288acb59e 100644
--- a/nixpkgs/pkgs/development/python-modules/WSME/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/WSME/default.nix
@@ -22,13 +22,13 @@
 
 buildPythonPackage rec {
   pname = "WSME";
-  version = "0.10.0";
+  version = "0.10.1";
 
   disabled = pythonAtLeast "3.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "965b9ce48161e5c50d84aedcf50dca698f05bf07e9d489201bccaec3141cd304";
+    sha256 = "34209b623635a905bcdbc654f53ac814d038da65e4c2bc070ea1745021984079";
   };
 
   nativeBuildInputs = [ pbr ];
diff --git a/nixpkgs/pkgs/development/python-modules/Wand/default.nix b/nixpkgs/pkgs/development/python-modules/Wand/default.nix
index e180f0cea332..4faedcada3b3 100644
--- a/nixpkgs/pkgs/development/python-modules/Wand/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/Wand/default.nix
@@ -1,28 +1,28 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, imagemagick7Big
+, imagemagickBig
 }:
 
 buildPythonPackage rec {
   pname = "Wand";
-  version = "0.6.5";
+  version = "0.6.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ec981b4f07f7582fc564aba8b57763a549392e9ef8b6a338e9da54cdd229cf95";
+    sha256 = "540a2da5fb3ada1f0abf6968e0fa01ca7de6cd517f3be5c52d03a4fc8d54d75e";
   };
 
   postPatch = ''
     substituteInPlace wand/api.py --replace \
       "magick_home = os.environ.get('MAGICK_HOME')" \
-      "magick_home = '${imagemagick7Big}'"
+      "magick_home = '${imagemagickBig}'"
   '';
 
   # tests not included with pypi release
   doCheck = false;
 
-  passthru.imagemagick = imagemagick7Big;
+  passthru.imagemagick = imagemagickBig;
 
   meta = with lib; {
     description = "Ctypes-based simple MagickWand API binding for Python";
diff --git a/nixpkgs/pkgs/development/python-modules/accupy/default.nix b/nixpkgs/pkgs/development/python-modules/accupy/default.nix
index 0d2cd2239b50..67aba7342148 100644
--- a/nixpkgs/pkgs/development/python-modules/accupy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/accupy/default.nix
@@ -1,41 +1,47 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, pythonOlder
 , mpmath
 , numpy
-, pipdate
 , pybind11
 , pyfma
 , eigen
+, importlib-metadata
 , pytestCheckHook
 , matplotlib
+, dufte
 , isPy27
 }:
 
 buildPythonPackage rec {
   pname = "accupy";
-  version = "0.3.3";
+  version = "0.3.4";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a234c9897a683a6ade44f0bafa71196f122a61e3ebeacb5b813e7d139d54f3c7";
+    sha256 = "36506aca53154528997ac22aee6292c83da0f4850bb375c149512b5284bd4948";
   };
 
+  nativeBuildInputs = [
+    pybind11
+  ];
+
   buildInputs = [
-    pybind11 eigen
+    eigen
   ];
 
   propagatedBuildInputs = [
     mpmath
     numpy
-    pipdate
     pyfma
-  ];
+  ] ++ lib.optional (pythonOlder "3.8") importlib-metadata;
 
   checkInputs = [
     pytestCheckHook
     matplotlib
+    dufte
   ];
 
   postConfigure = ''
diff --git a/nixpkgs/pkgs/development/python-modules/accuweather/default.nix b/nixpkgs/pkgs/development/python-modules/accuweather/default.nix
index ed6dcb54377e..01a299c89fde 100644
--- a/nixpkgs/pkgs/development/python-modules/accuweather/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/accuweather/default.nix
@@ -1,26 +1,48 @@
-{ aiohttp, buildPythonPackage, fetchFromGitHub, lib, pytest, pytestCheckHook
-, pytestcov, pytestrunner, pytest-asyncio, python, pythonOlder }:
+{ lib
+, aiohttp
+, aioresponses
+, buildPythonPackage
+, fetchFromGitHub
+, pytest-asyncio
+, pytest-error-for-skips
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "accuweather";
-  version = "0.0.11";
-
-  disabled = pythonOlder "3.8";
+  version = "0.1.1";
+  disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "bieniu";
     repo = pname;
     rev = version;
-    sha256 = "1sgbw9yldf81phwx6pbvqg9sp767whxymyj0ca9pwx1r6ipr080h";
+    sha256 = "sha256-fjOwa13hxY8/gCM6TCAFWVmEY1oZyqKyc6o3OSsxHpY=";
   };
 
-  nativeBuildInputs = [ pytestrunner ];
-  propagatedBuildInputs = [ aiohttp ];
-  checkInputs = [ pytestCheckHook pytestcov pytest-asyncio ];
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "pytest-runner" ""
+    substituteInPlace pytest.ini \
+      --replace "--cov --cov-report term-missing" ""
+  '';
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  checkInputs = [
+    aioresponses
+    pytest-asyncio
+    pytest-error-for-skips
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "accuweather" ];
 
   meta = with lib; {
-    description =
-      "Python wrapper for getting weather data from AccuWeather servers.";
+    description = "Python wrapper for getting weather data from AccuWeather servers";
     homepage = "https://github.com/bieniu/accuweather";
     license = licenses.asl20;
     maintainers = with maintainers; [ jamiemagee ];
diff --git a/nixpkgs/pkgs/development/python-modules/acme/default.nix b/nixpkgs/pkgs/development/python-modules/acme/default.nix
index e63a26e5f74f..97e725bb7119 100644
--- a/nixpkgs/pkgs/development/python-modules/acme/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/acme/default.nix
@@ -10,7 +10,6 @@
 , requests-toolbelt
 , six
 , werkzeug
-, mock
 , ndg-httpsclient
 }:
 
@@ -21,7 +20,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     cryptography pyasn1 pyopenssl pyRFC3339 pytz requests requests-toolbelt six
-    werkzeug mock ndg-httpsclient josepy
+    werkzeug ndg-httpsclient josepy
   ];
 
   # does not contain any tests
diff --git a/nixpkgs/pkgs/development/python-modules/adafruit-platformdetect/default.nix b/nixpkgs/pkgs/development/python-modules/adafruit-platformdetect/default.nix
index cc8ee9462504..ac4768c31d83 100644
--- a/nixpkgs/pkgs/development/python-modules/adafruit-platformdetect/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/adafruit-platformdetect/default.nix
@@ -5,12 +5,13 @@
 }:
 
 buildPythonPackage rec {
-  pname = "Adafruit-PlatformDetect";
-  version = "3.1.0";
+  pname = "adafruit-platformdetect";
+  version = "3.5.0";
 
   src = fetchPypi {
-    inherit pname version;
-    sha256 = "sha256-Wd8Qq/jE/C/zx1CRuKLt5Tz8VHY/4bwUa229aDcCFjk=";
+    pname = "Adafruit-PlatformDetect";
+    inherit version;
+    sha256 = "sha256-QJeb9+iiS4QZ7poOBp5oKD5KuagkG6cfTalbNRwrI1M=";
   };
 
   nativeBuildInputs = [ setuptools-scm ];
diff --git a/nixpkgs/pkgs/development/python-modules/adal/default.nix b/nixpkgs/pkgs/development/python-modules/adal/default.nix
index 55dc21240ec2..fab4c0839e20 100644
--- a/nixpkgs/pkgs/development/python-modules/adal/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/adal/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "adal";
-  version = "1.2.5";
+  version = "1.2.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8003ba03ef04170195b3eddda8a5ab43649ef2c5f0287023d515affb1ccfcfc3";
+    sha256 = "08b94d30676ceb78df31bce9dd0f05f1bc2b6172e44c437cbf5b968a00ac6489";
   };
 
   propagatedBuildInputs =  [ requests pyjwt dateutil ];
diff --git a/nixpkgs/pkgs/development/python-modules/adb-enhanced/default.nix b/nixpkgs/pkgs/development/python-modules/adb-enhanced/default.nix
new file mode 100644
index 000000000000..59eb468868a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/adb-enhanced/default.nix
@@ -0,0 +1,34 @@
+{ lib, jdk11, fetchFromGitHub, buildPythonPackage, docopt, psutil, pythonOlder }:
+
+buildPythonPackage rec {
+  pname = "adb-enhanced";
+  version = "2.5.10";
+
+  disabled = pythonOlder "3.4";
+
+  src = fetchFromGitHub {
+    owner = "ashishb";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-JMbcOk9Yr4WbfVUMKe5zZZWvvjKwhpPMdBt9d7xE6ek=";
+  };
+
+  postPatch = ''
+    substituteInPlace adbe/adb_enhanced.py \
+      --replace "cmd = 'java" "cmd = '${jdk11}/bin/java"
+  '';
+
+  propagatedBuildInputs = [ psutil docopt ];
+
+  # Disable tests because they require a dedicated android emulator
+  doCheck = false;
+
+  pythonImportsCheck = [ "adbe" ];
+
+  meta = with lib; {
+    description = "Tool for Android testing and development";
+    homepage = "https://github.com/ashishb/adb-enhanced";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vtuan10 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/adb-shell/default.nix b/nixpkgs/pkgs/development/python-modules/adb-shell/default.nix
index 9cd3fe362334..5377785ff25a 100644
--- a/nixpkgs/pkgs/development/python-modules/adb-shell/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/adb-shell/default.nix
@@ -1,9 +1,20 @@
-{ aiofiles, buildPythonPackage, cryptography, fetchFromGitHub, isPy3k, lib
-, libusb1, mock, pyasn1, python, pycryptodome, rsa }:
+{ lib
+, aiofiles
+, buildPythonPackage
+, cryptography
+, fetchFromGitHub
+, isPy3k
+, libusb1
+, mock
+, pyasn1
+, pycryptodome
+, pytestCheckHook
+, rsa
+}:
 
 buildPythonPackage rec {
   pname = "adb-shell";
-  version = "0.3.0";
+  version = "0.3.1";
 
   disabled = !isPy3k;
 
@@ -12,19 +23,27 @@ buildPythonPackage rec {
     owner = "JeffLIrion";
     repo = "adb_shell";
     rev = "v${version}";
-    sha256 = "0qnlhcd58zxh39cd5xzdx8yc5hc0pf8kix4rbn4avsapwb0l75n2";
+    sha256 = "sha256-b+9ySme44TdIlVnF8AHBBGd8pkoeYG99wmDK/nyAreo=";
   };
 
-  propagatedBuildInputs = [ aiofiles cryptography libusb1 pyasn1 rsa ];
+  propagatedBuildInputs = [
+    aiofiles
+    cryptography
+    libusb1
+    pyasn1
+    rsa
+  ];
 
-  checkInputs = [ mock pycryptodome ];
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests -t .
-  '';
+  checkInputs = [
+    mock
+    pycryptodome
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "adb_shell" ];
 
   meta = with lib; {
-    description =
-      "A Python implementation of ADB with shell and FileSync functionality.";
+    description = "Python implementation of ADB with shell and FileSync functionality";
     homepage = "https://github.com/JeffLIrion/adb_shell";
     license = licenses.asl20;
     maintainers = with maintainers; [ jamiemagee ];
diff --git a/nixpkgs/pkgs/development/python-modules/adblock/default.nix b/nixpkgs/pkgs/development/python-modules/adblock/default.nix
index de6d72a61ecf..8fc697828f0a 100644
--- a/nixpkgs/pkgs/development/python-modules/adblock/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/adblock/default.nix
@@ -1,10 +1,9 @@
 { stdenv
 , lib
-, rustPlatform
 , fetchFromGitHub
-, pipInstallHook
+, buildPythonPackage
+, rustPlatform
 , pythonImportsCheckHook
-, maturin
 , pkg-config
 , openssl
 , publicsuffix-list
@@ -13,7 +12,7 @@
 , Security
 }:
 
-rustPlatform.buildRustPackage rec {
+buildPythonPackage rec {
   pname = "adblock";
   version = "0.4.0";
   disabled = isPy27;
@@ -25,39 +24,32 @@ rustPlatform.buildRustPackage rec {
     rev = version;
     sha256 = "10d6ks2fyzbizq3kb69q478idj0h86k6ygjb6wl3zq3mf65ma4zg";
   };
-  format = "pyproject";
 
-  cargoSha256 = "0di05j942rrm2crpdpp9czhh65fmidyrvdp2n3pipgnagy7nchc0";
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-gEFmj3/KvhvvsOK2nX2L1RUD4Wfp3nYzEzVnQZIsIDY=";
+  };
 
-  nativeBuildInputs = [ pipInstallHook maturin pkg-config pythonImportsCheckHook ];
+  format = "pyproject";
+
+  nativeBuildInputs = [ pkg-config pythonImportsCheckHook ]
+    ++ (with rustPlatform; [ cargoSetupHook maturinBuildHook ]);
 
   buildInputs = [ openssl ]
     ++ lib.optionals stdenv.isDarwin [ CoreFoundation Security ];
 
   PSL_PATH = "${publicsuffix-list}/share/publicsuffix/public_suffix_list.dat";
 
-  buildPhase = ''
-    runHook preBuild
-    maturin build --release --manylinux off --strip
-    runHook postBuild
-  '';
-
   # There are no rust tests
   doCheck = false;
-  pythonImportsCheck = [ "adblock" ];
 
-  installPhase = ''
-    runHook preInstall
-    install -Dm644 -t dist target/wheels/*.whl
-    pipInstallPhase
-    runHook postInstall
-  '';
+  pythonImportsCheck = [ "adblock" ];
 
-  passthru.meta = with lib; {
+  meta = with lib; {
     description = "Python wrapper for Brave's adblocking library, which is written in Rust";
     homepage = "https://github.com/ArniDagur/python-adblock/";
     maintainers = with maintainers; [ petabyteboy ];
     license = with licenses; [ asl20 mit ];
-    platforms = with platforms; [ all ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/addic7ed-cli/default.nix b/nixpkgs/pkgs/development/python-modules/addic7ed-cli/default.nix
index bdf6aab3dbfc..3ee3a897a906 100644
--- a/nixpkgs/pkgs/development/python-modules/addic7ed-cli/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/addic7ed-cli/default.nix
@@ -1,4 +1,6 @@
-{ lib, python3Packages, }:
+{ lib
+, python3Packages
+}:
 
 python3Packages.buildPythonApplication rec {
   pname = "addic7ed-cli";
@@ -14,6 +16,10 @@ python3Packages.buildPythonApplication rec {
     pyquery
   ];
 
+  # Tests require network access
+  doCheck = false;
+  pythonImportsCheck = [ "addic7ed_cli" ];
+
   meta = with lib; {
     description = "A commandline access to addic7ed subtitles";
     homepage = "https://github.com/BenoitZugmeyer/addic7ed-cli";
diff --git a/nixpkgs/pkgs/development/python-modules/adext/default.nix b/nixpkgs/pkgs/development/python-modules/adext/default.nix
index f3818c93188b..12c86bfc8f5f 100644
--- a/nixpkgs/pkgs/development/python-modules/adext/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/adext/default.nix
@@ -1,24 +1,26 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, setuptools-scm
 , alarmdecoder
 }:
 
 buildPythonPackage rec {
   pname = "adext";
-  version = "0.3";
+  version = "0.4.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "184qxw6i5ixnhgkjnby4zwn4jg90mxb8xy9vbg80x5w331p4z50f";
+    sha256 = "1yz1rpfvhbf7kfjck5vadbj9rd3bkx5248whaa3impdrjh7vs03x";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "alarmdecoder==1.13.2" "alarmdecoder>=1.13.2"
-  '';
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
 
-  propagatedBuildInputs = [ alarmdecoder ];
+  propagatedBuildInputs = [
+    alarmdecoder
+  ];
 
   # Tests are not published yet
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/adguardhome/default.nix b/nixpkgs/pkgs/development/python-modules/adguardhome/default.nix
index b3cbfd212ba6..dfa576e657c9 100644
--- a/nixpkgs/pkgs/development/python-modules/adguardhome/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/adguardhome/default.nix
@@ -1,24 +1,49 @@
-{ aiohttp, aresponses, buildPythonPackage, fetchFromGitHub, isPy3k, lib
-, pytest-asyncio, pytestCheckHook, yarl }:
+{ lib
+, aiohttp
+, aresponses
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+, yarl
+}:
 
 buildPythonPackage rec {
   pname = "adguardhome";
-  version = "0.4.2";
-
-  disabled = !isPy3k;
+  version = "0.5.0";
+  format = "pyproject";
+  disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = "frenck";
     repo = "python-${pname}";
     rev = "v${version}";
-    sha256 = "0lcf3yg27amrnqvgn5nw4jn2j0vj4yfmyl5p5yncmn7dh6bdbsp8";
+    sha256 = "sha256-f8uZF4DXbfiL1nL82shjGNpo6lXSUomRgO1YnNT/GDw=";
   };
 
-  propagatedBuildInputs = [ aiohttp yarl ];
-  checkInputs = [ aresponses pytest-asyncio pytestCheckHook ];
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    yarl
+  ];
+
+  checkInputs = [
+    aresponses
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml --replace "--cov" ""
+  '';
+
+  pythonImportsCheck = [ "adguardhome" ];
 
   meta = with lib; {
-    description = "Asynchronous Python client for the AdGuard Home API.";
+    description = "Python client for the AdGuard Home API";
     homepage = "https://github.com/frenck/python-adguardhome";
     license = licenses.mit;
     maintainers = with maintainers; [ jamiemagee ];
diff --git a/nixpkgs/pkgs/development/python-modules/afdko/default.nix b/nixpkgs/pkgs/development/python-modules/afdko/default.nix
index 4df6c5f6c493..f86151f2f51f 100644
--- a/nixpkgs/pkgs/development/python-modules/afdko/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/afdko/default.nix
@@ -17,14 +17,19 @@ buildPythonPackage rec {
     sha256 = "1qg7dgl81yq0sp50pkhgvmf8az1svx20zmpkfa68ka9d0ssh1wjw";
   };
 
-  # Skip date-dependent test. See
-  # https://github.com/adobe-type-tools/afdko/pull/1232
-  # https://github.com/NixOS/nixpkgs/pull/98158#issuecomment-704321117
   patches = [
+    # Skip date-dependent test. See
+    # https://github.com/adobe-type-tools/afdko/pull/1232
+    # https://github.com/NixOS/nixpkgs/pull/98158#issuecomment-704321117
     (fetchpatch {
       url = "https://github.com/adobe-type-tools/afdko/commit/2c36ad10f9d964759f643e8ed7b0972a27aa26bd.patch";
       sha256 = "0p6a485mmzrbfldfbhgfghsypfiad3cabcw7qlw2rh993ivpnibf";
     })
+    # fix tests for fonttools 4.21.1
+    (fetchpatch {
+      url = "https://github.com/adobe-type-tools/afdko/commit/0919e7454a0a05a1b141c23bf8134c67e6b688fc.patch";
+      sha256 = "0glly85swyl1kcc0mi8i0w4bm148bb001jz1winz5drfrw3a63jp";
+    })
   ];
 
   nativeBuildInputs = [ setuptools_scm ];
diff --git a/nixpkgs/pkgs/development/python-modules/agate-sql/default.nix b/nixpkgs/pkgs/development/python-modules/agate-sql/default.nix
index 29bbfa81ed23..890f44b4ad38 100644
--- a/nixpkgs/pkgs/development/python-modules/agate-sql/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/agate-sql/default.nix
@@ -1,20 +1,39 @@
-{ lib, fetchPypi, buildPythonPackage, agate, sqlalchemy, crate }:
+{ lib
+, buildPythonPackage
+, isPy27
+, fetchPypi
+, agate
+, sqlalchemy
+, crate
+, nose
+, geojson
+}:
 
 buildPythonPackage rec {
-    pname = "agate-sql";
-    version = "0.5.5";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "50a39754babef6cd0d1b1e75763324a49593394fe46ab1ea9546791b5e6b69a7";
-    };
-
-    propagatedBuildInputs = [ agate sqlalchemy crate ];
-
-    meta = with lib; {
-      description = "Adds SQL read/write support to agate.";
-      homepage    = "https://github.com/wireservice/agate-sql";
-      license     = with licenses; [ mit ];
-      maintainers = with maintainers; [ vrthra ];
-    };
+  pname = "agate-sql";
+  version = "0.5.6";
+
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "056dc9e587fbdfdf3f1c9950f4793a5ee87622c19deba31aa0a6d6681816dcde";
+  };
+
+  propagatedBuildInputs = [ agate sqlalchemy ];
+
+  checkInputs = [ crate nose geojson ];
+
+  checkPhase = ''
+    nosetests
+  '';
+
+  pythonImportsCheck = [ "agatesql" ];
+
+  meta = with lib; {
+    description = "Adds SQL read/write support to agate.";
+    homepage = "https://github.com/wireservice/agate-sql";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ vrthra ];
+  };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ailment/default.nix b/nixpkgs/pkgs/development/python-modules/ailment/default.nix
index e23db23d151e..13386eb12a6b 100644
--- a/nixpkgs/pkgs/development/python-modules/ailment/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ailment/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "ailment";
-  version = "9.0.5739";
+  version = "9.0.5903";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1fjwksia6h7w7m5zhys65yr4zxvyfgp9hr1k5dn802p9kvz34bpc";
+    sha256 = "sha256-75Ul9JfMFYv3AfBlgmer6IDyfgOAS4AdXexznoxi35Y=";
   };
 
   propagatedBuildInputs = [ pyvex ];
diff --git a/nixpkgs/pkgs/development/python-modules/aioambient/default.nix b/nixpkgs/pkgs/development/python-modules/aioambient/default.nix
new file mode 100644
index 000000000000..5e504ab87a02
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aioambient/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, aiohttp
+, aresponses
+, asynctest
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-asyncio
+, pytest-cov
+, pytestCheckHook
+, python-engineio
+, python-socketio
+, pythonOlder
+, websockets
+}:
+
+buildPythonPackage rec {
+  pname = "aioambient";
+  version = "1.2.4";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "bachya";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-uqvM5F0rpw+xeCXYl4lGMt3r0ugPsUmSvujmTJ9HABk=";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    python-engineio
+    python-socketio
+    websockets
+  ];
+
+  checkInputs = [
+    aresponses
+    asynctest
+    pytest-asyncio
+    pytest-cov
+    pytestCheckHook
+  ];
+
+  # Ignore the examples directory as the files are prefixed with test_
+  pytestFlagsArray = [ "--ignore examples/" ];
+  pythonImportsCheck = [ "aioambient" ];
+
+  meta = with lib; {
+    description = "Python library for the Ambient Weather API";
+    homepage = "https://github.com/bachya/aioambient";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aioasuswrt/default.nix b/nixpkgs/pkgs/development/python-modules/aioasuswrt/default.nix
new file mode 100644
index 000000000000..edd2796eca48
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aioasuswrt/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, asyncssh
+, buildPythonPackage
+, fetchFromGitHub
+, pytest-asyncio
+, pytest-mock
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "aioasuswrt";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "kennedyshead";
+    repo = pname;
+    rev = "V${version}";
+    sha256 = "1h1qwc7szgrcwiz4q6x4mlf26is20lj1ds5rcb9i611j26656v6d";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "cryptography==3.3.2" "cryptography"
+    substituteInPlace setup.cfg \
+      --replace "--cov-report html" "" \
+      --replace "--cov-report term-missing" ""
+  '';
+
+  propagatedBuildInputs = [ asyncssh ];
+
+  checkInputs = [
+    pytest-asyncio
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "aioasuswrt" ];
+
+  meta = with lib; {
+    description = "Python module for Asuswrt";
+    homepage = "https://github.com/kennedyshead/aioasuswrt";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiobotocore/default.nix b/nixpkgs/pkgs/development/python-modules/aiobotocore/default.nix
index 2e7c9c2401c3..5d9c3fe16695 100644
--- a/nixpkgs/pkgs/development/python-modules/aiobotocore/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiobotocore/default.nix
@@ -1,10 +1,7 @@
 { lib
-
 , buildPythonPackage
 , fetchPypi
 , pythonOlder
-, pytestrunner
-, typing-extensions
 , wrapt
 , aioitertools
 , aiohttp
diff --git a/nixpkgs/pkgs/development/python-modules/aiocache/default.nix b/nixpkgs/pkgs/development/python-modules/aiocache/default.nix
new file mode 100644
index 000000000000..54979dbd7ba4
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aiocache/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, aioredis
+, buildPythonPackage
+, fetchFromGitHub
+, msgpack
+}:
+
+buildPythonPackage rec {
+  pname = "aiocache";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "aio-libs";
+    repo = pname;
+    rev = version;
+    sha256 = "1czs8pvhzi92qy2dch2995rb62mxpbhd80dh2ir7zpa9qcm6wxvx";
+  };
+
+  propagatedBuildInputs = [
+    aioredis
+    msgpack
+  ];
+
+  # aiomcache would be required but last release was in 2017
+  doCheck = false;
+  pythonImportsCheck = [ "aiocache" ];
+
+  meta = with lib; {
+    description = "Python API Rate Limit Decorator";
+    homepage = "https://github.com/tomasbasham/ratelimit";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiodiscover/default.nix b/nixpkgs/pkgs/development/python-modules/aiodiscover/default.nix
new file mode 100644
index 000000000000..e724d53bfe75
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aiodiscover/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, async-dns
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, ifaddr
+, pyroute2
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "aiodiscover";
+  version = "1.3.3";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "bdraco";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "186agrjx818vn00d3pqlka5ir48rgpbfyn1cifkn9ylsxg9cz3ph";
+  };
+
+  propagatedBuildInputs = [
+    async-dns
+    pyroute2
+    ifaddr
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py --replace '"pytest-runner>=5.2",' ""
+  '';
+
+  # Tests require access to /etc/resolv.conf
+  # pythonImportsCheck doesn't work as async-dns wants to create its CONFIG_DIR
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python module to discover hosts via ARP and PTR lookup";
+    homepage = "https://github.com/bdraco/aiodiscover";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aioesphomeapi/default.nix b/nixpkgs/pkgs/development/python-modules/aioesphomeapi/default.nix
index 03f1ed91cfd8..425575442592 100644
--- a/nixpkgs/pkgs/development/python-modules/aioesphomeapi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aioesphomeapi/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "aioesphomeapi";
-  version = "2.6.4";
+  version = "2.6.6";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d8def7a909c0471479e1d8b0965de6bb7644b8de315d6e578f9d848b8a6812d0";
+    sha256 = "sha256-LdBUtU5rNoixh7DPIFkHxLMvBeI6MZH57sO0IjuOQAw=";
   };
 
   propagatedBuildInputs = [ attrs protobuf zeroconf ];
diff --git a/nixpkgs/pkgs/development/python-modules/aioflo/default.nix b/nixpkgs/pkgs/development/python-modules/aioflo/default.nix
index 60288178def5..8fe61282ab86 100644
--- a/nixpkgs/pkgs/development/python-modules/aioflo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aioflo/default.nix
@@ -12,14 +12,14 @@
 
 buildPythonPackage rec {
   pname = "aioflo";
-  version = "0.4.2";
+  version = "0.4.3";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "1ppsinmjph6snj7s4hg28p3qa67kpkadc98ikjjg6w65vcm3dlaz";
+    sha256 = "sha256-Dap3yjFIS+k/LLNg+vmYmiFQCOEPNp27p0GCMpn/edA=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/aioguardian/default.nix b/nixpkgs/pkgs/development/python-modules/aioguardian/default.nix
index f6822ede08cd..47b820161886 100644
--- a/nixpkgs/pkgs/development/python-modules/aioguardian/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aioguardian/default.nix
@@ -4,7 +4,6 @@
 , asyncio-dgram
 , asynctest
 , buildPythonPackage
-, cryptography
 , fetchFromGitHub
 , poetry
 , pytest-aiohttp
@@ -16,14 +15,14 @@
 
 buildPythonPackage rec {
   pname = "aioguardian";
-  version = "1.0.4";
+  version = "1.0.7";
   disabled = pythonAtLeast "3.9";
 
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "1cbxcsxh9c8r2zx3lsjdns26sm2qmlwnqgah2sfzbgp1lay23vvq";
+    sha256 = "sha256-KMhq86hcqoYloS/6VHsl+3KVEZBbN97ABrZlmEr32Z8=";
   };
 
   format = "pyproject";
diff --git a/nixpkgs/pkgs/development/python-modules/aiohttp/default.nix b/nixpkgs/pkgs/development/python-modules/aiohttp/default.nix
index 514d1d308e12..c0722c8c9781 100644
--- a/nixpkgs/pkgs/development/python-modules/aiohttp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiohttp/default.nix
@@ -3,82 +3,77 @@
 , buildPythonPackage
 , fetchPypi
 , pythonOlder
+, async-timeout
 , attrs
 , chardet
-, multidict
-, async-timeout
-, yarl
 , idna-ssl
+, multidict
 , typing-extensions
-, pytestrunner
-, pytestCheckHook
-, gunicorn
+, yarl
 , async_generator
-, pytest_xdist
-, pytestcov
-, pytest-mock
-, trustme
 , brotlipy
 , freezegun
-, isPy38
+, gunicorn
+, pytest-mock
+, pytest-xdist
+, pytestCheckHook
 , re-assert
+, trustme
 }:
 
 buildPythonPackage rec {
   pname = "aiohttp";
-  version = "3.7.3";
-  # https://github.com/aio-libs/aiohttp/issues/4525 python3.8 failures
-  disabled = pythonOlder "3.5";
+  version = "3.7.4.post0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9c1a81af067e72261c9cbe33ea792893e83bc6aa987bfbd6fdc1e5e7b22777c4";
+    sha256 = "493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf";
   };
 
-  checkInputs = [
-    pytestrunner pytestCheckHook gunicorn async_generator pytest_xdist
-    pytest-mock pytestcov trustme brotlipy freezegun
-    re-assert
-  ];
+  postPatch = ''
+    substituteInPlace setup.cfg --replace " --cov=aiohttp" ""
+  '';
 
   propagatedBuildInputs = [
+    async-timeout
     attrs
     chardet
     multidict
-    async-timeout
     typing-extensions
     yarl
   ] ++ lib.optionals (pythonOlder "3.7") [
     idna-ssl
   ];
 
+  checkInputs = [
+    async_generator
+    brotlipy
+    freezegun
+    gunicorn
+    pytest-mock
+    pytest-xdist
+    pytestCheckHook
+    re-assert
+    trustme
+  ];
+
+  pytestFlagsArray = [
+    "-n auto"
+  ];
+
   disabledTests = [
-    # disable tests which attempt to do loopback connections
-    "get_valid_log_format_exc"
-    "test_access_logger_atoms"
-    "aiohttp_request_coroutine"
-    "server_close_keepalive_connection"
-    "connector"
-    "client_disconnect"
-    "handle_keepalive_on_closed_connection"
-    "proxy_https_bad_response"
-    "partially_applied_handler"
-    "middleware"
+    # Disable tests that require network access
     "test_mark_formdata_as_processed"
-    # no longer compatible with pytest>=6
-    "aiohttp_plugin_async_fixture"
   ] ++ lib.optionals stdenv.is32bit [
     "test_cookiejar"
-  ] ++ lib.optionals isPy38 [
-    # Python 3.8  https://github.com/aio-libs/aiohttp/issues/4525
-    "test_read_boundary_with_incomplete_chunk"
-    "test_read_incomplete_chunk"
-    "test_request_tracing_exception"
   ] ++ lib.optionals stdenv.isDarwin [
-    "test_addresses"  # https://github.com/aio-libs/aiohttp/issues/3572
+    "test_addresses"  # https://github.com/aio-libs/aiohttp/issues/3572, remove >= v4.0.0
     "test_close"
   ];
 
+  __darwinAllowLocalNetworking = true;
+
   # aiohttp in current folder shadows installed version
   # Probably because we run `python -m pytest` instead of `pytest` in the hook.
   preCheck = ''
diff --git a/nixpkgs/pkgs/development/python-modules/aiolyric/default.nix b/nixpkgs/pkgs/development/python-modules/aiolyric/default.nix
new file mode 100644
index 000000000000..0dc576fca49a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aiolyric/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "aiolyric";
+  version = "1.0.6";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "timmo001";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1lnzsdw6kvgk0762f3vyw4xfzn7qkvsff16q61gm0ryjqg9j8whx";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  disabledTests = [
+    # AssertionError, https://github.com/timmo001/aiolyric/issues/5
+    "test_location"
+  ];
+  pythonImportsCheck = [ "aiolyric" ];
+
+  meta = with lib; {
+    description = "Python module for the Honeywell Lyric Platform";
+    homepage = "https://github.com/timmo001/aiolyric";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiomultiprocess/default.nix b/nixpkgs/pkgs/development/python-modules/aiomultiprocess/default.nix
index 9b648d595379..7b84996a1c91 100644
--- a/nixpkgs/pkgs/development/python-modules/aiomultiprocess/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiomultiprocess/default.nix
@@ -1,20 +1,26 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, flit-core
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "aiomultiprocess";
-  version = "0.8.0";
+  version = "0.9.0";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "omnilib";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0vkj1vgvlv828pi3sn0hjzdy9f0j63gljs2ylibbsaixa7mbkpvy";
+    sha256 = "sha256-yOP69FXDb2Grmtszx7oa6uiJGUar8su3KwqQPI+xjrw=";
   };
 
+  nativeBuildInputs = [ flit-core ];
+
   checkInputs = [ pytestCheckHook ];
 
   pytestFlagsArray = [ "aiomultiprocess/tests/*.py" ];
diff --git a/nixpkgs/pkgs/development/python-modules/aionotion/default.nix b/nixpkgs/pkgs/development/python-modules/aionotion/default.nix
new file mode 100644
index 000000000000..078184275eb5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aionotion/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, aiohttp
+, aresponses
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-aiohttp
+, pytest-asyncio
+, pytest-cov
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "aionotion";
+  version = "3.0.1";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "bachya";
+    repo = pname;
+    rev = version;
+    sha256 = "1ydrazg7gcwf53006n1fvxh9zm77by6zi36haq1bmy5skqccyiki";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  checkInputs = [
+    aresponses
+    pytest-aiohttp
+    pytest-asyncio
+    pytest-cov
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [ "examples" ];
+
+  pythonImportsCheck = [ "aionotion" ];
+
+  meta = with lib; {
+    description = "Python library for Notion Home Monitoring";
+    homepage = "https://github.com/bachya/aionotion";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiopylgtv/default.nix b/nixpkgs/pkgs/development/python-modules/aiopylgtv/default.nix
new file mode 100644
index 000000000000..200bc41b7a5d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aiopylgtv/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, numpy
+, pythonOlder
+, sqlitedict
+, websockets
+}:
+
+buildPythonPackage rec {
+  pname = "aiopylgtv";
+  version = "0.4.0";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "bendavid";
+    repo = pname;
+    rev = version;
+    sha256 = "0x0xcnlz42arsp53zlq5wyv9pwif1in8j2pv48gh0pkdnz9s86b6";
+  };
+
+  propagatedBuildInputs = [
+    numpy
+    sqlitedict
+    websockets
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "aiopylgtv" ];
+
+  meta = with lib; {
+    description = "Python library to control webOS based LG TV units";
+    homepage = "https://github.com/bendavid/aiopylgtv";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiorecollect/default.nix b/nixpkgs/pkgs/development/python-modules/aiorecollect/default.nix
index c802633e5723..53daf1f22696 100644
--- a/nixpkgs/pkgs/development/python-modules/aiorecollect/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiorecollect/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "aiorecollect";
-  version = "1.0.2";
+  version = "1.0.3";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "0dlz8zmqcn6g6000lfgcy5krpfafzdzrznmk6iwra65wcs7l9392";
+    sha256 = "sha256-S4HL8vJS/dTKsR5egKRSHqZYPClcET5Le06euHPyIkU=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/aioresponses/default.nix b/nixpkgs/pkgs/development/python-modules/aioresponses/default.nix
index 6a0d69371a8e..2a3a2e60be79 100644
--- a/nixpkgs/pkgs/development/python-modules/aioresponses/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aioresponses/default.nix
@@ -1,22 +1,22 @@
 { lib
+, aiohttp
+, asynctest
 , buildPythonPackage
+, ddt
 , fetchPypi
-, pythonOlder
 , pbr
-, aiohttp
-, ddt
-, asynctest
-, pytest
+, pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "aioresponses";
-  version = "0.7.1";
+  version = "0.7.2";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f65bba2be1e9a4997ee166bc0161a50be0fef7350ad09e6afdb2adccf74dfefe";
+    sha256 = "sha256-guSV0Ri3SJaqW01H4X7/teLMeD5RCuOVzq3l6Hyr6Jo=";
   };
 
   nativeBuildInputs = [
@@ -30,13 +30,16 @@ buildPythonPackage rec {
   checkInputs = [
     asynctest
     ddt
-    pytest
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Skip a test which makes requests to httpbin.org
+    "test_address_as_instance_of_url_combined_with_pass_through"
+    "test_pass_through_with_origin_params"
   ];
 
-  # Skip a test which makes requests to httpbin.org
-  checkPhase = ''
-    pytest -k "not (test_address_as_instance_of_url_combined_with_pass_through or test_pass_through_with_origin_params)"
-  '';
+  pythonImportsCheck = [ "aioresponses" ];
 
   meta = {
     description = "A helper to mock/fake web requests in python aiohttp package";
diff --git a/nixpkgs/pkgs/development/python-modules/aiorpcx/default.nix b/nixpkgs/pkgs/development/python-modules/aiorpcx/default.nix
index 5b270319661a..8e2078f52128 100644
--- a/nixpkgs/pkgs/development/python-modules/aiorpcx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiorpcx/default.nix
@@ -1,13 +1,18 @@
-{ lib, fetchPypi, buildPythonPackage, pythonOlder, attrs }:
+{ lib
+, fetchPypi
+, buildPythonPackage
+, pythonOlder
+, attrs
+}:
 
 buildPythonPackage rec {
   pname = "aiorpcx";
-  version = "0.18.4";
+  version = "0.18.7";
 
   src = fetchPypi {
     inherit version;
     pname = "aiorpcX";
-    sha256 = "0jpvrkan6w8bpq017m8si7r9hb1pyw3ip4vr1fl2pmi8ngzc1jdy";
+    sha256 = "808a9ec9172df11677a0f7b459b69d1a6cf8b19c19da55541fa31fb1afce5ce7";
   };
 
   propagatedBuildInputs = [ attrs ];
@@ -17,9 +22,12 @@ buildPythonPackage rec {
   # Checks needs internet access
   doCheck = false;
 
-  meta = {
+  pythonImportsCheck = [ "aiorpcx" ];
+
+  meta = with lib; {
     description = "Transport, protocol and framing-independent async RPC client and server implementation";
-    license = lib.licenses.mit;
     homepage = "https://github.com/kyuupichan/aiorpcX";
+    license = licenses.mit;
+    maintainers = with maintainers; [ prusnak ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/aiorun/default.nix b/nixpkgs/pkgs/development/python-modules/aiorun/default.nix
index a0a3d74e5780..414f8a6d9a64 100644
--- a/nixpkgs/pkgs/development/python-modules/aiorun/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiorun/default.nix
@@ -1,25 +1,24 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, isPy27
+, pythonOlder
 , pygments
-, pytest
-, pytestcov
+, pytestCheckHook
+, pytest-cov
 , uvloop
 }:
 
 buildPythonPackage rec {
   pname = "aiorun";
-  version = "2020.6.1";
+  version = "2020.12.1";
   format = "flit";
-
-  disabled = isPy27;
+  disabled = pythonOlder "3.5";
 
   src = fetchFromGitHub {
     owner = "cjrh";
     repo = pname;
     rev = "v${version}";
-    sha256 = "00mq5ylhhdfdqrh7zdqabf3wy85jrkqvgfb1421ll46fsjim2d14";
+    sha256 = "sha256-ktc2cmoPNYcsVyKCWs+ivhV5onywFIrdDRBiBKrdiF4=";
   };
 
   propagatedBuildInputs = [
@@ -27,8 +26,8 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytest
-    pytestcov
+    pytestCheckHook
+    pytest-cov
     uvloop
   ];
 
@@ -37,14 +36,12 @@ buildPythonPackage rec {
     export HOME=$TMPDIR
   '';
 
-  checkPhase = ''
-     pytest
-  '';
+  pythonImportsCheck = [ "aiorun" ];
 
   meta = with lib; {
     description = "Boilerplate for asyncio applications";
     homepage = "https://github.com/cjrh/aiorun";
     license = licenses.asl20;
-    maintainers = [ maintainers.costrouc ];
+    maintainers = with maintainers; [ costrouc ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/aioshelly/default.nix b/nixpkgs/pkgs/development/python-modules/aioshelly/default.nix
index f53877e03a3c..aa5e227ca65b 100644
--- a/nixpkgs/pkgs/development/python-modules/aioshelly/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aioshelly/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonPackage rec {
   pname = "aioshelly";
-  version = "0.5.4";
+  version = "0.6.2";
 
   src = fetchFromGitHub {
     owner = "home-assistant-libs";
     repo = pname;
     rev = version;
-    sha256 = "sha256-EjzWx3wcmTfB3OmN0OB37K6wYKVO3HzGEIf+uihas8k=";
+    sha256 = "sha256-vlIon+VAHeJiaSIVMEKEpwQC4gXA52vxfEkiQMC9yiw=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/aiosmb/default.nix b/nixpkgs/pkgs/development/python-modules/aiosmb/default.nix
new file mode 100644
index 000000000000..49c67a0aa040
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aiosmb/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, asysocks
+, buildPythonPackage
+, fetchPypi
+, minikerberos
+, prompt_toolkit
+, pythonOlder
+, six
+, tqdm
+, winacl
+, winsspi
+}:
+
+buildPythonPackage rec {
+  pname = "aiosmb";
+  version = "0.2.37";
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0daf1fk7406vpywc0yxv0wzf4nw986js9lc2agfyfxz0q7s29lf0";
+  };
+
+  propagatedBuildInputs = [
+    minikerberos
+    winsspi
+    six
+    asysocks
+    tqdm
+    prompt_toolkit
+    winacl
+  ];
+
+  # Project doesn't have tests
+  doCheck = false;
+  pythonImportsCheck = [ "aiosmb" ];
+
+  meta = with lib; {
+    description = "Python SMB library";
+    homepage = "https://github.com/skelsec/aiosmb";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/aiosmtpd/default.nix b/nixpkgs/pkgs/development/python-modules/aiosmtpd/default.nix
index 7bdddb42d4e3..c204261644c5 100644
--- a/nixpkgs/pkgs/development/python-modules/aiosmtpd/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiosmtpd/default.nix
@@ -1,9 +1,9 @@
 { lib, isPy3k, fetchFromGitHub, buildPythonPackage
-, atpublic }:
+, attrs, atpublic }:
 
 buildPythonPackage rec {
   pname = "aiosmtpd";
-  version = "1.2.1";
+  version = "1.4.2";
   disabled = !isPy3k;
 
   # Release not published to Pypi
@@ -11,11 +11,11 @@ buildPythonPackage rec {
     owner = "aio-libs";
     repo = pname;
     rev = version;
-    sha256 = "14c30dm6jzxiblnsah53fdv68vqhxwvb9x0aq9bc4vcdas747vr7";
+    sha256 = "0hbpyns1j1fpvpj7gyb8cz359j7l4hzfqbig74xp4xih59sih0wj";
   };
 
   propagatedBuildInputs = [
-    atpublic
+    atpublic attrs
   ];
 
   # Tests need network access
diff --git a/nixpkgs/pkgs/development/python-modules/aiosqlite/default.nix b/nixpkgs/pkgs/development/python-modules/aiosqlite/default.nix
index 44cae12cba52..022e34e23c1b 100644
--- a/nixpkgs/pkgs/development/python-modules/aiosqlite/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiosqlite/default.nix
@@ -9,12 +9,12 @@
 
 buildPythonPackage rec {
   pname = "aiosqlite";
-  version = "0.16.0";
+  version = "0.17.0";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1a0fjmlvadyzsml10g5p1qif7192k0swy5zwjp8v48y5zc3yy56h";
+    sha256 = "sha256-8OaswkvEhkFJJnrIL7Rt+zvkRV+Z/iHfgmCcxua67lE=";
   };
 
   checkInputs = [
@@ -26,6 +26,8 @@ buildPythonPackage rec {
   # tests are not pick-up automatically by the hook
   pytestFlagsArray = [ "aiosqlite/tests/*.py" ];
 
+  pythonImportsCheck = [ "aiosqlite" ];
+
   meta = with lib; {
     description = "Asyncio bridge to the standard sqlite3 module";
     homepage = "https://github.com/jreese/aiosqlite";
diff --git a/nixpkgs/pkgs/development/python-modules/aiostream/default.nix b/nixpkgs/pkgs/development/python-modules/aiostream/default.nix
index a48e2ae02401..b51a71056992 100644
--- a/nixpkgs/pkgs/development/python-modules/aiostream/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aiostream/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "aiostream";
-  version = "0.4.1";
+  version = "0.4.2";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "vxgmichel";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1wwnjrzkd61k3arxzk7yhg7cc1099bcwr5kz5n91ai6ma5ln139s";
+    sha256 = "0ss41hzvlnyll5xc5ddxqyqqw4gnd67yyhci25xnb1vpcz0jqsq8";
   };
 
   checkInputs = [ pytestCheckHook pytestcov pytest-asyncio ];
diff --git a/nixpkgs/pkgs/development/python-modules/airly/default.nix b/nixpkgs/pkgs/development/python-modules/airly/default.nix
index e75653fb684a..40cb085a17e8 100644
--- a/nixpkgs/pkgs/development/python-modules/airly/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/airly/default.nix
@@ -1,29 +1,40 @@
 { lib
+, aiohttp
+, aioresponses
+, aiounittest
 , buildPythonPackage
 , fetchFromGitHub
-, aiohttp
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "airly";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner = "ak-ambi";
     repo = "python-airly";
     rev = "v${version}";
-    sha256 = "0an6nbl0i5pahxm6x4z03s9apzgqrw9zf7srjcs0r3y1ppicb4s6";
+    sha256 = "sha256-weliT/FYnRX+pzVAyRWFly7lfj2z7P+hpq5SIhyIgmI=";
   };
 
   propagatedBuildInputs = [ aiohttp ];
 
-  checkInputs = [ pytestCheckHook ];
+  checkInputs = [
+    aioresponses
+    aiounittest
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    cd tests
+  '';
 
   disabledTests = [
     "InstallationsLoaderTestCase"
     "MeasurementsSessionTestCase"
   ];
+
   pythonImportsCheck = [ "airly" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/ajsonrpc/default.nix b/nixpkgs/pkgs/development/python-modules/ajsonrpc/default.nix
new file mode 100644
index 000000000000..e5a81d9cfa6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ajsonrpc/default.nix
@@ -0,0 +1,24 @@
+{ lib, pythonOlder, buildPythonPackage, fetchPypi, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "ajsonrpc";
+  version = "1.1.0";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1b5r8975wdnk3qnc1qjnn4lkxmqcir3brbwnxml9ii90dnsw408a";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "ajsonrpc" ];
+
+  meta = with lib; {
+    description = "Async JSON-RPC 2.0 protocol + asyncio server";
+    homepage = "https://github.com/pavlov99/ajsonrpc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/alarmdecoder/default.nix b/nixpkgs/pkgs/development/python-modules/alarmdecoder/default.nix
index 10438d540816..ee07588b325d 100644
--- a/nixpkgs/pkgs/development/python-modules/alarmdecoder/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/alarmdecoder/default.nix
@@ -3,14 +3,14 @@
 
 buildPythonPackage rec {
   pname = "alarmdecoder";
-  version = "1.13.9";
+  version = "1.13.10";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "nutechsoftware";
     repo = "alarmdecoder";
     rev = version;
-    sha256 = "0plr2h1qn4ryawbaxf29cfna4wailghhaqy1jcm9kxq6q7b9xqqy";
+    sha256 = "05581j78181p6mwbfpbkp5irnrzsvps1lslgqrh7xbdcmz5b2nxd";
   };
 
   propagatedBuildInputs = [ pyserial pyftdi pyusb pyopenssl ];
diff --git a/nixpkgs/pkgs/development/python-modules/alerta-server/default.nix b/nixpkgs/pkgs/development/python-modules/alerta-server/default.nix
deleted file mode 100644
index 82783dd16bb5..000000000000
--- a/nixpkgs/pkgs/development/python-modules/alerta-server/default.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder
-, bcrypt, blinker, flask, flask-compress, flask-cors, mohawk, psycopg2, pyjwt, pymongo, python-dateutil, pytz, pyyaml, requests, requests-hawk, sentry-sdk
-}:
-
-buildPythonPackage rec {
-  pname = "alerta-server";
-  version = "8.3.3";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "a2713a31c6e326c774a3ee0328f424f944b951935ff1b893a4a66598d61c5a97";
-  };
-
-  propagatedBuildInputs = [
-    bcrypt
-    blinker
-    flask
-    flask-compress
-    flask-cors
-    mohawk
-    psycopg2
-    pyjwt
-    pymongo
-    python-dateutil
-    pytz
-    pyyaml
-    requests
-    requests-hawk
-    sentry-sdk
-  ];
-
-  doCheck = false; # We can't run the tests from Nix, because they rely on the presence of a working MongoDB server
-
-  postInstall = ''
-    wrapProgram $out/bin/alertad --prefix PYTHONPATH : "$PYTHONPATH"
-  '';
-
-  disabled = pythonOlder "3.5";
-
-  meta = with lib; {
-    homepage = "https://alerta.io";
-    description = "Alerta Monitoring System server";
-    license = licenses.asl20;
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/alerta/default.nix b/nixpkgs/pkgs/development/python-modules/alerta/default.nix
deleted file mode 100644
index e69503777d4e..000000000000
--- a/nixpkgs/pkgs/development/python-modules/alerta/default.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{ lib, buildPythonPackage, fetchPypi
-, six, click, requests, requests-hawk, pytz, tabulate, pythonOlder
-}:
-
-buildPythonPackage rec {
-  pname = "alerta";
-  version = "8.3.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "83c7d751bad0cb9bd7886700da4cd83c5451b2e8eb8d4cc697966e02d6a565f8";
-  };
-
-  propagatedBuildInputs = [ six click requests requests-hawk pytz tabulate ];
-
-  doCheck = false;
-
-  postInstall = ''
-    wrapProgram $out/bin/alerta --prefix PYTHONPATH : "$PYTHONPATH"
-  '';
-
-  disabled = pythonOlder "3.5";
-
-  meta = with lib; {
-    homepage = "https://alerta.io";
-    description = "Alerta Monitoring System command-line interface";
-    license = licenses.asl20;
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/alot/default.nix b/nixpkgs/pkgs/development/python-modules/alot/default.nix
index 1f4617ce9c0d..1117557a8a0a 100644
--- a/nixpkgs/pkgs/development/python-modules/alot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/alot/default.nix
@@ -1,9 +1,7 @@
-{ lib, buildPythonPackage, python, fetchFromGitHub, fetchpatch, isPy3k
+{ lib, buildPythonPackage, python, fetchFromGitHub, isPy3k
 , notmuch, urwid, urwidtrees, twisted, python_magic, configobj, mock, file, gpgme
-, service-identity
-, gnupg ? null, sphinx, awk ? null, procps ? null, future ? null
-, withManpage ? false }:
-
+, service-identity, gnupg, sphinx, gawk, procps, future , withManpage ? false
+}:
 
 buildPythonPackage rec {
   pname = "alot";
@@ -41,7 +39,7 @@ buildPythonPackage rec {
   doCheck = false;
   postBuild = lib.optionalString withManpage "make -C docs man";
 
-  checkInputs =  [ awk future mock gnupg procps ];
+  checkInputs =  [ gawk future mock gnupg procps ];
 
   postInstall = let
     completionPython = python.withPackages (ps: [ ps.configobj ]);
diff --git a/nixpkgs/pkgs/development/python-modules/altair/default.nix b/nixpkgs/pkgs/development/python-modules/altair/default.nix
index 37c1efd9c1b6..99ee559da6b9 100644
--- a/nixpkgs/pkgs/development/python-modules/altair/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/altair/default.nix
@@ -33,18 +33,20 @@ buildPythonPackage rec {
     pandas
     six
     toolz
+    jinja2
   ] ++ lib.optionals (pythonOlder "3.5") [ typing ];
 
   checkInputs = [
     glibcLocales
     ipython
-    jinja2
     pytest
     recommonmark
     sphinx
     vega_datasets
   ];
 
+  pythonImportsCheck = [ "altair" ];
+
   checkPhase = ''
     export LANG=en_US.UTF-8
     # histogram_responsive.py attempt network access, and cannot be disabled through pytest flags
diff --git a/nixpkgs/pkgs/development/python-modules/android-backup/default.nix b/nixpkgs/pkgs/development/python-modules/android-backup/default.nix
new file mode 100644
index 000000000000..319c9514183e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/android-backup/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pycrypto
+, pythonOlder
+, enum34
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "android-backup";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bluec0re";
+    repo = "android-backup-tools";
+    rev = "v${version}";
+    sha256 = "0c436hv64ddqrjs77pa7z6spiv49pjflbmgg31p38haj5mzlrqvw";
+  };
+
+  propagatedBuildInputs = [
+    pycrypto
+  ] ++ lib.optional (pythonOlder "3.4") enum34;
+
+  checkPhase = ''
+    ${python.interpreter} -m android_backup.tests
+  '';
+
+  pythonImportsCheck = [ "android_backup" ];
+
+  meta = with lib; {
+    description = "Unpack and repack android backups";
+    homepage = https://github.com/bluec0re/android-backup-tools;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/androidtv/default.nix b/nixpkgs/pkgs/development/python-modules/androidtv/default.nix
index ec00c31147b0..98ab09fd8e6b 100644
--- a/nixpkgs/pkgs/development/python-modules/androidtv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/androidtv/default.nix
@@ -7,19 +7,18 @@
 , mock
 , pure-python-adb
 , pytestCheckHook
-, python
 }:
 
 buildPythonPackage rec {
   pname = "androidtv";
-  version = "0.0.57";
+  version = "0.0.58";
 
   # pypi does not contain tests, using github sources instead
   src = fetchFromGitHub {
     owner = "JeffLIrion";
     repo = "python-androidtv";
     rev = "v${version}";
-    sha256 = "sha256-xOLMUf72VHeBzbMnhJGOnUIKkflnY4rV9NS/P1aYLJc=";
+    sha256 = "sha256-/5sYiYRFa8XJJ4QSxLzJBHaKfAKsGETiVDHerNQ79U8=";
   };
 
   propagatedBuildInputs = [ adb-shell pure-python-adb ]
diff --git a/nixpkgs/pkgs/development/python-modules/aniso8601/default.nix b/nixpkgs/pkgs/development/python-modules/aniso8601/default.nix
index 538cb11db13f..90d34951e441 100644
--- a/nixpkgs/pkgs/development/python-modules/aniso8601/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aniso8601/default.nix
@@ -3,7 +3,7 @@
 
 buildPythonPackage rec {
   pname = "aniso8601";
-  version = "8.1.0";
+  version = "8.1.1";
 
   meta = with lib; {
     description = "Parses ISO 8601 strings.";
@@ -17,6 +17,6 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "246bf8d3611527030889e6df970878969d3a2f760ba3eb694fa1fb10e6ce53f9";
+    sha256 = "be08b19c19ca527af722f2d4ba4dc569db292ec96f7de963746df4bb0bff9250";
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ansible-lint/default.nix b/nixpkgs/pkgs/development/python-modules/ansible-lint/default.nix
index 2718ba7670b5..e404edddbcf3 100644
--- a/nixpkgs/pkgs/development/python-modules/ansible-lint/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ansible-lint/default.nix
@@ -4,52 +4,71 @@
 , isPy27
 , ansible
 , pyyaml
-, setuptools_scm
-, ruamel_yaml
+, ruamel-yaml
 , rich
 , pytestCheckHook
-, pytestcov
-, pytest_xdist
+, pytest-xdist
 , git
+, wcmatch
+, enrich
+, python
 }:
 
 buildPythonPackage rec {
   pname = "ansible-lint";
-  version = "4.3.7";
-  # pip is not able to import version info on raumel.yaml
+  version = "5.0.2";
   disabled = isPy27;
+  format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0kwwv9dv9rgsqvp15r2vma7hii9lkkqn0n2irvp5h32cbhzzq4hh";
+    sha256 = "sha256-vgt/KqNozTPaON/I19SybBZuo7bbl3Duq5dTBTMlj44=";
   };
 
-  format = "pyproject";
-
-  nativeBuildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ pyyaml ansible ruamel_yaml rich ];
-  checkInputs = [ pytestCheckHook pytestcov pytest_xdist git ];
-
   postPatch = ''
-    patchShebangs bin/ansible-lint
-    substituteInPlace setup.cfg \
-      --replace "setuptools_scm_git_archive>=1.0" ""
+    substituteInPlace src/ansiblelint/file_utils.py \
+      --replace 'raise RuntimeError("Unable to determine file type for %s" % pathex)' 'return "playbook"'
   '';
 
-  # give a hint to setuptools_scm on package version
-  preBuild = ''
-    export SETUPTOOLS_SCM_PRETEND_VERSION="v${version}"
+  buildInputs = [ python ];
+
+  propagatedBuildInputs = [ ansible enrich pyyaml rich ruamel-yaml wcmatch ];
+
+  checkInputs = [ pytestCheckHook pytest-xdist git ];
+
+  preCheck = ''
+    # ansible wants to write to $HOME and crashes if it can't
     export HOME=$(mktemp -d)
-  '';
+    export PATH=$PATH:${lib.makeBinPath [ ansible ]}
 
-  checkPhase = ''
-    pytest -k 'not test_run_playbook_github and not test_run_single_role_path_no_trailing_slash_script'
+    # create a working ansible-lint executable
+    export PATH=$PATH:$PWD/src/ansiblelint
+    ln -rs src/ansiblelint/__main__.py src/ansiblelint/ansible-lint
+    patchShebangs src/ansiblelint/__main__.py
   '';
 
+  disabledTests = [
+    # requires network
+    "test_prerun_reqs_v1"
+    "test_prerun_reqs_v2"
+    # Assertion error with negative numbers; maybe requieres an ansible update?
+    "test_negative"
+    "test_example"
+    "test_playbook"
+    "test_included_tasks"
+    "test_long_line"
+
+    "test_get_yaml_files_umlaut"
+    "test_run_inside_role_dir"
+    "test_role_handler_positive"
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ansible ]}" ];
+
   meta = with lib; {
-    homepage = "https://github.com/ansible/ansible-lint";
+    homepage = "https://github.com/ansible-community/ansible-lint";
     description = "Best practices checker for Ansible";
     license = licenses.mit;
-    maintainers = [ maintainers.sengaya ];
+    maintainers = with maintainers; [ sengaya SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ansible-runner/default.nix b/nixpkgs/pkgs/development/python-modules/ansible-runner/default.nix
index 7f29bb5695c6..ba11ef11e3b8 100644
--- a/nixpkgs/pkgs/development/python-modules/ansible-runner/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ansible-runner/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "ansible-runner";
-  version = "1.4.6";
+  version = "1.4.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "53605de32f7d3d3442a6deb8937bf1d9c1f91c785e3f71003d22c3e63f85c71d";
+    sha256 = "1bb56f9061c3238d89ec8871bc842f5b8d0e868f892347e8455c98d5b6fa58a1";
   };
 
   checkInputs = [ pytest mock ];
diff --git a/nixpkgs/pkgs/development/python-modules/anyio/default.nix b/nixpkgs/pkgs/development/python-modules/anyio/default.nix
index 1c3c72a8e2c7..e6cc3182487a 100644
--- a/nixpkgs/pkgs/development/python-modules/anyio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/anyio/default.nix
@@ -16,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "anyio";
-  version = "2.1.0";
+  version = "2.2.0";
   format = "pyproject";
   disabled = pythonOlder "3.7";
 
@@ -24,7 +24,7 @@ buildPythonPackage rec {
     owner = "agronholm";
     repo = pname;
     rev = version;
-    sha256 = "0k5c4a7xcbiyah8rgrfh2hwj3l3a9al7rh2lyz9ip4rr1hwnqvaf";
+    sha256 = "0ram1niv2lg9qj53zssph104a4kxl8f94ilfn6mibn034m3ikcc8";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/apache-airflow/default.nix b/nixpkgs/pkgs/development/python-modules/apache-airflow/default.nix
index 705b7b721f8f..82d7a8cc32af 100644
--- a/nixpkgs/pkgs/development/python-modules/apache-airflow/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/apache-airflow/default.nix
@@ -1,7 +1,6 @@
 { lib
 , stdenv
 , buildPythonPackage
-, fetchPypi
 , fetchFromGitHub
 , fetchpatch
 , alembic
@@ -47,10 +46,7 @@
 , tzlocal
 , unicodecsv
 , zope_deprecation
-, enum34
-, typing
 , nose
-, python
 , pythonOlder
 , pythonAtLeast
 }:
diff --git a/nixpkgs/pkgs/development/python-modules/apispec/default.nix b/nixpkgs/pkgs/development/python-modules/apispec/default.nix
index ac6eb0957778..13fb71d7f2f2 100644
--- a/nixpkgs/pkgs/development/python-modules/apispec/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/apispec/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "apispec";
-  version = "4.2.0";
+  version = "4.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fbbd069caa22c0270bc71a5330b46b5a4e1984d8345b9236ca02fbca23094647";
+    sha256 = "5ec0fe72f1422a1198973fcbb48d0eb5c7390f4b0fbe55474fce999ad6826a9b";
   };
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/appnope/default.nix b/nixpkgs/pkgs/development/python-modules/appnope/default.nix
index 2380fb7d8adf..e4f1262a6c60 100644
--- a/nixpkgs/pkgs/development/python-modules/appnope/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/appnope/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "appnope";
-  version = "0.1.0";
+  version = "0.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71";
+    sha256 = "dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a";
   };
 
   meta = {
diff --git a/nixpkgs/pkgs/development/python-modules/apprise/default.nix b/nixpkgs/pkgs/development/python-modules/apprise/default.nix
index c3f318503884..fad9e7d03fa8 100644
--- a/nixpkgs/pkgs/development/python-modules/apprise/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/apprise/default.nix
@@ -1,21 +1,21 @@
 { lib, buildPythonPackage, fetchPypi, installShellFiles
-, Babel, requests, requests_oauthlib, six, click, markdown, pyyaml
+, Babel, requests, requests_oauthlib, six, click, markdown, pyyaml, cryptography
 , pytestrunner, coverage, flake8, mock, pytestCheckHook, pytestcov, tox, gntp, sleekxmpp
 }:
 
 buildPythonPackage rec {
   pname = "apprise";
-  version = "0.9.0";
+  version = "0.9.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bab3563bc1e0c64938c4c7700112797bd99f20eb5d4a3e6038338bc8f060e153";
+    sha256 = "sha256-FW5gt35yoXVr2+hiGBDJ/5jFFfIpn2Z9sDN8acoO4FI=";
   };
 
   nativeBuildInputs = [ Babel installShellFiles ];
 
   propagatedBuildInputs = [
-    requests requests_oauthlib six click markdown pyyaml
+    cryptography requests requests_oauthlib six click markdown pyyaml
   ];
 
   checkInputs = [
@@ -28,6 +28,8 @@ buildPythonPackage rec {
     installManPage packaging/man/apprise.1
   '';
 
+  pythonImportsCheck = [ "apprise" ];
+
   meta = with lib; {
     homepage = "https://github.com/caronc/apprise";
     description = "Push Notifications that work with just about every platform!";
diff --git a/nixpkgs/pkgs/development/python-modules/apptools/default.nix b/nixpkgs/pkgs/development/python-modules/apptools/default.nix
index a03b051b11d2..4ee3add12b13 100644
--- a/nixpkgs/pkgs/development/python-modules/apptools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/apptools/default.nix
@@ -1,34 +1,44 @@
-{ lib, fetchPypi, buildPythonPackage, fetchpatch
-, configobj, six, traitsui
-, nose, tables, pandas
+{ lib, fetchPypi, buildPythonPackage
+, fetchpatch, configobj, six, traitsui
+, pytestCheckHook, tables, pandas
+, pythonOlder, importlib-resources
 }:
 
 buildPythonPackage rec {
   pname = "apptools";
-  version = "4.5.0";
+  version = "5.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "10h52ibhr2aw076pivqxiajr9rpcr1mancg6xlpxzckcm3if02i6";
+    sha256 = "12x5lcs1cllpybz7f0i1lcwvmqsaa5n818wb2165lj049wqxx4yh";
   };
 
-  # PyTables issue; should be merged in next post-4.5.0 release (#117)
-  patches = [ (fetchpatch {
-      url = "https://github.com/enthought/apptools/commit/3734289d1a0ebd8513fa67f75288add31ed0113c.patch";
-      sha256 = "001012q1ib5cbib3nq1alh9ckzj588bfrywr8brkd1f6y1pgvngk";
+  patches = [
+    # python39: importlib_resources -> importlib.resources. This patch will be included
+    # in the next release after 5.1.0.
+    (fetchpatch {
+      url = "https://github.com/enthought/apptools/commit/0ae4f52f19a8c0ca9d7926e17c7de949097f24b4.patch";
+      sha256 = "165aiwjisr5c3lasg7xblcha7y1y5bq23vi3g9gc80c24bzwcbsw";
     })
   ];
 
-  propagatedBuildInputs = [ configobj six traitsui ];
+  propagatedBuildInputs = [
+    configobj
+    six
+    traitsui
+  ] ++ lib.optionals (pythonOlder "3.9") [
+    importlib-resources
+  ];
 
   checkInputs = [
-    nose
     tables
     pandas
+    pytestCheckHook
   ];
 
-  doCheck = true;
-  checkPhase = "HOME=$TMP nosetests";
+  preCheck = ''
+    export HOME=$TMP
+  '';
 
   meta = with lib; {
     description = "Set of packages that Enthought has found useful in creating a number of applications.";
diff --git a/nixpkgs/pkgs/development/python-modules/aqualogic/default.nix b/nixpkgs/pkgs/development/python-modules/aqualogic/default.nix
new file mode 100644
index 000000000000..9a23ebd82a9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/aqualogic/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, pyserial
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "aqualogic";
+  version = "2.6";
+
+  src = fetchFromGitHub {
+    owner = "swilson";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-dAC/0OjvrC8J/5pu5vcOKV/WqgkAlz0LuFl0up6FQRM=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "allow-iobase-objects.patch";
+      url = "https://github.com/swilson/aqualogic/commit/185fe25a86c82c497a55c78914b55ed39f5ca339.patch";
+      sha256 = "072jrrsqv86bn3skibjc57111jlpm8pq2503997fl3h4v6ziwdxg";
+    })
+  ];
+
+  propagatedBuildInputs = [ pyserial ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "aqualogic" ];
+
+  meta = with lib; {
+    description = "Python library to interface with Hayward/Goldline AquaLogic/ProLogic pool controllers";
+    homepage = "https://github.com/swilson/aqualogic";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/archinfo/default.nix b/nixpkgs/pkgs/development/python-modules/archinfo/default.nix
index 79f21a2762c5..b06e0320dc92 100644
--- a/nixpkgs/pkgs/development/python-modules/archinfo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/archinfo/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonPackage rec {
   pname = "archinfo";
-  version = "9.0.5739";
+  version = "9.0.5903";
 
   src = fetchFromGitHub {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-6qjX0r2vLYgJdrKBVKedplfa1yhWv9tBvTu5BsViXBc=";
+    sha256 = "sha256-4e+ZGIt/ouZj5rsmaVxUrz8gAq4Yq2+Qx4jdOojB4Sw=";
   };
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/argon2_cffi/default.nix b/nixpkgs/pkgs/development/python-modules/argon2_cffi/default.nix
index 85c6c4b638a5..eec01adfebca 100644
--- a/nixpkgs/pkgs/development/python-modules/argon2_cffi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/argon2_cffi/default.nix
@@ -12,12 +12,12 @@
 
 buildPythonPackage rec {
   pname = "argon2_cffi";
-  version = "19.2.0";
+  version = "20.1.0";
 
   src = fetchPypi {
     pname = "argon2-cffi";
     inherit version;
-    sha256 = "ffaa623eea77b497ffbdd1a51e941b33d3bf552c60f14dbee274c4070677bda3";
+    sha256 = "0zgr4mnnm0p4i99023safb0qb8cgvl202nly1rvylk2b7qnrn0nq";
   };
 
   propagatedBuildInputs = [ cffi six ] ++ lib.optional (!isPy3k) enum34;
diff --git a/nixpkgs/pkgs/development/python-modules/arrayqueues/default.nix b/nixpkgs/pkgs/development/python-modules/arrayqueues/default.nix
index 82c8fc93267f..79a44ad42cdd 100644
--- a/nixpkgs/pkgs/development/python-modules/arrayqueues/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/arrayqueues/default.nix
@@ -4,12 +4,12 @@
 
 buildPythonPackage rec {
   pname = "arrayqueues";
-  version = "1.2.0b0";
+  version = "1.3.1";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1gvrxb2rw0dk469wq5azylar7hhanfp07gl5mc6ajdbgz9gsd6ln";
+    sha256 = "a955df768e39d459de28c7ea10ee02f67b1c70996cfa229846ab98df77a6fb69";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/asdf/default.nix b/nixpkgs/pkgs/development/python-modules/asdf/default.nix
index 4006a034d48d..33513b2289c5 100644
--- a/nixpkgs/pkgs/development/python-modules/asdf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asdf/default.nix
@@ -1,48 +1,51 @@
 { lib
+, astropy
 , buildPythonPackage
 , fetchPypi
-, pytest-astropy
-, semantic-version
-, pyyaml
 , jsonschema
-, six
 , numpy
-, isPy27
-, astropy
-, setuptools_scm
-, setuptools
+, packaging
+, pytest-astropy
+, pytestCheckHook
+, pythonOlder
+, pyyaml
+, semantic-version
+, setuptools-scm
 }:
 
 buildPythonPackage rec {
   pname = "asdf";
-  version = "2.7.1";
-  disabled = isPy27;
+  version = "2.7.3";
+  disabled = pythonOlder "3.6";
   format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4ba2e31cb24b974a10dfae3edee23db2e6bea2d00608604d062366aa3af6e81a";
+    sha256 = "11dyr295wn5m2pcynlwj7kgw9xr66msfvwn1m6a5vv13vzj19spp";
   };
 
-  checkInputs = [
-    pytest-astropy
-    astropy
-  ];
+  nativeBuildInputs = [ setuptools-scm ];
 
   propagatedBuildInputs = [
-    semantic-version
-    pyyaml
     jsonschema
-    six
     numpy
-    setuptools_scm
-    setuptools
+    packaging
+    pyyaml
+    semantic-version
   ];
 
-  checkPhase = ''
-    PY_IGNORE_IMPORTMISMATCH=1 pytest
+  checkInputs = [
+    pytest-astropy
+    astropy
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export PY_IGNORE_IMPORTMISMATCH=1
   '';
 
+  pythonImportsCheck = [ "asdf" ];
+
   meta = with lib; {
     description = "Python tools to handle ASDF files";
     homepage = "https://github.com/spacetelescope/asdf";
diff --git a/nixpkgs/pkgs/development/python-modules/ase/default.nix b/nixpkgs/pkgs/development/python-modules/ase/default.nix
index fcbeb1f1f4d9..868402577256 100644
--- a/nixpkgs/pkgs/development/python-modules/ase/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ase/default.nix
@@ -12,12 +12,12 @@
 
 buildPythonPackage rec {
   pname = "ase";
-  version = "3.20.1";
+  version = "3.21.1";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "72c81f21b6adb907595fce8d883c0231301cbd8e9f6e5ce8e98bab927054daca";
+    sha256 = "78b01d88529d5f604e76bc64be102d48f058ca50faad72ac740d717545711c7b";
   };
 
   propagatedBuildInputs = [ numpy scipy matplotlib flask pillow psycopg2 ];
diff --git a/nixpkgs/pkgs/development/python-modules/asteval/default.nix b/nixpkgs/pkgs/development/python-modules/asteval/default.nix
index 0d4d41a54730..a55aef99ecbb 100644
--- a/nixpkgs/pkgs/development/python-modules/asteval/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asteval/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "asteval";
-  version = "0.9.22";
+  version = "0.9.23";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "newville";
     repo = pname;
     rev = version;
-    sha256 = "sha256-93IBv6beYE/VTKJCWUbA1QTRdmQdn2kg35KBw6kmDis=";
+    sha256 = "sha256-9Zxb2EzB6nxDQHdlryFiwyNW+76VvysLUB78bXKzfv0=";
   };
 
   checkInputs = [ pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/astroid/default.nix b/nixpkgs/pkgs/development/python-modules/astroid/default.nix
index 49f04bcb9116..468488ec0cad 100644
--- a/nixpkgs/pkgs/development/python-modules/astroid/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/astroid/default.nix
@@ -1,34 +1,39 @@
-{ lib, fetchPypi, buildPythonPackage, pythonOlder, isPyPy, pythonAtLeast
-, lazy-object-proxy, six, wrapt, typing, typed-ast
-, pytestrunner, pytest
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, isPyPy
+, lazy-object-proxy
+, wrapt
+, typed-ast
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "astroid";
-  version = "2.4.2";
+  version = "2.5";
 
-  disabled = pythonOlder "3.4" || pythonAtLeast "3.9";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703";
+    sha256 = "03dzhjrsc5d2whyjngfrwvxn42058k0cjjr85x2wqzai8psr475k";
   };
 
-  postPatch = ''
-    substituteInPlace astroid/__pkginfo__.py --replace "lazy_object_proxy==1.4.*" "lazy_object_proxy"
-  '';
-
   # From astroid/__pkginfo__.py
-  propagatedBuildInputs = [ lazy-object-proxy six wrapt ]
-    ++ lib.optional (pythonOlder "3.5") typing
-    ++ lib.optional (!isPyPy) typed-ast;
+  propagatedBuildInputs = [
+    lazy-object-proxy
+    wrapt
+  ] ++ lib.optional (!isPyPy && pythonOlder "3.8") typed-ast;
 
-  checkInputs = [ pytestrunner pytest ];
+  checkInputs = [
+    pytestCheckHook
+  ];
 
   meta = with lib; {
     description = "An abstract syntax tree for Python with inference support";
     homepage = "https://github.com/PyCQA/astroid";
-    license = licenses.lgpl2;
+    license = licenses.lgpl21Plus;
     platforms = platforms.all;
     maintainers = with maintainers; [ nand0p ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/asttokens/default.nix b/nixpkgs/pkgs/development/python-modules/asttokens/default.nix
index 0f090d14abad..ecbbfa909112 100644
--- a/nixpkgs/pkgs/development/python-modules/asttokens/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asttokens/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchPypi, buildPythonPackage,
+{ lib, fetchPypi, fetchpatch, buildPythonPackage,
   setuptools_scm, toml, six, astroid, pytest
 }:
 
@@ -11,6 +11,16 @@ buildPythonPackage rec {
     sha256 = "0a2ixiz04aw4p0aivxh47k3fa9ql804l3y5iv5gcih9aizi5fbm4";
   };
 
+  patches = [
+    # Fixes compatibility with python 3.9, will be included in the next release
+    # after 2.0.4
+    (fetchpatch {
+      url = "https://github.com/gristlabs/asttokens/commit/d8ff80ee7d2e64c5e1daf50cc38eb99663f1b1ac.patch";
+      sha256 = "19y8n8vpzr2ijldbq5rh19sf0vz5azqqpkb9bx0ljjg98h6k7kjj";
+      excludes = [ "setup.cfg" ];
+    })
+  ];
+
   propagatedBuildInputs = [ setuptools_scm toml six astroid ];
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/async-dns/default.nix b/nixpkgs/pkgs/development/python-modules/async-dns/default.nix
new file mode 100644
index 000000000000..fdf240f5ba96
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/async-dns/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, poetry-core
+, python
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "async-dns";
+  version = "1.1.9";
+  disabled = pythonOlder "3.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "gera2ld";
+    repo = "async_dns";
+    rev = "v${version}";
+    sha256 = "1z8j0s3dwcyavarhx41q75k1cmfzmwiqdh4svv3v15np26cywyag";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  patches = [
+    # Switch to poetry-core, https://github.com/gera2ld/async_dns/pull/22
+    # Can be remove for async-dns>1.1.9
+    (fetchpatch {
+      name = "switch-to-poetry-core.patch";
+      url = "https://github.com/gera2ld/async_dns/commit/25fee497aae3bde0ddf9f8804d249a27edbe607e.patch";
+      sha256 = "0w4zlppnp1a2q1wasc95ymqx3djswl32y5nw6fvz3nn8jg4gc743";
+    })
+  ];
+
+  checkPhase = ''
+    export HOME=$TMPDIR
+    # Test needs network access
+    rm tests/test_resolver.py
+    ${python.interpreter} -m unittest
+  '';
+
+  pythonImportsCheck = [ "async_dns" ];
+
+  meta = with lib; {
+    description = "Python DNS library";
+    homepage = "https://github.com/gera2ld/async_dns";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/async-upnp-client/default.nix b/nixpkgs/pkgs/development/python-modules/async-upnp-client/default.nix
index 6697cb5d13e8..a25916bc99c1 100644
--- a/nixpkgs/pkgs/development/python-modules/async-upnp-client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/async-upnp-client/default.nix
@@ -1,17 +1,26 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder
-, voluptuous, aiohttp, async-timeout, python-didl-lite, defusedxml
-, pytest_6, pytest-asyncio }:
+{ lib
+, aiohttp
+, async-timeout
+, buildPythonPackage
+, defusedxml
+, fetchFromGitHub
+, pytest-asyncio
+, pytestCheckHook
+, python-didl-lite
+, pythonOlder
+, voluptuous
+}:
 
 buildPythonPackage rec {
   pname = "async-upnp-client";
-  version = "0.14.15";
+  version = "0.16.0";
   disabled = pythonOlder "3.5";
 
   src = fetchFromGitHub {
     owner = "StevenLooman";
     repo = "async_upnp_client";
     rev = version;
-    sha256 = "1mr65msdc51wq7326z3q41x79yi9dsmcjrmyzkgj9h9vgpxdk2nw";
+    sha256 = "sha256-vgy/zn1Xm7Fm7u/YMe/nJa3tyRNKx/WHz0AHfhFaVKo=";
   };
 
   propagatedBuildInputs = [
@@ -23,12 +32,14 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytest_6
+    pytestCheckHook
     pytest-asyncio
   ];
 
+  pythonImportsCheck = [ "async_upnp_client" ];
+
   meta = with lib; {
-    description = "Asyncio UPnP Client library for Python/asyncio.";
+    description = "Asyncio UPnP Client library for Python";
     homepage = "https://github.com/StevenLooman/async_upnp_client";
     license = licenses.asl20;
     maintainers = with maintainers; [ hexa ];
diff --git a/nixpkgs/pkgs/development/python-modules/asyncio-dgram/default.nix b/nixpkgs/pkgs/development/python-modules/asyncio-dgram/default.nix
index 14c800f568b0..2360d170f38e 100644
--- a/nixpkgs/pkgs/development/python-modules/asyncio-dgram/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asyncio-dgram/default.nix
@@ -8,13 +8,13 @@
 
 buildPythonPackage rec {
   pname = "asyncio-dgram";
-  version = "1.1.1";
+  version = "1.2.0";
 
   src = fetchFromGitHub {
     owner = "jsbronder";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1zkmjvq47zw2fsbnzhr5mh9rsazx0z1f8m528ash25jrxsza5crm";
+    sha256 = "sha256-wgcL/BdNjzitkkaGyRUQbW1uv1enLDnHk30YHClK58o=";
   };
 
   # OSError: AF_UNIX path too long
diff --git a/nixpkgs/pkgs/development/python-modules/asyncio-nats-client/default.nix b/nixpkgs/pkgs/development/python-modules/asyncio-nats-client/default.nix
new file mode 100644
index 000000000000..a7feac7312f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/asyncio-nats-client/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, ed25519
+, fetchFromGitHub
+, nats-server
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "asyncio-nats-client";
+  version = "0.11.4";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = "nats.py";
+    rev = "v${version}";
+    sha256 = "1aj57xi2rj1xswq8air13xdsll1ybpi0nmz5f6jq01azm0zy9xyd";
+  };
+
+  propagatedBuildInputs = [
+    ed25519
+  ];
+
+  checkInputs = [
+    nats-server
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "--cov=nats --cov-report html" ""
+  '';
+
+  disabledTests = [
+    # RuntimeError: Event loop is closed
+    "test_subscribe_no_echo"
+    "test_reconnect_to_new_server_with_auth"
+  ];
+
+  pythonImportsCheck = [ "nats.aio" ];
+
+  meta = with lib; {
+    description = "Python client for NATS.io";
+    homepage = "https://github.com/nats-io/nats.py";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/asyncio_mqtt/default.nix b/nixpkgs/pkgs/development/python-modules/asyncio_mqtt/default.nix
index 088681a19895..bb2ead70d716 100644
--- a/nixpkgs/pkgs/development/python-modules/asyncio_mqtt/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asyncio_mqtt/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "asyncio_mqtt";
-  version = "0.8.0";
+  version = "0.8.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0hwfgww1ywhjvkpnvafbk2hxlqkrngfdz0sx5amzw68srzazvl6g";
+    sha256 = "c1b3bea68a35c83d290a89903079ffb311106195cd56867e201633a1ee1cad0c";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/asyncpg/default.nix b/nixpkgs/pkgs/development/python-modules/asyncpg/default.nix
index 826ee6103fc0..674212bf922f 100644
--- a/nixpkgs/pkgs/development/python-modules/asyncpg/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asyncpg/default.nix
@@ -1,14 +1,14 @@
-{ lib, isPy3k, fetchPypi, fetchpatch, buildPythonPackage
+{ lib, isPy3k, fetchPypi, buildPythonPackage
 , uvloop, postgresql }:
 
 buildPythonPackage rec {
   pname = "asyncpg";
-  version = "0.21.0";
+  version = "0.22.0";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "53cb2a0eb326f61e34ef4da2db01d87ce9c0ebe396f65a295829df334e31863f";
+    sha256 = "348ad471d9bdd77f0609a00c860142f47c81c9123f4064d13d65c8569415d802";
   };
 
   checkInputs = [
@@ -16,6 +16,8 @@ buildPythonPackage rec {
     postgresql
   ];
 
+  pythonImportsCheck = [ "asyncpg" ];
+
   meta = with lib; {
     homepage = "https://github.com/MagicStack/asyncpg";
     description = "An asyncio PosgtreSQL driver";
diff --git a/nixpkgs/pkgs/development/python-modules/asyncwhois/default.nix b/nixpkgs/pkgs/development/python-modules/asyncwhois/default.nix
index 077c5078caae..fe055d7f1972 100644
--- a/nixpkgs/pkgs/development/python-modules/asyncwhois/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asyncwhois/default.nix
@@ -1,20 +1,23 @@
 { lib
+, aiodns
+, asynctest
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
+, pytestCheckHook
 , pythonOlder
-, aiodns
 , tldextract
-, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "asyncwhois";
-  version = "0.2.3";
-  disabled = pythonOlder "3.6";
+  version = "0.3.1";
+  disabled = pythonOlder "3.7";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "95df90d5be581e3c69398abc6a3ec69a4e568852d9d6df4582bfcc0e22ffb3bb";
+  src = fetchFromGitHub {
+    owner = "pogzyb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1wp6pwnc1inzzn9nhkwq9m9ab1aylw0hzq94w6p2dsm2njfqma8h";
   };
 
   propagatedBuildInputs = [
@@ -22,9 +25,24 @@ buildPythonPackage rec {
     tldextract
   ];
 
-  # tests are only present at GitHub but not the released source tarballs
-  # https://github.com/pogzyb/asyncwhois/issues/10
-  doCheck = false;
+  checkInputs = [
+    asynctest
+    pytestCheckHook
+  ];
+
+  # Disable tests that require network access
+  disabledTests = [
+    "test_pywhois_aio_get_hostname_from_ip"
+    "test_pywhois_get_hostname_from_ip"
+    "test_pywhois_aio_lookup_ipv4"
+    "test_not_found"
+    "test_aio_from_whois_cmd"
+    "test_aio_get_hostname_from_ip"
+    "test_from_whois_cmd"
+    "test_get_hostname_from_ip"
+    "test_whois_query_run"
+  ];
+
   pythonImportsCheck = [ "asyncwhois" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/asysocks/default.nix b/nixpkgs/pkgs/development/python-modules/asysocks/default.nix
index b5028e4bebc3..21a3ed2a8fe3 100644
--- a/nixpkgs/pkgs/development/python-modules/asysocks/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/asysocks/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "asysocks";
-  version = "0.1.0";
+  version = "0.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-NH53FaOJx79q5IIYeiz976H9Q8Vnw13qFw4zgRc2TTw=";
+    sha256 = "sha256-7EzSALAJcx8BNHX44FeeiSPRcTe9UFHXQ4IoSKxMU8w=";
   };
 
   # Upstream hasn't release the tests yet
diff --git a/nixpkgs/pkgs/development/python-modules/atpublic/default.nix b/nixpkgs/pkgs/development/python-modules/atpublic/default.nix
index 41353598f895..f21733991044 100644
--- a/nixpkgs/pkgs/development/python-modules/atpublic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/atpublic/default.nix
@@ -7,12 +7,12 @@
 
 buildPythonPackage rec {
   pname = "atpublic";
-  version = "2.1.1";
+  version = "2.1.3";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fa1d48bcb85bbed90f6ffee6936578f65ff0e93aa607397bd88eaeb408bd96d8";
+    sha256 = "e0b274759bfbcb6eeb7c7b44a7a46391990a43ac77aa55359b075765b54d9f5d";
   };
 
   propagatedBuildInputs = lib.optionals (pythonOlder "3.8") [
diff --git a/nixpkgs/pkgs/development/python-modules/auroranoaa/default.nix b/nixpkgs/pkgs/development/python-modules/auroranoaa/default.nix
new file mode 100644
index 000000000000..5d3fe1ff15dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/auroranoaa/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "auroranoaa";
+  version = "0.0.2";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "djtimca";
+    repo = "aurora-api";
+    rev = version;
+    sha256 = "0bh8amixkg3xigwh3ryra22x6kzhbdassmf1iqv20lhbvzmsqjv0";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "auroranoaa" ];
+
+  meta = with lib; {
+    description = "Python wrapper for the Aurora API";
+    homepage = "https://github.com/djtimca/aurora-api";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/autopep8/default.nix b/nixpkgs/pkgs/development/python-modules/autopep8/default.nix
index c748c0cb8c1a..fa3482c07951 100644
--- a/nixpkgs/pkgs/development/python-modules/autopep8/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/autopep8/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "autopep8";
-  version = "1.5.4";
+  version = "1.5.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d21d3901cb0da6ebd1e83fc9b0dfbde8b46afc2ede4fe32fbda0c7c6118ca094";
+    sha256 = "cae4bc0fb616408191af41d062d7ec7ef8679c7f27b068875ca3a9e2878d5443";
   };
 
   propagatedBuildInputs = [ pycodestyle toml ];
diff --git a/nixpkgs/pkgs/development/python-modules/avro-python3/default.nix b/nixpkgs/pkgs/development/python-modules/avro-python3/default.nix
index e0294246fb2d..fb51b698ed82 100644
--- a/nixpkgs/pkgs/development/python-modules/avro-python3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/avro-python3/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "avro-python3";
-  version = "1.10.1";
+  version = "1.10.2";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9027abeab63dd9b66bd3c564fa0670c70f78027ecb1978d96c6af7ed415b626b";
+    sha256 = "3b63f24e6b04368c3e4a6f923f484be0230d821aad65ac36108edbff29e9aaab";
   };
 
   buildInputs = [ pycodestyle isort ];
diff --git a/nixpkgs/pkgs/development/python-modules/avro/default.nix b/nixpkgs/pkgs/development/python-modules/avro/default.nix
index 5a38e86eee37..4c1fb77dc69b 100644
--- a/nixpkgs/pkgs/development/python-modules/avro/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/avro/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "avro";
-  version = "1.10.1";
+  version = "1.10.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b3a405df5aa8654b992d2aca7b80482b858a1919a44dc0b10a682162e8ee340a";
+    sha256 = "381b990cc4c4444743c3297348ffd46e0c3a5d7a17e15b2f4a9042f6e955c31a";
   };
 
   patchPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/awesomeversion/default.nix b/nixpkgs/pkgs/development/python-modules/awesomeversion/default.nix
index 2a532beca473..09a4c9460d1c 100644
--- a/nixpkgs/pkgs/development/python-modules/awesomeversion/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/awesomeversion/default.nix
@@ -8,14 +8,14 @@
 
 buildPythonPackage rec {
   pname = "awesomeversion";
-  version = "21.2.2";
+  version = "21.4.0";
   disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = "ludeeus";
     repo = pname;
     rev = version;
-    sha256 = "1yl09csypa64nhsw7dc6kj8iybm1wkhfzylyfyq8b7jpwdx7ql31";
+    sha256 = "sha256-ulByke1sKVcDdBhAz/fxdNFJ0PSjYVdnBcO+GYEnZUQ=";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/awkward/default.nix b/nixpkgs/pkgs/development/python-modules/awkward/default.nix
index 298074f300d9..a343306a5b9e 100644
--- a/nixpkgs/pkgs/development/python-modules/awkward/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/awkward/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "awkward";
-  version = "1.0.2";
+  version = "1.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3468cb80cab51252a1936e5e593c7df4588ea0e18dcb6fb31e3d2913ba883928";
+    sha256 = "4ae8371d9e6d5bd3e90f3686b433cebc0541c88072655d2c75ec58e79b5d6943";
   };
 
   nativeBuildInputs = [ cmake ];
@@ -25,6 +25,7 @@ buildPythonPackage rec {
 
   checkInputs = [ pytestCheckHook numba ];
   dontUseSetuptoolsCheck = true;
+  disabledTestPaths = [ "tests-cuda" ];
 
   meta = with lib; {
     description = "Manipulate JSON-like data with NumPy-like idioms";
diff --git a/nixpkgs/pkgs/development/python-modules/awkward0/default.nix b/nixpkgs/pkgs/development/python-modules/awkward0/default.nix
index c248c81da751..3783f9776cd1 100644
--- a/nixpkgs/pkgs/development/python-modules/awkward0/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/awkward0/default.nix
@@ -2,33 +2,31 @@
 , buildPythonPackage
 , fetchFromGitHub
 , numpy
-, pandas
 , pytestrunner
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "awkward0";
-  version = "0.15.2";
+  version = "0.15.5";
 
   src = fetchFromGitHub {
     owner = "scikit-hep";
     repo = "awkward-0.x";
     rev = version;
-    sha256 = "sha256-C6/byIGcabGjws5QI9sh5BO2M4Lhqkooh4mSjUEKCKU=";
+    sha256 = "039pxzgll2yz8xpr6bw788ymvgvqgna5kgl9m6d9mzi4yhbjsjpx";
   };
 
   nativeBuildInputs = [ pytestrunner ];
 
   propagatedBuildInputs = [ numpy ];
 
-  checkInputs = [ pandas pytestCheckHook ];
+  checkInputs = [ pytestCheckHook ];
 
-  checkPhase = ''
-    # Almost all tests in this file fail
-    rm tests/test_persist.py
-    py.test
-  '';
+  # Can't find a fixture
+  disabledTests = [ "test_import_pandas" ];
+
+  pythonImportsCheck = [ "awkward0" ];
 
   meta = with lib; {
     description = "Manipulate jagged, chunky, and/or bitmasked arrays as easily as Numpy";
diff --git a/nixpkgs/pkgs/development/python-modules/aws-adfs/default.nix b/nixpkgs/pkgs/development/python-modules/aws-adfs/default.nix
index ce4c6f789263..461ce9d90d9d 100644
--- a/nixpkgs/pkgs/development/python-modules/aws-adfs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/aws-adfs/default.nix
@@ -1,6 +1,19 @@
-{ lib, buildPythonPackage, fetchPypi
-, pytest, pytestrunner, pytestcov, mock, glibcLocales, lxml, botocore
-, requests, requests-kerberos, click, configparser, fido2, isPy27 }:
+{ lib
+, botocore
+, buildPythonPackage
+, click
+, configparser
+, fetchPypi
+, fido2
+, glibcLocales
+, isPy27
+, lxml
+, mock
+, pyopenssl
+, pytestCheckHook
+, requests
+, requests-kerberos
+}:
 
 buildPythonPackage rec {
   pname = "aws-adfs";
@@ -12,9 +25,28 @@ buildPythonPackage rec {
     sha256 = "6a78bd31477ea9988166215ae86abcbfe1413bee20373ecdf0dd170b7290db55";
   };
 
+  propagatedBuildInputs = [
+    botocore
+    click
+    configparser
+    fido2
+    lxml
+    pyopenssl
+    requests
+    requests-kerberos
+  ];
+
+  checkInputs = [
+    glibcLocales
+    mock
+    pytestCheckHook
+  ];
+
   # Relax version constraint
-  patchPhase = ''
-    sed -i 's/coverage < 4/coverage/' setup.py
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace 'coverage < 4' 'coverage' \
+      --replace 'fido2>=0.8.1,<0.9.0' 'fido2>=0.8.1,<1.0.0'
   '';
 
   # Test suite writes files to $HOME/.aws/, or /homeless-shelter if unset
@@ -23,8 +55,7 @@ buildPythonPackage rec {
   # Required for python3 tests, along with glibcLocales
   LC_ALL = "en_US.UTF-8";
 
-  checkInputs = [ glibcLocales pytest pytestrunner pytestcov mock ];
-  propagatedBuildInputs = [ botocore lxml requests requests-kerberos click configparser fido2 ];
+  pythonImportsCheck = [ "aws_adfs" ];
 
   meta = with lib; {
     description = "Command line tool to ease aws cli authentication against ADFS";
diff --git a/nixpkgs/pkgs/development/python-modules/awslambdaric/default.nix b/nixpkgs/pkgs/development/python-modules/awslambdaric/default.nix
new file mode 100644
index 000000000000..ff26bb6245d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/awslambdaric/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildPythonPackage, fetchFromGitHub, isPy27, pytestCheckHook, autoconf
+, automake, cmake, gcc, libtool, perl, simplejson }:
+
+buildPythonPackage rec {
+  pname = "awslambdaric";
+  version = "1.0.0";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "aws-lambda-python-runtime-interface-client";
+    rev = "v${version}";
+    sha256 = "13v1lsp3lxbqknvlb3gvljjf3wyrx5jg8sf9yfiaj1sm8pb8pmrf";
+  };
+
+  propagatedBuildInputs = [ simplejson ];
+
+  nativeBuildInputs = [ autoconf automake cmake libtool perl ];
+
+  buildInputs = [ gcc ];
+
+  dontUseCmakeConfigure = true;
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "awslambdaric" "runtime_client" ];
+
+  meta = with lib; {
+    description = "AWS Lambda Runtime Interface Client for Python";
+    homepage = "https://github.com/aws/aws-lambda-python-runtime-interface-client";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ austinbutler ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/axis/default.nix b/nixpkgs/pkgs/development/python-modules/axis/default.nix
index 707d958bab53..b926a1abc25b 100644
--- a/nixpkgs/pkgs/development/python-modules/axis/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/axis/default.nix
@@ -9,13 +9,13 @@
 
 buildPythonPackage rec {
   pname = "axis";
-  version = "43";
+  version = "44";
 
   src = fetchFromGitHub {
     owner = "Kane610";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1p9yfixsrkw7rxbvgybcb653rbqv0x18wzqkh620g193snm9sgm2";
+    sha256 = "sha256-GC8GiDP/QHU+8swe60VFPRx8kSMMHuXjIPEKCja8HPE=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-core/default.nix b/nixpkgs/pkgs/development/python-modules/azure-core/default.nix
index e91a0fb07493..2bcb4d42646c 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-core/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-core/default.nix
@@ -14,14 +14,14 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.10.0";
+  version = "1.12.0";
   pname = "azure-core";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "b9cddf3eb239e32b14cf44750b21d7bc8d78b82aa53d57628523598dcd006803";
+    sha256 = "adf2b1c6ef150a92295b4b405f982a9d2c55c4846728cb14760ca592acbb09ec";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-eventgrid/default.nix b/nixpkgs/pkgs/development/python-modules/azure-eventgrid/default.nix
index 9781fcecaaf2..3d8e4df56540 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-eventgrid/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-eventgrid/default.nix
@@ -3,23 +3,25 @@
 , fetchPypi
 , msrest
 , azure-common
+, azure-core
 , msrestazure
 }:
 
 buildPythonPackage rec {
   pname = "azure-eventgrid";
-  version = "1.3.0";
+  version = "4.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "c82c4bf6ea59aeec69ce8f95f1b6a4edc6d733874aeb056669c9d2806168c86e";
+    sha256 = "c4f29b2d9b717dad7919048f0a458dd84f83637c3d5c8f5a7e64634b22086719";
   };
 
   propagatedBuildInputs = [
+    azure-common
+    azure-core
     msrest
     msrestazure
-    azure-common
   ];
 
   # has no tests
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix
index 7330ef5fb3e1..2685d8803b89 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix
@@ -1,28 +1,29 @@
 { lib
 , buildPythonPackage
-, python
 , fetchPypi
 , msrest
 , msrestazure
 , azure-common
+, azure-mgmt-core
 , azure-mgmt-nspkg
 , isPy3k
 }:
 
 buildPythonPackage rec {
   pname = "azure-mgmt-applicationinsights";
-  version = "0.3.0";
+  version = "1.0.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "3c788a54db4fbca1a8850151462ec1471ff59c86b3a10d6082952bbdaa7e6651";
+    sha256 = "c287a2c7def4de19f92c0c31ba02867fac6f5b8df71b5dbdab19288bb455fc5b";
   };
 
   propagatedBuildInputs = [
+    azure-common
+    azure-mgmt-core
     msrest
     msrestazure
-    azure-common
   ] ++ lib.optionals (!isPy3k) [
     azure-mgmt-nspkg
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-compute/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-compute/default.nix
index e8a45ebf5aa4..2bfa56dc81c5 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-compute/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-compute/default.nix
@@ -1,20 +1,18 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
 , azure-mgmt-common
 , azure-mgmt-core
-, isPy3k
 }:
 
 buildPythonPackage rec {
-  version = "18.1.0";
+  version = "19.0.0";
   pname = "azure-mgmt-compute";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "02de691c5ce7237993e65b0ae6154b3bf8ec32bcb15f13ade72bc7f3cb3183d4";
+    sha256 = "65afe759c6ee87dd89d65d59c8da4b2c04d197c07c1fbfdc56ef1aea468e4525";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix
index 8e93026b6021..8433025bbc04 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-containerservice";
-  version = "14.0.0";
+  version = "15.0.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "fbb13448fb52a4090ee91940ae8676403dbe8ae81044b7a5cd3c9e58b47d66de";
+    sha256 = "e205aada94bb630e1ba5ee57751849456e1535aec3f2173edf2cbf596b99c0d9";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-cosmosdb/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-cosmosdb/default.nix
index 3814770b2e57..22823bfdd583 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-cosmosdb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-cosmosdb/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-cosmosdb";
-  version = "6.0.0";
+  version = "6.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "15e4140870f2756fbd43965ccceca55361a634a0504bbdb033a1909eff14dfb1";
+    sha256 = "7eb28eae4354e0a68e098de314b380d92f6482f53b2947dc8a36913195bdfde0";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix
index 91f420f11ae8..8454d4463f4b 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-datafactory";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "d4f3984eca74b1e3691467aadc09626e578ed1fc5ef410872d474f3e7653916a";
+    sha256 = "433ad8e83bd8df4abc5af47a0e3a7a4515f79931db4036f2bccd65b5a9e88bfb";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-hanaonazure/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-hanaonazure/default.nix
index 9a23d31309b2..c4453e8c0c11 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-hanaonazure/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-hanaonazure/default.nix
@@ -10,12 +10,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-hanaonazure";
-  version = "0.14.0";
+  version = "0.15.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "7f8b912ca62431c1697b4914c12cc5f8123e60ee6c65d123591f937744d204e0";
+    sha256 = "f5699cd2f6ad09555c3f1a75c8703e12db76bbbb7ec8b621dcb948d4fc9829a5";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-iotcentral/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-iotcentral/default.nix
index 2f368b826491..c7528dace274 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-iotcentral/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-iotcentral/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-iotcentral";
-  version = "4.0.0";
+  version = "4.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "ab793fde2b5eeb73ab37434013d4b5ba7750031220013edb3c1758c45a00a91a";
+    sha256 = "e6d4810f454c0d63a5e816eaa7e54a073a3f70b2256162ff1c234cfe91783ae6";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-kusto/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-kusto/default.nix
index 93c78c401f0c..c5adc61ea203 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-kusto/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-kusto/default.nix
@@ -1,21 +1,27 @@
 { lib, buildPythonPackage, fetchPypi, isPy27
 , azure-common
+, azure-mgmt-core
 , msrest
 , msrestazure
 }:
 
 buildPythonPackage rec {
-  version = "0.10.0";
+  version = "1.0.0";
   pname = "azure-mgmt-kusto";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "09e8d4928e19d12feb374adb47651b474f3ee3bc6a12704e4b70c9b38e3bcd9e";
+    sha256 = "fa3ede0ebd6489bbf993f420bcb5fc63d9fad2a1e945c3c49b26fa012bb3534e";
     extension = "zip";
   };
 
-  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+  propagatedBuildInputs = [
+    azure-common
+    azure-mgmt-core
+    msrest
+    msrestazure
+  ];
 
   # no tests included
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-marketplaceordering/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-marketplaceordering/default.nix
index 9538ed2a2345..628d0bbcac03 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-marketplaceordering/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-marketplaceordering/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-marketplaceordering";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "85103080f9e59215036bdfb8f806d91ea182d72c46a13f55c3acc479849351e3";
+    sha256 = "68b381f52a4df4435dacad5a97e1c59ac4c981f667dcca8f9d04453417d60ad8";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-media/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-media/default.nix
index 90effb44c69c..6320588ed430 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-media/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-media/default.nix
@@ -10,12 +10,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-media";
-  version = "3.0.0";
+  version = "3.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "8944775725c5253614d257576d841ee68afa34f570b05c0924a7f73f1db28a24";
+    sha256 = "c35316d3d63dc99feb97ad7f12a7b411046537f5c6d79ef14f6067bcc379292f";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-netapp/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-netapp/default.nix
index ec1caa5c3e4a..35dc7ef05aba 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-netapp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-netapp/default.nix
@@ -6,13 +6,13 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.0.0";
+  version = "2.0.0";
   pname = "azure-mgmt-netapp";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e2c0cecd634c0a106e389f39ad767bfd1d718d90692e4e3c9664b1fe9a792ade";
+    sha256 = "ff3b663e36c961e86fc0cdbd6f9fb9fb863d3e7db9035fe713af7299e809ee5e";
     extension = "zip";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-network/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-network/default.nix
index b15fd3afa097..f70c8420c829 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-network/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-network/default.nix
@@ -10,14 +10,14 @@
 }:
 
 buildPythonPackage rec {
-  version = "17.1.0";
+  version = "18.0.0";
   pname = "azure-mgmt-network";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "f47852836a5960447ab534784a9285696969f007744ba030828da2eab92621ab";
+    sha256 = "85fdeb7a1a8d89be9b585396796b218b31b681590d57d82d3ea14cf1f2d20b4a";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-resource/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-resource/default.nix
index bdba89498877..5cbbee77ae8e 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-resource/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-resource/default.nix
@@ -8,14 +8,14 @@
 
 
 buildPythonPackage rec {
-  version = "15.0.0";
+  version = "16.0.0";
   pname = "azure-mgmt-resource";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "80ecb69aa21152b924edf481e4b26c641f11aa264120bc322a14284811df9c14";
+    sha256 = "0bdbdc9c1ed2ef975d8dff45f358d1e06dc6761eace5b6817f13993447e48a68";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-storage/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-storage/default.nix
index 2f1032c2bb9b..6f14ce174cd2 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-storage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-storage/default.nix
@@ -8,14 +8,14 @@
 }:
 
 buildPythonPackage rec {
-  version = "16.0.0";
+  version = "17.0.0";
   pname = "azure-mgmt-storage";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "2f9d714d9722b1ef4bac6563676612e6e795c4e90f6f3cd323616fdadb0a99e5";
+    sha256 = "c0e3fd99028d98c80dddabe1c22dfeb3d694e5c1393c6de80766eb240739e4bc";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-mgmt-web/default.nix b/nixpkgs/pkgs/development/python-modules/azure-mgmt-web/default.nix
index f02bee6befe6..9bd5371412d7 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-mgmt-web/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-mgmt-web/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-web";
-  version = "1.0.0";
+  version = "2.0.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "c4b218a5d1353cd7c55b39c9b2bd1b13bfbe3b8a71bc735122b171eab81670d1";
+    sha256 = "0040e1c9c795f7bebe43647ff30b62cb0db7175175df5cbfa1e554a6a277b81e";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-multiapi-storage/default.nix b/nixpkgs/pkgs/development/python-modules/azure-multiapi-storage/default.nix
index 18e4a12d3b36..be011a1ed002 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-multiapi-storage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-multiapi-storage/default.nix
@@ -1,5 +1,4 @@
-{ lib, python, buildPythonPackage, fetchPypi, isPy27
-, fetchpatch
+{ lib, buildPythonPackage, fetchPypi, isPy27
 , azure-common
 , azure-core
 , msrest
@@ -8,13 +7,13 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.4.1";
+  version = "0.6.2";
   pname = "azure-multiapi-storage";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0h7bzaqwyl3j9xqzjbnwxp59kmg6shxk76pml9kvvqbwsq9w6fx3";
+    sha256 = "74061f99730fa82c54d9b8ab3c7d6e219da3f30912740ecf0456b20cb3555ebc";
   };
 
   propagatedBuildInputs = [
@@ -25,14 +24,6 @@ buildPythonPackage rec {
     requests
   ];
 
-  # Fix to actually install the package
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/Azure/azure-multiapi-storage-python/pull/29/commits/1c8b08dfc9c5445498de3475dec8820eafbd0ca1.patch";
-      sha256 = "1f80sdbw4pagrlp9dhcimhp23sdmy0whiba07aa84agkpv4df9ny";
-    })
-  ];
-
   # fix namespace
   pythonNamespaces = [ "azure.multiapi" ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/azure-servicebus/default.nix b/nixpkgs/pkgs/development/python-modules/azure-servicebus/default.nix
index 356de52212d0..b0c0a9e96cb9 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-servicebus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-servicebus/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-servicebus";
-  version = "7.0.1";
+  version = "7.1.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "46d1e7b9da537da831c3184d42d3e2bc3c7ab9234e204a9d4c2e5dc54010721b";
+    sha256 = "c5b3681ce4d7a44c223ddddfdec4c8d2eadede3b11b598ac09c4dbf4b729e89b";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-storage-blob/default.nix b/nixpkgs/pkgs/development/python-modules/azure-storage-blob/default.nix
index cd42be98f9ff..7367e9604b9a 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-storage-blob/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-storage-blob/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "azure-storage-blob";
-  version = "12.7.1";
+  version = "12.8.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "c6249f211684929ea6c9d34b5151b06d039775344f0d48fcf479736ed4c11b9e";
+    sha256 = "36b85a3423379d4a93f663022487cf53aa3043a355f8414321dde878c00cb577";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-synapse-accesscontrol/default.nix b/nixpkgs/pkgs/development/python-modules/azure-synapse-accesscontrol/default.nix
index 1f8ba7dbe8af..b9a6a40e733c 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-synapse-accesscontrol/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-synapse-accesscontrol/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "azure-synapse-accesscontrol";
-  version = "0.4.0";
+  version = "0.6.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a4f32423d9facaae512c433f5460b4ceec73a6c20b44b00e9de9de7a0e86dacd";
+    sha256 = "2f8f71561ca30ff3b04b172f5a64b231baeb02f4bce4bd6763df93a178c8b5d7";
     extension = "zip";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/azure-synapse-artifacts/default.nix b/nixpkgs/pkgs/development/python-modules/azure-synapse-artifacts/default.nix
index 5a414388c4c8..76ad61636061 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-synapse-artifacts/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-synapse-artifacts/default.nix
@@ -6,12 +6,12 @@
 
 buildPythonPackage rec {
   pname = "azure-synapse-artifacts";
-  version = "0.4.0";
+  version = "0.5.0";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "09fd9cf8c25c901d2daf7e436062065ada866f212f371f9d66f394d39ccaa23b";
+    sha256 = "a13124dc9405277f697f6452728d7dcf4c50601ee76055fd42f12b51494d6579";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/azure-synapse-spark/default.nix b/nixpkgs/pkgs/development/python-modules/azure-synapse-spark/default.nix
index 571f3f9d08da..09b25fe9d518 100644
--- a/nixpkgs/pkgs/development/python-modules/azure-synapse-spark/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/azure-synapse-spark/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "azure-synapse-spark";
-  version = "0.4.0";
+  version = "0.5.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7f5881fda4108363c8c6fdee0494fa067ba81e60f038883859d23fc197f5f286";
+    sha256 = "2b037024dc7c034f47aac551cc918f78590a1e1ae30cd2370c8a14da15994970";
     extension = "zip";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/backports_lzma/default.nix b/nixpkgs/pkgs/development/python-modules/backports_lzma/default.nix
index 1ebae86dec99..bf346f3a3ca1 100644
--- a/nixpkgs/pkgs/development/python-modules/backports_lzma/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/backports_lzma/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , isPy3k
-, lzma
+, xz
 , python
 , pythonOlder
 }:
@@ -18,7 +18,7 @@ if !(pythonOlder "3.3") then null else buildPythonPackage rec {
     sha256 = "16d8b68e4d3cd4e6c9ddb059850452946da3914c8a8e197a7f2b0954559f2df4";
   };
 
-  buildInputs = [ lzma ];
+  buildInputs = [ xz ];
 
   checkPhase = ''
     ${python.interpreter} test/test_lzma.py
diff --git a/nixpkgs/pkgs/development/python-modules/backports_ssl_match_hostname/default.nix b/nixpkgs/pkgs/development/python-modules/backports_ssl_match_hostname/default.nix
index d6fecfbdfb91..a7403e16123a 100644
--- a/nixpkgs/pkgs/development/python-modules/backports_ssl_match_hostname/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/backports_ssl_match_hostname/default.nix
@@ -1,8 +1,9 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib, buildPythonPackage, fetchPypi, pythonAtLeast }:
 
 buildPythonPackage rec {
   pname = "backports.ssl_match_hostname";
   version = "3.7.0.1";
+  disabled = pythonAtLeast "3.7";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/nixpkgs/pkgs/development/python-modules/batchgenerators/default.nix b/nixpkgs/pkgs/development/python-modules/batchgenerators/default.nix
index 16b8f317a223..8706a31d5711 100644
--- a/nixpkgs/pkgs/development/python-modules/batchgenerators/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/batchgenerators/default.nix
@@ -2,7 +2,6 @@
 , buildPythonPackage
 , isPy27
 , fetchFromGitHub
-, fetchpatch
 , pytestCheckHook
 , unittest2
 , future
@@ -16,7 +15,7 @@
 
 buildPythonPackage rec {
   pname = "batchgenerators";
-  version = "0.20.1";
+  version = "0.21";
 
   disabled = isPy27;
 
@@ -24,18 +23,10 @@ buildPythonPackage rec {
     owner = "MIC-DKFZ";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1f91yflv9rschyl5bnfn735hp1rxrzcxkx18aajmlzb067h0ip8m";
+    sha256 = "16bk4r0q3m2c9fawpmj4l7kz0x3fyv1spb92grf44gmyricq3jdb";
 
   };
 
-  patches = [
-    # lift Pillow bound; should be merged in next release
-    (fetchpatch {
-      url = "https://github.com/MIC-DKFZ/batchgenerators/pull/59.patch";
-      sha256 = "171b3dm40yn0wi91m9s2nq3j565s1w39jpdf1mvc03rn75i8vdp0";
-    })
-  ];
-
   propagatedBuildInputs = [
     future numpy pillow scipy scikitlearn scikitimage threadpoolctl
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/bayespy/default.nix b/nixpkgs/pkgs/development/python-modules/bayespy/default.nix
index 6ebe9919ec9b..95bb22ce2cb8 100644
--- a/nixpkgs/pkgs/development/python-modules/bayespy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bayespy/default.nix
@@ -4,7 +4,7 @@
 
 buildPythonPackage rec {
   pname = "bayespy";
-  version = "0.5.20";
+  version = "0.5.22";
 
   # Python 2 not supported and not some old Python 3 because MPL doesn't support
   # them properly.
@@ -12,7 +12,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8c16cdc73bbcd9a1124a0495056065b7ce938dbe6c2c780dc330c83fb4d2640a";
+    sha256 = "ed0057dc22bd392df4b3bba23536117e1b2866e3201b12c5a37428d23421a5ba";
   };
 
   checkInputs = [ pytest nose glibcLocales ];
diff --git a/nixpkgs/pkgs/development/python-modules/beaker/default.nix b/nixpkgs/pkgs/development/python-modules/beaker/default.nix
index 09e0b8b3f3e5..a429ab682f76 100644
--- a/nixpkgs/pkgs/development/python-modules/beaker/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/beaker/default.nix
@@ -1,6 +1,8 @@
-{ lib
+{ stdenv
+, lib
 , buildPythonPackage
 , fetchFromGitHub
+, glibcLocales
 , nose
 , pylibmc
 , memcached
@@ -19,14 +21,14 @@
 
 buildPythonPackage rec {
   pname = "Beaker";
-  version = "1.10.1";
+  version = "1.11.0";
 
   # The pypy release do not contains the tests
   src = fetchFromGitHub {
     owner = "bbangert";
     repo = "beaker";
     rev = version;
-    sha256 = "0xrvg503xmi28w0hllr4s7fkap0p09fgw2wax3p1s2r6b3xjvbz7";
+    sha256 = "059sc7iar90lc2y9mppdis5ddfcxyirz03gmsfb0307f5dsa1dhj";
   };
 
   propagatedBuildInputs = [
@@ -39,16 +41,16 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    nose
+    glibcLocales
+    memcached
     mock
-    webtest
+    nose
     pylibmc
-    memcached
-    redis
     pymongo
+    redis
+    webtest
   ];
 
-
   # Can not run memcached tests because it immediately tries to connect
   postPatch = lib.optionalString isPy3k ''
     substituteInPlace setup.py \
@@ -66,6 +68,7 @@ buildPythonPackage rec {
     nosetests \
       -e ".*test_ext_.*" \
       -e "test_upgrade" \
+      ${lib.optionalString (!stdenv.isLinux) ''-e "test_cookie_expires_different_locale"''} \
       -vv tests
   '';
 
diff --git a/nixpkgs/pkgs/development/python-modules/beancount/default.nix b/nixpkgs/pkgs/development/python-modules/beancount/default.nix
index e4a6a5f5625e..88369f41872b 100644
--- a/nixpkgs/pkgs/development/python-modules/beancount/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/beancount/default.nix
@@ -1,17 +1,29 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k
-, beautifulsoup4, bottle, chardet, dateutil
-, google_api_python_client, lxml, oauth2client
-, ply, python_magic, pytest, requests }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, beautifulsoup4
+, bottle
+, chardet
+, dateutil
+, google-api-python-client
+, lxml
+, oauth2client
+, ply
+, pytest
+, python_magic
+, requests
+}:
 
 buildPythonPackage rec {
-  version = "2.3.3";
+  version = "2.3.4";
   pname = "beancount";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0767ap2n9vk9dz40njndfhaprajr75fvzx7igbd1szc6x8wri8nr";
+    sha256 = "sha256-K/CM5qldmAAPTXM5WYXNHeuBwNUu1aduYQusd9gvhsA=";
   };
 
   # Tests require files not included in the PyPI archive.
@@ -22,14 +34,14 @@ buildPythonPackage rec {
     bottle
     chardet
     dateutil
-    google_api_python_client
+    google-api-python-client
     lxml
     oauth2client
     ply
     python_magic
     requests
     # pytest really is a runtime dependency
-    # https://bitbucket.org/blais/beancount/commits/554e13057551951e113835196770847c788dd592
+    # https://github.com/beancount/beancount/blob/v2/setup.py#L81-L82
     pytest
   ];
 
@@ -41,8 +53,7 @@ buildPythonPackage rec {
         financial transaction records in a text file, read them in memory,
         generate a variety of reports from them, and provides a web interface.
     '';
-    license = licenses.gpl2;
-    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ bhipple ];
   };
 }
-
diff --git a/nixpkgs/pkgs/development/python-modules/bellows/default.nix b/nixpkgs/pkgs/development/python-modules/bellows/default.nix
index d47c5d716a73..79bcaa91cbe7 100644
--- a/nixpkgs/pkgs/development/python-modules/bellows/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bellows/default.nix
@@ -1,21 +1,40 @@
-{ lib, buildPythonPackage, fetchFromGitHub
-, click, click-log, pure-pcapy3
-, pyserial-asyncio, voluptuous, zigpy
-, asynctest, pytestCheckHook, pytest-asyncio }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, click
+, click-log
+, pure-pcapy3
+, pyserial-asyncio
+, voluptuous
+, zigpy
+, asynctest
+, pytestCheckHook
+, pytest-asyncio
+}:
 
 buildPythonPackage rec {
   pname = "bellows";
-  version = "0.21.0";
+  version = "0.23.1";
 
   src = fetchFromGitHub {
     owner = "zigpy";
     repo = "bellows";
     rev = version;
-    sha256 = "1gja7cb1cyzbi19k8awa2gyc3bjam0adapalpk5slxny0vxlc73a";
+    sha256 = "sha256-c9rKRmGMlYrzVQmUuM9P3c/Jm4QVM2aBRSZ0OkyrPTY=";
   };
 
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace "click-log==0.2.1" "click-log>=0.2.1"
+  '';
+
   propagatedBuildInputs = [
-    click click-log pure-pcapy3 pyserial-asyncio voluptuous zigpy
+    click
+    click-log
+    pure-pcapy3
+    pyserial-asyncio
+    voluptuous
+    zigpy
   ];
 
   checkInputs = [
@@ -24,11 +43,6 @@ buildPythonPackage rec {
     pytest-asyncio
   ];
 
-  prePatch = ''
-    substituteInPlace setup.py \
-      --replace "click-log==0.2.0" "click-log>=0.2.0"
-  '';
-
   meta = with lib; {
     description = "A Python 3 project to implement EZSP for EmberZNet devices";
     homepage = "https://github.com/zigpy/bellows";
diff --git a/nixpkgs/pkgs/development/python-modules/beniget/default.nix b/nixpkgs/pkgs/development/python-modules/beniget/default.nix
new file mode 100644
index 000000000000..c5508fb33032
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/beniget/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, gast
+}:
+
+buildPythonPackage rec {
+  pname = "beniget";
+  version = "0.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "062c893be9cdf87c3144fb15041cce4d81c67107c1591952cd45fdce789a0ff1";
+  };
+
+  propagatedBuildInputs = [
+    gast
+  ];
+
+  meta = {
+    description = "Extract semantic information about static Python code";
+    homepage = "https://github.com/serge-sans-paille/beniget";
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/binwalk/default.nix b/nixpkgs/pkgs/development/python-modules/binwalk/default.nix
index b9120d412cb0..a3e48d20c602 100644
--- a/nixpkgs/pkgs/development/python-modules/binwalk/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/binwalk/default.nix
@@ -14,7 +14,6 @@
 , cramfsswap
 , sasquatch
 , squashfsTools
-, lzma
 , matplotlib
 , nose
 , pycrypto
@@ -32,7 +31,7 @@ buildPythonPackage rec {
     sha256 = "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc";
   };
 
-  propagatedBuildInputs = [ zlib xz ncompress gzip bzip2 gnutar p7zip cabextract squashfsTools lzma pycrypto ]
+  propagatedBuildInputs = [ zlib xz ncompress gzip bzip2 gnutar p7zip cabextract squashfsTools xz pycrypto ]
   ++ lib.optionals visualizationSupport [ matplotlib pyqtgraph ]
   ++ lib.optionals (!stdenv.isDarwin) [ cramfsprogs cramfsswap sasquatch ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/bip_utils/default.nix b/nixpkgs/pkgs/development/python-modules/bip_utils/default.nix
index 17f996bfd709..1854bd4f71b5 100644
--- a/nixpkgs/pkgs/development/python-modules/bip_utils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bip_utils/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "bip_utils";
-  version = "1.6.0";
+  version = "1.7.0";
 
   disabled = pythonOlder "3.6";
 
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "ebellocchia";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0zbjrgl4dd65r3liyp8syxr106z1wn7ngfcm5dlfcxqwj8zkf56m";
+    sha256 = "1dj0c9sj0c4dkdf7rbz3s1z5kfzw22hpncm4bnwqigjzi6nrk81z";
   };
 
   propagatedBuildInputs = [ ecdsa pysha3 ];
diff --git a/nixpkgs/pkgs/development/python-modules/bitarray/default.nix b/nixpkgs/pkgs/development/python-modules/bitarray/default.nix
index 2f98f3917b84..dc09aa2c6bcb 100644
--- a/nixpkgs/pkgs/development/python-modules/bitarray/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bitarray/default.nix
@@ -2,13 +2,15 @@
 
 buildPythonPackage rec {
   pname = "bitarray";
-  version = "1.6.3";
+  version = "1.8.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ae27ce4bef4f35b4cc2c0b0d9cf02ed49eee567c23d70cb5066ad215f9b62b3c";
+    sha256 = "e02f79fba7a470d438eb39017d503498faaf760b17b6b46af1a9de12fd58d311";
   };
 
+  pythonImportsCheck = [ "bitarray" ];
+
   meta = with lib; {
     description = "Efficient arrays of booleans";
     homepage = "https://github.com/ilanschnell/bitarray";
diff --git a/nixpkgs/pkgs/development/python-modules/bitbox02/default.nix b/nixpkgs/pkgs/development/python-modules/bitbox02/default.nix
index ce62fd6dce04..d57d4a6585bd 100644
--- a/nixpkgs/pkgs/development/python-modules/bitbox02/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bitbox02/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "bitbox02";
-  version = "5.2.0";
+  version = "5.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "52b0b617660601939b30c8b588c28910946448b1b6d69ca231d5e3e47a322b71";
+    sha256 = "fe0e8aeb9b32fd7d76bb3e9838895973a74dfd532a8fb8ac174a1a60214aee26";
   };
 
   propagatedBuildInputs = [ base58 ecdsa hidapi noiseprotocol protobuf semver typing-extensions ];
diff --git a/nixpkgs/pkgs/development/python-modules/bitlist/default.nix b/nixpkgs/pkgs/development/python-modules/bitlist/default.nix
new file mode 100644
index 000000000000..ac8cf39cff2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/bitlist/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, nose
+, parts
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "bitlist";
+  version = "0.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04dz64r21a39p8wph5qlhvs5y873qgk6xxjlzw8n695b8jm3ixir";
+  };
+
+  propagatedBuildInputs = [
+    parts
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    nose
+  ];
+
+  pythonImportsCheck = [ "bitlist" ];
+
+  meta = with lib; {
+    description = "Python library for working with little-endian list representation of bit strings";
+    homepage = "https://github.com/lapets/bitlist";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/bleach/default.nix b/nixpkgs/pkgs/development/python-modules/bleach/default.nix
index 1bdedde1cb4e..53319466d3a5 100644
--- a/nixpkgs/pkgs/development/python-modules/bleach/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bleach/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "bleach";
-  version = "3.2.1";
+  version = "3.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "52b5919b81842b1854196eaae5ca29679a2f2e378905c346d3ca8227c2c66080";
+    sha256 = "sha256-mLMXBznl6D3Z3BljPwdHJ62EjL7bYCZwjIrC07aXpDM=";
   };
 
   checkInputs = [ pytest pytestrunner ];
diff --git a/nixpkgs/pkgs/development/python-modules/bleak/default.nix b/nixpkgs/pkgs/development/python-modules/bleak/default.nix
index 38390e8377e9..f229beb2b049 100644
--- a/nixpkgs/pkgs/development/python-modules/bleak/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bleak/default.nix
@@ -1,14 +1,16 @@
-{ lib, buildPythonPackage, isPy3k, fetchPypi, bluez, txdbus, pytest, pytestcov }:
+{ lib, buildPythonPackage, isPy3k, fetchPypi
+, bluez, dbus-next, pytestCheckHook, pytest-cov
+}:
 
 buildPythonPackage rec {
   pname = "bleak";
-  version = "0.10.0";
+  version = "0.11.0";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5c3a873965f2910865895e572e7a4f10533d6e150e6ba17936397426bf8d1eee";
+    sha256 = "1zs5lz3r17a2xn19i4na132iccyjsl9navj0d3v7gks7hlcad5kp";
   };
 
   postPatch = ''
@@ -19,10 +21,11 @@ buildPythonPackage rec {
       --replace \"bluetoothctl\" \"${bluez}/bin/bluetoothctl\"
   '';
 
-  propagatedBuildInputs = [ txdbus ];
-  checkInputs = [ pytest pytestcov ];
+  propagatedBuildInputs = [ dbus-next ];
 
-  checkPhase = "AGENT_OS=linux py.test";
+  checkInputs = [ pytestCheckHook pytest-cov ];
+
+  pythonImportsCheck = [ "bleak" ];
 
   meta = with lib; {
     description = "Bluetooth Low Energy platform Agnostic Klient for Python";
diff --git a/nixpkgs/pkgs/development/python-modules/blinker/default.nix b/nixpkgs/pkgs/development/python-modules/blinker/default.nix
index 5591113ab0ad..ca59a0d710ab 100644
--- a/nixpkgs/pkgs/development/python-modules/blinker/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/blinker/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib, buildPythonPackage, fetchPypi, nose, pytestCheckHook }:
 
 buildPythonPackage rec {
   pname = "blinker";
@@ -9,6 +9,9 @@ buildPythonPackage rec {
     sha256 = "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7";
   };
 
+  checkInputs = [ nose pytestCheckHook ];
+  pythonImportsCheck = [ "blinker" ];
+
   meta = with lib; {
     homepage = "https://pythonhosted.org/blinker/";
     description = "Fast, simple object-to-object and broadcast signaling";
diff --git a/nixpkgs/pkgs/development/python-modules/bokeh/default.nix b/nixpkgs/pkgs/development/python-modules/bokeh/default.nix
index 091b020efc25..9375aa22a3fe 100644
--- a/nixpkgs/pkgs/development/python-modules/bokeh/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bokeh/default.nix
@@ -33,7 +33,7 @@
 
 buildPythonPackage rec {
   pname = "bokeh";
-  version = "2.2.3";
+  version = "2.2.3";  # update together with panel which is not straightforward
 
   src = fetchPypi {
     inherit pname version;
diff --git a/nixpkgs/pkgs/development/python-modules/boltons/default.nix b/nixpkgs/pkgs/development/python-modules/boltons/default.nix
index f4842981c4a7..0986a5dc7c43 100644
--- a/nixpkgs/pkgs/development/python-modules/boltons/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/boltons/default.nix
@@ -1,19 +1,35 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pytest }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "boltons";
-  version = "20.2.0";
+  version = "20.2.1";
 
   # No tests in PyPi Tarball
   src = fetchFromGitHub {
     owner = "mahmoud";
     repo = "boltons";
     rev = version;
-    sha256 = "08rd6av8dp5n1vz6nybmayl1mfsmj66cskiaybfshcgix29ca803";
+    sha256 = "0vw0h0z81gfxgjfijqiza92ic0siv9xy65mklgj5d0dzr1k9waw8";
   };
 
-  checkInputs = [ pytest ];
-  checkPhase = "pytest tests";
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/mahmoud/boltons/commit/754afddf141ea26956c88c7e13fe5e7ca7942654.patch";
+      sha256 = "14kcq8pl4pmgcnlnmj1sh1yrksgym0kn0kgz2648g192svqkbpz8";
+    })
+  ];
+
+  checkInputs = [ pytestCheckHook ];
+  disabledTests = [
+    # This test is broken without this PR, which has not yet been merged
+    # https://github.com/mahmoud/boltons/pull/283
+    "test_frozendict_ior"
+  ];
 
   meta = with lib; {
     homepage = "https://github.com/mahmoud/boltons";
diff --git a/nixpkgs/pkgs/development/python-modules/boto3/default.nix b/nixpkgs/pkgs/development/python-modules/boto3/default.nix
index 1d3e0cca6749..9fdd4f35d1b2 100644
--- a/nixpkgs/pkgs/development/python-modules/boto3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/boto3/default.nix
@@ -12,12 +12,12 @@
 }:
 
 buildPythonPackage rec {
-  pname =  "boto3";
-  version = "1.17.5"; # N.B: if you change this, change botocore too
+  pname = "boto3";
+  version = "1.17.46"; # N.B: if you change this, change botocore and awscli to a matching version
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-1qr7gE/KK2fGXdp4rYtK/tkB4AQHEgi4TIBNNFrZ67o=";
+    sha256 = "sha256-Xe4Vv5YepYTWgfrkLFADTIOXF+dFTD2pDLV6bFLpdTI=";
   };
 
   propagatedBuildInputs = [ botocore jmespath s3transfer ] ++ lib.optionals (!isPy3k) [ futures ];
@@ -35,6 +35,8 @@ buildPythonPackage rec {
   # Network access
   doCheck = false;
 
+  pythonImportsCheck = [ "boto3" ];
+
   meta = {
     homepage = "https://github.com/boto/boto3";
     license = lib.licenses.asl20;
diff --git a/nixpkgs/pkgs/development/python-modules/botocore/default.nix b/nixpkgs/pkgs/development/python-modules/botocore/default.nix
index 05c333d93979..7301ef5ae488 100644
--- a/nixpkgs/pkgs/development/python-modules/botocore/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/botocore/default.nix
@@ -1,4 +1,5 @@
-{ buildPythonPackage
+{ lib
+, buildPythonPackage
 , fetchPypi
 , dateutil
 , jmespath
@@ -12,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "botocore";
-  version = "1.20.5"; # N.B: if you change this, change boto3 and awscli to a matching version
+  version = "1.20.46"; # N.B: if you change this, change boto3 and awscli to a matching version
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-BKHfdZaB9fFxrMs1TYY7/tB3TWSk6O41/0mDV1VmCk4=";
+    sha256 = "sha256-ULvD6TQcfaqCGduYw48mASoVHKiPomAUjlvzrcvLlUE=";
   };
 
   propagatedBuildInputs = [
@@ -28,10 +29,6 @@ buildPythonPackage rec {
     urllib3
   ];
 
-  postPatch = ''
-    substituteInPlace setup.py --replace "docutils>=0.10,<0.16" "docutils>=0.10"
-  '';
-
   checkInputs = [ mock nose ];
 
   checkPhase = ''
@@ -41,9 +38,11 @@ buildPythonPackage rec {
   # Network access
   doCheck = false;
 
-  meta = {
+  pythonImportsCheck = [ "botocore" ];
+
+  meta = with lib; {
     homepage = "https://github.com/boto/botocore";
-    license = "bsd";
+    license = licenses.asl20;
     description = "A low-level interface to a growing number of Amazon Web Services";
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/bracex/default.nix b/nixpkgs/pkgs/development/python-modules/bracex/default.nix
new file mode 100644
index 000000000000..0f8282ae7b6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/bracex/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonPackage, fetchPypi, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "bracex";
+  version = "2.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-AfcVzQ7XpiLsizIyLnFYE/dXTeUx8Jtw9vOywQ9oJCU=";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "bracex" ];
+
+  meta = with lib; {
+    description = "Bash style brace expansion for Python";
+    homepage = "https://github.com/facelessuser/bracex";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/braintree/default.nix b/nixpkgs/pkgs/development/python-modules/braintree/default.nix
index 7ad0b5604fc6..28b6fccfca90 100644
--- a/nixpkgs/pkgs/development/python-modules/braintree/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/braintree/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "braintree";
-  version = "4.6.0";
+  version = "4.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ef19892f99fa497c90684db6d41442e94b2d3b0ed00afe2c574e46d89cb9a89c";
+    sha256 = "25a95f95acb7f180b37f8dcf4df7efa84ae0ba6ad9dc4ba0e724e2cc534c3483";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/breathe/default.nix b/nixpkgs/pkgs/development/python-modules/breathe/default.nix
index 29de26ac495e..1ca33222ef5a 100644
--- a/nixpkgs/pkgs/development/python-modules/breathe/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/breathe/default.nix
@@ -1,13 +1,13 @@
 { lib, fetchPypi, buildPythonPackage, docutils, six, sphinx, isPy3k, isPy27 }:
 
 buildPythonPackage rec {
-  version = "4.26.1";
+  version = "4.28.0";
   pname = "breathe";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f59ecadebbb76e3b4710e8c9d2f8f98d51e54701930a38ddf732930653dcf6b5";
+    sha256 = "11e35a5fed7545554be51b70eea4578643d8c08972bea43774f413943006b17a";
   };
 
   propagatedBuildInputs = [ docutils six sphinx ];
diff --git a/nixpkgs/pkgs/development/python-modules/broadlink/default.nix b/nixpkgs/pkgs/development/python-modules/broadlink/default.nix
index dcb1368f4116..2418d282ce0a 100644
--- a/nixpkgs/pkgs/development/python-modules/broadlink/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/broadlink/default.nix
@@ -1,25 +1,29 @@
-{ lib, fetchPypi, buildPythonPackage
-, cryptography, pyaes, pycrc }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, cryptography
+}:
 
 buildPythonPackage rec {
   pname = "broadlink";
-  version = "0.16.0";
+  version = "0.17.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "637dabc6f47b283b72bc521322554462da7a247f04614e458d65df8574d03a41";
+    sha256 = "bfd1ff007d0d1187c17ae52be938afc8137fbd1ed6a794426e975df10d167571";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace pyaes==1.6.0 pyaes
-    '';
-
-  propagatedBuildInputs = [ cryptography pyaes pycrc ];
+  propagatedBuildInputs = [
+    cryptography
+  ];
 
   # no tests available
   doCheck = false;
 
+  pythonImportsCheck = [
+    "broadlink"
+  ];
+
   meta = with lib; {
     description = "Python API for controlling Broadlink IR controllers";
     homepage =  "https://github.com/mjg59/python-broadlink";
diff --git a/nixpkgs/pkgs/development/python-modules/brother/default.nix b/nixpkgs/pkgs/development/python-modules/brother/default.nix
index 3e86aac02f1f..e4f9d63bd6b1 100644
--- a/nixpkgs/pkgs/development/python-modules/brother/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/brother/default.nix
@@ -1,25 +1,33 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
 , pysnmp
-, asynctest, pytestcov, pytestrunner, pytest-asyncio, pytest-trio, pytest-tornasync }:
+, pytest-asyncio
+, pytest-error-for-skips
+, pytest-runner
+, pytest-tornasync
+, pytest-trio
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "brother";
-  version = "0.2.1";
+  version = "0.2.2";
   disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = "bieniu";
     repo = pname;
     rev = version;
-    sha256 = "sha256-yOloGkOVhXcTt0PAjf3yWUItN1okO94DndRFsImiuz4=";
+    sha256 = "sha256-vIefcL3K3ZbAUxMFM7gbbTFdrnmufWZHcq4OA19SYXE=";
   };
 
-  # pytest-error-for-skips is not packaged
   postPatch = ''
     substituteInPlace pytest.ini \
-      --replace " --error-for-skips" ""
-    substituteInPlace setup.py \
-      --replace "\"pytest-error-for-skips\"" ""
+      --replace "--cov --cov-report term-missing " ""
+    substituteInPlace requirements-test.txt \
+      --replace "pytest-cov" ""
   '';
 
   propagatedBuildInputs = [
@@ -27,16 +35,18 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    asynctest
-    pytestcov
-    pytestrunner
     pytest-asyncio
-    pytest-trio
+    pytest-error-for-skips
+    pytest-runner
     pytest-tornasync
+    pytest-trio
+    pytestCheckHook
   ];
 
+  pythonImportsCheck = [ "brother" ];
+
   meta = with lib; {
-    description = "Python wrapper for getting data from Brother laser and inkjet printers via SNMP.";
+    description = "Python wrapper for getting data from Brother laser and inkjet printers via SNMP";
     homepage = "https://github.com/bieniu/brother";
     license = licenses.asl20;
     maintainers = with maintainers; [ hexa ];
diff --git a/nixpkgs/pkgs/development/python-modules/build/default.nix b/nixpkgs/pkgs/development/python-modules/build/default.nix
index 46c3bea0b8c5..b5dce09d516f 100644
--- a/nixpkgs/pkgs/development/python-modules/build/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/build/default.nix
@@ -1,25 +1,29 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, filelock
 , flit-core
-, toml
-, pep517
-, packaging
+, importlib-metadata
 , isPy3k
-, typing
+, packaging
+, pep517
+, pytest-mock
+, pytest-xdist
+, pytestCheckHook
 , pythonOlder
-, importlib-metadata
+, toml
+, typing
 }:
 
 buildPythonPackage rec {
   pname = "build";
-  version = "0.1.0";
+  version = "0.3.0";
 
   format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1d6m21lijwm04g50nwgsgj7x3vhblzw7jv05ah8psqgzk20bbch8";
+    sha256 = "sha256-DrlbLI13DXxMm5LGjCJ8NQu/ZfPsg1UazpCXwYzBX90=";
   };
 
   nativeBuildInputs = [
@@ -36,8 +40,25 @@ buildPythonPackage rec {
     importlib-metadata
   ];
 
-  # No tests in archive
-  doCheck = false;
+  checkInputs = [
+    filelock
+    pytestCheckHook
+    pytest-mock
+    pytest-xdist
+  ];
+
+  disabledTests = [
+    "test_isolation"
+    "test_isolated_environment_install"
+    "test_default_pip_is_never_too_old"
+    "test_build_isolated - StopIteration"
+    "test_build_raises_build_exception"
+    "test_build_raises_build_backend_exception"
+    "test_projectbuilder.py"
+    "test_projectbuilder.py"
+  ];
+
+  pythonImportsCheck = [ "build" ];
 
   meta = with lib; {
     description = "Simple, correct PEP517 package builder";
diff --git a/nixpkgs/pkgs/development/python-modules/buildbot/default.nix b/nixpkgs/pkgs/development/python-modules/buildbot/default.nix
index f4c5bfb16221..52a43d0d1137 100644
--- a/nixpkgs/pkgs/development/python-modules/buildbot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/buildbot/default.nix
@@ -1,15 +1,15 @@
 { stdenv, lib, buildPythonPackage, fetchPypi, makeWrapper, isPy3k,
-  python, twisted, jinja2, zope_interface, future, sqlalchemy,
-  sqlalchemy_migrate, dateutil, txaio, autobahn, pyjwt, pyyaml, treq,
+  python, twisted, jinja2, zope_interface, sqlalchemy,
+  sqlalchemy_migrate, dateutil, txaio, autobahn, pyjwt, pyyaml, unidiff, treq,
   txrequests, pypugjs, boto3, moto, mock, python-lz4, setuptoolsTrial,
   isort, pylint, flake8, buildbot-worker, buildbot-pkg, buildbot-plugins,
-  parameterized, git, openssh, glibcLocales, nixosTests }:
+  parameterized, git, openssh, glibcLocales, ldap3, nixosTests }:
 
 let
   withPlugins = plugins: buildPythonPackage {
     name = "${package.name}-with-plugins";
     phases = [ "installPhase" "fixupPhase" ];
-    buildInputs = [ makeWrapper ];
+    nativeBuildInputs = [ makeWrapper ];
     propagatedBuildInputs = plugins ++ package.propagatedBuildInputs;
 
     installPhase = ''
@@ -25,11 +25,11 @@ let
 
   package = buildPythonPackage rec {
     pname = "buildbot";
-    version = "2.10.1";
+    version = "3.1.0";
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "0jmgpvgn36kfc1sa27a1l1g26dawhl99a1wl8gn4ajbcbcvc2pkh";
+      sha256 = "1b9m9l8bz2slkrq0l5z8zd8pd0js5w4k7dam8bdp00kv3aln4si9";
     };
 
     propagatedBuildInputs = [
@@ -44,6 +44,7 @@ let
       autobahn
       pyjwt
       pyyaml
+      unidiff
     ]
       # tls
       ++ twisted.extras.tls;
@@ -67,6 +68,9 @@ let
       git
       openssh
       glibcLocales
+      # optional dependency that was accidentally made required for tests
+      # https://github.com/buildbot/buildbot/pull/5857
+      ldap3
     ];
 
     patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/buildbot/pkg.nix b/nixpkgs/pkgs/development/python-modules/buildbot/pkg.nix
index f3dc0440ac5c..4c17eb2b6e53 100644
--- a/nixpkgs/pkgs/development/python-modules/buildbot/pkg.nix
+++ b/nixpkgs/pkgs/development/python-modules/buildbot/pkg.nix
@@ -6,7 +6,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0ymqkjz1zk4gs0hkxjh07napc4k24xxb8f3pganw27fca60xcii0";
+    sha256 = "0bv1qq4cf24cklxfqfnkhjb6w4xqcp3afdcan75n6v7mnwqxyyvr";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/buildbot/plugins.nix b/nixpkgs/pkgs/development/python-modules/buildbot/plugins.nix
index ed2f363901e1..042bddc1d124 100644
--- a/nixpkgs/pkgs/development/python-modules/buildbot/plugins.nix
+++ b/nixpkgs/pkgs/development/python-modules/buildbot/plugins.nix
@@ -7,7 +7,7 @@
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "0x2k95lwx2gz2zj2ys646qiylhyqzlbiqf1k3q1l8w1wlggwv3xp";
+      sha256 = "1a40fbmbf4gb0hgpr40yr9fb17ynxwi6vj8hvv3mm1fm9nqiggm1";
     };
 
     # Remove unneccessary circular dependency on buildbot
@@ -34,7 +34,7 @@
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "0fpam6x8x207la1xrr8m45yx35r646iizrs4gsaghlysmr95jb3i";
+      sha256 = "1fcm4h489sb5a1hk82y1a8575s4k6qd82qkfbm2q5gd14bdvysb0";
     };
 
     buildInputs = [ buildbot-pkg ];
@@ -56,7 +56,7 @@
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "0ari338hmi1bb1pln3mxv4k9aclbcby6z3km61wg3va511qhrrbq";
+      sha256 = "1qw9g2maixlcm5l1kpmc721b2p4b7adw5rsimlqcjz96mjya7acj";
     };
 
     buildInputs = [ buildbot-pkg ];
@@ -78,7 +78,7 @@
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "0a5nrklyzfasaa119y4ivr7449rvsgifpkyravinacrl1g9phlls";
+      sha256 = "1q0fm2h4alcck6g8fwwd42jsmkw3gdy9xmw1p78xnvk5dgs6cf9c";
     };
 
     buildInputs = [ buildbot-pkg ];
@@ -100,7 +100,7 @@
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "0rris2p7ic9p9ms3qcczia4nn5mb1yx2gv5mlnmg2yligjad2jaf";
+      sha256 = "0n8q607rl1qs012gpkxpq1n7ny8306n4vr3hjlz96pm60a7j7904";
     };
 
     buildInputs = [ buildbot-pkg ];
diff --git a/nixpkgs/pkgs/development/python-modules/buildbot/worker.nix b/nixpkgs/pkgs/development/python-modules/buildbot/worker.nix
index 02139d15e75a..242849e2c79e 100644
--- a/nixpkgs/pkgs/development/python-modules/buildbot/worker.nix
+++ b/nixpkgs/pkgs/development/python-modules/buildbot/worker.nix
@@ -7,7 +7,7 @@ buildPythonPackage (rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "10ap7jlxs9vcmnyafr62mxlgsp709165nw55xmv9sw18r7m8wsm6";
+    sha256 = "0n5p9x9gz276nv1m8vn3d74jfbd35gff332cjxxqvabk06iqcjp6";
   };
 
   propagatedBuildInputs = [ twisted future ];
diff --git a/nixpkgs/pkgs/development/python-modules/buildout-nix/default.nix b/nixpkgs/pkgs/development/python-modules/buildout-nix/default.nix
index 7f7afd67e7e0..834dd42bc087 100644
--- a/nixpkgs/pkgs/development/python-modules/buildout-nix/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/buildout-nix/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "zc.buildout";
-  version = "2.13.3";
+  version = "2.13.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1dyc5g3yv7wm3hf3fcsh6y1wivzjj1bspafr5qqb653z9a31lsfn";
+    sha256 = "b978b2f9317b317ee4191f78fcc4f05b1ac41bdaaae47f0956f14c8285feef63";
   };
 
   patches = [ ./nix.patch ];
diff --git a/nixpkgs/pkgs/development/python-modules/buildout/default.nix b/nixpkgs/pkgs/development/python-modules/buildout/default.nix
index a9fe66a37ea2..796eaa18259f 100644
--- a/nixpkgs/pkgs/development/python-modules/buildout/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/buildout/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "zc.buildout";
-  version = "2.13.3";
+  version = "2.13.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1dyc5g3yv7wm3hf3fcsh6y1wivzjj1bspafr5qqb653z9a31lsfn";
+    sha256 = "b978b2f9317b317ee4191f78fcc4f05b1ac41bdaaae47f0956f14c8285feef63";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/bx-python/default.nix b/nixpkgs/pkgs/development/python-modules/bx-python/default.nix
index 57ace67d3f26..aa1e3d1d8648 100644
--- a/nixpkgs/pkgs/development/python-modules/bx-python/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/bx-python/default.nix
@@ -3,14 +3,14 @@
 
 buildPythonPackage rec {
   pname = "bx-python";
-  version = "0.8.9";
+  version = "0.8.11";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "bxlab";
     repo = "bx-python";
     rev = "v${version}";
-    sha256 = "0bsqnw8rv08586wksvx2a8dawvhyzvz5pzsh9y3217b6wxq98dnq";
+    sha256 = "0cz5vgw19hmkcg689vr540q2gl2lb3xcf1lphm7zbfp8wmypcadm";
   };
 
   nativeBuildInputs = [ cython ];
diff --git a/nixpkgs/pkgs/development/python-modules/cachetools/default.nix b/nixpkgs/pkgs/development/python-modules/cachetools/default.nix
index 120fd5df124b..a160c5ea94c5 100644
--- a/nixpkgs/pkgs/development/python-modules/cachetools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cachetools/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, isPy27
 , fetchFromGitHub
 , pytestCheckHook
 }:
@@ -8,6 +9,8 @@ buildPythonPackage rec {
   pname = "cachetools";
   version = "4.2.1";
 
+  disabled = isPy27;
+
   src = fetchFromGitHub {
     owner = "tkem";
     repo = pname;
diff --git a/nixpkgs/pkgs/development/python-modules/cadquery/default.nix b/nixpkgs/pkgs/development/python-modules/cadquery/default.nix
index 72334390bc3e..bc8cbe1f2c82 100644
--- a/nixpkgs/pkgs/development/python-modules/cadquery/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cadquery/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, toPythonModule
 , isPy3k
 , pythonOlder
 , pythonAtLeast
@@ -23,7 +24,7 @@
 }:
 
 let
-  pythonocc-core-cadquery = stdenv.mkDerivation {
+  pythonocc-core-cadquery = toPythonModule (stdenv.mkDerivation {
     pname = "pythonocc-core-cadquery";
     version = "0.18.2";
 
@@ -61,7 +62,7 @@ let
       "-DSMESH_LIB_PATH=${smesh}/lib"
       "-DPYTHONOCC_WRAP_SMESH=TRUE"
     ];
-  };
+  });
 
 in
   buildPythonPackage rec {
diff --git a/nixpkgs/pkgs/development/python-modules/cairocffi/default.nix b/nixpkgs/pkgs/development/python-modules/cairocffi/default.nix
index 574aeefa7fca..5c561af2f172 100644
--- a/nixpkgs/pkgs/development/python-modules/cairocffi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cairocffi/default.nix
@@ -12,6 +12,7 @@
 , glibcLocales
 , cairo
 , cffi
+, numpy
 , withXcffib ? false, xcffib
 , python
 , glib
@@ -19,8 +20,8 @@
 }@args:
 
 import ./generic.nix ({
-  version = "1.1.0";
-  sha256 = "1nq53f5jipgy9jgyfxp43j40qfbmrhgn1cj8bp5rrb3liy3wbh7i";
+  version = "1.2.0";
+  sha256 = "sha256-mpebUAxkyBef7ChvM36P5kTsovLNBYYM4LYtJfIuoUA=";
   dlopen_patch = ./dlopen-paths.patch;
   disabled = pythonOlder "3.5";
   inherit withXcffib;
diff --git a/nixpkgs/pkgs/development/python-modules/cairocffi/generic.nix b/nixpkgs/pkgs/development/python-modules/cairocffi/generic.nix
index ee795d80dcef..8b674f3baaa8 100644
--- a/nixpkgs/pkgs/development/python-modules/cairocffi/generic.nix
+++ b/nixpkgs/pkgs/development/python-modules/cairocffi/generic.nix
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     fontDirectories = [ freefont_ttf ];
   };
 
-  checkInputs = [ pytest pytestrunner glibcLocales ];
+  checkInputs = [ numpy pytest pytestrunner glibcLocales ];
   propagatedBuildInputs = [ cairo cffi ] ++ lib.optional withXcffib xcffib;
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/cairosvg/default.nix b/nixpkgs/pkgs/development/python-modules/cairosvg/default.nix
index 53f3ebc0c088..5e8e8d985aab 100644
--- a/nixpkgs/pkgs/development/python-modules/cairosvg/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cairosvg/default.nix
@@ -1,25 +1,44 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k, fetchpatch
-, cairocffi, cssselect2, defusedxml, pillow, tinycss2
-, pytest, pytestrunner, pytestcov, pytest-flake8, pytest-isort }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, cairocffi
+, cssselect2
+, defusedxml
+, pillow
+, tinycss2
+, pytestCheckHook
+, pytest-runner
+, pytest-flake8
+, pytest-isort
+}:
 
 buildPythonPackage rec {
   pname = "CairoSVG";
-  version = "2.5.0";
-
+  version = "2.5.2";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3fc50d10f0cbef53b3ee376a97a88d81bbd9e2f190f7e63de08431a1a08e9afa";
+    sha256 = "sha256-sLmSnPXboAUXjXRqgDb88AJVUPSYylTbYYczIjhHg7w=";
   };
 
+  nativeBuildInputs = [ pytest-runner ];
+
   propagatedBuildInputs = [ cairocffi cssselect2 defusedxml pillow tinycss2 ];
 
-  checkInputs = [ pytest pytestrunner pytestcov pytest-flake8 pytest-isort ];
+  checkInputs = [ pytestCheckHook pytest-flake8 pytest-isort ];
+
+  pytestFlagsArray = [
+    "cairosvg/test_api.py"
+  ];
+
+  pythonImportsCheck = [ "cairosvg" ];
 
   meta = with lib; {
     homepage = "https://cairosvg.org";
-    license = licenses.lgpl3;
+    license = licenses.lgpl3Plus;
     description = "SVG converter based on Cairo";
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/caldav/default.nix b/nixpkgs/pkgs/development/python-modules/caldav/default.nix
index 3888bb7ec65a..2b50b5f2966a 100644
--- a/nixpkgs/pkgs/development/python-modules/caldav/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/caldav/default.nix
@@ -15,13 +15,13 @@
 
 buildPythonPackage rec {
   pname = "caldav";
-  version = "0.7.1";
+  version = "0.8.0";
 
   src = fetchFromGitHub {
     owner = "python-caldav";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1shfj67kq6qzd0ngyfk09hpzfggybcfxv5s7hqs87nq9l51bssv8";
+    sha256 = "11q3svns3a2ywfci739krxbh67cx691qja772wq22606blyygyjy";
   };
 
   nativeBuildInputs = lib.optionals (pythonOlder "3.5") [ mock ];
@@ -34,6 +34,10 @@ buildPythonPackage rec {
     tzlocal
   ];
 
+  checkPhase = ''
+    nosetests tests
+  '';
+
   # xandikos and radicale is only a optional test dependency, not available for python3
   postPatch = ''
     substituteInPlace setup.py \
@@ -45,7 +49,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "This project is a CalDAV (RFC4791) client library for Python.";
-    homepage = "https://pythonhosted.org/caldav/";
+    homepage = "https://github.com/python-caldav/caldav";
     license = licenses.asl20;
     maintainers = with maintainers; [ marenz ];
     #broken = true; # requires radicale which is not packaged yet
diff --git a/nixpkgs/pkgs/development/python-modules/canopen/default.nix b/nixpkgs/pkgs/development/python-modules/canopen/default.nix
index 8925c1cc8a41..51a6d0d11c0f 100644
--- a/nixpkgs/pkgs/development/python-modules/canopen/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/canopen/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "canopen";
-  version = "1.2.0";
+  version = "1.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "15d49f1f71e9989dde6e3b75fb8445c76bd223064dfc0ac629fe9ecb0e21fba9";
+    sha256 = "18d01d56ff0023795cb336cafd4810a76cf402b98b42139b201fa8c5d4ba8c06";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/capstone/default.nix b/nixpkgs/pkgs/development/python-modules/capstone/default.nix
index d7df0bee5ca9..af6b9031e66e 100644
--- a/nixpkgs/pkgs/development/python-modules/capstone/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/capstone/default.nix
@@ -1,9 +1,10 @@
-{ lib, stdenv
+{ stdenv
+, lib
 , buildPythonPackage
-, fetchPypi
+, capstone
 , fetchpatch
+, fetchPypi
 , setuptools
-, capstone
 }:
 
 buildPythonPackage rec {
@@ -16,6 +17,7 @@ buildPythonPackage rec {
   postPatch = ''
     ln -s ${capstone}/lib/libcapstone${stdenv.targetPlatform.extensions.sharedLibrary} prebuilt/
     ln -s ${capstone}/lib/libcapstone.a prebuilt/
+    substituteInPlace setup.py --replace manylinux1 manylinux2014
   '';
 
   propagatedBuildInputs = [ setuptools ];
diff --git a/nixpkgs/pkgs/development/python-modules/cartopy/default.nix b/nixpkgs/pkgs/development/python-modules/cartopy/default.nix
index f41aa6985da9..7e3e32067577 100644
--- a/nixpkgs/pkgs/development/python-modules/cartopy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cartopy/default.nix
@@ -54,6 +54,7 @@ buildPythonPackage rec {
     license = licenses.lgpl3;
     homepage = "https://scitools.org.uk/cartopy/docs/latest/";
     maintainers = with maintainers; [ mredaelli ];
+    # following tests fail: test_eccentric_globe and test_ellipse_globe
+    broken = true;
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/casbin/default.nix b/nixpkgs/pkgs/development/python-modules/casbin/default.nix
index 7e26181cf552..ea6e2ed079ab 100644
--- a/nixpkgs/pkgs/development/python-modules/casbin/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/casbin/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "casbin";
-  version = "0.16.2";
+  version = "0.19.1";
 
   disabled = isPy27;
 
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = pname;
     repo = "pycasbin";
     rev = "v${version}";
-    sha256 = "0jan4xikyi1p92rsir8camc6ify81wnd9l57v1pgmjf5fgb5r2w8";
+    sha256 = "0fkkz5k3h4pkxacrbacamnh4yfghxgajdzzmdlck7i4v5x06vz8f";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/cbor2/default.nix b/nixpkgs/pkgs/development/python-modules/cbor2/default.nix
index f793ecfae372..776cc4d38e98 100644
--- a/nixpkgs/pkgs/development/python-modules/cbor2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cbor2/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
 , pytestCheckHook
@@ -22,6 +23,12 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
+  # https://github.com/agronholm/cbor2/issues/99
+  disabledTests = lib.optionals stdenv.is32bit [
+    "test_huge_truncated_bytes"
+    "test_huge_truncated_string"
+  ];
+
   pythonImportsCheck = [ "cbor2" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/celery/default.nix b/nixpkgs/pkgs/development/python-modules/celery/default.nix
index 3ba06c92a5ce..f0fe81f85e28 100644
--- a/nixpkgs/pkgs/development/python-modules/celery/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/celery/default.nix
@@ -1,15 +1,15 @@
 { lib, buildPythonPackage, fetchPypi
-, billiard, click, click-didyoumean, click-repl, kombu, pytz, vine
+, billiard, click, click-didyoumean, click-plugins, click-repl, kombu, pytz, vine
 , boto3, case, moto, pytest, pytest-celery, pytest-subtests, pytest-timeout
 }:
 
 buildPythonPackage rec {
   pname = "celery";
-  version = "5.0.2";
+  version = "5.0.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "012c814967fe89e3f5d2cf49df2dba3de5f29253a7f4f2270e8fce6b901b4ebf";
+    sha256 = "f4efebe6f8629b0da2b8e529424de376494f5b7a743c321c8a2ddc2b1414921c";
   };
 
   postPatch = ''
@@ -17,7 +17,7 @@ buildPythonPackage rec {
       --replace "moto==1.3.7" moto
   '';
 
-  propagatedBuildInputs = [ billiard click click-didyoumean click-repl kombu pytz vine ];
+  propagatedBuildInputs = [ billiard click click-didyoumean click-plugins click-repl kombu pytz vine ];
 
   checkInputs = [ boto3 case moto pytest pytest-celery pytest-subtests pytest-timeout ];
 
@@ -38,5 +38,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/celery/celery/";
     description = "Distributed task queue";
     license = licenses.bsd3;
+    maintainers = [ ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/censys/default.nix b/nixpkgs/pkgs/development/python-modules/censys/default.nix
index 561d9651fed8..23c883a48a4c 100644
--- a/nixpkgs/pkgs/development/python-modules/censys/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/censys/default.nix
@@ -11,13 +11,13 @@
 
 buildPythonPackage rec {
   pname = "censys";
-  version = "1.1.0";
+  version = "1.1.1";
 
   src = fetchFromGitHub {
     owner = "censys";
     repo = "censys-python";
-    rev = "v${version}";
-    sha256 = "0vvd13g48i4alnqil98zc09zi5kv6l2s3kdfyg5syjxvq4lfd476";
+    rev = version;
+    sha256 = "06jwk0ps80fjzbsy24qn5bsggfpgn4ccjzjz65cdh0ap1mfvh5jf";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/certbot/default.nix b/nixpkgs/pkgs/development/python-modules/certbot/default.nix
index 129ef932bdc5..7ae6a3fa0b8f 100644
--- a/nixpkgs/pkgs/development/python-modules/certbot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/certbot/default.nix
@@ -3,19 +3,19 @@
 , python, runCommand
 , fetchFromGitHub
 , ConfigArgParse, acme, configobj, cryptography, distro, josepy, parsedatetime, pyRFC3339, pyopenssl, pytz, requests, six, zope_component, zope_interface
-, dialog, mock, gnureadline
-, pytest_xdist, pytest, pytestCheckHook, dateutil
+, dialog, gnureadline
+, pytest_xdist, pytestCheckHook, dateutil
 }:
 
 buildPythonPackage rec {
   pname = "certbot";
-  version = "1.12.0";
+  version = "1.13.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-lMQkVc2UzC5GqEy88rcaJ74CaT3+YWveNDCXql/McRM=";
+    sha256 = "1cwhhybj2fjalhhyd184ndn3bid3qib1yy5a93m146cqqgwpw4j6";
   };
 
   sourceRoot = "source/${pname}";
@@ -37,16 +37,19 @@ buildPythonPackage rec {
     zope_interface
   ];
 
-  buildInputs = [ dialog mock gnureadline ];
+  buildInputs = [ dialog gnureadline ];
 
   checkInputs = [
     dateutil
-    pytest
     pytestCheckHook
     pytest_xdist
   ];
 
-  pytestFlagsArray = [ "-o cache_dir=$(mktemp -d)" ];
+  pytestFlagsArray = [
+    "-o cache_dir=$(mktemp -d)"
+    # See https://github.com/certbot/certbot/issues/8746
+    "-W ignore::ResourceWarning"
+  ];
 
   doCheck = true;
 
diff --git a/nixpkgs/pkgs/development/python-modules/certvalidator/default.nix b/nixpkgs/pkgs/development/python-modules/certvalidator/default.nix
new file mode 100644
index 000000000000..8f53bd9805ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/certvalidator/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildPythonPackage, fetchFromGitHub
+, asn1crypto, oscrypto
+, cacert
+}:
+
+buildPythonPackage rec {
+  pname = "certvalidator";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "wbond";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-yVF7t4FuU3C9fDg67JeM7LWZZh/mv5F4EKmjlO4AuBY=";
+  };
+
+  propagatedBuildInputs = [ asn1crypto oscrypto ];
+
+  checkInputs = [ cacert ];
+  checkPhase = ''
+    # Tests are run with a custom executor/loader
+    # The regex to skip specific tests relies on negative lookahead of regular expressions
+    # We're skipping the few tests that rely on the network, fetching CRLs, OCSP or remote certificates
+    python -c 'import dev.tests; dev.tests.run("^(?!.*test_(basic_certificate_validator_tls|fetch|revocation|build_path)).*$")'
+  '';
+  pythonImportsCheck = [ "certvalidator" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/wbond/certvalidator";
+    description = "Validates X.509 certificates and paths";
+    license = licenses.mit;
+    maintainers = with maintainers; [ baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/cffi/default.nix b/nixpkgs/pkgs/development/python-modules/cffi/default.nix
index 3dcd6a996cb9..afd9cfdc2950 100644
--- a/nixpkgs/pkgs/development/python-modules/cffi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cffi/default.nix
@@ -2,11 +2,11 @@
 
 if isPyPy then null else buildPythonPackage rec {
   pname = "cffi";
-  version = "1.14.4";
+  version = "1.14.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1a465cbe98a7fd391d47dce4b8f7e5b921e6cd805ef421d04f5f66ba8f06086c";
+    sha256 = "fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/nixpkgs/pkgs/development/python-modules/chalice/default.nix b/nixpkgs/pkgs/development/python-modules/chalice/default.nix
index 5445157b8530..9115b1d57c3f 100644
--- a/nixpkgs/pkgs/development/python-modules/chalice/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/chalice/default.nix
@@ -52,8 +52,7 @@ buildPythonPackage rec {
   postPatch = ''
     sed -i setup.py -e "/pip>=/c\'pip',"
     substituteInPlace setup.py \
-      --replace 'typing==3.6.4' 'typing' \
-      --replace 'attrs>=19.3.0,<20.3.0' 'attrs'
+      --replace 'typing==3.6.4' 'typing'
   '';
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/check-manifest/default.nix b/nixpkgs/pkgs/development/python-modules/check-manifest/default.nix
index 95bb9660d4cf..de833e18be8e 100644
--- a/nixpkgs/pkgs/development/python-modules/check-manifest/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/check-manifest/default.nix
@@ -1,4 +1,14 @@
-{ lib, buildPythonPackage, fetchPypi, pep517, toml, mock, breezy, git, build }:
+{ lib
+, breezy
+, build
+, buildPythonPackage
+, fetchPypi
+, git
+, mock
+, pep517
+, pytestCheckHook
+, toml
+}:
 
 buildPythonPackage rec {
   pname = "check-manifest";
@@ -14,9 +24,20 @@ buildPythonPackage rec {
     substituteInPlace tests.py --replace "test_build_sdist" "no_test_build_sdist"
   '';
 
-  propagatedBuildInputs = [ build pep517 toml ];
+  propagatedBuildInputs = [
+    build
+    pep517
+    toml
+  ];
 
-  checkInputs = [ mock breezy git ];
+  checkInputs = [
+    breezy
+    git
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "check_manifest" ];
 
   meta = with lib; {
     homepage = "https://github.com/mgedmin/check-manifest";
diff --git a/nixpkgs/pkgs/development/python-modules/cheroot/default.nix b/nixpkgs/pkgs/development/python-modules/cheroot/default.nix
index e5c7c23e2e43..4d6c71a7e2a5 100644
--- a/nixpkgs/pkgs/development/python-modules/cheroot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cheroot/default.nix
@@ -73,7 +73,7 @@ buildPythonPackage rec {
     "bind_addr_unix"
   ];
 
-  disabledTestFiles = [
+  disabledTestPaths = [
     # avoid attempting to use 3 packages not available on nixpkgs
     # (jaraco.apt, jaraco.context, yg.lockfile)
     "cheroot/test/test_wsgi.py"
diff --git a/nixpkgs/pkgs/development/python-modules/cherrypy/default.nix b/nixpkgs/pkgs/development/python-modules/cherrypy/default.nix
index 8a915d520e5c..9a01a030e685 100644
--- a/nixpkgs/pkgs/development/python-modules/cherrypy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cherrypy/default.nix
@@ -18,6 +18,26 @@ buildPythonPackage rec {
     sha256 = "16f410izp2c4qhn4n3l5l3qirmkf43h2amjqms8hkl0shgfqwq2n";
   };
 
+  patches = [
+    # 1/3 Fix compatibility with pytest 6. Will be part of the next release after 18.6
+    (fetchpatch {
+      url = "https://github.com/cherrypy/cherrypy/pull/1897/commits/59c0e19d7df8680e36afc96756dce72435121448.patch";
+      sha256 = "1jachbvp505gndccdhny0c3grzdrmvmbzq4kw55jx93ay94ni6p0";
+    })
+    # 2/3 Fix compatibility with pytest 6. Will be part of the next release after 18.6
+    (fetchpatch {
+      url = "https://github.com/cherrypy/cherrypy/pull/1897/commits/4a6287b73539adcb7b0ae72d69644a1ced1f7eaa.patch";
+      sha256 = "0nz40qmgxknkbjsdzfzcqfxdsmsxx3v104fb0h04yvs76mqvw3i4";
+    })
+    # 3/3 Fix compatibility with pytest 6. Will be part of the next release after 18.6
+    (fetchpatch {
+      url = "https://github.com/cherrypy/cherrypy/commit/3bae7f06868553b006915f05ff14d86163f59a7d.patch";
+      sha256 = "1z0bv23ybyw87rf1i8alsdi3gc2bzmdj9d0kjsghdkvi3zdp4n8q";
+    })
+  ];
+
+  nativeBuildInputs = [ setuptools_scm ];
+
   propagatedBuildInputs = [
     # required
     cheroot portend more-itertools zc_lockfile
@@ -26,8 +46,6 @@ buildPythonPackage rec {
     routes
   ];
 
-  nativeBuildInputs = [ setuptools_scm ];
-
   checkInputs = [
     objgraph pytest pytestcov pathpy requests_toolbelt pytest-services
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/chirpstack-api/default.nix b/nixpkgs/pkgs/development/python-modules/chirpstack-api/default.nix
new file mode 100644
index 000000000000..a019dd651999
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/chirpstack-api/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, google-api-core
+, grpcio
+}:
+
+buildPythonPackage rec {
+  pname = "chirpstack-api";
+  version = "3.9.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08djidy3fyhghyzvndcjas3hb1s9d7719gvmgbl8bzxjm4h2c433";
+  };
+
+  propagatedBuildInputs = [
+    google-api-core
+    grpcio
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "chirpstack_api" ];
+
+  meta = with lib; {
+    description = "ChirpStack gRPC API message and service wrappers for Python";
+    homepage = "https://github.com/brocaar/chirpstack-api";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/cirq/default.nix b/nixpkgs/pkgs/development/python-modules/cirq/default.nix
index ebc0eb51df43..f0b576299b21 100644
--- a/nixpkgs/pkgs/development/python-modules/cirq/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cirq/default.nix
@@ -3,8 +3,6 @@
 , buildPythonPackage
 , pythonOlder
 , fetchFromGitHub
-, fetchpatch
-, freezegun
 , google-api-core
 , matplotlib
 , networkx
@@ -15,8 +13,10 @@
 , scipy
 , sortedcontainers
 , sympy
+, tqdm
 , typing-extensions
   # test inputs
+, freezegun
 , pytestCheckHook
 , pytest-asyncio
 , pytest-benchmark
@@ -28,7 +28,7 @@
 
 buildPythonPackage rec {
   pname = "cirq";
-  version = "0.9.1";
+  version = "0.10.0";
 
   disabled = pythonOlder "3.6";
 
@@ -36,42 +36,36 @@ buildPythonPackage rec {
     owner = "quantumlib";
     repo = "cirq";
     rev = "v${version}";
-    sha256 = "0mygvpq7kzga8l1w2jvwv9a2n3akpss45hrx250gdrnqjp6xrw64";
+    sha256 = "0xinml44n2lfl0q2lb2apmn69gsszlwim83082f66vyk0gpwd4lr";
   };
 
   postPatch = ''
     substituteInPlace requirements.txt \
-      --replace "freezegun~=0.3.15" "freezegun" \
       --replace "matplotlib~=3.0" "matplotlib" \
       --replace "networkx~=2.4" "networkx" \
       --replace "numpy~=1.16" "numpy" \
-      --replace "protobuf~=3.12.0" "protobuf"
-
-    # Fix serialize_sympy_constants test by allowing small errors in pi
-    substituteInPlace cirq/google/arg_func_langs_test.py \
-      --replace "'float_value': float(str(np.float32(sympy.pi)))" "'float_value': pytest.approx(float(str(np.float32(sympy.pi))))"
+      --replace "protobuf~=3.13.0" "protobuf"
   '';
 
   propagatedBuildInputs = [
-    freezegun
     google-api-core
-    numpy
     matplotlib
     networkx
+    numpy
     pandas
     protobuf
     requests
     scipy
     sortedcontainers
     sympy
+    tqdm
     typing-extensions
   ];
 
-  doCheck = true;
   # pythonImportsCheck = [ "cirq" "cirq.Circuit" ];  # cirq's importlib hook doesn't work here
-  dontUseSetuptoolsCheck = true;
   checkInputs = [
     pytestCheckHook
+    freezegun
     pytest-asyncio
     pytest-benchmark
     ply
@@ -85,9 +79,7 @@ buildPythonPackage rec {
     "--ignore=cirq/contrib/"  # requires external (unpackaged) python packages, so untested.
     "--benchmark-disable" # Don't need to run benchmarks when packaging.
   ];
-  disabledTests = [
-    "test_convert_to_ion_gates" # fails on some systems due to rounding error, 0.75 != 0.750...2
-  ] ++ lib.optionals stdenv.isAarch64 [
+  disabledTests = lib.optionals stdenv.isAarch64 [
     # Seem to fail due to math issues on aarch64?
     "expectation_from_wavefunction"
     "test_single_qubit_op_to_framed_phase_form_output_on_example_case"
diff --git a/nixpkgs/pkgs/development/python-modules/ciscomobilityexpress/default.nix b/nixpkgs/pkgs/development/python-modules/ciscomobilityexpress/default.nix
index 86a2bd8aa88e..d48ba03ad537 100644
--- a/nixpkgs/pkgs/development/python-modules/ciscomobilityexpress/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ciscomobilityexpress/default.nix
@@ -1,20 +1,34 @@
-{ buildPythonPackage, fetchPypi, lib, requests }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, requests
+, python
+}:
 
 buildPythonPackage rec {
   pname = "ciscomobilityexpress";
-  version = "1.0.0";
+  version = "1.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fd3fe893d8a44f5ac1d46580af88e07f1066e73744763aca4ef2226f87d575ff";
+    sha256 = "d8787245598e8371a83baa4db1df949d8a942c43f13454fa26ee3b09c3ccafc0";
   };
 
   propagatedBuildInputs = [ requests ];
 
-  meta = {
+  # tests directory is set up, but has no tests
+  checkPhase = ''
+    ${python.interpreter} -m unittest
+  '';
+
+  pythonImportsCheck = [
+    "ciscomobilityexpress"
+  ];
+
+  meta = with lib; {
     description = "Module to interact with Cisco Mobility Express APIs to fetch connected devices";
-    homepage = "https://pypi.python.org/pypi/${pname}/";
-    license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ uvnikita ];
+    homepage = "https://github.com/fbradyirl/ciscomobilityexpress";
+    license = licenses.mit;
+    maintainers = with maintainers; [ uvnikita ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ckcc-protocol/default.nix b/nixpkgs/pkgs/development/python-modules/ckcc-protocol/default.nix
index eaf89948e8f2..e15a062a8939 100644
--- a/nixpkgs/pkgs/development/python-modules/ckcc-protocol/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ckcc-protocol/default.nix
@@ -4,31 +4,30 @@
 , ecdsa
 , hidapi
 , fetchPypi
-, pytest
 , pyaes
 , pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "ckcc-protocol";
-  version = "1.0.2";
+  version = "1.1.0";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0zpn3miyapskw6s71v614pmga5zfain9j085axm9v50b8r71xh1i";
+    sha256 = "b660225ac06fc06ad17b33ece428126eef785388450e14313f72d25d4082c5ab";
   };
 
-  checkInputs = [
-    pytest
-  ];
-
   propagatedBuildInputs = [ click ecdsa hidapi pyaes ];
 
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "ckcc" ];
+
   meta = with lib; {
     description = "Communicate with your Coldcard using Python";
     homepage = "https://github.com/Coldcard/ckcc-protocol";
-    license = licenses.gpl3;
+    license = licenses.mit;
     maintainers = [ maintainers.hkjn ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/claripy/default.nix b/nixpkgs/pkgs/development/python-modules/claripy/default.nix
index 1812ddff9520..61b72e8cf31f 100644
--- a/nixpkgs/pkgs/development/python-modules/claripy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/claripy/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "claripy";
-  version = "9.0.5739";
+  version = "9.0.5903";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1aym01f99zwb9w8qwy8gz631ka7g6akzdld0m4ykc5ip0rq70mki";
+    sha256 = "sha256-NIKWUx1VT5TjnuqppuT6VzwNRwcBLc0xI5k3F2Nmj8A=";
   };
 
   # Use upstream z3 implementation
diff --git a/nixpkgs/pkgs/development/python-modules/cliff/default.nix b/nixpkgs/pkgs/development/python-modules/cliff/default.nix
index 33a129d287ef..54cc75341717 100644
--- a/nixpkgs/pkgs/development/python-modules/cliff/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cliff/default.nix
@@ -16,11 +16,11 @@
 
 buildPythonPackage rec {
   pname = "cliff";
-  version = "3.6.0";
+  version = "3.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a3f4fa67eeafbcfa7cf9fe4b1755d410876528e1d0d115740db00b50a1250272";
+    sha256 = "389c81960de13f05daf1cbd546f33199e86c518ba4266c79ec7a153a280980ea";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/clifford/default.nix b/nixpkgs/pkgs/development/python-modules/clifford/default.nix
index 85ed160413e7..b26689cf38cc 100644
--- a/nixpkgs/pkgs/development/python-modules/clifford/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/clifford/default.nix
@@ -46,11 +46,6 @@ buildPythonPackage rec {
     ipython
   ];
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "'numba==0.43'" "'numba'"
-  '';
-
   # avoid collecting local files
   preCheck = ''
     cd clifford/test
@@ -68,5 +63,7 @@ buildPythonPackage rec {
     homepage = "https://clifford.readthedocs.io";
     license = licenses.bsd3;
     maintainers = [ maintainers.costrouc ];
+    # many TypeError's in tests
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/clldutils/default.nix b/nixpkgs/pkgs/development/python-modules/clldutils/default.nix
index b9ffd35bf96d..96e6b86c1507 100644
--- a/nixpkgs/pkgs/development/python-modules/clldutils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/clldutils/default.nix
@@ -15,14 +15,14 @@
 
 buildPythonPackage rec {
   pname = "clldutils";
-  version = "3.6.0";
+  version = "3.7.0";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "clld";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10jcd2x99z5ym2aki92c54caw97b3xgrkjj83qpln26hbdwpaz99";
+    sha256 = "13shas7krf7j04gqxjn09ipy318hmrp1s3b5d576d5r1xfxakam4";
   };
 
   patchPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/cmarkgfm/default.nix b/nixpkgs/pkgs/development/python-modules/cmarkgfm/default.nix
index 3c6342f6596f..7379d6dc6c96 100644
--- a/nixpkgs/pkgs/development/python-modules/cmarkgfm/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cmarkgfm/default.nix
@@ -1,25 +1,29 @@
-{ lib, buildPythonPackage, fetchPypi, cffi, pytest }:
+{ lib
+, buildPythonPackage
+, cffi
+, fetchPypi
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "cmarkgfm";
-  version = "0.5.0";
+  version = "0.5.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7a5131a78836e55dcdb1f2c5f17bbaa40e5f83c86a205de1b71a298928e1391f";
+    sha256 = "sha256-tqVJq6Mnq9mG1nSM8hyGN9dBx2hQ5/773vjSi/4TjjI=";
   };
 
   propagatedBuildInputs = [ cffi ];
 
-  checkInputs = [ pytest ];
+  checkInputs = [ pytestCheckHook ];
 
-  checkPhase = ''
-    py.test
-  '';
+  pythonImportsCheck = [ "cmarkgfm" ];
 
   meta = with lib; {
     description = "Minimal bindings to GitHub's fork of cmark";
     homepage = "https://github.com/jonparrott/cmarkgfm";
     license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/cmigemo/default.nix b/nixpkgs/pkgs/development/python-modules/cmigemo/default.nix
new file mode 100644
index 000000000000..907e144c86ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/cmigemo/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildPythonPackage, fetchPypi, six, cmigemo, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "cmigemo";
+  version = "0.1.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "09j68kvcskav2cqb7pj12caksmj4wh2lhjp0csq00xpn0wqal4vk";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  preConfigure = ''
+    export LDFLAGS="-L${cmigemo}/lib"
+    export CPPFLAGS="-I${cmigemo}/include"
+    export LD_LIBRARY_PATH="${cmigemo}/lib"
+  '';
+
+  postPatch = ''
+    sed -i 's~dict_path_base = "/usr/share/cmigemo"~dict_path_base = "/${cmigemo}/share/migemo"~g' test/test_cmigemo.py
+  '';
+
+  checkInputs = [ pytestCheckHook ];
+
+  pytestFlagsArray = [ "test/" ];
+
+  pythonImportsCheck = [ "cmigemo" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mooz/python-cmigemo";
+    description = "A pure python binding for C/Migemo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ illustris ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/cnvkit/default.nix b/nixpkgs/pkgs/development/python-modules/cnvkit/default.nix
index 92af67fa183a..5baa28e4bd7f 100644
--- a/nixpkgs/pkgs/development/python-modules/cnvkit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cnvkit/default.nix
@@ -2,7 +2,6 @@
 , fetchFromGitHub
 , fetchpatch
 , rPackages
-, rWrapper
 , buildPythonPackage
 , biopython
 , numpy
@@ -55,11 +54,6 @@ buildPythonPackage rec {
     rPackages.DNAcopy
   ];
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "pandas >= 0.20.1, < 0.25.0" "pandas"
-  '';
-
   checkInputs = [ R ];
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/codecov/default.nix b/nixpkgs/pkgs/development/python-modules/codecov/default.nix
index 924422bf7d4f..2e8cbf29220c 100644
--- a/nixpkgs/pkgs/development/python-modules/codecov/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/codecov/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "codecov";
-  version = "2.1.10";
+  version = "2.1.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d30ad6084501224b1ba699cbf018a340bb9553eb2701301c14133995fdd84f33";
+    sha256 = "6cde272454009d27355f9434f4e49f238c0273b216beda8472a65dc4957f473b";
   };
 
   checkInputs = [ unittest2 ]; # Tests only
diff --git a/nixpkgs/pkgs/development/python-modules/codespell/default.nix b/nixpkgs/pkgs/development/python-modules/codespell/default.nix
index e1aa8252d13b..7427d391c615 100644
--- a/nixpkgs/pkgs/development/python-modules/codespell/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/codespell/default.nix
@@ -17,7 +17,7 @@ buildPythonApplication rec {
     export ASPELL_CONF="dict-dir ${aspellDicts.en}/lib/aspell"
   '';
 
-  # tries to run not rully installed script
+  # tries to run not fully installed script
   disabledTests = [ "test_command" ];
 
   pythonImportsCheck = [ "codespell_lib" ];
diff --git a/nixpkgs/pkgs/development/python-modules/coinmarketcap/default.nix b/nixpkgs/pkgs/development/python-modules/coinmarketcap/default.nix
deleted file mode 100644
index 168f75b7f49b..000000000000
--- a/nixpkgs/pkgs/development/python-modules/coinmarketcap/default.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ lib, buildPythonPackage, fetchPypi, requests-cache }:
-
-buildPythonPackage rec {
-  pname = "coinmarketcap";
-  version = "5.0.3";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1cfee31bf330a17cedf188e4e99588e6a4c6c969c93da71f55a9f4ec6a6c216f";
-  };
-
-  propagatedBuildInputs = [ requests-cache ];
-
-  meta = with lib; {
-    description = "A python wrapper around the https://coinmarketcap.com API.";
-    homepage = "https://github.com/barnumbirr/coinmarketcap";
-    license = licenses.asl20;
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/colorcet/default.nix b/nixpkgs/pkgs/development/python-modules/colorcet/default.nix
index 6198e4e1b281..207653375144 100644
--- a/nixpkgs/pkgs/development/python-modules/colorcet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/colorcet/default.nix
@@ -24,7 +24,6 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    nbsmoke
     pytest
     flake8
     pytest-mpl
diff --git a/nixpkgs/pkgs/development/python-modules/coloredlogs/default.nix b/nixpkgs/pkgs/development/python-modules/coloredlogs/default.nix
index caa783bb8238..8cdd714bf105 100644
--- a/nixpkgs/pkgs/development/python-modules/coloredlogs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/coloredlogs/default.nix
@@ -12,13 +12,13 @@
 
 buildPythonPackage rec {
   pname = "coloredlogs";
-  version = "14.0";
+  version = "15.0";
 
   src = fetchFromGitHub {
     owner = "xolox";
     repo = "python-coloredlogs";
     rev = version;
-    sha256 = "0rnmxwrim4razlv4vi3krxk5lc5ksck6h5374j8avqwplika7q2x";
+    sha256 = "sha256-C1Eo+XrrL3bwhT49KyOE6xjbAHJxn9Qy4s1RR5ERVtA=";
   };
 
   # capturer is broken on darwin / py38, so we skip the test until a fix for
diff --git a/nixpkgs/pkgs/development/python-modules/colorlog/default.nix b/nixpkgs/pkgs/development/python-modules/colorlog/default.nix
index 0740ee33b5f1..daff7bc76d38 100644
--- a/nixpkgs/pkgs/development/python-modules/colorlog/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/colorlog/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "colorlog";
-  version = "4.7.2";
+  version = "4.8.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0lc2r105hxbyh29dsgczdi379lh57gnbj56jsxi5g9rqcihmpl0q";
+    sha256 = "sha256-WbUxYMYJAsQFzewo04NW4J1AaGZZBIiT4CbsvViVFrE=";
   };
 
   checkInputs = [ pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/configargparse/default.nix b/nixpkgs/pkgs/development/python-modules/configargparse/default.nix
index d1dcce9699b3..5646bca04736 100644
--- a/nixpkgs/pkgs/development/python-modules/configargparse/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/configargparse/default.nix
@@ -1,20 +1,31 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, mock
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
-  pname = "ConfigArgParse";
-  version = "1.2.3";
+  pname = "configargparse";
+  version = "1.4";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd";
+  src = fetchFromGitHub {
+    owner = "bw2";
+    repo = "ConfigArgParse";
+    rev = "v${version}";
+    sha256 = "0x6ar7d8qhr7gb1s8asbhqymg9jd635h7cyczqrbmvm8689zhj1d";
   };
 
-  # no tests in tarball
-  doCheck = false;
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "configargparse" ];
 
   meta = with lib; {
     description = "A drop-in replacement for argparse";
-    homepage = "https://github.com/zorro3/ConfigArgParse";
+    homepage = "https://github.com/bw2/ConfigArgParse";
     license = licenses.mit;
     maintainers = [ maintainers.willibutz ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/configshell/default.nix b/nixpkgs/pkgs/development/python-modules/configshell/default.nix
index a41d077f22df..9f67aacf2d4e 100644
--- a/nixpkgs/pkgs/development/python-modules/configshell/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/configshell/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "configshell";
-  version = "1.1.28";
+  version = "1.1.29";
 
   src = fetchFromGitHub {
     owner = "open-iscsi";
     repo = "${pname}-fb";
     rev = "v${version}";
-    sha256 = "1ym2hkvmmacgy21wnjwzyrcxyl3sx4bcx4hc51vf4lzcnj589l68";
+    sha256 = "0mjj3c9335sph8rhwww7j4zvhyk896fbmx887vibm89w3jpvjjr9";
   };
 
   propagatedBuildInputs = [ pyparsing six urwid ];
diff --git a/nixpkgs/pkgs/development/python-modules/construct/2.10.54.nix b/nixpkgs/pkgs/development/python-modules/construct/2.10.54.nix
new file mode 100644
index 000000000000..6bb279490ab2
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/construct/2.10.54.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, buildPythonPackage, fetchFromGitHub, pythonOlder
+, six, 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 pytest-benchmark enum34 numpy arrow ruamel_yaml ];
+
+  disabledTests = lib.optionals stdenv.isDarwin [ "test_multiprocessing" ];
+
+  pytestFlagsArray = [ "--benchmark-disable" ];
+
+  meta = with lib; {
+    description = "Powerful declarative parser (and builder) for binary data";
+    homepage = "https://construct.readthedocs.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/convertdate/2.2.x.nix b/nixpkgs/pkgs/development/python-modules/convertdate/2.2.x.nix
new file mode 100644
index 000000000000..d67f4c5a3449
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/convertdate/2.2.x.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pymeeus
+, pytz
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "convertdate";
+  version = "2.2.2";
+
+  # Tests are not available in the PyPI tarball so use GitHub instead.
+  src = fetchFromGitHub {
+    owner = "fitnr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xgi7x9b9kxm0q51bqnmwdm5lp8vwhx5yk4d1b23r37spz9dbhw5";
+  };
+
+  propagatedBuildInputs = [
+    pymeeus
+    pytz
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/fitnr/convertdate";
+    description = "Utils for converting between date formats and calculating holidays";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/convertdate/default.nix b/nixpkgs/pkgs/development/python-modules/convertdate/default.nix
index f285a74e5449..cc26142d362b 100644
--- a/nixpkgs/pkgs/development/python-modules/convertdate/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/convertdate/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, isPy27
 , fetchFromGitHub
 , pymeeus
 , pytz
@@ -8,14 +9,15 @@
 
 buildPythonPackage rec {
   pname = "convertdate";
-  version = "2.3.0";
+  version = "2.3.2";
+  disabled = isPy27;
 
   # Tests are not available in the PyPI tarball so use GitHub instead.
   src = fetchFromGitHub {
     owner = "fitnr";
     repo = pname;
     rev = "v${version}";
-    sha256 = "17j188zlp46zmq8qyy4z4f9v25l3zibkwzj8wp4fxqgimjnfj2nr";
+    sha256 = "0k7j59sbqwyi72vcjx5vsh3qb6hxfnkfjkd2i6f6lckdr1bkh7fz";
   };
 
   propagatedBuildInputs = [
@@ -27,6 +29,8 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
+  pythonImportsCheck = [ "convertdate" ];
+
   meta = with lib; {
     homepage = "https://github.com/fitnr/convertdate";
     description = "Utils for converting between date formats and calculating holidays";
diff --git a/nixpkgs/pkgs/development/python-modules/cornice/default.nix b/nixpkgs/pkgs/development/python-modules/cornice/default.nix
index 6c488a271e25..ba6df4fd24a6 100644
--- a/nixpkgs/pkgs/development/python-modules/cornice/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cornice/default.nix
@@ -9,17 +9,18 @@
 
 buildPythonPackage rec {
   pname = "cornice";
-  version = "5.0.3";
+  version = "5.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f971831e90343374b21c0c97d523e23eb09cec41a2a8fc2e85bb5c2585348576";
+    sha256 = "c81cd9429759c0de475f580bbff92d5646cfc5f43e8aa24492037e2e90677ee6";
   };
 
   propagatedBuildInputs = [ pyramid simplejson six venusian ];
 
   # tests not packaged with pypi release
   doCheck = false;
+  pythonImportsCheck = [ "cornice" ];
 
   meta = with lib; {
     homepage = "https://github.com/mozilla-services/cornice";
@@ -27,5 +28,4 @@ buildPythonPackage rec {
     license = licenses.mpl20;
     maintainers = [ maintainers.costrouc ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/cot/default.nix b/nixpkgs/pkgs/development/python-modules/cot/default.nix
index a6de8321dc0c..607057b73f21 100644
--- a/nixpkgs/pkgs/development/python-modules/cot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cot/default.nix
@@ -1,13 +1,12 @@
 { lib, stdenv, buildPythonPackage, fetchPypi, pythonOlder, isPy3k
-, argcomplete, colorlog, pyvmomi, requests, verboselogs
+, colorlog, pyvmomi, requests, verboselogs
 , psutil, pyopenssl, setuptools
-, mock, pytest, pytest-mock, pytestCheckHook, qemu
+, mock, pytest-mock, pytestCheckHook, qemu
 }:
 
 buildPythonPackage rec {
   pname = "cot";
   version = "2.2.1";
-
   disabled = !isPy3k;
 
   src = fetchPypi {
diff --git a/nixpkgs/pkgs/development/python-modules/coverage/default.nix b/nixpkgs/pkgs/development/python-modules/coverage/default.nix
index 8823435e2f8b..b7bb3c811344 100644
--- a/nixpkgs/pkgs/development/python-modules/coverage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/coverage/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "coverage";
-  version = "5.3";
+  version = "5.3.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "280baa8ec489c4f542f8940f9c4c2181f0306a8ee1a54eceba071a449fb870a0";
+    sha256 = "38f16b1317b8dd82df67ed5daa5f5e7c959e46579840d77a67a4ceb9cef0a50b";
   };
 
   # No tests in archive
diff --git a/nixpkgs/pkgs/development/python-modules/cozy/default.nix b/nixpkgs/pkgs/development/python-modules/cozy/default.nix
index 39f2d1227e7c..fcd002f762d7 100644
--- a/nixpkgs/pkgs/development/python-modules/cozy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cozy/default.nix
@@ -1,5 +1,5 @@
 { buildPythonPackage, isPy3k, fetchFromGitHub, lib,
-  z3, ply, python-igraph, oset, ordered-set, dictionaries }:
+  z3, ply, python-igraph, oset, ordered-set, dictionaries, setuptools }:
 
 buildPythonPackage {
   pname = "cozy";
@@ -7,7 +7,7 @@ buildPythonPackage {
   disabled = !isPy3k;
 
   propagatedBuildInputs = [
-    z3 ply python-igraph oset ordered-set dictionaries
+    setuptools z3 ply python-igraph oset ordered-set dictionaries
   ];
 
   src = fetchFromGitHub {
diff --git a/nixpkgs/pkgs/development/python-modules/crate/default.nix b/nixpkgs/pkgs/development/python-modules/crate/default.nix
index a37160a01acf..9be85ff4b3cd 100644
--- a/nixpkgs/pkgs/development/python-modules/crate/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/crate/default.nix
@@ -6,6 +6,7 @@
 , isPy3k
 , sqlalchemy
 , pytestCheckHook
+, stdenv
 }:
 
 buildPythonPackage rec {
@@ -28,6 +29,8 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
+  disabledTestPaths = lib.optionals stdenv.isDarwin [ "src/crate/client/test_http.py" ];
+
   meta = with lib; {
     homepage = "https://github.com/crate/crate-python";
     description = "A Python client library for CrateDB";
diff --git a/nixpkgs/pkgs/development/python-modules/croniter/default.nix b/nixpkgs/pkgs/development/python-modules/croniter/default.nix
index 308070355790..577fef8d79d9 100644
--- a/nixpkgs/pkgs/development/python-modules/croniter/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/croniter/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , python-dateutil
-, pytest
+, pytestCheckHook
 , pytz
 , natsort
 , tzlocal
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "croniter";
-  version = "0.3.37";
+  version = "1.0.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "12ced475dfc107bf7c6c1440af031f34be14cd97bbbfaf0f62221a9c11e86404";
+    sha256 = "708532f70584207e23ef2989ca40f367e6238bfe050133a1aff43e1e0e6f6092";
   };
 
   propagatedBuildInputs = [
@@ -23,15 +23,11 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytest
+    pytestCheckHook
     pytz
     tzlocal
   ];
 
-  checkPhase = ''
-    pytest src/croniter
-  '';
-
   meta = with lib; {
     description = "croniter provides iteration for datetime object with cron like format";
     homepage = "https://github.com/kiorky/croniter";
diff --git a/nixpkgs/pkgs/development/python-modules/cryptography/3.3.nix b/nixpkgs/pkgs/development/python-modules/cryptography/3.3.nix
index b6972e6d56bb..049718520753 100644
--- a/nixpkgs/pkgs/development/python-modules/cryptography/3.3.nix
+++ b/nixpkgs/pkgs/development/python-modules/cryptography/3.3.nix
@@ -22,11 +22,11 @@
 
 buildPythonPackage rec {
   pname = "cryptography";
-  version = "3.3.1"; # Also update the hash in vectors-3.3.nix
+  version = "3.3.2"; # Also update the hash in vectors-3.3.nix
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1ribd1vxq9wwz564mg60dzcy699gng54admihjjkgs9dx95pw5vy";
+    sha256 = "1vcvw4lkw1spiq322pm1256kail8nck6bbgpdxx3pqa905wd6q2s";
   };
 
   patches = [ ./cryptography-py27-warning.patch ];
diff --git a/nixpkgs/pkgs/development/python-modules/cryptography/default.nix b/nixpkgs/pkgs/development/python-modules/cryptography/default.nix
index ad402efd7593..32624e54c400 100644
--- a/nixpkgs/pkgs/development/python-modules/cryptography/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cryptography/default.nix
@@ -2,8 +2,8 @@
 , buildPythonPackage
 , fetchPypi
 , fetchpatch
-, isPy27
-, ipaddress
+, rustPlatform
+, setuptools-rust
 , openssl
 , cryptography_vectors
 , darwin
@@ -13,27 +13,39 @@
 , isPyPy
 , cffi
 , pytest
+, pytest-subtests
 , pretend
 , iso8601
 , pytz
 , hypothesis
-, enum34
 }:
 
 buildPythonPackage rec {
   pname = "cryptography";
-  version = "3.3.1"; # Also update the hash in vectors.nix
+  version = "3.4.6"; # Also update the hash in vectors.nix
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1ribd1vxq9wwz564mg60dzcy699gng54admihjjkgs9dx95pw5vy";
+    sha256 = "11wgsihfq72fav67c3igi0xbhbd6c5dj869byd1jkq0fbcz24cid";
   };
 
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    sourceRoot = "${pname}-${version}/${cargoRoot}";
+    name = "${pname}-${version}";
+    sha256 = "1i0sd2y4a5g1yqwcpw2ycp6p4p8sk5v7clblq756i5864j52v6w1";
+  };
+
+  cargoRoot = "src/rust";
+
   outputs = [ "out" "dev" ];
 
   nativeBuildInputs = lib.optionals (!isPyPy) [
     cffi
-  ];
+  ] ++ [
+    rustPlatform.cargoSetupHook
+    setuptools-rust
+  ] ++ (with rustPlatform; [ rust.cargo rust.rustc ]);
 
   buildInputs = [ openssl ]
              ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
@@ -42,8 +54,6 @@ buildPythonPackage rec {
     six
   ] ++ lib.optionals (!isPyPy) [
     cffi
-  ] ++ lib.optionals isPy27 [
-    ipaddress enum34
   ];
 
   checkInputs = [
@@ -52,6 +62,7 @@ buildPythonPackage rec {
     iso8601
     pretend
     pytest
+    pytest-subtests
     pytz
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/cryptography/vectors-3.3.nix b/nixpkgs/pkgs/development/python-modules/cryptography/vectors-3.3.nix
index 94526c8268ef..f9b7c525237a 100644
--- a/nixpkgs/pkgs/development/python-modules/cryptography/vectors-3.3.nix
+++ b/nixpkgs/pkgs/development/python-modules/cryptography/vectors-3.3.nix
@@ -7,7 +7,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "192wix3sr678x21brav5hgc6j93l7ab1kh69p2scr3fsblq9qy03";
+    sha256 = "1yhaps0f3h2yjb6lmz953z1l1d84y9swk4k3gj9nqyk4vbx5m7cc";
   };
 
   # No tests included
diff --git a/nixpkgs/pkgs/development/python-modules/cryptography/vectors.nix b/nixpkgs/pkgs/development/python-modules/cryptography/vectors.nix
index 94526c8268ef..a807be9c3bbb 100644
--- a/nixpkgs/pkgs/development/python-modules/cryptography/vectors.nix
+++ b/nixpkgs/pkgs/development/python-modules/cryptography/vectors.nix
@@ -7,7 +7,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "192wix3sr678x21brav5hgc6j93l7ab1kh69p2scr3fsblq9qy03";
+    sha256 = "1a1d5ix5b3ajhrqaf8rm6qmd6gkaidij0jgd1vrb8q1xn1gqmy75";
   };
 
   # No tests included
diff --git a/nixpkgs/pkgs/development/python-modules/crytic-compile/default.nix b/nixpkgs/pkgs/development/python-modules/crytic-compile/default.nix
index 95f2effc045a..a5ae90c57e37 100644
--- a/nixpkgs/pkgs/development/python-modules/crytic-compile/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/crytic-compile/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "crytic-compile";
-  version = "0.1.12";
+  version = "0.1.13";
 
   disabled = pythonOlder "3.6";
 
@@ -14,7 +14,7 @@ buildPythonPackage rec {
     owner = "crytic";
     repo = "crytic-compile";
     rev = version;
-    sha256 = "1q75n84yxv2cb6x7gqyk3vcwkxpq7pni30wgz3d1bk6pmi2pqgw6";
+    sha256 = "sha256-KJRfkUyUI0M7HevY4XKOtCvU+SFlsJIl3kTIccWfNmw=";
   };
 
   propagatedBuildInputs = [ pysha3 setuptools ];
diff --git a/nixpkgs/pkgs/development/python-modules/cssutils/default.nix b/nixpkgs/pkgs/development/python-modules/cssutils/default.nix
index a12fbf48c820..8bfe8ea2948d 100644
--- a/nixpkgs/pkgs/development/python-modules/cssutils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cssutils/default.nix
@@ -1,22 +1,52 @@
-{ lib, buildPythonPackage, fetchPypi, mock }:
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, setuptools-scm
+, toml
+, importlib-metadata
+, mock
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "cssutils";
-  version = "1.0.2";
+  version = "2.2.0";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a2fcf06467553038e98fea9cfe36af2bf14063eb147a70958cfcaa8f5786acaf";
+    sha256 = "5bef59f6b59bdccbea8e36cb292d2be1b6be1b485fc4a9f5886616f19eb31aaf";
   };
 
-  buildInputs = [ mock ];
+  nativeBuildInputs = [
+    setuptools-scm
+    toml
+  ];
+
+  propagatedBuildInputs = lib.optionals (pythonOlder "3.8") [
+    importlib-metadata
+  ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # access network
+    "test_parseUrl"
+    "encutils"
+  ];
 
-  # couple of failing tests
-  doCheck = false;
+  pythonImportsCheck = [ "cssutils" ];
 
   meta = with lib; {
-    description = "A Python package to parse and build CSS";
-    homepage = "http://cthedot.de/cssutils/";
+    description = "A CSS Cascading Style Sheets library for Python";
+    homepage = "https://github.com/jaraco/cssutils";
+    changelog = "https://github.com/jaraco/cssutils/blob/v${version}/CHANGES.rst";
     license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/csvs-to-sqlite/default.nix b/nixpkgs/pkgs/development/python-modules/csvs-to-sqlite/default.nix
index 4105d981386d..ea32471f09c5 100644
--- a/nixpkgs/pkgs/development/python-modules/csvs-to-sqlite/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/csvs-to-sqlite/default.nix
@@ -2,13 +2,12 @@
 , buildPythonPackage
 , fetchFromGitHub
 , isPy3k
-, pytestrunner
 , click
 , dateparser
 , pandas
 , py-lru-cache
 , six
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -23,11 +22,6 @@ buildPythonPackage rec {
     sha256 = "0p99cg76d3s7jxvigh5ad04dzhmr6g62qzzh4i6h7x9aiyvdhvk4";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace pandas~=0.25.0 pandas
-  '';
-
   propagatedBuildInputs = [
     click
     dateparser
@@ -37,13 +31,9 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytest
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    pytest
-  '';
-
   meta = with lib; {
     description = "Convert CSV files into a SQLite database";
     homepage = "https://github.com/simonw/csvs-to-sqlite";
diff --git a/nixpkgs/pkgs/development/python-modules/csvw/default.nix b/nixpkgs/pkgs/development/python-modules/csvw/default.nix
index 410248b0193b..e4bd7ab2b624 100644
--- a/nixpkgs/pkgs/development/python-modules/csvw/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/csvw/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname = "csvw";
-  version = "1.10.0";
+  version = "1.10.1";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "cldf";
     repo = "csvw";
     rev = "v${version}";
-    sha256 = "0cvfzfi1a2m1xqpm34mwp9r3bhgsnfz4pmslvgn81i42n5grbnis";
+    sha256 = "1764nfa4frjdd7v6wj35y7prnciaqz57wwygy5zfavl4laxn4nxd";
   };
 
   patchPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/cufflinks/default.nix b/nixpkgs/pkgs/development/python-modules/cufflinks/default.nix
index 4c2db1f52146..42f1d77b12b9 100644
--- a/nixpkgs/pkgs/development/python-modules/cufflinks/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cufflinks/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, fetchpatch
+{ lib, buildPythonPackage, fetchPypi
 , chart-studio
 , colorlover
 , ipython
diff --git a/nixpkgs/pkgs/development/python-modules/cupy/default.nix b/nixpkgs/pkgs/development/python-modules/cupy/default.nix
index 5c4978a388f2..f5d262f0b8fd 100644
--- a/nixpkgs/pkgs/development/python-modules/cupy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cupy/default.nix
@@ -1,32 +1,35 @@
 { lib, buildPythonPackage
-, fetchPypi, isPy3k, linuxPackages
-, fastrlock, numpy, six, wheel, pytest, mock, setuptools
-, cudatoolkit, cudnn, nccl
+, fetchPypi, isPy3k, cython
+, fastrlock, numpy, six, wheel, pytestCheckHook, mock, setuptools
+, cudatoolkit, cudnn, cutensor, nccl
+, addOpenGLRunpath
 }:
 
 buildPythonPackage rec {
   pname = "cupy";
-  version = "8.4.0";
+  version = "8.5.0";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "58d19af6b2e83388d4f0f6ca4226bae4b947920d2ca4951c2eddc8bc78abf66b";
+    sha256 = "fb3f8d3b3454beb249b9880502a45fe493c5a44efacc4c72914cbe1a5dbdf803";
   };
 
-  checkInputs = [
-    pytest
-    mock
-  ];
-
   preConfigure = ''
-      export CUDA_PATH=${cudatoolkit}
+    export CUDA_PATH=${cudatoolkit}
   '';
 
+  nativeBuildInputs = [
+    addOpenGLRunpath
+    cython
+  ];
+
+  LDFLAGS = "-L${cudatoolkit}/lib/stubs";
+
   propagatedBuildInputs = [
     cudatoolkit
     cudnn
-    linuxPackages.nvidia_x11
+    cutensor
     nccl
     fastrlock
     numpy
@@ -35,8 +38,20 @@ buildPythonPackage rec {
     wheel
   ];
 
-  # In python3, test was failed...
-  doCheck = !isPy3k;
+  checkInputs = [
+    pytestCheckHook
+    mock
+  ];
+
+  # Won't work with the GPU, whose drivers won't be accessible from the build
+  # sandbox
+  doCheck = false;
+
+  postFixup = ''
+    find $out -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do
+      addOpenGLRunpath "$lib"
+    done
+  '';
 
   enableParallelBuilding = true;
 
diff --git a/nixpkgs/pkgs/development/python-modules/curio/default.nix b/nixpkgs/pkgs/development/python-modules/curio/default.nix
index 31875abd1e83..fb1eceda7f2b 100644
--- a/nixpkgs/pkgs/development/python-modules/curio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/curio/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
 , isPy3k
 , pytestCheckHook
 , sphinx
@@ -16,6 +17,20 @@ buildPythonPackage rec {
     sha256 = "57edce81c837f3c2cf42fbb346dee26e537d1659e6605269fb13bd179e068744";
   };
 
+  patches = [
+    # Fix the flaky test due to slow moving time on Apple Silicon chips.
+    # Remove when https://github.com/dabeaz/curio/pull/339 is in the next release.
+    (fetchpatch {
+      url = "https://github.com/dabeaz/curio/commit/132376724bbfaa0a52d3d63d0791aa4ac1eb6f5f.patch";
+      sha256 = "sha256-AxO0xRcR9l9/NKEJFwyZIoYcyZxpqOhpdNaeaYokVb4=";
+    })
+    # Same as above
+    (fetchpatch {
+      url = "https://github.com/dabeaz/curio/commit/8ac2f12a2cdacbc750b01fc7459cee8879bc1ee3.patch";
+      sha256 = "sha256-2Si3fuDLrI09QuzJd1TrE0QY02G9e9m+1eHFTB/MrWU=";
+    })
+  ];
+
   disabled = !isPy3k;
 
   checkInputs = [ pytestCheckHook sphinx ];
diff --git a/nixpkgs/pkgs/development/python-modules/cvxopt/default.nix b/nixpkgs/pkgs/development/python-modules/cvxopt/default.nix
index 9270effcaa91..d3cbc94f7153 100644
--- a/nixpkgs/pkgs/development/python-modules/cvxopt/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cvxopt/default.nix
@@ -17,13 +17,13 @@ assert (!blas.isILP64) && (!lapack.isILP64);
 
 buildPythonPackage rec {
   pname = "cvxopt";
-  version = "1.2.5";
+  version = "1.2.6";
 
   disabled = isPyPy; # hangs at [translation:info]
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0widrfxr0x0cyg72ibkv7fdzkvmf5mllchq1x4fs2a36plv8rv4l";
+    sha256 = "a4c433706fd0ad9d47e7f222773a7f7601766fb8e74b633524b3c3fce29aa73e";
   };
 
   buildInputs = [ blas lapack ];
diff --git a/nixpkgs/pkgs/development/python-modules/cvxpy/default.nix b/nixpkgs/pkgs/development/python-modules/cvxpy/default.nix
index 1f5a2edc9895..eca28633aaf4 100644
--- a/nixpkgs/pkgs/development/python-modules/cvxpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cvxpy/default.nix
@@ -4,40 +4,35 @@
 , fetchPypi
 , cvxopt
 , ecos
-, multiprocess
 , numpy
 , osqp
 , scipy
 , scs
-, six
   # Check inputs
 , pytestCheckHook
-, nose
 }:
 
 buildPythonPackage rec {
   pname = "cvxpy";
-  version = "1.1.8";
+  version = "1.1.11";
 
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "444068d4eda9ffcd43578895174489d4cef36b28ba7ae8a96ab9ef9571d2b4ff";
+    hash = "sha256-W4qly+g07Q1iYJ76/tGZNkBPa+oavhTDUYRQ3cZ+s1I=";
   };
 
   propagatedBuildInputs = [
     cvxopt
     ecos
-    multiprocess
     numpy
     osqp
     scipy
     scs
-    six
   ];
 
-  checkInputs = [ pytestCheckHook nose ];
+  checkInputs = [ pytestCheckHook ];
   pytestFlagsArray = [ "./cvxpy" ];
   # Disable the slowest benchmarking tests, cuts test time in half
   disabledTests = [
@@ -46,7 +41,7 @@ buildPythonPackage rec {
   ];
 
   meta = with lib; {
-    description = "A domain-specific language for modeling convex optimization problems in Python.";
+    description = "A domain-specific language for modeling convex optimization problems in Python";
     homepage = "https://www.cvxpy.org/";
     downloadPage = "https://github.com/cvxgrp/cvxpy/releases";
     changelog = "https://github.com/cvxgrp/cvxpy/releases/tag/v${version}";
diff --git a/nixpkgs/pkgs/development/python-modules/cx_freeze/default.nix b/nixpkgs/pkgs/development/python-modules/cx_freeze/default.nix
index 1c3ee6892990..53f0ef656e20 100644
--- a/nixpkgs/pkgs/development/python-modules/cx_freeze/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cx_freeze/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "cx_Freeze";
-  version = "6.4.1";
+  version = "6.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "043513b85e33038e38cc0571cea1f3ee8044ec083891c9a5dad1d436894424ea";
+    sha256 = "fe0af7c658442402bcd209f993219a6ab98a951459495b4a141eb03b552a1c68";
   };
 
   disabled = pythonOlder "3.5";
diff --git a/nixpkgs/pkgs/development/python-modules/cypari2/default.nix b/nixpkgs/pkgs/development/python-modules/cypari2/default.nix
index a7115d1e940d..a553aeab65c0 100644
--- a/nixpkgs/pkgs/development/python-modules/cypari2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cypari2/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , python
+, fetchpatch
 , fetchPypi
 , pari
 , gmp
@@ -11,13 +12,23 @@
 buildPythonPackage rec {
   pname = "cypari2";
   # upgrade may break sage, please test the sage build or ping @timokau on upgrade
-  version = "2.1.1";
+  version = "2.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "df1ef62e771ec36e5a456f5fc8b51bc6745b70f0efdd0c7a30c3f0b5f1fb93db";
+    sha256 = "03cd45edab8716ebbfdb754e65fea72e873c73dc91aec098fe4a01e35324ac7a";
   };
 
+  patches = [
+    # patch to avoid some segfaults in sage's totallyreal.pyx test.
+    # (https://trac.sagemath.org/ticket/27267). depends on Cython patch.
+    (fetchpatch {
+      name = "use-trashcan-for-gen.patch";
+      url = "https://git.sagemath.org/sage.git/plain/build/pkgs/cypari/patches/trashcan.patch?id=b6ea17ef8e4d652de0a85047bac8d41e90b25555";
+      sha256 = "sha256-w4kktWb9/aR9z4CjrUvAMOxEwRN2WkubaKzQttN8rU8=";
+    })
+  ];
+
   # This differs slightly from the default python installPhase in that it pip-installs
   # "." instead of "*.whl".
   # That is because while the default install phase succeeds to build the package,
@@ -48,7 +59,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Cython bindings for PARI";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = teams.sage.members;
     homepage = "https://github.com/defeo/cypari2";
   };
diff --git a/nixpkgs/pkgs/development/python-modules/cysignals/default.nix b/nixpkgs/pkgs/development/python-modules/cysignals/default.nix
index 736afab4257c..d075360d1a44 100644
--- a/nixpkgs/pkgs/development/python-modules/cysignals/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/cysignals/default.nix
@@ -9,11 +9,11 @@ assert pariSupport -> pari != null;
 
 buildPythonPackage rec {
   pname = "cysignals";
-  version = "1.10.2";
+  version = "1.10.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1ckxzch3wk5cg80mppky5jib5z4fzslny3001r5zg4ar1ixbc1w1";
+    sha256 = "sha256-XEYGxDV3UCgxb3Jf23y4lOPK4Lb9L4YqDSlxdIRptDo=";
   };
 
   # explicit check:
diff --git a/nixpkgs/pkgs/development/python-modules/dask-gateway-server/default.nix b/nixpkgs/pkgs/development/python-modules/dask-gateway-server/default.nix
index d2f040609d32..f55a2fe75094 100644
--- a/nixpkgs/pkgs/development/python-modules/dask-gateway-server/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask-gateway-server/default.nix
@@ -33,6 +33,7 @@ buildPythonPackage rec {
 
   preBuild = ''
     export HOME=$(mktemp -d)
+    export GO111MODULE=off
   '';
 
   # tests requires cluster for testing
diff --git a/nixpkgs/pkgs/development/python-modules/dask-image/default.nix b/nixpkgs/pkgs/development/python-modules/dask-image/default.nix
index a3cc7b6afda0..a68c86538ee1 100644
--- a/nixpkgs/pkgs/development/python-modules/dask-image/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask-image/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, fetchpatch
 , dask
 , numpy, toolz # dask[array]
 , scipy
@@ -38,6 +37,7 @@ buildPythonPackage rec {
   checkPhase = ''
     pytest --ignore=tests/test_dask_image/
   '';
+  pythonImportsCheck = [ "dask_image" ];
 
   meta = with lib; {
     homepage = "https://github.com/dask/dask-image";
diff --git a/nixpkgs/pkgs/development/python-modules/dask-jobqueue/default.nix b/nixpkgs/pkgs/development/python-modules/dask-jobqueue/default.nix
index f4f5c03858ae..7719842fbad6 100644
--- a/nixpkgs/pkgs/development/python-modules/dask-jobqueue/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask-jobqueue/default.nix
@@ -8,12 +8,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.7.1";
+  version = "0.7.2";
   pname = "dask-jobqueue";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d32ddf3e3c7db29ace102037fa5f61c8db2d945176454dc316a6ffdb8bbfe88b";
+    sha256 = "1767f4146b2663d9d2eaef62b882a86e1df0bccdb8ae68ae3e5e546aa6796d35";
   };
 
   checkInputs = [ pytest ];
@@ -29,5 +29,6 @@ buildPythonPackage rec {
     description = "Deploy Dask on job schedulers like PBS, SLURM, and SGE";
     license = licenses.bsd3;
     maintainers = [ maintainers.costrouc ];
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/dask-ml/default.nix b/nixpkgs/pkgs/development/python-modules/dask-ml/default.nix
index 737def7b9ac3..4f4b7b705c4e 100644
--- a/nixpkgs/pkgs/development/python-modules/dask-ml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask-ml/default.nix
@@ -12,10 +12,6 @@
 , six
 , multipledispatch
 , packaging
-, pytest
-, xgboost
-, tensorflow
-, joblib
 , distributed
 }:
 
diff --git a/nixpkgs/pkgs/development/python-modules/dask-mpi/default.nix b/nixpkgs/pkgs/development/python-modules/dask-mpi/default.nix
index 1bec4c828728..d656b055d119 100644
--- a/nixpkgs/pkgs/development/python-modules/dask-mpi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask-mpi/default.nix
@@ -4,8 +4,6 @@
 , dask
 , distributed
 , mpi4py
-, pytest
-, requests
 }:
 
 buildPythonPackage rec {
@@ -17,15 +15,11 @@ buildPythonPackage rec {
     sha256 = "76e153fc8c58047d898970b33ede0ab1990bd4e69cc130c6627a96f11b12a1a7";
   };
 
-  checkInputs = [ pytest requests ];
   propagatedBuildInputs = [ dask distributed mpi4py ];
 
-  checkPhase = ''
-    py.test dask_mpi
-  '';
-
   # hardcoded mpirun path in tests
   doCheck = false;
+  pythonImportsCheck = [ "dask_mpi" ];
 
   meta = with lib; {
     homepage = "https://github.com/dask/dask-mpi";
diff --git a/nixpkgs/pkgs/development/python-modules/dask-xgboost/default.nix b/nixpkgs/pkgs/development/python-modules/dask-xgboost/default.nix
index 4e64b8c9f0c5..eb18ac31fd03 100644
--- a/nixpkgs/pkgs/development/python-modules/dask-xgboost/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask-xgboost/default.nix
@@ -4,8 +4,6 @@
 , xgboost
 , dask
 , distributed
-, pytest
-, scikitlearn
 }:
 
 buildPythonPackage rec {
@@ -17,19 +15,17 @@ buildPythonPackage rec {
     sha256 = "3fbe1bf4344dc74edfbe9f928c7e3e6acc26dc57cefd8da8ae56a15469c6941c";
   };
 
-  checkInputs = [ pytest scikitlearn ];
   propagatedBuildInputs = [ xgboost dask distributed ];
 
-  checkPhase = ''
-    py.test dask_xgboost/tests/test_core.py
-  '';
-
   doCheck = false;
+  pythonImportsCheck = [ "dask_xdgboost" ];
 
   meta = with lib; {
     homepage = "https://github.com/dask/dask-xgboost";
     description = "Interactions between Dask and XGBoost";
     license = licenses.bsd3;
     maintainers = [ maintainers.costrouc ];
+    # TypeError: __init__() got an unexpected keyword argument 'iid'
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/dask/default.nix b/nixpkgs/pkgs/development/python-modules/dask/default.nix
index 721463421440..8f3e4d08583b 100644
--- a/nixpkgs/pkgs/development/python-modules/dask/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dask/default.nix
@@ -4,6 +4,7 @@
 , fetchFromGitHub
 , fsspec
 , pytestCheckHook
+, pytest-rerunfailures
 , pythonOlder
 , cloudpickle
 , numpy
@@ -11,27 +12,23 @@
 , dill
 , pandas
 , partd
+, pytest-xdist
+, withExtraComplete ? false
+, distributed
 }:
 
 buildPythonPackage rec {
   pname = "dask";
-  version = "2021.01.0";
-
+  version = "2021.03.0";
   disabled = pythonOlder "3.5";
 
   src = fetchFromGitHub {
     owner = "dask";
     repo = pname;
     rev = version;
-    sha256 = "V2cEOzV/L1zjyQ76zlGyN9CIkq6W8y8Yab4NQi3/Ju4=";
+    sha256 = "LACv7lWpQULQknNGX/9vH9ckLsypbqKDGnsNBgKT1eI=";
   };
 
-  checkInputs = [
-    pytestCheckHook
-  ];
-
-  dontUseSetuptoolsCheck = true;
-
   propagatedBuildInputs = [
     bokeh
     cloudpickle
@@ -41,8 +38,20 @@ buildPythonPackage rec {
     pandas
     partd
     toolz
+  ] ++ lib.optionals withExtraComplete [
+    distributed
   ];
 
+  doCheck = false;
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-rerunfailures
+    pytest-xdist
+  ];
+
+  dontUseSetuptoolsCheck = true;
+
   postPatch = ''
     # versioneer hack to set version of github package
     echo "def get_versions(): return {'dirty': False, 'error': None, 'full-revisionid': None, 'version': '${version}'}" > dask/_version.py
@@ -52,21 +61,18 @@ buildPythonPackage rec {
       --replace "cmdclass=versioneer.get_cmdclass()," ""
   '';
 
-  #pytestFlagsArray = [ "-n $NIX_BUILD_CORES" ];
+  pytestFlagsArray = [ "-n $NIX_BUILD_CORES" ];
 
   disabledTests = [
-    "test_argwhere_str"
-    "test_count_nonzero_str"
-    "rolling_methods"  # floating percision error ~0.1*10^8 small
-    "num_workers_config" # flaky
-    "test_2args_with_array[pandas1-darray1-ldexp]"  # flaky
+    "test_annotation_pack_unpack"
+    "test_annotations_blockwise_unpack"
   ];
 
-  meta = {
+  meta = with lib; {
     description = "Minimal task scheduling abstraction";
     homepage = "https://dask.org/";
     changelog = "https://docs.dask.org/en/latest/changelog.html";
-    license = lib.licenses.bsd3;
-    maintainers = with lib.maintainers; [ fridh ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fridh ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/databricks-cli/default.nix b/nixpkgs/pkgs/development/python-modules/databricks-cli/default.nix
index 483c565536d5..547b9a3af7a2 100644
--- a/nixpkgs/pkgs/development/python-modules/databricks-cli/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/databricks-cli/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "databricks-cli";
-  version = "0.14.1";
+  version = "0.14.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bf94dc5187fa3500a31d52d7225fbc1a4699aa6e3c321223e7088eb5b5c94b62";
+    sha256 = "bdf89a3917a3f8f8b99163e38d40e66dc478c7408954747f145cd09816b05e2c";
   };
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/databricks-connect/default.nix b/nixpkgs/pkgs/development/python-modules/databricks-connect/default.nix
index a97d9bc0c985..17116eb130f9 100644
--- a/nixpkgs/pkgs/development/python-modules/databricks-connect/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/databricks-connect/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "databricks-connect";
-  version = "7.3.8";
+  version = "8.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0c0f036cf30e00fdc47c983875c72d16a3073ae9be9bcf39371514280f00a82d";
+    sha256 = "3726c648cc60796294356e2617acc534d2503824ccfbdff26abbea595eb83135";
   };
 
   sourceRoot = ".";
diff --git a/nixpkgs/pkgs/development/python-modules/datadog/default.nix b/nixpkgs/pkgs/development/python-modules/datadog/default.nix
index a8917c3965f8..4a1bddfe3692 100644
--- a/nixpkgs/pkgs/development/python-modules/datadog/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/datadog/default.nix
@@ -1,6 +1,19 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder
-, decorator, requests, simplejson, pillow, typing
-, nose, mock, pytest, freezegun }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, decorator
+, requests
+, typing
+, configparser
+, click
+, freezegun
+, mock
+, pytestCheckHook
+, pytest-vcr
+, python-dateutil
+, vcrpy
+}:
 
 buildPythonPackage rec {
   pname = "datadog";
@@ -15,13 +28,30 @@ buildPythonPackage rec {
     find . -name '*.pyc' -exec rm {} \;
   '';
 
-  propagatedBuildInputs = [ decorator requests simplejson pillow ]
-    ++ lib.optionals (pythonOlder "3.5") [ typing ];
+  propagatedBuildInputs = [ decorator requests ]
+    ++ lib.optional (pythonOlder "3.5") typing
+    ++ lib.optional (pythonOlder "3.0") configparser;
 
-  checkInputs = [ nose mock pytest freezegun ];
-  checkPhase = ''
-    pytest tests/unit
-  '';
+  checkInputs = [
+    click
+    freezegun
+    mock
+    pytestCheckHook
+    pytest-vcr
+    python-dateutil
+    vcrpy
+  ];
+
+  disabledTestPaths = [
+    "tests/unit/dogstatsd/test_statsd.py" # does not work in sandbox
+  ];
+
+  disabledTests = [
+    "test_default_settings_set"
+    "test_threadstats_thread_safety"
+  ];
+
+  pythonImportsCheck = [ "datadog" ];
 
   meta = with lib; {
     description = "The Datadog Python library";
diff --git a/nixpkgs/pkgs/development/python-modules/datasets/default.nix b/nixpkgs/pkgs/development/python-modules/datasets/default.nix
index fc349cdc277b..cc06297c4ea0 100644
--- a/nixpkgs/pkgs/development/python-modules/datasets/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/datasets/default.nix
@@ -3,6 +3,8 @@
 , fetchFromGitHub
 , dill
 , filelock
+, fsspec
+, huggingface-hub
 , multiprocess
 , numpy
 , pandas
@@ -14,18 +16,20 @@
 
 buildPythonPackage rec {
   pname = "datasets";
-  version = "1.1.2";
+  version = "1.4.1";
 
   src = fetchFromGitHub {
     owner = "huggingface";
     repo = pname;
     rev = version;
-    hash = "sha256-upXZ2rOfmjnJbDo6RMGeHv/fe10RQAf/zwDWWKdt6SA=";
+    hash = "sha256-is8TS84varARWyfeDTbQH0pcYFTk0PcEyK183emB4GE=";
   };
 
   propagatedBuildInputs = [
     dill
     filelock
+    fsspec
+    huggingface-hub
     multiprocess
     numpy
     pandas
@@ -36,7 +40,9 @@ buildPythonPackage rec {
   ];
 
   postPatch = ''
-    substituteInPlace setup.py --replace '"tqdm>=4.27,<4.50.0"' '"tqdm>=4.27"'
+    substituteInPlace setup.py \
+      --replace '"tqdm>=4.27,<4.50.0"' '"tqdm>=4.27"' \
+      --replace "huggingface_hub==0.0.2" "huggingface_hub>=0.0.2"
   '';
 
   # Tests require pervasive internet access.
diff --git a/nixpkgs/pkgs/development/python-modules/datashader/default.nix b/nixpkgs/pkgs/development/python-modules/datashader/default.nix
index 534cc816def7..d656a203b9e8 100644
--- a/nixpkgs/pkgs/development/python-modules/datashader/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/datashader/default.nix
@@ -1,9 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, fetchpatch
 , dask
-, distributed
 , bokeh
 , toolz
 , datashape
@@ -15,38 +13,26 @@
 , colorcet
 , param
 , pyct
-, pyyaml
-, requests
-, scikitimage
 , scipy
-, pytest
-, pytest-benchmark
-, flake8
+, pytestCheckHook
 , nbsmoke
 , fastparquet
-, testpath
 , nbconvert
-, pytest_xdist
+, pytest-xdist
+, netcdf4
 }:
 
 buildPythonPackage rec {
   pname = "datashader";
-  version = "0.11.1";
+  version = "0.12.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b1f80415f72f92ccb660aaea7b2881ddd35d07254f7c44101709d42e819d6be6";
+    sha256 = "a135612876dc3e4b16ccb9ddb70de50519825c8c1be251b49aefa550bcf8a39a";
   };
-  patches = [ (fetchpatch {
-    # Unpins pyct==0.46 (Sep. 11, 2020).
-    # Will be incorporated into the next datashader release after 0.11.1
-    url = "https://github.com/holoviz/datashader/pull/960/commits/d7a462fa399106c34fd0d44505a8a73789dbf874.patch";
-    sha256 = "1wqsk9dpxnkxr49fa7y5q6ahin80cvys05lnirs2w2p1dja35y4x";
-  })];
 
   propagatedBuildInputs = [
     dask
-    distributed
     bokeh
     toolz
     datashape
@@ -58,30 +44,29 @@ buildPythonPackage rec {
     colorcet
     param
     pyct
-    pyyaml
-    requests
-    scikitimage
     scipy
-    testpath
   ];
 
   checkInputs = [
-    pytest
-    pytest-benchmark
-    pytest_xdist # not needed
-    flake8
+    pytestCheckHook
+    pytest-xdist # not needed
     nbsmoke
     fastparquet
-    pandas
     nbconvert
+    netcdf4
+  ];
+
+  pytestFlagsArray = [
+    "-n $NIX_BUILD_CORES"
+    "datashader"
   ];
 
-  # dask doesn't do well with large core counts
-  checkPhase = ''
-    pytest -n $NIX_BUILD_CORES datashader -k 'not dask.array'
-  '';
+  disabledTestPaths = [
+    # 31/50 tests fail with TypeErrors
+    "datashader/tests/test_datatypes.py"
+  ];
 
-  meta = with lib; {
+  meta = with lib;{
     description = "Data visualization toolchain based on aggregating into a grid";
     homepage = "https://datashader.org";
     license = licenses.bsd3;
diff --git a/nixpkgs/pkgs/development/python-modules/dateparser/0.x.nix b/nixpkgs/pkgs/development/python-modules/dateparser/0.x.nix
new file mode 100644
index 000000000000..49e2d1f2796e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/dateparser/0.x.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, mock
+, parameterized
+, pytestCheckHook
+, dateutil
+, pytz
+, regex
+, tzlocal
+, convertdate
+, umalqurra
+, jdatetime
+, ruamel_yaml
+}:
+
+buildPythonPackage rec {
+  pname = "dateparser";
+  version = "0.7.6";
+
+  src = fetchFromGitHub {
+    owner = "scrapinghub";
+    repo = "dateparser";
+    rev = "v${version}";
+    sha256 = "0j3sm4hlx7z0ci5fnjq5n9i02vvlfz0wxa889ydryfknjhy5apqw";
+  };
+
+  checkInputs = [
+    mock
+    parameterized
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [ "tests" ];
+
+  disabledTestPaths = [
+    "tests/test_dateparser_data_integrity.py" # ImportError: No module named ruamel.yaml
+  ];
+
+  propagatedBuildInputs = [
+    # install_requires
+    dateutil pytz regex tzlocal
+    # extra_requires
+    convertdate umalqurra jdatetime ruamel_yaml
+  ];
+
+  pythonImportsCheck = [ "dateparser" ];
+
+  meta = with lib; {
+    description = "Date parsing library designed to parse dates from HTML pages";
+    homepage = "https://github.com/scrapinghub/dateparser";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/dateparser/default.nix b/nixpkgs/pkgs/development/python-modules/dateparser/default.nix
index 2a80523a6560..21dcffc4a841 100644
--- a/nixpkgs/pkgs/development/python-modules/dateparser/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dateparser/default.nix
@@ -1,61 +1,55 @@
-{ lib, fetchPypi, buildPythonPackage
-, nose
-, parameterized
-, mock
-, flake8
-, glibcLocales
-, six
-, jdatetime
+{ lib
+, buildPythonPackage
+, isPy3k
+, fetchFromGitHub
 , dateutil
-, umalqurra
 , pytz
-, tzlocal
 , regex
+, tzlocal
+, hijri-converter
+, convertdate
+, parameterized
+, pytestCheckHook
+, GitPython
 , ruamel_yaml
-, python
-, isPy3k
 }:
 
 buildPythonPackage rec {
   pname = "dateparser";
   version = "1.0.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "159cc4e01a593706a15cd4e269a0b3345edf3aef8bf9278a57dac8adf5bf1e4a";
-  };
+  disabled = !isPy3k;
 
-  checkInputs = [
-    flake8
-    nose
-    mock
-    parameterized
-    six
-    glibcLocales
-  ];
-  preCheck =''
-    # skip because of missing convertdate module, which is an extra requirement
-    rm tests/test_jalali.py
-  '';
-
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
-
-  # Strange
-  # AttributeError: 'module' object has no attribute 'config'
-  doCheck = false;
+  src = fetchFromGitHub {
+    owner = "scrapinghub";
+    repo = "dateparser";
+    rev = "v${version}";
+    sha256 = "0i6ci14lqfsqrmaif57dyilrjbxzmbl98hps1b565gkiy1xqmjhl";
+  };
 
   propagatedBuildInputs = [
     # install_requires
     dateutil pytz regex tzlocal
     # extra_requires
-    jdatetime ruamel_yaml umalqurra
+    hijri-converter convertdate
   ];
 
+  checkInputs = [
+    parameterized
+    pytestCheckHook
+    GitPython
+    ruamel_yaml
+  ];
+
+  # Upstream only runs the tests in tests/ in CI, others use git clone
+  pytestFlagsArray = [ "tests" ];
+
+  pythonImportsCheck = [ "dateparser" ];
+
   meta = with lib; {
     description = "Date parsing library designed to parse dates from HTML pages";
     homepage = "https://github.com/scrapinghub/dateparser";
     license = licenses.bsd3;
+    maintainers = with maintainers; [ dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/dateutil/default.nix b/nixpkgs/pkgs/development/python-modules/dateutil/default.nix
index dcad0c3698a7..e71a532a806d 100644
--- a/nixpkgs/pkgs/development/python-modules/dateutil/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dateutil/default.nix
@@ -1,4 +1,10 @@
-{ lib, buildPythonPackage, fetchPypi, six, setuptools_scm, pytest }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, setuptools-scm
+, six
+}:
+
 buildPythonPackage rec {
   pname = "python-dateutil";
   version = "2.8.1";
@@ -8,19 +14,27 @@ buildPythonPackage rec {
     sha256 = "73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c";
   };
 
-  checkInputs = [ pytest ];
-  propagatedBuildInputs = [ six setuptools_scm ];
+  nativeBuildInputs = [ setuptools-scm ];
 
-  checkPhase = ''
-    py.test dateutil/test
-  '';
+  propagatedBuildInputs = [ six ];
 
-  # Requires fixing
+  # cyclic dependency: tests need freezegun, which depends on python-dateutil
   doCheck = false;
 
+  pythonImportsCheck = [
+    "dateutil.easter"
+    "dateutil.parser"
+    "dateutil.relativedelta"
+    "dateutil.rrule"
+    "dateutil.tz"
+    "dateutil.utils"
+    "dateutil.zoneinfo"
+  ];
+
   meta = with lib; {
     description = "Powerful extensions to the standard datetime module";
-    homepage = "https://pypi.python.org/pypi/python-dateutil";
-    license = "BSD-style";
+    homepage = "https://github.com/dateutil/dateutil/";
+    license = with licenses; [ asl20 bsd3 ];
+    maintainers = with maintainers; [ dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/dbf/default.nix b/nixpkgs/pkgs/development/python-modules/dbf/default.nix
index 18560734bd85..b5b6f277fd65 100644
--- a/nixpkgs/pkgs/development/python-modules/dbf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dbf/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
     pname = "dbf";
-    version = "0.99.0";
+    version = "0.99.1";
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "a4a7a8cdc113d840142d21a796c16c7d329ad35c48f17156446732c83ebc571a";
+      sha256 = "4ed598a3866dfe7761b8099cf53ab44cb6ed5e4a7dbffb0da8c67a4af8d62fc5";
     };
 
     propagatedBuildInputs = [ aenum ] ++ lib.optional (pythonOlder "3.4") enum34;
diff --git a/nixpkgs/pkgs/development/python-modules/ddt/default.nix b/nixpkgs/pkgs/development/python-modules/ddt/default.nix
index f993c3844b85..11d32adf3bfb 100644
--- a/nixpkgs/pkgs/development/python-modules/ddt/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ddt/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "ddt";
-  version = "1.4.1";
+  version = "1.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0595e70d074e5777771a45709e99e9d215552fb1076443a25fad6b23d8bf38da";
+    sha256 = "sha256-ZKZzZqJxXmNriGlMxgdcwC2ykvAQmLjjhTl8iU05U3g=";
   };
 
   checkInputs = [ six pyyaml mock pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/deepmerge/default.nix b/nixpkgs/pkgs/development/python-modules/deepmerge/default.nix
index 0d81110dee82..c29737595af8 100644
--- a/nixpkgs/pkgs/development/python-modules/deepmerge/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/deepmerge/default.nix
@@ -1,22 +1,30 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27
-, vcver }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy27
+, setuptools-scm
+, vcver
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "deepmerge";
-  version = "0.1.1";
+  version = "0.2.1";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fa1d44269786bcc12d30a7471b0b39478aa37a43703b134d7f12649792f92c1f";
+    sha256 = "082bvlk65pkf9qzkzzl8fq7s6zfz1b2v5pcb0ikwg1nx0xspggaz";
   };
 
-  propagatedBuildInputs = [
+  nativeBuildInputs = [
+    setuptools-scm
     vcver
   ];
 
-  # depends on https://pypi.org/project/uranium/
-  doCheck = false;
+  checkInputs = [
+    pytestCheckHook
+  ];
 
   pythonImportsCheck = [ "deepmerge" ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/deeptoolsintervals/default.nix b/nixpkgs/pkgs/development/python-modules/deeptoolsintervals/default.nix
index eef8d51ae911..0dde3c51c3ae 100644
--- a/nixpkgs/pkgs/development/python-modules/deeptoolsintervals/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/deeptoolsintervals/default.nix
@@ -3,7 +3,7 @@
 , fetchPypi
 , pytest
 , zlib
-, lzma
+, xz
 }:
 
 buildPythonPackage rec {
@@ -15,7 +15,7 @@ buildPythonPackage rec {
     sha256 = "1xnl80nblysj6dylj4683wgrfa425rkx4dp5k65hvwdns9pw753x";
   };
 
-  buildInputs = [ zlib lzma ];
+  buildInputs = [ zlib xz ];
 
   checkInputs = [ pytest ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/defcon/default.nix b/nixpkgs/pkgs/development/python-modules/defcon/default.nix
index 25c590299922..100c7ee6fc1f 100644
--- a/nixpkgs/pkgs/development/python-modules/defcon/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/defcon/default.nix
@@ -1,18 +1,24 @@
 { lib, buildPythonPackage, fetchPypi, pythonOlder
-, fonttools
+, fonttools, setuptools-scm
 , pytest, pytestrunner, lxml, fs, unicodedata2, fontpens
 }:
 
 buildPythonPackage rec {
   pname = "defcon";
-  version = "0.7.2";
+  version = "0.8.1";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1lfqsvxmq1j0nvp26gidnqkj1dyxv7jalc6i7fz1r3nc7niflrqr";
+    sha256 = "1sj9yhwkyvzchglpy07pkx5362mwlap581ibv150b5l9s5mxn2j1";
     extension = "zip";
   };
 
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
   propagatedBuildInputs = [
     fonttools
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/defusedxml/default.nix b/nixpkgs/pkgs/development/python-modules/defusedxml/default.nix
index 581a6cce9b2a..797fee025be4 100644
--- a/nixpkgs/pkgs/development/python-modules/defusedxml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/defusedxml/default.nix
@@ -1,11 +1,30 @@
-{ buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, python
+}:
 
 buildPythonPackage rec {
   pname = "defusedxml";
-  version = "0.6.0";
+  version = "0.7.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5";
+    sha256 = "183fz8xwclhkirwpvpldyypn47r8lgzfz2mk9jgyg7b37jg5vcc6";
+  };
+
+  checkPhase = ''
+    ${python.interpreter} tests.py
+  '';
+
+  pythonImportsCheck = [ "defusedxml" ];
+
+  meta = with lib; {
+    description = "Python module to defuse XML issues";
+    homepage = "https://github.com/tiran/defusedxml";
+    license = licenses.psfl;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/deprecated/default.nix b/nixpkgs/pkgs/development/python-modules/deprecated/default.nix
index 0374bebe4f95..c6e309335289 100644
--- a/nixpkgs/pkgs/development/python-modules/deprecated/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/deprecated/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "Deprecated";
-  version = "1.2.11";
+  version = "1.2.12";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "471ec32b2755172046e28102cd46c481f21c6036a0ec027521eba8521aa4ef35";
+    sha256 = "6d2de2de7931a968874481ef30208fd4e08da39177d61d3d4ebdf4366e7dbca1";
   };
 
   propagatedBuildInputs = [ wrapt ];
diff --git a/nixpkgs/pkgs/development/python-modules/descartes/default.nix b/nixpkgs/pkgs/development/python-modules/descartes/default.nix
index b10526ff0fd5..a4df1fe20c99 100644
--- a/nixpkgs/pkgs/development/python-modules/descartes/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/descartes/default.nix
@@ -21,5 +21,7 @@ buildPythonPackage rec {
     homepage = "https://bitbucket.org/sgillies/descartes/";
     license = licenses.bsd3;
     maintainers = with maintainers; [ knedlsepp ];
+    # all tests are failing
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/desktop-notifier/default.nix b/nixpkgs/pkgs/development/python-modules/desktop-notifier/default.nix
new file mode 100644
index 000000000000..ab4189c8f51d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/desktop-notifier/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, stdenv
+, packaging
+, importlib-resources
+, dbus-next
+}:
+
+buildPythonPackage rec {
+  pname = "desktop-notifier";
+  version = "3.2.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "cf359450efc0944ac4db3106e50faa9d49dcef072307c3531e6af2c8a10cd523";
+  };
+
+  propagatedBuildInputs = [
+    packaging
+  ] ++ lib.optionals (pythonOlder "3.9") [
+    importlib-resources
+  ] ++ lib.optionals stdenv.isLinux [
+    dbus-next
+  ];
+
+  # no tests available, do the imports check instead
+  doCheck = false;
+  pythonImportsCheck = [ "desktop_notifier" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/samschott/desktop-notifier";
+    description = "A Python library for cross-platform desktop notifications";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sfrijters ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/devolo-home-control-api/default.nix b/nixpkgs/pkgs/development/python-modules/devolo-home-control-api/default.nix
index 1e388fd3a117..8fba64d0a8f3 100644
--- a/nixpkgs/pkgs/development/python-modules/devolo-home-control-api/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/devolo-home-control-api/default.nix
@@ -2,28 +2,26 @@
 , aiohttp
 , buildPythonPackage
 , fetchFromGitHub
-, pytestCheckHook
-, pytest-cov
 , pytest-mock
+, pytestCheckHook
+, pythonOlder
 , requests
-, zeroconf
 , websocket_client
-, pytest-runner
+, zeroconf
 }:
 
 buildPythonPackage rec {
   pname = "devolo-home-control-api";
-  version = "0.16.0";
+  version = "0.17.1";
+  disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "2Fake";
     repo = "devolo_home_control_api";
     rev = "v${version}";
-    sha256 = "19zzdbx0dxlm8pq0yk00nn9gqqblgpp16fgl7z6a98hsa6459zzb";
+    sha256 = "sha256-5PaIZPwikDmT4kmh0Qfg65gBAUYralmO6a22GtzoB7A=";
   };
 
-  nativeBuildInputs = [ pytest-runner ];
-
   propagatedBuildInputs = [
     requests
     zeroconf
@@ -32,12 +30,22 @@ buildPythonPackage rec {
 
   checkInputs = [
     pytestCheckHook
-    pytest-cov
     pytest-mock
   ];
 
+  postPatch = ''
+    # setup.py is not able to detect the version with setuptools_scm
+    substituteInPlace setup.py \
+      --replace "setuptools_scm" "" \
+      --replace 'use_scm_version=True' 'use_scm_version="${version}"'
+  '';
+
   # Disable test that requires network access
-  disabledTests = [ "test__on_pong" ];
+  disabledTests = [
+    "test__on_pong"
+    "TestMprm"
+  ];
+
   pythonImportsCheck = [ "devolo_home_control_api" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/dftfit/default.nix b/nixpkgs/pkgs/development/python-modules/dftfit/default.nix
index 0f0563e3baf5..73791bdaa9a6 100644
--- a/nixpkgs/pkgs/development/python-modules/dftfit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dftfit/default.nix
@@ -12,11 +12,7 @@
 , lammps-cython
 , pymatgen-lammps
 , pytestrunner
-, pytest
-, pytestcov
-, pytest-benchmark
 , isPy3k
-, openssh
 }:
 
 buildPythonPackage rec {
@@ -25,18 +21,27 @@ buildPythonPackage rec {
   disabled = (!isPy3k);
 
   src = fetchPypi {
-     inherit pname version;
-     sha256 = "4dcbde48948835dcf2d49d6628c9df5747a8ec505d517e374b8d6c7fe95892df";
+    inherit pname version;
+    sha256 = "4dcbde48948835dcf2d49d6628c9df5747a8ec505d517e374b8d6c7fe95892df";
   };
 
   buildInputs = [ pytestrunner ];
-  checkInputs = [ pytest pytestcov pytest-benchmark openssh ];
-  propagatedBuildInputs = [ pymatgen marshmallow pyyaml pygmo
-                            pandas scipy numpy scikitlearn
-                            lammps-cython pymatgen-lammps ];
+  propagatedBuildInputs = [
+    pymatgen
+    marshmallow
+    pyyaml
+    pygmo
+    pandas
+    scipy
+    numpy
+    scikitlearn
+    lammps-cython
+    pymatgen-lammps
+  ];
 
   # tests require git lfs download. and is quite large so skip tests
   doCheck = false;
+  pythonImportsCheck = [ "dftfit" ];
 
   meta = {
     description = "Ab-Initio Molecular Dynamics Potential Development";
diff --git a/nixpkgs/pkgs/development/python-modules/dicom2nifti/default.nix b/nixpkgs/pkgs/development/python-modules/dicom2nifti/default.nix
index abc07346efd3..a9c2e4e82373 100644
--- a/nixpkgs/pkgs/development/python-modules/dicom2nifti/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dicom2nifti/default.nix
@@ -8,11 +8,12 @@
 , numpy
 , pydicom
 , scipy
+, setuptools
 }:
 
 buildPythonPackage rec {
   pname = "dicom2nifti";
-  version = "2.2.8";
+  version = "2.2.12";
   disabled = isPy27;
 
   # no tests in PyPI dist
@@ -20,10 +21,10 @@ buildPythonPackage rec {
     owner = "icometrix";
     repo = pname;
     rev = version;
-    sha256 = "1qi2map6f4pa1l8wsif7ff7rhja6ynrjlm7w306dzvi9l25mia34";
+    sha256 = "0ddzaw0yasyi2wsh7a6r73cdcmdfbb0nh0k0n4yxp9vnkw1ag5z4";
   };
 
-  propagatedBuildInputs = [ gdcm nibabel numpy pydicom scipy ];
+  propagatedBuildInputs = [ nibabel numpy pydicom scipy setuptools ];
 
   checkInputs = [ nose gdcm ];
   checkPhase = "nosetests tests";
diff --git a/nixpkgs/pkgs/development/python-modules/diff_cover/default.nix b/nixpkgs/pkgs/development/python-modules/diff_cover/default.nix
index 03b1f4fa28ee..91832bc88ff3 100644
--- a/nixpkgs/pkgs/development/python-modules/diff_cover/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/diff_cover/default.nix
@@ -6,7 +6,6 @@
 , six
 # test dependencies
 , coverage
-, flake8
 , mock
 , nose
 , pycodestyle
diff --git a/nixpkgs/pkgs/development/python-modules/digi-xbee/default.nix b/nixpkgs/pkgs/development/python-modules/digi-xbee/default.nix
index d5f1445a6771..025939f2db28 100644
--- a/nixpkgs/pkgs/development/python-modules/digi-xbee/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/digi-xbee/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "digi-xbee";
-  version = "1.3.0";
+  version = "1.4.0";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2ed798faee0853bf7ae9ca5aa4bdcbab496e3c2d56c9f0719a8e3e0d13270891";
+    sha256 = "664737d1aab453ea40b9745f1ee1e88920acff1cce2e07c42e7f5aa64a16e6aa";
   };
 
   propagatedBuildInputs = [ pyserial srp ];
@@ -15,6 +15,24 @@ buildPythonPackage rec {
   # Upstream doesn't contain unit tests, only functional tests which require specific hardware
   doCheck = false;
 
+  pythonImportsCheck = [
+    "digi.xbee.models"
+    "digi.xbee.packets"
+    "digi.xbee.util"
+    "digi.xbee.comm_interface"
+    "digi.xbee.devices"
+    "digi.xbee.exception"
+    "digi.xbee.filesystem"
+    "digi.xbee.firmware"
+    "digi.xbee.io"
+    "digi.xbee.profile"
+    "digi.xbee.reader"
+    "digi.xbee.recovery"
+    "digi.xbee.sender"
+    "digi.xbee.serial"
+    "digi.xbee.xsocket"
+  ];
+
   meta = with lib; {
     description = "Python library to interact with Digi International's XBee radio frequency modules";
     homepage = "https://github.com/digidotcom/xbee-python";
diff --git a/nixpkgs/pkgs/development/python-modules/discordpy/default.nix b/nixpkgs/pkgs/development/python-modules/discordpy/default.nix
index 9c30606f75d9..94181def867f 100644
--- a/nixpkgs/pkgs/development/python-modules/discordpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/discordpy/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "discord.py";
-  version = "1.6.0";
+  version = "1.7.0";
   disabled = pythonOlder "3.5.3";
 
   # only distributes wheels on pypi now
@@ -17,13 +17,12 @@ buildPythonPackage rec {
     owner = "Rapptz";
     repo = pname;
     rev = "v${version}";
-    sha256 = "036prc4iw91qx31zz48hy3b30kn2qnlg68lgrvv2mcvsjxf2gd1l";
+    sha256 = "1i5k2qb894rjksn21pk9shash1y7v4138rkk8mqr1a1yvgnr5ibg";
   };
 
   propagatedBuildInputs = [ aiohttp websockets ];
   patchPhase = ''
     substituteInPlace "requirements.txt" \
-      --replace "aiohttp>=3.6.0,<3.7.0" "aiohttp" \
       --replace "websockets>=6.0,!=7.0,!=8.0,!=8.0.1,<9.0" "websockets"
   '' + lib.optionalString withVoice ''
     substituteInPlace "discord/opus.py" \
diff --git a/nixpkgs/pkgs/development/python-modules/diskcache/default.nix b/nixpkgs/pkgs/development/python-modules/diskcache/default.nix
index 8b968c3272fb..ed6007f87ed2 100644
--- a/nixpkgs/pkgs/development/python-modules/diskcache/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/diskcache/default.nix
@@ -7,18 +7,17 @@
 , pytest_xdist
 , pytest-django
 , mock
-, django
 }:
 
 buildPythonPackage rec {
   pname = "diskcache";
-  version = "5.1.0";
+  version = "5.2.1";
 
   src = fetchFromGitHub {
     owner = "grantjenks";
     repo = "python-diskcache";
     rev = "v${version}";
-    sha256 = "0xwqw60dbn1x2294galcs08vm6ydcr677lr8slqz8a3ry6sgkhn9";
+    sha256 = "sha256-dWtEyyWpg0rxEwyhBdPyApzgS9o60HVGbtY76ELHvX8=";
   };
 
   checkInputs = [
@@ -31,6 +30,7 @@ buildPythonPackage rec {
 
   # Darwin sandbox causes most tests to fail.
   doCheck = !stdenv.isDarwin;
+  pythonImportsCheck = [ "diskcache" ];
 
   meta = with lib; {
     description = "Disk and file backed persistent cache";
diff --git a/nixpkgs/pkgs/development/python-modules/distributed/default.nix b/nixpkgs/pkgs/development/python-modules/distributed/default.nix
index f4be407fade2..8ce554e6f6be 100644
--- a/nixpkgs/pkgs/development/python-modules/distributed/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/distributed/default.nix
@@ -1,11 +1,6 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, pytest
-, pytest-repeat
-, pytest-timeout
-, mock
-, joblib
 , click
 , cloudpickle
 , dask
@@ -18,9 +13,6 @@
 , tornado
 , zict
 , pyyaml
-, isPy3k
-, futures
-, singledispatch
 , mpi4py
 , bokeh
 , pythonOlder
@@ -28,37 +20,29 @@
 
 buildPythonPackage rec {
   pname = "distributed";
-  version = "2.30.1";
+  version = "2021.3.0";
+  disabled = pythonOlder "3.6";
 
   # get full repository need conftest.py to run tests
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1421d3b84a0885aeb2c4bdc9e8896729c0f053a9375596c9de8864e055e2ac8e";
+    sha256 = "sha256-Qn/n4Ee7rXQTxl1X5W+k1rHPkh/SBqPSyquUv5FTw9s=";
   };
 
-  disabled = pythonOlder "3.6";
-
-  checkInputs = [ pytest pytest-repeat pytest-timeout mock joblib ];
   propagatedBuildInputs = [
       click cloudpickle dask msgpack psutil six
       sortedcontainers tblib toolz tornado zict pyyaml mpi4py bokeh
   ];
 
-  # tests take about 10-15 minutes
-  # ignore 5 cli tests out of 1000 total tests that fail due to subprocesses
-  # these tests are not critical to the library (only the cli)
-  checkPhase = ''
-    py.test distributed -m "not avoid-travis" -r s --timeout-method=thread --timeout=0 --durations=20 --ignore="distributed/cli/tests"
-  '';
-
   # when tested random tests would fail and not repeatably
   doCheck = false;
+  pythonImportsCheck = [ "distributed" ];
 
-  meta = {
+  meta = with lib; {
     description = "Distributed computation in Python.";
     homepage = "https://distributed.readthedocs.io/en/latest/";
-    license = lib.licenses.bsd3;
-    platforms = lib.platforms.x86; # fails on aarch64
-    maintainers = with lib.maintainers; [ teh costrouc ];
+    license = licenses.bsd3;
+    platforms = platforms.x86; # fails on aarch64
+    maintainers = with maintainers; [ teh costrouc ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/django-auth-ldap/default.nix b/nixpkgs/pkgs/development/python-modules/django-auth-ldap/default.nix
index 2271be1d16f4..d89bc6023c69 100644
--- a/nixpkgs/pkgs/development/python-modules/django-auth-ldap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django-auth-ldap/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "django-auth-ldap";
-  version = "2.2.0";
+  version = "2.3.0";
   disabled = isPy27;
   src = fetchPypi {
     inherit pname version;
-    sha256 = "11af1773b08613339d2c3a0cec1308a4d563518f17b1719c3759994d0b4d04bf";
+    sha256 = "5894317122a086c9955ed366562869a81459cf6b663636b152857bb5d3a0a3b7";
   };
 
   propagatedBuildInputs = [ ldap django ];
diff --git a/nixpkgs/pkgs/development/python-modules/django-cacheops/default.nix b/nixpkgs/pkgs/development/python-modules/django-cacheops/default.nix
new file mode 100644
index 000000000000..c9344d3bd010
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/django-cacheops/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonPackage
+, fetchPypi
+, lib
+, django
+, funcy
+, redis
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "django-cacheops";
+  version = "5.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-1YUc178whzhKH87PqN3bj1UDDu39b98SciW3W8oPmd0=";
+  };
+
+  propagatedBuildInputs = [
+    django
+    funcy
+    redis
+    six
+  ];
+
+  # tests need a redis server
+  # pythonImportsCheck not possible since DJANGO_SETTINGS_MODULE needs to be set
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A slick ORM cache with automatic granular event-driven invalidation for Django";
+    homepage = "https://github.com/Suor/django-cacheops";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ petabyteboy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/django-extensions/default.nix b/nixpkgs/pkgs/development/python-modules/django-extensions/default.nix
index 455eeebddde0..9bd72965cf8b 100644
--- a/nixpkgs/pkgs/development/python-modules/django-extensions/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django-extensions/default.nix
@@ -18,13 +18,13 @@
 
 buildPythonPackage rec {
   pname = "django-extensions";
-  version = "3.1.0";
+  version = "3.1.1";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "hZ6GS2VkXH8KfKZuL1rR6JS/nDkx8SfKuUx5XrvTbec=";
+    sha256 = "0ss5x3d21c3g8i1s79l4akazlf116yp4y50gx4vrk1dxh3jb29zj";
   };
 
   LC_ALL = "en_US.UTF-8";
diff --git a/nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix b/nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix
index 9e3cf0dad99f..a9e295b04360 100644
--- a/nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "django-mailman3";
-  version = "1.3.4";
+  version = "1.3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7e37b68bb47e9ae196ca19018f576e2c8c90189c5bd82d4e549d0c2f2f3f35fb";
+    sha256 = "368595b3c2623edeaca5beea5f12887424c384edd6f7052cf442443075084313";
   };
 
   propagatedBuildInputs = [
@@ -22,10 +22,12 @@ buildPythonPackage rec {
     PYTHONPATH=.:$PYTHONPATH django-admin.py test --settings=django_mailman3.tests.settings_test
   '';
 
+  pythonImportsCheck = [ "django_mailman3" ];
+
   meta = with lib; {
     description = "Django library for Mailman UIs";
     homepage = "https://gitlab.com/mailman/django-mailman3";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ globin peti ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/django-q/default.nix b/nixpkgs/pkgs/development/python-modules/django-q/default.nix
index 16b1e0bcc59f..3d9d885daf7a 100644
--- a/nixpkgs/pkgs/development/python-modules/django-q/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django-q/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "django-q";
-  version = "1.3.4";
+  version = "1.3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "523d54dcf1b66152c1b658f914f00ed3b518a3432a9decd4898738ca8dbbe10f";
+    sha256 = "8871c602e2c7e892fbedc271d5b91c4a96803b689c3ee2f15464931f99f4e32b";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/django-simple-captcha/default.nix b/nixpkgs/pkgs/development/python-modules/django-simple-captcha/default.nix
index 0724bf27b317..2a7f1e1da26d 100644
--- a/nixpkgs/pkgs/development/python-modules/django-simple-captcha/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django-simple-captcha/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "django-simple-captcha";
-  version = "0.5.13";
+  version = "0.5.14";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5e43ba3b61daf690ac0319157837bb57e31df8bddbdc9a59ef42ef1a99e21fa2";
+    sha256 = "84b5c188e6ae50e9ecec5e5d734c5bc4d2a50fbbca7f59d2c12da9a3bbee5051";
     extension = "zip";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/django/3.nix b/nixpkgs/pkgs/development/python-modules/django/3.nix
index 7b447eb8d787..7f2db712f00a 100644
--- a/nixpkgs/pkgs/development/python-modules/django/3.nix
+++ b/nixpkgs/pkgs/development/python-modules/django/3.nix
@@ -13,13 +13,13 @@
 
 buildPythonPackage rec {
   pname = "Django";
-  version = "3.1.6";
+  version = "3.1.7";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c6c0462b8b361f8691171af1fb87eceb4442da28477e12200c40420176206ba7";
+    sha256 = "32ce792ee9b6a0cbbec340123e229ac9f765dff8c2a4ae9247a14b2ba3a365a7";
   };
 
   patches = lib.optional withGdal
diff --git a/nixpkgs/pkgs/development/python-modules/django_contrib_comments/default.nix b/nixpkgs/pkgs/development/python-modules/django_contrib_comments/default.nix
index a452db3cf281..3f717b0fb5ce 100644
--- a/nixpkgs/pkgs/development/python-modules/django_contrib_comments/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django_contrib_comments/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "django-contrib-comments";
-  version = "2.0.0";
+  version = "2.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "26350b2c353816570a74b7fb19c558ce00288625ac32886a5274f4f931c098f9";
+    sha256 = "d82f1d04690550df026553053903deec0c52dc54212e1b79241b08f0355cff2c";
   };
 
   propagatedBuildInputs = [ django ];
diff --git a/nixpkgs/pkgs/development/python-modules/django_evolution/default.nix b/nixpkgs/pkgs/development/python-modules/django_evolution/default.nix
index 816442d6e2a8..16358c54c1a7 100644
--- a/nixpkgs/pkgs/development/python-modules/django_evolution/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/django_evolution/default.nix
@@ -7,12 +7,12 @@
 
 buildPythonPackage rec {
   pname = "django_evolution";
-  version = "2.1";
+  version = "2.1.2";
   disabled = isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "997efdc7f27248fd3c5e9eeccae1cfee046dfead037b171d30cbe6e91c9ca3d7";
+    sha256 = "28bad07b5e29a0ea4bd9727c6927cbee25d349d21606a553a0c748fbee0c073c";
   };
 
   propagatedBuildInputs = [ django ];
diff --git a/nixpkgs/pkgs/development/python-modules/dlib/default.nix b/nixpkgs/pkgs/development/python-modules/dlib/default.nix
index 204c1a985425..58ceb16870a8 100644
--- a/nixpkgs/pkgs/development/python-modules/dlib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dlib/default.nix
@@ -1,4 +1,5 @@
 { buildPythonPackage, stdenv, lib, dlib, python, pytest, more-itertools
+, sse4Support ? stdenv.hostPlatform.sse4_1Support
 , avxSupport ? stdenv.hostPlatform.avxSupport
 }:
 
@@ -12,7 +13,10 @@ buildPythonPackage {
     ${python.interpreter} nix_run_setup test --no USE_AVX_INSTRUCTIONS
   '';
 
-  setupPyBuildFlags = lib.optional avxSupport "--no USE_AVX_INSTRUCTIONS";
+  setupPyBuildFlags = [
+    "--set USE_SSE4_INSTRUCTIONS=${if sse4Support then "yes" else "no"}"
+    "--set USE_AVX_INSTRUCTIONS=${if avxSupport then "yes" else "no"}"
+  ];
 
   patches = [ ./build-cores.patch ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/docker/default.nix b/nixpkgs/pkgs/development/python-modules/docker/default.nix
index 5b148a9d62af..ab7a7b664b0d 100644
--- a/nixpkgs/pkgs/development/python-modules/docker/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/docker/default.nix
@@ -1,8 +1,11 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, isPy27
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy27
 , backports_ssl_match_hostname
 , mock
 , paramiko
-, pytest
 , pytestCheckHook
 , requests
 , six
@@ -11,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "docker";
-  version = "4.4.1";
+  version = "4.4.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-BgSnRxnV0t5Dh1OTS3Vb/NpvYvSbjkswlppLCiqKEiA=";
+    sha256 = "d3393c878f575d3a9ca3b94471a3c89a6d960b35feb92f033c0de36cc9d934db";
   };
 
   nativeBuildInputs = lib.optional isPy27 mock;
@@ -32,8 +35,9 @@ buildPythonPackage rec {
   ];
 
   pytestFlagsArray = [ "tests/unit" ];
+
   # Deselect socket tests on Darwin because it hits the path length limit for a Unix domain socket
-  disabledTests = lib.optionals stdenv.isDarwin [ "stream_response" "socket_file" ];
+  disabledTests = lib.optionals stdenv.isDarwin [ "api_test" "stream_response" "socket_file" ];
 
   dontUseSetuptoolsCheck = true;
 
diff --git a/nixpkgs/pkgs/development/python-modules/docloud/default.nix b/nixpkgs/pkgs/development/python-modules/docloud/default.nix
index f1ec269f7cbb..2c92b32c748c 100644
--- a/nixpkgs/pkgs/development/python-modules/docloud/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/docloud/default.nix
@@ -2,6 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , requests
+, six
 }:
 
 buildPythonPackage rec {
@@ -15,6 +16,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     requests
+    six
   ];
 
   # Pypi's tarball doesn't contain tests. Source not available.
diff --git a/nixpkgs/pkgs/development/python-modules/docplex/default.nix b/nixpkgs/pkgs/development/python-modules/docplex/default.nix
index 0fa202addb92..54af81d5d8b0 100644
--- a/nixpkgs/pkgs/development/python-modules/docplex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/docplex/default.nix
@@ -9,12 +9,12 @@
 
 buildPythonPackage rec {
   pname = "docplex";
-  version = "2.19.202";
+  version = "2.20.204";
 
   # No source available from official repo
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2b606dc645f99feae67dfc528620dddc773ecef5d59bcaeae68bba601f25162b";
+    sha256 = "sha256-JNjD9UtLHsMGwTuXydZ+L5+pPQ2eobkr26Yt9pgs1qA=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/docrep/default.nix b/nixpkgs/pkgs/development/python-modules/docrep/default.nix
index cd1971234a3b..3e5d9f21a2bb 100644
--- a/nixpkgs/pkgs/development/python-modules/docrep/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/docrep/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "docrep";
-  version = "0.3.1";
+  version = "0.3.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ef6e7433716c0d2c59889aae8bff800b48e82d7e759dfd934b93100dc7bccaa1";
+    sha256 = "ed8a17e201abd829ef8da78a0b6f4d51fb99a4cbd0554adbed3309297f964314";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/docx2python/default.nix b/nixpkgs/pkgs/development/python-modules/docx2python/default.nix
new file mode 100644
index 000000000000..b6a63d48b357
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/docx2python/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildPythonPackage, fetchFromGitHub, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "docx2python";
+  version = "unstable-2020-11-15";
+
+  # Pypi does not contain tests
+  src = fetchFromGitHub {
+    owner = "ShayHill";
+    repo = pname;
+    rev = "21b2edafc0a01a6cfb73aefc61747a65917e2cad";
+    sha256 = "1nwg17ziwm9a2x7yxsscj8zgc1d383ifsk5w7qa2fws6gf627kyi";
+  };
+
+  preCheck = "cd test"; # Tests require the `test/resources` folder to be accessible
+  checkInputs = [ pytestCheckHook ];
+  disabledTests = [ # asserts related to file deletions fail
+    "test_docx2python.py"
+    "test_docx_context.py"
+    "test_google_docs.py"
+  ];
+  pythonImportsCheck = [ "docx2python" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ShayHill/docx2python";
+    description = "Extract docx headers, footers, (formatted) text, footnotes, endnotes, properties, and images";
+    maintainers = [ maintainers.ivar ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/dopy/default.nix b/nixpkgs/pkgs/development/python-modules/dopy/default.nix
index 538a861c9f4c..9bd32d1ba4a1 100644
--- a/nixpkgs/pkgs/development/python-modules/dopy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dopy/default.nix
@@ -5,18 +5,22 @@
 }:
 
 buildPythonPackage {
-  version = "2016-01-04";
   pname = "dopy";
+  version = "2016-01-04";
 
   src = pkgs.fetchFromGitHub {
     owner = "Wiredcraft";
     repo = "dopy";
     rev = "cb443214166a4e91b17c925f40009ac883336dc3";
-    sha256 ="0ams289qcgna96aak96jbz6wybs6qb95h2gn8lb4lmx2p5sq4q56";
+    sha256 = "0ams289qcgna96aak96jbz6wybs6qb95h2gn8lb4lmx2p5sq4q56";
   };
 
   propagatedBuildInputs = [ requests six ];
 
+  # contains no tests
+  doCheck = false;
+  pythonImportsCheck = [ "dopy" ];
+
   meta = with pkgs.lib; {
     description = "Digital Ocean API python wrapper";
     homepage = "https://github.com/Wiredcraft/dopy";
diff --git a/nixpkgs/pkgs/development/python-modules/dpkt/default.nix b/nixpkgs/pkgs/development/python-modules/dpkt/default.nix
index 52f4f42661d9..ebaa4c88b968 100644
--- a/nixpkgs/pkgs/development/python-modules/dpkt/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dpkt/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "dpkt";
-  version = "1.9.4";
+  version = "1.9.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f4e579cbaf6e2285ebf3a9e84019459b4367636bac079ba169527e582fca48b4";
+    sha256 = "141cab4defcb4ead83e664765ebb045f55dbe73e17d617acafd6eaf368d7c55e";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/drf-yasg/default.nix b/nixpkgs/pkgs/development/python-modules/drf-yasg/default.nix
index d69ece809bb9..ab1d551fea35 100644
--- a/nixpkgs/pkgs/development/python-modules/drf-yasg/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/drf-yasg/default.nix
@@ -1,13 +1,15 @@
-{
-  lib,
-  buildPythonPackage,
-  fetchPypi,
-  inflection,
-  ruamel_yaml,
-  setuptools_scm,
-  six,
-  coreapi,
-  djangorestframework,
+{ lib
+, buildPythonPackage
+, fetchPypi
+, inflection
+, ruamel_yaml
+, setuptools_scm
+, six
+, coreapi
+, djangorestframework
+, pytestCheckHook
+, pytest-django
+, datadiff
 }:
 
 buildPythonPackage rec {
@@ -19,6 +21,11 @@ buildPythonPackage rec {
     sha256 = "d50f197c7f02545d0b736df88c6d5cf874f8fea2507ad85ad7de6ae5bf2d9e5a";
   };
 
+  postPatch = ''
+    # https://github.com/axnsan12/drf-yasg/pull/710
+    substituteInPlace requirements/base.txt --replace packaging ""
+  '';
+
   nativeBuildInputs = [
     setuptools_scm
   ];
@@ -31,6 +38,17 @@ buildPythonPackage rec {
     djangorestframework
   ];
 
+  checkInputs = [
+    pytestCheckHook
+    pytest-django
+    datadiff
+  ];
+
+  # ImportError: No module named 'testproj.settings'
+  doCheck = false;
+
+  pythonImportsCheck = [ "drf_yasg" ];
+
   meta = with lib; {
     description = "Generation of Swagger/OpenAPI schemas for Django REST Framework";
     homepage = "https://github.com/axnsan12/drf-yasg";
diff --git a/nixpkgs/pkgs/development/python-modules/drivelib/default.nix b/nixpkgs/pkgs/development/python-modules/drivelib/default.nix
new file mode 100644
index 000000000000..526e58d14340
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/drivelib/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, expiringdict
+, google-auth-httplib2
+, google-auth-oauthlib
+, google-api-python-client
+}:
+
+buildPythonApplication rec {
+  pname = "drivelib";
+  version = "0.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1bz3dn6wm9mlm2w8czwjmhvf3ws3iggr57hvd8z8acl1qafr2g4m";
+  };
+
+  propagatedBuildInputs = [
+    google-api-python-client
+    google-auth-oauthlib
+    google-auth-httplib2
+    expiringdict
+  ];
+
+  # tests depend on a google auth token
+  doCheck = false;
+
+  pythonImportsCheck = [ "drivelib" ];
+
+  meta = with lib; {
+    description = "Easy access to the most common Google Drive API calls";
+    homepage = "https://pypi.org/project/drivelib/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ gravndal ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/duckdb/default.nix b/nixpkgs/pkgs/development/python-modules/duckdb/default.nix
index ea6dfe32fda9..56fb450b3e5d 100644
--- a/nixpkgs/pkgs/development/python-modules/duckdb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/duckdb/default.nix
@@ -6,7 +6,7 @@
 , pybind11
 , setuptools_scm
 , pytestrunner
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -31,18 +31,10 @@ buildPythonPackage rec {
     pytestrunner
   ];
 
-  checkInputs = [
-    pytest
-  ];
-
-  propagatedBuildInputs = [
-    numpy
-    pandas
-  ];
+  propagatedBuildInputs = [ numpy pandas ];
 
-  checkPhase = ''
-    pytest
-  '';
+  checkInputs = [ pytestCheckHook ];
+  pythonImportsCheck = [ "duckdb" ];
 
   meta = with lib; {
     description = "DuckDB is an embeddable SQL OLAP Database Management System";
diff --git a/nixpkgs/pkgs/development/python-modules/dulwich/0_19.nix b/nixpkgs/pkgs/development/python-modules/dulwich/0_19.nix
index f0d3bad7a04f..9a09c7cc75dd 100644
--- a/nixpkgs/pkgs/development/python-modules/dulwich/0_19.nix
+++ b/nixpkgs/pkgs/development/python-modules/dulwich/0_19.nix
@@ -23,7 +23,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Simple Python implementation of the Git file formats and protocols";
-    homepage = "https://samba.org/~jelmer/dulwich/";
+    homepage = "https://www.dulwich.io/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ koral ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/dulwich/default.nix b/nixpkgs/pkgs/development/python-modules/dulwich/default.nix
index 4cc3f34929b7..9c7f62edf11a 100644
--- a/nixpkgs/pkgs/development/python-modules/dulwich/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/dulwich/default.nix
@@ -13,12 +13,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.20.18";
+  version = "0.20.21";
   pname = "dulwich";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-ATE4f5uZrsxprJhlWzkx8q1D2lPTpj4FD6Om1iYKxVQ=";
+    sha256 = "sha256-rHZMmpuA+mGv40BNUnDFBgqlf38IexGpU5XTt287cf0=";
   };
 
   LC_ALL = "en_US.UTF-8";
diff --git a/nixpkgs/pkgs/development/python-modules/dwdwfsapi/default.nix b/nixpkgs/pkgs/development/python-modules/dwdwfsapi/default.nix
new file mode 100644
index 000000000000..6699050035d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/dwdwfsapi/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, requests
+, ciso8601
+}:
+
+buildPythonPackage rec {
+  pname = "dwdwfsapi";
+  version = "1.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-PX1b1msaZH8HKVBo3GU7TOr8Lo7INLjjJBkDHHs6mzk=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    ciso8601
+  ];
+
+  # All tests require network access
+  doCheck = false;
+
+  pythonImportsCheck = [ "dwdwfsapi" ];
+
+  meta = with lib; {
+    description = "Python client to retrieve data provided by DWD via their geoserver WFS API";
+    homepage = "https://github.com/stephan192/dwdwfsapi";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/easygui/default.nix b/nixpkgs/pkgs/development/python-modules/easygui/default.nix
index 322e6461e5d4..108c5287eb6e 100644
--- a/nixpkgs/pkgs/development/python-modules/easygui/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/easygui/default.nix
@@ -1,16 +1,26 @@
-{ lib, fetchPypi, buildPythonPackage }:
+{ lib, fetchPypi, buildPythonPackage, tkinter }:
 
 buildPythonPackage rec {
   pname = "easygui";
-  version = "0.98.1";
+  version = "0.98.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v";
+    sha256 = "073f728ca88a77b74f404446fb8ec3004945427677c5618bd00f70c1b999fef2";
   };
 
+  postPatch = ''
+    substituteInPlace setup.py --replace README.md README.txt
+  '';
+
+  propagatedBuildInputs = [
+    tkinter
+  ];
+
   doCheck = false; # No tests available
 
+  pythonImportsCheck = [ "easygui" ];
+
   meta = with lib; {
     description = "Very simple, very easy GUI programming in Python";
     homepage = "https://github.com/robertlugg/easygui";
diff --git a/nixpkgs/pkgs/development/python-modules/easywatch/default.nix b/nixpkgs/pkgs/development/python-modules/easywatch/default.nix
index a56ffb952819..36f3ea0de6ef 100644
--- a/nixpkgs/pkgs/development/python-modules/easywatch/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/easywatch/default.nix
@@ -17,6 +17,7 @@ buildPythonPackage rec {
 
   # There are no tests
   doCheck = false;
+  pythonImportsCheck = [ "easywatch" ];
 
   meta = with lib; {
     description = "Dead-simple way to watch a directory";
diff --git a/nixpkgs/pkgs/development/python-modules/editdistance/default.nix b/nixpkgs/pkgs/development/python-modules/editdistance/default.nix
new file mode 100644
index 000000000000..01e59fdb040d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/editdistance/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, cython
+}:
+
+buildPythonPackage rec {
+  pname = "editdistance";
+  version = "0.5.3";
+
+
+  src = fetchFromGitHub {
+    owner = "roy-ht";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0vk8vz41p2cs7s7zbaw3cnw2jnvy5rhy525xral68dh14digpgsd";
+  };
+
+  nativeBuildInputs = [ cython ];
+
+  preBuild = ''
+    cythonize --inplace editdistance/bycython.pyx
+  '';
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "editdistance" ];
+
+  meta = with lib; {
+    description = "Python implementation of the edit distance (Levenshtein distance)";
+    homepage = "https://github.com/roy-ht/editdistance";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix b/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix
index 9161525c2bc6..465e8f6c772a 100644
--- a/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/elasticsearch/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage (rec {
   pname = "elasticsearch";
-  version = "7.10.1";
+  version = "7.11.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a725dd923d349ca0652cf95d6ce23d952e2153740cf4ab6daf4a2d804feeed48";
+    sha256 = "1e24b33a82bf381b42d3b0d390f76fdb9d6a9d47b310dea8eaeb0a5933c394c0";
   };
 
   # Check is disabled because running them destroy the content of the local cluster!
diff --git a/nixpkgs/pkgs/development/python-modules/elementpath/default.nix b/nixpkgs/pkgs/development/python-modules/elementpath/default.nix
index a5a639484ec1..c98937804a31 100644
--- a/nixpkgs/pkgs/development/python-modules/elementpath/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/elementpath/default.nix
@@ -1,7 +1,7 @@
 { lib, buildPythonPackage, fetchFromGitHub, isPy27 }:
 
 buildPythonPackage rec {
-  version = "2.1.3";
+  version = "2.2.1";
   pname = "elementpath";
   disabled = isPy27; # uses incompatible class syntax
 
@@ -9,7 +9,7 @@ buildPythonPackage rec {
     owner = "sissaschool";
     repo = "elementpath";
     rev = "v${version}";
-    sha256 = "062l1dqbaz1pab3qz6x5zmja8m8gw1bxgfl4kx91gdh0zsiakg8j";
+    sha256 = "15yjl18n81zddd27789mcy12gnja3cqycjdykybwgd9i0ysj96gl";
   };
 
   # avoid circular dependency with xmlschema which directly depends on this
diff --git a/nixpkgs/pkgs/development/python-modules/elmax/default.nix b/nixpkgs/pkgs/development/python-modules/elmax/default.nix
new file mode 100644
index 000000000000..7ec3b8d1c112
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/elmax/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, httpx
+, poetry-core
+, pythonOlder
+, yarl
+}:
+
+buildPythonPackage rec {
+  pname = "elmax";
+  version = "0.1.1";
+  format = "pyproject";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "home-assistant-ecosystem";
+    repo = "python-elmax";
+    rev = version;
+    sha256 = "sha256-vDISJ/CVOjpM+GPF2TCm3/AMFTWTM0b/+ZPCpAEvNvY=";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    httpx
+    yarl
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "elmax" ];
+
+  meta = with lib; {
+    description = "Python API client for the Elmax Cloud services";
+    homepage = "https://github.com/home-assistant-ecosystem/python-elmax";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/enrich/default.nix b/nixpkgs/pkgs/development/python-modules/enrich/default.nix
new file mode 100644
index 000000000000..2b81577af22d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/enrich/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, fetchPypi, pytestCheckHook, setuptools-scm, rich, pytest-mock }:
+
+buildPythonPackage rec {
+  pname = "enrich";
+  version = "1.2.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-Dpn/V9h/e13vDKeZF+iPuTUaoNUuIo7ji/982FgxX+Q=";
+  };
+
+  buildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [ rich ];
+
+  checkInputs = [ pytestCheckHook pytest-mock ];
+
+  pythonImportsCheck = [ "enrich" ];
+
+  meta = with lib; {
+    description = "Enrich adds few missing features to the wonderful rich library";
+    homepage = "https://github.com/pycontribs/enrich";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/entrance/default.nix b/nixpkgs/pkgs/development/python-modules/entrance/default.nix
index 2f0f80bcf7a5..ca6158bd5e96 100644
--- a/nixpkgs/pkgs/development/python-modules/entrance/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/entrance/default.nix
@@ -18,11 +18,11 @@ in
 
 buildPythonPackage rec {
   pname = "entrance";
-  version = "1.1.14";
+  version = "1.1.15";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d1fc9d128ce05837d7e149413fbec71bcf84d9ca510accea56761d3f4bd0a021";
+    sha256 = "5b354ecf03226edae567511c8a8db95038cc9c3da20fcfcf5546d1e197eb3aef";
   };
 
   # The versions of `sanic` and `websockets` in nixpkgs only support 3.6 or later
diff --git a/nixpkgs/pkgs/development/python-modules/envisage/default.nix b/nixpkgs/pkgs/development/python-modules/envisage/default.nix
index 397e573a252f..f53184a8166c 100644
--- a/nixpkgs/pkgs/development/python-modules/envisage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/envisage/default.nix
@@ -1,18 +1,18 @@
-{ lib, fetchPypi, fetchpatch, isPy27
+{ lib, fetchPypi, isPy27
 , buildPythonPackage
-, traits, apptools
-, python, ipykernel, ipython
+, traits, apptools, pytestCheckHook
+, ipykernel, ipython
 }:
 
 buildPythonPackage rec {
   pname = "envisage";
-  version = "4.9.2";
+  version = "5.0.0";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1srjmkhnz84nz5jd72vdsnc4fn7dd9jr8nyf3hzk6yx1dsn815gd";
+    sha256 = "0zrxlq4v3091727vf10ngc8418sp26raxa8q83i4h0sydfkh2dic";
   };
 
   propagatedBuildInputs = [ traits apptools ];
@@ -21,22 +21,10 @@ buildPythonPackage rec {
     export HOME=$PWD/HOME
   '';
 
-  # fix a test failure; should be merged in next release
-  patches = [ (fetchpatch {
-    url = "https://github.com/enthought/envisage/pull/248/commits/7b6d2dd615d5cb7455b200eb8f37e030bbf4df9e.patch";
-    sha256 = "0a3dmbpxwsn1bkjcjv9v7b751rcmppj6hc9wcgiayg4l9r2nrvyh";
-  }) ];
-
   checkInputs = [
-    ipykernel ipython
+    ipykernel ipython pytestCheckHook
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest
-    runHook postCheck
-  '';
-
   meta = with lib; {
     description = "Framework for building applications whose functionalities can be extended by adding 'plug-ins'";
     homepage = "https://github.com/enthought/envisage";
diff --git a/nixpkgs/pkgs/development/python-modules/etebase/default.nix b/nixpkgs/pkgs/development/python-modules/etebase/default.nix
index 7832f6b4787a..14c93fc719f2 100644
--- a/nixpkgs/pkgs/development/python-modules/etebase/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/etebase/default.nix
@@ -1,56 +1,59 @@
-{ lib, stdenv
-, wheel
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildPythonPackage
 , rustPlatform
-, pipInstallHook
+, pkg-config
+, rustfmt
 , setuptools-rust
-, python
-, msgpack
-, requests
 , openssl
-, perl
-, rustfmt
-, fetchFromGitHub
 , Security
+, msgpack
 }:
 
-rustPlatform.buildRustPackage rec {
+buildPythonPackage rec {
   pname = "etebase";
-  version = "0.31.1";
+  version = "0.31.2";
 
   src = fetchFromGitHub {
     owner = "etesync";
     repo = "etebase-py";
     rev = "v${version}";
-    sha256 = "163iw64l8lwawf84qswcjsq9p8qddv9ysjrr3dzqpqxb2yb0sy39";
+    hash = "sha256-enGmfXW8eV6FgdHfJqXr1orAsGbxDz9xUY6T706sf5U=";
   };
 
-  cargoSha256 = "0w8ypl6kj1mf6ahbdiwbd4jw6ldxdaig47zwk91jjsww5lbyx4lf";
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-4eJvFf6aY+DYkrYgam5Ok9941PX4uQOmtRznEY0+1TE=";
+  };
+
+  format = "pyproject";
 
   nativeBuildInputs = [
+    pkg-config
     rustfmt
-    perl
-    openssl
-    pipInstallHook
     setuptools-rust
-    wheel
-  ];
+  ] ++ (with rustPlatform; [
+    cargoSetupHook
+    rust.cargo
+    rust.rustc
+  ]);
 
-  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
 
   propagatedBuildInputs = [
-    python
     msgpack
   ];
 
-  doCheck = true;
-
-  buildPhase = ''
-    ${python.interpreter} setup.py bdist_wheel
+  postPatch = ''
+    # Use system OpenSSL, which gets security updates.
+    substituteInPlace Cargo.toml \
+      --replace ', features = ["vendored"]' ""
   '';
 
-  installPhase = ''
-    pipInstallPhase
-  '';
+  pythonImportsCheck = [ "etebase" ];
+
 
   meta = with lib; {
     homepage = "https://www.etebase.com/";
diff --git a/nixpkgs/pkgs/development/python-modules/eve/default.nix b/nixpkgs/pkgs/development/python-modules/eve/default.nix
index 4d5c6173cd79..32f531e4ff59 100644
--- a/nixpkgs/pkgs/development/python-modules/eve/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/eve/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "Eve";
-  version = "1.1.4";
+  version = "1.1.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3a057277bba7144a0c15ab8c737dc8a1002e87e7284847aa011ce122e353418e";
+    sha256 = "5647ee7dd6e063b967276e49f564cd4f96decdd0a218482bdf86c404a2be1fbf";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/eventlet/default.nix b/nixpkgs/pkgs/development/python-modules/eventlet/default.nix
index 93b058859858..9966dd81d2ee 100644
--- a/nixpkgs/pkgs/development/python-modules/eventlet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/eventlet/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "eventlet";
-  version = "0.30.0";
+  version = "0.30.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "19d6f3aa9525221ba60d0ec31b570508021af7ad5497fb77f77501fe9a7c34d3";
+    sha256 = "d00649a7e17de0bcddff1a96311ed3baf1b295b3223d4b71aceafe7b45e6d6f8";
   };
 
   propagatedBuildInputs = [ dnspython greenlet monotonic six ]
diff --git a/nixpkgs/pkgs/development/python-modules/evohome-async/default.nix b/nixpkgs/pkgs/development/python-modules/evohome-async/default.nix
new file mode 100644
index 000000000000..0f38faf57340
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/evohome-async/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "evohome-async";
+  version = "0.3.8";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "zxdavb";
+    repo = pname;
+    rev = version;
+    sha256 = "04xy72k79cnb8pc19v5jzkc0djazfm6pbm10ysphx06ndwvxr9mn";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "evohomeasync2" ];
+
+  meta = with lib; {
+    description = "Python client for connecting to Honeywell's TCC RESTful API";
+    homepage = "https://github.com/zxdavb/evohome-async";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/exdown/default.nix b/nixpkgs/pkgs/development/python-modules/exdown/default.nix
index 17cab3fe55fb..9daf9a00bfd0 100644
--- a/nixpkgs/pkgs/development/python-modules/exdown/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/exdown/default.nix
@@ -1,14 +1,16 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder
+{ lib, buildPythonPackage, isPy27, fetchPypi, pythonOlder
 , importlib-metadata }:
 
 buildPythonPackage rec {
   pname = "exdown";
-  version = "0.7.1";
+  version = "0.8.6";
   format = "pyproject";
 
+  disabled = isPy27;
+
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-vnSso3vmPIjX7JX+NwoxguwqwPHocJACeh5H0ClPcUI=";
+    sha256 = "sha256-BCn+rkMxQSw/gO+dpzgpYSOqEiooWFzSh7LUYIFr6wE=";
   };
 
   propagatedBuildInputs = lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
diff --git a/nixpkgs/pkgs/development/python-modules/execnet/default.nix b/nixpkgs/pkgs/development/python-modules/execnet/default.nix
index ec4bcca9f86a..b66c8a28128c 100644
--- a/nixpkgs/pkgs/development/python-modules/execnet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/execnet/default.nix
@@ -2,22 +2,22 @@
 , buildPythonPackage
 , isPyPy
 , fetchPypi
-, pytest
-, setuptools_scm
+, pytestCheckHook
+, setuptools-scm
 , apipkg
 }:
 
 buildPythonPackage rec {
   pname = "execnet";
-  version = "1.7.1";
+  version = "1.8.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50";
+    sha256 = "sha256-tzxVZeUX8kti3qilzqwXjGYcQwnTqgw+QghWwHLEEbQ=";
   };
 
-  checkInputs = [ pytest ];
-  nativeBuildInputs = [ setuptools_scm ];
+  checkInputs = [ pytestCheckHook ];
+  nativeBuildInputs = [ setuptools-scm ];
   propagatedBuildInputs = [ apipkg ];
 
   # remove vbox tests
@@ -29,15 +29,13 @@ buildPythonPackage rec {
     ${lib.optionalString isPyPy "rm -v testing/test_multi.py"}
   '';
 
-  checkPhase = ''
-    py.test testing
-  '';
+  pythonImportsCheck = [ "execnet" ];
 
   __darwinAllowLocalNetworking = true;
 
   meta = with lib; {
-    description = "Rapid multi-Python deployment";
-    license = licenses.gpl2;
+    description = "Distributed Python deployment and communication";
+    license = licenses.mit;
     homepage = "https://execnet.readthedocs.io/";
     maintainers = with maintainers; [ nand0p ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/executing/default.nix b/nixpkgs/pkgs/development/python-modules/executing/default.nix
index 84026d7374c4..f0c67f3ae591 100644
--- a/nixpkgs/pkgs/development/python-modules/executing/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/executing/default.nix
@@ -1,15 +1,27 @@
-{ lib, buildPythonPackage, fetchzip, pytest, asttokens }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, asttokens
+}:
 
 buildPythonPackage rec {
   pname = "executing";
-  version = "0.4.3";
+  version = "0.5.4";
 
-  src = fetchzip {
-    url = "https://github.com/alexmojaki/executing/archive/v${version}.tar.gz";
-    sha256 = "1fqfc26nl703nsx2flzf7x4mgr3rpbd8pnn9c195rca648zhi3nh";
+  src = fetchFromGitHub {
+    owner = "alexmojaki";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1hqx94h6l2wg9sljiaajfay2nr62sqa819w3bxrz8cdki1abdygv";
   };
 
-  checkInputs = [ pytest asttokens ];
+  preBuild = ''
+    export SETUPTOOLS_SCM_PRETEND_VERSION="${version}"
+  '';
+
+  # Tests appear to run fine (Ran 22 tests in 4.076s) with setuptoolsCheckPhase
+  # but crash with pytestCheckHook
+  checkInputs = [ asttokens ];
 
   meta = with lib; {
     description = "Get information about what a frame is currently doing, particularly the AST node being executed";
diff --git a/nixpkgs/pkgs/development/python-modules/expiringdict/default.nix b/nixpkgs/pkgs/development/python-modules/expiringdict/default.nix
new file mode 100644
index 000000000000..23ca9c1c3f2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/expiringdict/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, dill
+, coverage
+, coveralls
+, mock
+, nose
+}:
+
+buildPythonApplication rec {
+  pname = "expiringdict";
+  version = "1.2.1";
+
+  # use fetchFromGitHub instead of fetchPypi because the test suite of
+  # the package is not included into the PyPI tarball
+  src = fetchFromGitHub {
+    owner = "mailgun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "07g1vxznmim78bankfl9brr01s31sksdcpwynq1yryh6xw9ri5xs";
+  };
+
+  checkInputs = [
+    dill
+    coverage
+    coveralls
+    mock
+    nose
+  ];
+
+  checkPhase = ''
+    nosetests -v --with-coverage --cover-package=expiringdict
+  '';
+
+  pythonImportsCheck = [ "expiringdict" ];
+
+  meta = with lib; {
+    description = "Dictionary with auto-expiring values for caching purposes";
+    homepage = "https://pypi.org/project/expiringdict/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ gravndal ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/exrex/default.nix b/nixpkgs/pkgs/development/python-modules/exrex/default.nix
new file mode 100644
index 000000000000..8c980c8d00fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/exrex/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "exrex";
+  version = "0.10.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1wq8nyycdprxl9q9y1pfhkbca4rvysj45h1xn7waybl3v67v3f1z";
+  };
+
+  # Projec thas no released tests
+  doCheck = false;
+  pythonImportsCheck = [ "exrex" ];
+
+  meta = with lib; {
+    description = "Irregular methods on regular expressions";
+    homepage = "https://github.com/asciimoo/exrex";
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/faadelays/default.nix b/nixpkgs/pkgs/development/python-modules/faadelays/default.nix
new file mode 100644
index 000000000000..3175aabcae84
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/faadelays/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "faadelays";
+  version = "0.0.6";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "02z8p0n9d6n4l6v1m969009gxwmy5v14z108r4f3swd6yrk0h2xd";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "faadelays" ];
+
+  meta = with lib; {
+    description = "Python package to retrieve FAA airport status";
+    homepage = "https://github.com/ntilley905/faadelays";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/fakeredis/default.nix b/nixpkgs/pkgs/development/python-modules/fakeredis/default.nix
new file mode 100644
index 000000000000..b0cf3b546fd7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/fakeredis/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, aioredis
+, async_generator
+, buildPythonPackage
+, fetchPypi
+, hypothesis
+, lupa
+, pytest-asyncio
+, pytest-mock
+, pytestCheckHook
+, pythonOlder
+, redis
+, six
+, sortedcontainers
+}:
+
+buildPythonPackage rec {
+  pname = "fakeredis";
+  version = "1.5.0";
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ac0cef767c37f51718874a33afb5413e69d132988cb6a80c6e6dbeddf8c7623";
+  };
+
+  propagatedBuildInputs = [
+    aioredis
+    lupa
+    redis
+    six
+    sortedcontainers
+  ];
+
+  checkInputs = [
+    async_generator
+    hypothesis
+    pytest-asyncio
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "fakeredis" ];
+
+  meta = with lib; {
+    description = "Fake implementation of Redis API";
+    homepage = "https://github.com/jamesls/fakeredis";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/fastparquet/default.nix b/nixpkgs/pkgs/development/python-modules/fastparquet/default.nix
index 07922ee19efa..dc25759afe39 100644
--- a/nixpkgs/pkgs/development/python-modules/fastparquet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fastparquet/default.nix
@@ -1,5 +1,5 @@
-{ lib, buildPythonPackage, fetchFromGitHub, numba, numpy, pandas, pytestrunner,
-thrift, pytest, python-snappy, lz4, zstd }:
+{ lib, buildPythonPackage, fetchFromGitHub, numba, numpy, pandas, pytestrunner
+, thrift, pytestCheckHook, python-snappy, lz4, zstandard, zstd }:
 
 buildPythonPackage rec {
   pname = "fastparquet";
@@ -12,15 +12,13 @@ buildPythonPackage rec {
     sha256 = "17i091kky34m2xivk29fqsyxxxa7v4352n79w01n7ni93za6wana";
   };
 
-  postPatch = ''
-    # FIXME: package zstandard
-    # removing the test dependency for now
-    substituteInPlace setup.py --replace "'zstandard'," ""
-  '';
-
   nativeBuildInputs = [ pytestrunner ];
   propagatedBuildInputs = [ numba numpy pandas thrift ];
-  checkInputs = [ pytest python-snappy lz4 zstd ];
+  checkInputs = [ pytestCheckHook python-snappy lz4 zstandard zstd ];
+
+  # E   ModuleNotFoundError: No module named 'fastparquet.speedups'
+  doCheck = false;
+  pythonImportsCheck = [ "fastparquet" ];
 
   meta = with lib; {
     description = "A python implementation of the parquet format";
diff --git a/nixpkgs/pkgs/development/python-modules/fe25519/default.nix b/nixpkgs/pkgs/development/python-modules/fe25519/default.nix
new file mode 100644
index 000000000000..466de64453f4
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/fe25519/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, bitlist
+, buildPythonPackage
+, fetchPypi
+, fountains
+, parts
+, nose
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "fe25519";
+  version = "0.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1m85qvw9dwxk81mv9k45c9n75pk8wqn70qkinqh56h5zv56vgq24";
+  };
+
+  propagatedBuildInputs = [
+    bitlist
+    fountains
+    parts
+  ];
+
+  checkInputs = [
+    nose
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "fe25519" ];
+
+  meta = with lib; {
+    description = "Python field operations for Curve25519's prime";
+    homepage = "https://github.com/BjoernMHaase/fe25519";
+    license = with licenses; [ cc0 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/fido2/default.nix b/nixpkgs/pkgs/development/python-modules/fido2/default.nix
index 96019f61cac0..1e1af8e95916 100644
--- a/nixpkgs/pkgs/development/python-modules/fido2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fido2/default.nix
@@ -9,17 +9,29 @@
 
 buildPythonPackage rec {
   pname = "fido2";
-  version = "0.8.1";
+  version = "0.9.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1hzprnd407g2xh9kyv8j8pq949hwr1snmg3fp65pqfbghzv6i424";
+    hash = "sha256-hoDuJSOOIwdZbrOQCg+MDZzJEYkUbtgDlUTxo6ad/m4=";
   };
 
   propagatedBuildInputs = [ six cryptography ];
 
   checkInputs = [ mock pyfakefs ];
 
+  # Testing with `python setup.py test` doesn't work:
+  # https://github.com/Yubico/python-fido2/issues/108#issuecomment-763513576
+  checkPhase = ''
+    runHook preCheck
+
+    python -m unittest discover -v
+
+    runHook postCheck
+  '';
+
+  pythonImportsCheck = [ "fido2" ];
+
   meta = with lib; {
     description = "Provides library functionality for FIDO 2.0, including communication with a device over USB.";
     homepage = "https://github.com/Yubico/python-fido2";
diff --git a/nixpkgs/pkgs/development/python-modules/fints/default.nix b/nixpkgs/pkgs/development/python-modules/fints/default.nix
index c4dfc04046b7..7972a9374c78 100644
--- a/nixpkgs/pkgs/development/python-modules/fints/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fints/default.nix
@@ -1,13 +1,14 @@
 { lib, buildPythonPackage, fetchFromGitHub, isPy27
 , bleach
 , mt-940
-, pytest
 , requests
 , sepaxml
+, pytestCheckHook
+, pytest-mock
 }:
 
 buildPythonPackage rec {
-  version = "3.0.0";
+  version = "3.0.1";
   pname = "fints";
   disabled = isPy27;
 
@@ -15,22 +16,17 @@ buildPythonPackage rec {
     owner = "raphaelm";
     repo = "python-fints";
     rev = "v${version}";
-    sha256 = "00fqgnmv7z6d792ga4cyzn9lrfjf79jplkssm2jbyb0akfggfj7h";
+    sha256 = "sha256-P9+3QuB5c7WMjic2fSp8pwXrOUHIrLThvfodtbBXLMY=";
   };
 
   propagatedBuildInputs = [ requests mt-940 sepaxml bleach ];
 
-  checkInputs = [ pytest ];
-
-  # ignore network calls and broken fixture
-  checkPhase = ''
-    pytest . --ignore=tests/test_client.py -k 'not robust_mode'
-  '';
+  checkInputs = [ pytestCheckHook pytest-mock ];
 
   meta = with lib; {
     homepage = "https://github.com/raphaelm/python-fints/";
     description = "Pure-python FinTS (formerly known as HBCI) implementation";
-    license = licenses.lgpl3;
-    maintainers = with maintainers; [ elohmeier ];
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ elohmeier dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/fiona/default.nix b/nixpkgs/pkgs/development/python-modules/fiona/default.nix
index 665bb0c8df0e..42f1a410624c 100644
--- a/nixpkgs/pkgs/development/python-modules/fiona/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fiona/default.nix
@@ -2,6 +2,7 @@
 , attrs, click, cligj, click-plugins, six, munch, enum34
 , pytest, boto3, mock, giflib, pytz
 , gdal_2 # can't bump to 3 yet, https://github.com/Toblerity/Fiona/issues/745
+, certifi
 }:
 
 buildPythonPackage rec {
@@ -25,6 +26,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     attrs
+    certifi
     click
     cligj
     click-plugins
diff --git a/nixpkgs/pkgs/development/python-modules/fipy/default.nix b/nixpkgs/pkgs/development/python-modules/fipy/default.nix
index d54379d0683e..ab670e557da4 100644
--- a/nixpkgs/pkgs/development/python-modules/fipy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fipy/default.nix
@@ -1,6 +1,5 @@
 { lib
 , buildPythonPackage
-, fetchPypi
 , numpy
 , scipy
 , pyamg
@@ -18,41 +17,37 @@
 , fetchurl
 }:
 
-let
-  not_darwin_inputs = lib.optionals (! stdenv.isDarwin) [ gmsh ];
-in
-  buildPythonPackage rec {
-    pname = "fipy";
-    version = "3.4.1";
+buildPythonPackage rec {
+  pname = "fipy";
+  version = "3.4.2.1";
 
-    src = fetchurl {
-      url = "https://github.com/usnistgov/fipy/releases/download/${version}/FiPy-${version}.tar.gz";
-      sha256 = "0078yg96fknqhywn1v26ryc5z47c0j0c1qwz6p8wsjn0wmzggaqk";
-    };
+  src = fetchurl {
+    url = "https://github.com/usnistgov/fipy/releases/download/${version}/FiPy-${version}.tar.gz";
+    sha256 = "0v5yk9b4hksy3176w4vm4gagb9kxqgv75zcyswlqvl371qwy1grk";
+  };
 
-    propagatedBuildInputs = [
-      numpy
-      scipy
-      pyamg
-      matplotlib
-      tkinter
-      mpi4py
-      future
-      scikit-fmm
-      openssh
-    ] ++ lib.optionals isPy27 [ pysparse ] ++ not_darwin_inputs;
+  propagatedBuildInputs = [
+    numpy
+    scipy
+    pyamg
+    matplotlib
+    tkinter
+    mpi4py
+    future
+    scikit-fmm
+    openssh
+  ] ++ lib.optionals isPy27 [ pysparse ]
+  ++ lib.optionals (!stdenv.isDarwin) [ gmsh ];
 
-    checkInputs = not_darwin_inputs;
+  checkPhase = ''
+    export OMPI_MCA_plm_rsh_agent=${openssh}/bin/ssh
+    ${python.interpreter} setup.py test --modules
+  '';
 
-    checkPhase = ''
-      export OMPI_MCA_plm_rsh_agent=${openssh}/bin/ssh
-      ${python.interpreter} setup.py test --modules
-    '';
-
-    meta = with lib; {
-      homepage = "https://www.ctcms.nist.gov/fipy/";
-      description = "A Finite Volume PDE Solver Using Python";
-      license = licenses.free;
-      maintainers = with maintainers; [ costrouc wd15 ];
-    };
-  }
+  meta = with lib; {
+    homepage = "https://www.ctcms.nist.gov/fipy/";
+    description = "A Finite Volume PDE Solver Using Python";
+    license = licenses.free;
+    maintainers = with maintainers; [ costrouc wd15 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/fixtures/default.nix b/nixpkgs/pkgs/development/python-modules/fixtures/default.nix
index 9f1549e98f9f..e802dbaa2691 100644
--- a/nixpkgs/pkgs/development/python-modules/fixtures/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fixtures/default.nix
@@ -1,11 +1,12 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
+, pythonAtLeast
 , pbr
 , testtools
 , mock
 , python
-, isPy39
 }:
 
 buildPythonPackage rec {
@@ -17,7 +18,26 @@ buildPythonPackage rec {
     sha256 = "fcf0d60234f1544da717a9738325812de1f42c2fa085e2d9252d8fff5712b2ef";
   };
 
-  propagatedBuildInputs = [ pbr testtools mock ];
+  patches = lib.optional (pythonAtLeast "3.9") [
+    # drop tests that try to monkeypatch a classmethod, which fails on python3.9
+    # https://github.com/testing-cabal/fixtures/issues/44
+    (fetchpatch {
+       url = "https://salsa.debian.org/openstack-team/python/python-fixtures/-/raw/debian/victoria/debian/patches/remove-broken-monkey-patch-test.patch";
+       sha256 = "1s3hg2zmqc4shmnf90kscphzj5qlqpxghzw2a59p8f88zrbsj97r";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pbr
+  ];
+
+  propagatedBuildInputs = [
+    testtools
+  ];
+
+  checkInputs = [
+    mock
+  ];
 
   checkPhase = ''
     ${python.interpreter} -m testtools.run fixtures.test_suite
@@ -27,6 +47,5 @@ buildPythonPackage rec {
     description = "Reusable state for writing clean tests and more";
     homepage = "https://pypi.python.org/pypi/fixtures";
     license = lib.licenses.asl20;
-    broken = isPy39; # see https://github.com/testing-cabal/fixtures/issues/44
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/flammkuchen/default.nix b/nixpkgs/pkgs/development/python-modules/flammkuchen/default.nix
index a5525d97f604..1349e10c5397 100644
--- a/nixpkgs/pkgs/development/python-modules/flammkuchen/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flammkuchen/default.nix
@@ -1,4 +1,4 @@
-{ lib, pkgs, buildPythonPackage, fetchPypi, isPy27
+{ lib, buildPythonPackage, fetchPypi, isPy27
 , numpy
 , scipy
 , tables
diff --git a/nixpkgs/pkgs/development/python-modules/flask-compress/default.nix b/nixpkgs/pkgs/development/python-modules/flask-compress/default.nix
index 1e133df2b2bb..06c91670f449 100644
--- a/nixpkgs/pkgs/development/python-modules/flask-compress/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flask-compress/default.nix
@@ -3,12 +3,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.8.0";
+  version = "1.9.0";
   pname = "Flask-Compress";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c132590e7c948877a96d675c13cbfa64edec0faafa2381678dea6f36aa49a552";
+    sha256 = "d93edd8fc02ae74b73c3df10a8e7ee26dee489c65dedce0b3a1d2ce05ac3d1be";
   };
 
   propagatedBuildInputs = [ flask brotli ];
diff --git a/nixpkgs/pkgs/development/python-modules/flask-jwt-extended/default.nix b/nixpkgs/pkgs/development/python-modules/flask-jwt-extended/default.nix
index 580cd1f89f7b..dd018d84a6d3 100644
--- a/nixpkgs/pkgs/development/python-modules/flask-jwt-extended/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flask-jwt-extended/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "Flask-JWT-Extended";
-  version = "3.25.0";
+  version = "3.25.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b2e4dba91661e4697b30269106386c2b29e416a00d9ff66b26c462edddc10078";
+    sha256 = "bbf4467f41c56cf1fd8a5870d2556f419c572aad2b4085757581c3f9b4d7767a";
   };
 
   propagatedBuildInputs = [ dateutil flask pyjwt werkzeug ];
diff --git a/nixpkgs/pkgs/development/python-modules/flask-limiter/default.nix b/nixpkgs/pkgs/development/python-modules/flask-limiter/default.nix
index d22096f91494..418225550167 100644
--- a/nixpkgs/pkgs/development/python-modules/flask-limiter/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flask-limiter/default.nix
@@ -1,16 +1,60 @@
-{ lib, fetchPypi, buildPythonPackage, flask, limits }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, flask
+, flask-restful
+, hiro
+, limits
+, mock
+, ordereddict
+, pymemcache
+, pytestCheckHook
+, redis
+}:
 
 buildPythonPackage rec {
   pname = "Flask-Limiter";
   version = "1.4";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "021279c905a1e24f181377ab3be711be7541734b494f4e6db2b8edeba7601e48";
+  src = fetchFromGitHub {
+    owner = "alisaifee";
+    repo = "flask-limiter";
+    rev = version;
+    sha256 = "1k1b4b3s1acphqnar0y5g747bh1y7w35gcl5g819idq2a5vqnass";
   };
 
   propagatedBuildInputs = [ flask limits ];
 
+  checkInputs = [
+    pytestCheckHook
+    hiro
+    mock
+    redis
+    flask-restful
+    pymemcache
+    ordereddict
+  ];
+
+  postPatch = ''
+    sed -i "/--cov/d" pytest.ini
+  '';
+
+  # Some tests requires a local Redis instance
+  disabledTests = [
+    "test_fallback_to_memory"
+    "test_reset_unsupported"
+    "test_constructor_arguments_over_config"
+    "test_fallback_to_memory_config"
+    "test_fallback_to_memory_backoff_check"
+    "test_fallback_to_memory_with_global_override"
+    "test_custom_key_prefix"
+    "test_redis_request_slower_than_fixed_window"
+    "test_redis_request_slower_than_moving_window"
+    "test_custom_key_prefix_with_headers"
+  ];
+
+  pythonImportsCheck = [ "flask_limiter" ];
+
   meta = with lib; {
     description = "Rate limiting for flask applications";
     homepage = "https://flask-limiter.readthedocs.org/";
diff --git a/nixpkgs/pkgs/development/python-modules/flask-migrate/default.nix b/nixpkgs/pkgs/development/python-modules/flask-migrate/default.nix
index dfa1a0fbd01b..5297c83d64b7 100644
--- a/nixpkgs/pkgs/development/python-modules/flask-migrate/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flask-migrate/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "Flask-Migrate";
-  version = "2.6.0";
+  version = "2.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8626af845e6071ef80c70b0dc16d373f761c981f0ad61bb143a529cab649e725";
+    sha256 = "ae2f05671588762dd83a21d8b18c51fe355e86783e24594995ff8d7380dffe38";
   };
 
   checkInputs = [ flask_script ] ++ lib.optional isPy3k glibcLocales;
diff --git a/nixpkgs/pkgs/development/python-modules/flask-seasurf/default.nix b/nixpkgs/pkgs/development/python-modules/flask-seasurf/default.nix
new file mode 100644
index 000000000000..ff1f97c42184
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/flask-seasurf/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildPythonPackage, isPy3k, flask }:
+
+buildPythonPackage rec {
+  pname = "Flask-SeaSurf";
+  version = "0.3.0";
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "maxcountryman";
+    repo = "flask-seasurf";
+    rev = version;
+    sha256 = "02hsvppsz1d93v641f14fdnd22gbc12ilc9k9kn7wl119n5s3pd8";
+  };
+
+  propagatedBuildInputs = [ flask ];
+
+  pythonImportsCheck = [ "flask_seasurf" ];
+
+  meta = with lib; {
+    description = "A Flask extension for preventing cross-site request forgery";
+    homepage = "https://github.com/maxcountryman/flask-seasurf";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/flask-sslify/default.nix b/nixpkgs/pkgs/development/python-modules/flask-sslify/default.nix
new file mode 100644
index 000000000000..ad4bc4dc0523
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/flask-sslify/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchPypi, buildPythonPackage, flask }:
+
+buildPythonPackage rec {
+  pname = "Flask-SSLify";
+  version = "0.1.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gjl1m828z5dm3c5dpc2qjgi4llf84cp72mafr0ib5fd14y1sgnk";
+  };
+
+  propagatedBuildInputs = [ flask ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "flask_sslify" ];
+
+  meta = with lib; {
+    description = "A Flask extension that redirects all incoming requests to HTTPS";
+    homepage = "https://github.com/kennethreitz42/flask-sslify";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/flower/default.nix b/nixpkgs/pkgs/development/python-modules/flower/default.nix
index 605d08d1258e..3662116bc2a6 100644
--- a/nixpkgs/pkgs/development/python-modules/flower/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flower/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "flower";
-  version = "0.9.5";
+  version = "0.9.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "171zckhk9ni14f1d82wf62hhciy0gx13fd02sr9m9qlj50fnv4an";
+    sha256 = "cf27a254268bb06fd4972408d0518237fcd847f7da4b4cd8055e228150ace8f3";
   };
 
   postPatch = ''
@@ -35,11 +35,13 @@ buildPythonPackage rec {
 
   checkInputs = [ mock ];
 
+  pythonImportsCheck = [ "flower" ];
+
   meta = with lib; {
     description = "Celery Flower";
     homepage = "https://github.com/mher/flower";
     license = licenses.bsdOriginal;
     maintainers = [ maintainers.arnoldfarkas ];
-    broken = (celery.version == "5.0.2"); # currently broken with celery>=5.0 by https://github.com/mher/flower/pull/1021
+    broken = (celery.version >= "5.0.2"); # currently broken with celery>=5.0 by https://github.com/mher/flower/pull/1021
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/flowlogs_reader/default.nix b/nixpkgs/pkgs/development/python-modules/flowlogs_reader/default.nix
index 9fd36fab2941..f8468209bb45 100644
--- a/nixpkgs/pkgs/development/python-modules/flowlogs_reader/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/flowlogs_reader/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "flowlogs_reader";
-  version = "2.3.0";
+  version = "2.4.0";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "19118ff77925c66a6782152066d86bc8d5c6ed60189b642263fb0c6eb7cb22ef";
+    sha256 = "e47637b40a068a0c814ba2087fb691b43aa12e6174ab06b6cdb7109bb94624e4";
   };
 
   propagatedBuildInputs = [ botocore boto3 docutils ];
diff --git a/nixpkgs/pkgs/development/python-modules/fluent-logger/default.nix b/nixpkgs/pkgs/development/python-modules/fluent-logger/default.nix
index 70c9173f4d50..00cc8bf58a3f 100644
--- a/nixpkgs/pkgs/development/python-modules/fluent-logger/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fluent-logger/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "fluent-logger";
-  version = "0.9.6";
+  version = "0.10.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a7d47eae4d2a11c8cb0df10ae3d034d95b0b8cef9d060e59e7519ad1f82ffa73";
+    sha256 = "678bda90c513ff0393964b64544ce41ef25669d2089ce6c3b63d9a18554b9bfa";
   };
 
   prePatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/fontparts/default.nix b/nixpkgs/pkgs/development/python-modules/fontparts/default.nix
index c694c15f5573..3280f5f4bb1e 100644
--- a/nixpkgs/pkgs/development/python-modules/fontparts/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fontparts/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "fontParts";
-  version = "0.9.7";
+  version = "0.9.10";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "183y1y11bqd4ky4anyv40qbvsm6i90gnydqzrjg7syspjsqvfqgy";
+    sha256 = "0hwjnqbkcfkhigx581w4532vddsx5wiy73gx46kjisp0hlir9628";
     extension = "zip";
   };
 
@@ -28,7 +28,9 @@ buildPythonPackage rec {
   ];
 
   checkPhase = ''
+    runHook preCheck
     ${python.interpreter} Lib/fontParts/fontshell/test.py
+    runHook postCheck
   '';
   checkInputs = [ pytest ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/fonttools/default.nix b/nixpkgs/pkgs/development/python-modules/fonttools/default.nix
index 75f4908b63bc..407b72c953f1 100644
--- a/nixpkgs/pkgs/development/python-modules/fonttools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fonttools/default.nix
@@ -20,14 +20,14 @@
 
 buildPythonPackage rec {
   pname = "fonttools";
-  version = "4.19.1";
+  version = "4.21.1";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner  = pname;
     repo   = pname;
     rev    = version;
-    sha256 = "16jz3g4jzfdc43hs33b59vzd9m233qgflvy3ycdynifqk16lqsp2";
+    sha256 = "1x9qrg6ppqhm5214ymwvn0r34qdz8pqvyxd0sj7rkp06wa757z2i";
   };
 
   # all dependencies are optional, but
@@ -67,9 +67,10 @@ buildPythonPackage rec {
       -k 'not ttcompile_timestamp_calcs and not recalc_timestamp'
   '';
 
-  meta = {
+  meta = with lib; {
     homepage = "https://github.com/fonttools/fonttools";
     description = "A library to manipulate font files from Python";
-    license = lib.licenses.mit;
+    license = licenses.mit;
+    maintainers = [ maintainers.sternenseemann ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/forbiddenfruit/default.nix b/nixpkgs/pkgs/development/python-modules/forbiddenfruit/default.nix
index 1bb3b17e9df3..13c46ba1e8aa 100644
--- a/nixpkgs/pkgs/development/python-modules/forbiddenfruit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/forbiddenfruit/default.nix
@@ -1,20 +1,27 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , nose
 }:
 
 buildPythonPackage rec {
-  version = "0.1.3";
+  version = "0.1.4";
   pname = "forbiddenfruit";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1188a07cc24a9bd2c529dad06490b80a6fc88cde968af4d7861da81686b2cc8c";
+  src = fetchFromGitHub {
+    owner = "clarete";
+    repo = "forbiddenfruit";
+    rev = version;
+    sha256 = "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8";
   };
 
   checkInputs = [ nose ];
 
+  preBuild = ''
+    export FFRUIT_EXTENSION="true";
+  '';
+
+  # https://github.com/clarete/forbiddenfruit/pull/47 required to switch to pytest
   checkPhase = ''
     find ./build -name '*.so' -exec mv {} tests/unit \;
     nosetests
@@ -22,7 +29,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Patch python built-in objects";
-    homepage = "https://pypi.python.org/pypi/forbiddenfruit";
+    homepage = "https://github.com/clarete/forbiddenfruit";
     license = licenses.mit;
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/fountains/default.nix b/nixpkgs/pkgs/development/python-modules/fountains/default.nix
new file mode 100644
index 000000000000..b706930b3ef3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/fountains/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, bitlist
+}:
+
+buildPythonPackage rec {
+  pname = "fountains";
+  version = "0.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0jk5y099g6ggaq5lwp0jlg4asyhcdxnl3him3ibmzc1k9nnknp30";
+  };
+
+  propagatedBuildInputs = [
+    bitlist
+  ];
+
+  # Project has no test
+  doCheck = false;
+  pythonImportsCheck = [ "fountains" ];
+
+  meta = with lib; {
+    description = "Python library for generating and embedding data for unit testing";
+    homepage = "https://github.com/reity/fountains";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/freebox-api/default.nix b/nixpkgs/pkgs/development/python-modules/freebox-api/default.nix
new file mode 100644
index 000000000000..54a6ce8662e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/freebox-api/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, importlib-metadata
+, poetry-core
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "freebox-api";
+  version = "0.0.10";
+  format = "pyproject";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "hacf-fr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yUcHdSHSgWxZl0z7Ue0MestvGhiXkDsxArNoDk0ZkR4=";
+  };
+
+  patches = [
+    # Switch to poetry-core, https://github.com/hacf-fr/freebox-api/pull/187
+    (fetchpatch {
+      name = "switch-to-poetry-core.patch";
+      url = "https://github.com/hacf-fr/freebox-api/commit/07356ac65483bc24fb1ed32612e77f2c2eed0134.patch";
+      sha256 = "1zwricrwsqy01pmhrjy41gh4kxb3gki8z8yxlpywd66y7gid547r";
+    })
+  ];
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+  ] ++ lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "freebox_api" ];
+
+  meta = with lib; {
+    description = "Python module to interact with the Freebox OS API";
+    homepage = "https://github.com/hacf-fr/freebox-api";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/freezegun/0.3.nix b/nixpkgs/pkgs/development/python-modules/freezegun/0.3.nix
index 09ce8bbd11b1..a83a432d89dc 100644
--- a/nixpkgs/pkgs/development/python-modules/freezegun/0.3.nix
+++ b/nixpkgs/pkgs/development/python-modules/freezegun/0.3.nix
@@ -11,17 +11,15 @@
 
 buildPythonPackage rec {
   pname = "freezegun";
-  version = "0.3.5";
+  version = "0.3.15";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "02ly89wwn0plcw8clkkzvxaw6zlpm8qyqpm9x2mfw4a0vppb4ngf";
+    sha256 = "e2062f2c7f95cc276a834c22f1a17179467176b624cc6f936e8bc3be5535ad1b";
   };
 
   propagatedBuildInputs = [ dateutil six ];
   checkInputs = [ mock nose pytest ];
-  # contains python3 specific code
-  doCheck = !isPy27;
 
   meta = with lib; {
     description = "FreezeGun: Let your Python tests travel through time";
diff --git a/nixpkgs/pkgs/development/python-modules/freezegun/default.nix b/nixpkgs/pkgs/development/python-modules/freezegun/default.nix
index 4c5a87e8266b..00d03435de9d 100644
--- a/nixpkgs/pkgs/development/python-modules/freezegun/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/freezegun/default.nix
@@ -2,28 +2,22 @@
 , buildPythonPackage
 , pythonOlder
 , fetchPypi
-, isPy27
 , dateutil
-, six
-, mock
-, nose
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "freezegun";
-  version = "1.0.0";
+  version = "1.1.0";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1cf08e441f913ff5e59b19cc065a8faa9dd1ddc442eaf0375294f344581a0643";
+    sha256 = "177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3";
   };
 
-  propagatedBuildInputs = [ dateutil six ];
-  checkInputs = [ mock nose pytest ];
-  # contains python3 specific code
-  doCheck = !isPy27;
+  propagatedBuildInputs = [ dateutil ];
+  checkInputs = [ pytestCheckHook ];
 
   meta = with lib; {
     description = "FreezeGun: Let your Python tests travel through time";
diff --git a/nixpkgs/pkgs/development/python-modules/fritzconnection/default.nix b/nixpkgs/pkgs/development/python-modules/fritzconnection/default.nix
index b8312d1c8ec5..8e54cb6897cc 100644
--- a/nixpkgs/pkgs/development/python-modules/fritzconnection/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fritzconnection/default.nix
@@ -2,14 +2,14 @@
 
 buildPythonPackage rec {
   pname = "fritzconnection";
-  version = "1.4.0";
+  version = "1.4.2";
 
   # no tests on PyPI
   src = fetchFromGitHub {
     owner = "kbr";
     repo = pname;
     rev = version;
-    sha256 = "1p8dqcc75xfhyvc9izjzz8c7qfrdkjkrkj36j7ms5fimn5bwk70q";
+    sha256 = "02w1hwbfwbh5xlq433myzv6ms7jqxg8kn3d6znq4ic22zprzf5r2";
   };
 
   disabled = pythonOlder "3.6";
@@ -18,9 +18,12 @@ buildPythonPackage rec {
 
   checkInputs = [ pytestCheckHook ];
 
+  pythonImportsCheck = [ "fritzconnection" ];
+
   meta = with lib; {
-    description = "Python-Tool to communicate with the AVM FritzBox using the TR-064 protocol";
+    description = "Python-Tool to communicate with the AVM Fritz!Box";
     homepage = "https://github.com/kbr/fritzconnection";
+    changelog = "https://fritzconnection.readthedocs.io/en/${version}/sources/changes.html";
     license = licenses.mit;
     maintainers = with maintainers; [ dotlambda valodim ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/fs/default.nix b/nixpkgs/pkgs/development/python-modules/fs/default.nix
index 1f784a06e2ea..aa6831441d89 100644
--- a/nixpkgs/pkgs/development/python-modules/fs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/fs/default.nix
@@ -20,11 +20,11 @@
 
 buildPythonPackage rec {
   pname = "fs";
-  version = "2.4.11";
+  version = "2.4.12";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cc99d476b500f993df8ef697b96dc70928ca2946a455c396a566efe021126767";
+    sha256 = "c10ba188b14d6213a1ca950efd004931abbfa64b294c80bbf1045753831bf42f";
   };
 
   buildInputs = [ glibcLocales ];
diff --git a/nixpkgs/pkgs/development/python-modules/ftfy/default.nix b/nixpkgs/pkgs/development/python-modules/ftfy/default.nix
index dbc363172288..403ca5247923 100644
--- a/nixpkgs/pkgs/development/python-modules/ftfy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ftfy/default.nix
@@ -2,36 +2,31 @@
 , buildPythonPackage
 , isPy3k
 , fetchPypi
-, html5lib
 , wcwidth
-, setuptools
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "ftfy";
-  version = "5.8";
+  version = "5.9";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "081p5z20dirrf1i3nshylc31qd5mbxibjc7gzj8x4isbiizpdisi";
+    sha256 = "8c4fb2863c0b82eae2ab3cf353d9ade268dfbde863d322f78d6a9fd5cefb31e9";
   };
 
   propagatedBuildInputs = [
-    html5lib
     wcwidth
-    setuptools
   ];
 
   checkInputs = [
-    pytest
+    pytestCheckHook
   ];
 
-  # We suffix PATH like this because the tests want the ftfy executable
-  checkPhase = ''
-    PATH=$out/bin:$PATH pytest
+  preCheck = ''
+    export PATH=$out/bin:$PATH
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/ftputil/default.nix b/nixpkgs/pkgs/development/python-modules/ftputil/default.nix
index 883ff69c6d68..6d84aa9ae607 100644
--- a/nixpkgs/pkgs/development/python-modules/ftputil/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ftputil/default.nix
@@ -1,13 +1,13 @@
 { stdenv, lib, buildPythonPackage, fetchPypi, pythonOlder, pytest, freezegun }:
 
 buildPythonPackage rec {
-  version = "4.0.0";
+  version = "5.0.1";
   pname = "ftputil";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d494c47f24fd3f8fbe92d40d90e0902c0e04288f200688af2b16d6b46fe441e1";
+    sha256 = "394997ccb3cd4825c6e22b5e349c62cf5016c35db4d60940f3513db66d205561";
   };
 
   checkInputs = [ pytest freezegun ];
diff --git a/nixpkgs/pkgs/development/python-modules/furl/default.nix b/nixpkgs/pkgs/development/python-modules/furl/default.nix
index 72089da11e10..da52bfb8fbcd 100644
--- a/nixpkgs/pkgs/development/python-modules/furl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/furl/default.nix
@@ -1,4 +1,12 @@
-{ lib, buildPythonPackage, fetchPypi, flake8, six, orderedmultidict, pytest }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, fetchpatch
+, flake8
+, orderedmultidict
+, pytestCheckHook
+, six
+}:
 
 buildPythonPackage rec {
   pname = "furl";
@@ -9,17 +17,33 @@ buildPythonPackage rec {
     sha256 = "08dnw3bs1mk0f1ccn466a5a7fi1ivwrp0jspav9arqpf3wd27q60";
   };
 
-  checkInputs = [ flake8 pytest ];
+  patches = [
+    (fetchpatch {
+      name = "tests_overcome_bpo42967.patch";
+      url = "https://github.com/gruns/furl/files/6030371/tests_overcome_bpo42967.patch.txt";
+      sha256 = "1l0lxmcp9x73kxy0ky2bh7zxa4n1cf1qxyyax97n90d1s3dc7k2q";
+    })
+  ];
 
-  propagatedBuildInputs = [ six orderedmultidict ];
+  propagatedBuildInputs = [
+    orderedmultidict
+    six
+  ];
 
-  # see https://github.com/gruns/furl/issues/121
-  checkPhase = ''
-    pytest -k 'not join'
-  '';
+  checkInputs = [
+    flake8
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+     # see https://github.com/gruns/furl/issues/121
+    "join"
+  ];
+
+  pythonImportsCheck = [ "furl" ];
 
   meta = with lib; {
-    description = "furl is a small Python library that makes parsing and manipulating URLs easy";
+    description = "Python library that makes parsing and manipulating URLs easy";
     homepage = "https://github.com/gruns/furl";
     license = licenses.unlicense;
     maintainers = with maintainers; [ vanzef ];
diff --git a/nixpkgs/pkgs/development/python-modules/fuzzyfinder/default.nix b/nixpkgs/pkgs/development/python-modules/fuzzyfinder/default.nix
new file mode 100644
index 000000000000..a422e5606b0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/fuzzyfinder/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "fuzzyfinder";
+  version = "2.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c56d86f110866becad6690c7518f7036c20831c0f82fc87eba8fdb943132f04b";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "fuzzyfinder" ];
+
+  meta = with lib; {
+    description = "Fuzzy Finder implemented in Python";
+    homepage = "https://github.com/amjith/fuzzyfinder";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/gdown/default.nix b/nixpkgs/pkgs/development/python-modules/gdown/default.nix
index 9af107272854..8195bb0d4039 100644
--- a/nixpkgs/pkgs/development/python-modules/gdown/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gdown/default.nix
@@ -5,6 +5,7 @@
 , requests
 , tqdm
 , setuptools
+, six
 }:
 
 buildPythonApplication rec {
@@ -16,7 +17,7 @@ buildPythonApplication rec {
     sha256 = "4b3a1301e57bfd8dce939bf25ef8fbb4b23967fd0f878eede328bdcc41386bac";
   };
 
-  propagatedBuildInputs = [ filelock requests tqdm setuptools ];
+  propagatedBuildInputs = [ filelock requests tqdm setuptools six ];
 
   checkPhase = ''
     $out/bin/gdown --help > /dev/null
diff --git a/nixpkgs/pkgs/development/python-modules/gdrivefs/default.nix b/nixpkgs/pkgs/development/python-modules/gdrivefs/default.nix
index 6060dc3a5bb8..836fdee4bebd 100644
--- a/nixpkgs/pkgs/development/python-modules/gdrivefs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gdrivefs/default.nix
@@ -8,7 +8,7 @@
 , six
 , dateutil
 , fusepy
-, google_api_python_client
+, google-api-python-client
 }:
 
 buildPythonPackage rec {
@@ -22,7 +22,7 @@ buildPythonPackage rec {
   };
 
   buildInputs = [ gipc greenlet httplib2 six ];
-  propagatedBuildInputs = [ dateutil fusepy google_api_python_client ];
+  propagatedBuildInputs = [ dateutil fusepy google-api-python-client ];
 
   patchPhase = ''
     substituteInPlace gdrivefs/resources/requirements.txt \
diff --git a/nixpkgs/pkgs/development/python-modules/ge25519/default.nix b/nixpkgs/pkgs/development/python-modules/ge25519/default.nix
new file mode 100644
index 000000000000..0e8d3722fbec
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ge25519/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, bitlist
+, buildPythonPackage
+, fe25519
+, fetchPypi
+, fountains
+, nose
+, parts
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "ge25519";
+  version = "0.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1wgv0vqg8iv9y5d7if14gmcgslwd5zzgk322w9jaxdfbndldddik";
+  };
+
+  propagatedBuildInputs = [
+    fe25519
+    parts
+    bitlist
+    fountains
+  ];
+
+  checkInputs = [
+    nose
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "ge25519" ];
+
+  meta = with lib; {
+    description = "Python implementation of Ed25519 group elements and operations";
+    homepage = "https://github.com/nthparty/ge25519";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/geoip2/default.nix b/nixpkgs/pkgs/development/python-modules/geoip2/default.nix
index 69b5d2f97fbe..c0e6580e8a94 100644
--- a/nixpkgs/pkgs/development/python-modules/geoip2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/geoip2/default.nix
@@ -1,16 +1,16 @@
-{ buildPythonPackage, lib, fetchPypi, isPy27
+{ buildPythonPackage, lib, fetchPypi, pythonOlder
 , aiohttp
 , maxminddb
-, mock
 , mocket
 , requests
 , requests-mock
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   version = "4.1.0";
   pname = "geoip2";
-  disabled = isPy27;
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
@@ -23,11 +23,17 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ aiohttp requests maxminddb ];
 
-  checkInputs = [ mocket requests-mock ];
+  checkInputs = [
+    mocket
+    requests-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "geoip2" ];
 
   meta = with lib; {
-    description = "MaxMind GeoIP2 API";
-    homepage = "https://www.maxmind.com/en/home";
+    description = "Python client for GeoIP2 webservice client and database reader";
+    homepage = "https://github.com/maxmind/GeoIP2-python";
     license = licenses.asl20;
     maintainers = with maintainers; [ ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/getmac/default.nix b/nixpkgs/pkgs/development/python-modules/getmac/default.nix
index 51ce0ef05031..483539bc221f 100644
--- a/nixpkgs/pkgs/development/python-modules/getmac/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/getmac/default.nix
@@ -1,5 +1,10 @@
-{ lib, buildPythonPackage, fetchFromGitHub
-, pytest, pytest-benchmark, pytest-mock }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytest-benchmark
+, pytest-mock
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "getmac";
@@ -7,19 +12,32 @@ buildPythonPackage rec {
 
   src = fetchFromGitHub {
     owner = "GhostofGoes";
-    repo = "getmac";
+    repo = pname;
     rev = version;
     sha256 = "08d4iv5bjl1s4i9qhzf3pzjgj1rgbwi0x26qypf3ycgdj0a6gvh2";
   };
 
-  checkInputs = [ pytest pytest-benchmark pytest-mock ];
-  checkPhase = ''
-    pytest --ignore tests/test_cli.py
-  '';
+  checkInputs = [
+    pytestCheckHook
+    pytest-benchmark
+    pytest-mock
+  ];
+
+  disabledTests = [
+    # Disable CLI tests
+    "test_cli_main_basic"
+    "test_cli_main_verbose"
+    "test_cli_main_debug"
+    "test_cli_multiple_debug_levels"
+    # Disable test that require network access
+    "test_uuid_lanscan_iface"
+  ];
+
+  pythonImportsCheck = [ "getmac" ];
 
   meta = with lib; {
+    description = "Python package to get the MAC address of network interfaces and hosts on the local network";
     homepage = "https://github.com/GhostofGoes/getmac";
-    description = "Pure-Python package to get the MAC address of network interfaces and hosts on the local network.";
     license = licenses.mit;
     maintainers = with maintainers; [ colemickens ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/geventhttpclient/default.nix b/nixpkgs/pkgs/development/python-modules/geventhttpclient/default.nix
index c82da3c8a98e..5563ff94baf5 100644
--- a/nixpkgs/pkgs/development/python-modules/geventhttpclient/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/geventhttpclient/default.nix
@@ -6,19 +6,21 @@
 , certifi
 , six
 , backports_ssl_match_hostname
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "geventhttpclient";
-  version = "1.4.4";
+  version = "1.4.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f59e5153f22e4a0be27b48aece8e45e19c1da294f8c49442b1c9e4d152c5c4c3";
+    sha256 = "3f0ab18d84ef26ba0c9df73ae2a41ba30a46072b447f2e36c740400de4a63d44";
   };
 
   buildInputs = [ pytest ];
-  propagatedBuildInputs = [ gevent certifi six backports_ssl_match_hostname ];
+  propagatedBuildInputs = [ gevent certifi six ]
+    ++ lib.optionals (pythonOlder "3.7") [ backports_ssl_match_hostname ];
 
   # Several tests fail that require network
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/gipc/default.nix b/nixpkgs/pkgs/development/python-modules/gipc/default.nix
index 8df2808328fb..57db65268d5b 100644
--- a/nixpkgs/pkgs/development/python-modules/gipc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gipc/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "gipc";
-  version = "1.1.0";
+  version = "1.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "06116628e9cb7b2c34c8f248d0e4859fa5943e1e07381ad2b234ae9c7ed6f4cc";
+    sha256 = "f9a9d557e65e17bab8d7ff727ee3f1935e25bd52b01e63c23c7b3b52415728a5";
   };
 
   propagatedBuildInputs = [ gevent ];
diff --git a/nixpkgs/pkgs/development/python-modules/github3_py/default.nix b/nixpkgs/pkgs/development/python-modules/github3_py/default.nix
index 6b1ea305d4a6..8a1eea40c682 100644
--- a/nixpkgs/pkgs/development/python-modules/github3_py/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/github3_py/default.nix
@@ -18,11 +18,11 @@
 
 buildPythonPackage rec {
   pname = "github3.py";
-  version = "1.3.0";
+  version = "2.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "15a115c18f7bfcf934dfef7ab103844eb9f620c586bad65967708926da47cbda";
+    sha256 = "8dd4ac612fd60cb277eaf6e2ce02f68dda54aba06870ca6fa2b28369bf39aa14";
   };
 
   checkInputs = [ betamax pytest betamax-matchers ]
diff --git a/nixpkgs/pkgs/development/python-modules/glances-api/default.nix b/nixpkgs/pkgs/development/python-modules/glances-api/default.nix
index 2f5a1416e41c..1ec6ce334200 100644
--- a/nixpkgs/pkgs/development/python-modules/glances-api/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/glances-api/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonPackage rec {
   pname = "glances-api";
-  version = "0.2.0";
+  version = "0.2.1";
 
   src = fetchFromGitHub {
     owner = "home-assistant-ecosystem";
     repo = "python-glances-api";
     rev = version;
-    sha256 = "0rgv77n0lvr7d3vk4qc8svipxafmm6s4lfxrl976hsygrhaqidch";
+    sha256 = "sha256-mbkZZg2fmus4kOXFxHE/UV/nxemFAsoEZu8IUa7SPsg=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/glasgow/default.nix b/nixpkgs/pkgs/development/python-modules/glasgow/default.nix
index 8a63f78728e2..398ee8eedf13 100644
--- a/nixpkgs/pkgs/development/python-modules/glasgow/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/glasgow/default.nix
@@ -2,7 +2,8 @@
 , buildPythonPackage
 , fetchFromGitHub
 , setuptools
-, setuptools_scm
+, setuptools-scm
+, pythonOlder
 , sdcc
 , nmigen
 , fx2
@@ -18,18 +19,19 @@
 
 buildPythonPackage rec {
   pname = "glasgow";
-  version = "unstable-2020-06-29";
+  version = "unstable-2021-03-02";
+  disabled = pythonOlder "3.7";
   # python software/setup.py --version
-  realVersion = "0.1.dev1352+g${lib.substring 0 7 src.rev}";
+  realVersion = "0.1.dev1660+g${lib.substring 0 7 src.rev}";
 
   src = fetchFromGitHub {
     owner = "GlasgowEmbedded";
     repo = "glasgow";
-    rev = "f885790d7927b893e631c33744622d6ebc18b5e3";
-    sha256 = "sha256-fSorSEa5K09aPEOk4XPWOFRxYl1KGVy29jOBqIvs2hk=";
+    rev = "41c48bbcee284d024e4249a81419fbbae674cf40";
+    sha256 = "1fg8ps228930d70bczwmcwnrd1gvm02a58mxbpn8pyakwbwwa6hq";
   };
 
-  nativeBuildInputs = [ setuptools_scm sdcc ];
+  nativeBuildInputs = [ setuptools-scm sdcc ];
 
   propagatedBuildInputs = [
     setuptools
diff --git a/nixpkgs/pkgs/development/python-modules/glymur/default.nix b/nixpkgs/pkgs/development/python-modules/glymur/default.nix
index 50ed257f57e0..9a0b1b09db68 100644
--- a/nixpkgs/pkgs/development/python-modules/glymur/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/glymur/default.nix
@@ -2,7 +2,6 @@
 , buildPythonPackage
 , fetchFromGitHub
 , numpy
-, setuptools
 , python
 , scikitimage
 , openjpeg
diff --git a/nixpkgs/pkgs/development/python-modules/gmusicapi/default.nix b/nixpkgs/pkgs/development/python-modules/gmusicapi/default.nix
deleted file mode 100644
index 1797f1d4264d..000000000000
--- a/nixpkgs/pkgs/development/python-modules/gmusicapi/default.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchPypi
-, validictory
-, decorator
-, mutagen
-, protobuf
-, setuptools
-, requests
-, dateutil
-, proboscis
-, mock
-, appdirs
-, oauth2client
-, pyopenssl
-, gpsoauth
-, MechanicalSoup
-, future
-}:
-
-buildPythonPackage rec {
-  pname = "gmusicapi";
-  version = "13.0.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "14dqs64nhy84dykyyrdjmsirc7m169zsvwa8abh4v0xcm658lm5k";
-  };
-
-  propagatedBuildInputs = [ validictory decorator mutagen protobuf setuptools requests dateutil proboscis mock appdirs oauth2client pyopenssl gpsoauth MechanicalSoup future ];
-
-  meta = with lib; {
-    description = "An unofficial API for Google Play Music";
-    homepage = "https://pypi.python.org/pypi/gmusicapi/";
-    license = licenses.bsd3;
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/goobook/default.nix b/nixpkgs/pkgs/development/python-modules/goobook/default.nix
index 83175b6c86a5..42e2b84783f5 100644
--- a/nixpkgs/pkgs/development/python-modules/goobook/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/goobook/default.nix
@@ -1,6 +1,6 @@
 { lib, buildPythonPackage, fetchPypi, isPy3k
 , docutils, installShellFiles
-, google_api_python_client, simplejson, oauth2client, setuptools, xdg
+, google-api-python-client, simplejson, oauth2client, setuptools, xdg
 }:
 
 buildPythonPackage rec {
@@ -15,7 +15,7 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ docutils installShellFiles ];
   propagatedBuildInputs = [
-    google_api_python_client simplejson oauth2client setuptools xdg
+    google-api-python-client simplejson oauth2client setuptools xdg
   ];
 
   postInstall = ''
diff --git a/nixpkgs/pkgs/development/python-modules/google-api-core/default.nix b/nixpkgs/pkgs/development/python-modules/google-api-core/default.nix
index 74d74d51c49d..c24419b01e28 100644
--- a/nixpkgs/pkgs/development/python-modules/google-api-core/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-api-core/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , google-auth
-, googleapis_common_protos
+, googleapis-common-protos
 , grpcio
 , protobuf
 , pytz
@@ -15,15 +15,15 @@
 
 buildPythonPackage rec {
   pname = "google-api-core";
-  version = "1.25.1";
+  version = "1.26.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0e152ec37b8481d1be1258d95844a5a7031cd3d83d7c7046d9e9b2d807042440";
+    sha256 = "sha256-uRQ0XH6iOGEWJpOidwO6uASlVQT35umryv8XTYDfMqw=";
   };
 
   propagatedBuildInputs = [
-    googleapis_common_protos
+    googleapis-common-protos
     google-auth
     grpcio
     protobuf
diff --git a/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix b/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix
index 854ec37a1e4a..39ed8d68345f 100644
--- a/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-api-python-client/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "google-api-python-client";
-  version = "1.12.8";
+  version = "2.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f3b9684442eec2cfe9f9bb48e796ef919456b82142c7528c5fd527e5224f08bb";
+    sha256 = "04c0c8m4c7lzqv0m3jm0zks9wjcv1myas80rxswvi36wn376qs28";
   };
 
   # No tests included in archive
@@ -34,6 +34,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/google/google-api-python-client";
     changelog = "https://github.com/googleapis/google-api-python-client/releases/tag/v${version}";
     license = licenses.asl20;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/google-auth-httplib2/default.nix b/nixpkgs/pkgs/development/python-modules/google-auth-httplib2/default.nix
index bb7836ef85d1..05ea601330db 100644
--- a/nixpkgs/pkgs/development/python-modules/google-auth-httplib2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-auth-httplib2/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "google-auth-httplib2";
-  version = "0.0.4";
+  version = "0.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0fdwnx2yd65f5vhnmn39f4xnxac5j6x0pv2p42qifrdi1z32q2cd";
+    sha256 = "sha256-oHw5/WMr7KzT8HcY39YCG/OWl48DrTzkMh0GABXMMKw=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/google-auth-oauthlib/default.nix b/nixpkgs/pkgs/development/python-modules/google-auth-oauthlib/default.nix
index 7fa7200fbbe5..37752601e265 100644
--- a/nixpkgs/pkgs/development/python-modules/google-auth-oauthlib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-auth-oauthlib/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "google-auth-oauthlib";
-  version = "0.4.2";
+  version = "0.4.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1nai9k86g7g7w1pxk105dllncgax8nc5hpmk758b3jnqkb1mpdk5";
+    sha256 = "sha256-CYMsbnUDL5OBjt8a/+R0YSHWQMYlpb75tclq9nbpju4=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/google-auth/default.nix b/nixpkgs/pkgs/development/python-modules/google-auth/default.nix
index 22b02552cd75..addd67f9faac 100644
--- a/nixpkgs/pkgs/development/python-modules/google-auth/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-auth/default.nix
@@ -12,18 +12,26 @@
 , pytest-localserver
 , responses
 , rsa
+, six
+, pyopenssl
 }:
 
 buildPythonPackage rec {
   pname = "google-auth";
-  version = "1.24.0";
+  version = "1.28.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0bmdqkyv8k8n6s8dss4zpbcq1cdxwicpb42kwybd02ia85mh43hb";
+    sha256 = "sha256-m9Q20ZqwRwAaE0ByDStinrlt1QMljFJJIewq8+6IqA4=";
   };
 
-  propagatedBuildInputs = [ pyasn1-modules cachetools rsa ];
+  propagatedBuildInputs = [
+    cachetools
+    pyasn1-modules
+    rsa
+    six
+    pyopenssl
+  ];
 
   checkInputs = [
     flask
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-asset/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-asset/default.nix
index aec3b51acb5e..bd8bdc0b8c31 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-asset/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-asset/default.nix
@@ -24,6 +24,11 @@ buildPythonPackage rec {
     sha256 = "05q0yaw6b553qmzylr45zin17h8mvi8yyyxhbv3cxa7f0ahviw8w";
   };
 
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"google-cloud-org-policy >= 0.1.2, < 0.2.0dev"' '"google-cloud-org-policy >= 0.1.2, < 0.2.1"'
+  '';
+
   propagatedBuildInputs = [
     grpc_google_iam_v1
     google-api-core
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-automl/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-automl/default.nix
index 83fe052a5422..94516e25a38d 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-automl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-automl/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-automl";
-  version = "2.1.0";
+  version = "2.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "520dfe2ee04d28f3088c9c582fa2a534fc272647d5e2e59acc903c0152e61696";
+    sha256 = "874defad583e90e55a3e83aff27eb5fe108d9197d839cd45f3eacf2395881806";
   };
 
   propagatedBuildInputs = [ google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery-datatransfer/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery-datatransfer/default.nix
index 8f67fed79d7a..3b194dae92c7 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery-datatransfer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery-datatransfer/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-bigquery-datatransfer";
-  version = "3.0.0";
+  version = "3.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0hmsqvs2srmqcwmli48vd5vw829zax3pwj63fsxig6sdhjlf6j7j";
+    sha256 = "sha256-mAZSVxiTiLbMeXR4xLK9+G6ejNyspdFw3tAnZGREpYY=";
   };
 
   propagatedBuildInputs = [ google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery/default.nix
index 2cada2e0b0f6..0c62727ff8ac 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-bigquery/default.nix
@@ -7,7 +7,6 @@
 , google-cloud-storage
 , google-cloud-testutils
 , google-resumable-media
-, grpcio
 , ipython
 , mock
 , pandas
@@ -18,11 +17,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-bigquery";
-  version = "2.7.0";
+  version = "2.13.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "29721972f5e539e486fbdc722ddf849ad86acd092680d16c271430dc16023544";
+    sha256 = "915f93c61c03d1d6024d5b19355bb96af25da9f924d0b5bab5cde851e1bd48f4";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-bigtable/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-bigtable/default.nix
index 93cbc22b7cd8..786250ce9e15 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-bigtable/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-bigtable/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-bigtable";
-  version = "1.6.1";
+  version = "1.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ace4ff7c6e00fb7d86963503615db85336b6484339f5774bd8c589df224772a8";
+    sha256 = "90bd53a19c33c34101b8567c82a6dc0386af4118d70e1ad69b49375358a21aa6";
   };
 
   checkInputs = [ pytest mock ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-container/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-container/default.nix
index 1cf94d220e69..ce21a27209fd 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-container/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-container/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-container";
-  version = "2.3.0";
+  version = "2.4.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "04f9mx1wxy3l9dvzvvr579fnjp1fdqhgplv5y2gl7h2mvn281k8d";
+    sha256 = "c62d15f58459fbe83ba5789f800ac27b4be9a1d7735f6c6b702cd6c3f8c6f0c9";
   };
 
   propagatedBuildInputs = [ google-api-core grpc_google_iam_v1 libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-core/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-core/default.nix
index 44764a4edb1c..1c70d1dc2664 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-core/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-core/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-core";
-  version = "1.5.0";
+  version = "1.6.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "01liq4nrd2g3ingg8v0ly4c86db8agnr9h1fiz219c7fz0as0xqj";
+    sha256 = "sha256-xquxhSdUU3n8gu/E3nXOmjdyzK0vxkWtrOWTugl8uwI=";
   };
 
   propagatedBuildInputs = [ google-api-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-dataproc/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-dataproc/default.nix
index 095e01fbbd76..0115524d5467 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-dataproc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-dataproc/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-dataproc";
-  version = "2.2.0";
+  version = "2.3.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07rv2kgbaqkbd71k5i2zn9kcxasfzkkyai8jnbszhkf92k0lmi41";
+    sha256 = "sha256-TADApBkE4DvEFkVFy56Flh2s6XR9uGxzGTf5aspohsA=";
   };
 
   propagatedBuildInputs = [ google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-dns/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-dns/default.nix
index fa4c8c6c52df..3e80f9def448 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-dns/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-dns/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-dns";
-  version = "0.32.1";
+  version = "0.32.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "01l6pvfic0vxcvd97ckbxyc7ccr9vb9ln4lyhpp3amdmcy0far3j";
+    sha256 = "0ec98a9933b2abd95b174c9cae0477b90aa4c1f5068b69a9f8ced6d20db1cd5a";
   };
 
   propagatedBuildInputs = [ google-api-core google-cloud-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-error-reporting/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-error-reporting/default.nix
index bbd51326e0f2..8a481945efba 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-error-reporting/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-error-reporting/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-error-reporting";
-  version = "1.1.0";
+  version = "1.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2fd6fe25343f7017c22e2733a0358c64b3171edc1669d0c8a1e1f07f86a048c4";
+    sha256 = "sha256-NT/+2mtIaEMyXnmM1fWX4kEV9pb1+aNas2lNobUPR14=";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-firestore/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-firestore/default.nix
index 30ef0af76a1a..f0aac21ee317 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-firestore/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-firestore/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-firestore";
-  version = "2.0.2";
+  version = "2.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1q5s2gpkibnjxal9zrz02jfnazf7rxk0bi0ln5a3di6i47kjnga9";
+    sha256 = "sha256-kG68fG9EqwvE72nzc89MXwEQ/YYEM9tYH6zK2iTCFJo=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-logging/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-logging/default.nix
index ab31a8ee4ed4..55efb8e2c2d4 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-logging/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-logging/default.nix
@@ -15,11 +15,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-logging";
-  version = "2.2.0";
+  version = "2.3.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8932ac382eee6af85cd08400a77586dd3139fbf40b61db757c4c492490899741";
+    sha256 = "sha256-yi3lG7tKi2BkU7vtMIEPsll1UX/JxrNj4G+DJaGQ/+k=";
   };
 
   propagatedBuildInputs = [ google-api-core google-cloud-core proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-monitoring/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-monitoring/default.nix
index f8fc079aa3e4..4c63df9f1746 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-monitoring/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-monitoring/default.nix
@@ -5,6 +5,7 @@
 , google-cloud-testutils
 , libcst
 , proto-plus
+, pandas
 , pytestCheckHook
 , pytest-asyncio
 , mock
@@ -12,16 +13,16 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-monitoring";
-  version = "2.0.0";
+  version = "2.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07r0y995fin6cbnqlhmd38fv3pfhhqyw04l7nr38sldrd82gmsqx";
+    sha256 = "sha256-QeMJBJKjW3Zu0p0mSmo5dVOJNwRmmA5FKXRXjCd+zN4=";
   };
 
   propagatedBuildInputs = [ libcst google-api-core proto-plus ];
 
-  checkInputs = [ google-cloud-testutils mock pytestCheckHook pytest-asyncio ];
+  checkInputs = [ google-cloud-testutils mock pandas pytestCheckHook pytest-asyncio ];
 
   disabledTests = [
     # requires credentials
@@ -35,7 +36,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Stackdriver Monitoring API client library";
-    homepage = "https://github.com/GoogleCloudPlatform/google-cloud-python";
+    homepage = "https://github.com/googleapis/python-monitoring";
     license = licenses.asl20;
     maintainers = with maintainers; [ SuperSandro2000 ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-org-policy/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-org-policy/default.nix
index 10ee559b8f0b..206e740aa462 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-org-policy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-org-policy/default.nix
@@ -1,15 +1,15 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder, google-api-core }:
+{ lib, buildPythonPackage, fetchPypi, pythonOlder, google-api-core, proto-plus }:
 
 buildPythonPackage rec {
   pname = "google-cloud-org-policy";
-  version = "0.1.2";
+  version = "0.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0ncgcnbvmgqph54yh2pjx2hh82gnkhsrw5yirp4wlf7jclh6j9xh";
+    sha256 = "sha256-tGNwSv+rMnwdP6SvKAqFhjW19ZqIRWsqCNtiozajUqo=";
   };
 
-  propagatedBuildInputs = [ google-api-core ];
+  propagatedBuildInputs = [ google-api-core proto-plus ];
 
   # No tests in repo
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-os-config/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-os-config/default.nix
index 94d8d4738f5c..dcb820640a6b 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-os-config/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-os-config/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-os-config";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07zvagy9hwaccwvg1xad5nkalgkria0maa5yxiwqf1yk9f7gbyq1";
+    sha256 = "c993129ecb1db6ab9b49cacfa11f368f30c7d897640c56f52558edf542c08ade";
   };
 
   propagatedBuildInputs = [ google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-pubsub/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-pubsub/default.nix
index 3bc5f185e494..1a11fcfc731b 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-pubsub/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-pubsub/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-pubsub";
-  version = "2.3.0";
+  version = "2.4.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b19f0556c252b805a52c976e3317c53d91e36f56dc8d28192eea190627faf343";
+    sha256 = "sha256-5gyqZ+JthC/Qja8ZCX79r4K+evuZY5jPZ73cA6hrgSA=";
   };
 
   propagatedBuildInputs = [ grpc_google_iam_v1 google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-redis/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-redis/default.nix
index 86fbc360d73c..8787eb6779a1 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-redis/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-redis/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-redis";
-  version = "2.0.0";
+  version = "2.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f67mr473vzv0qgjm4hycfnrjgiqrsv47vqrynwjy9yrca2130y7";
+    sha256 = "957f436986275dcc82483906b424dcabe8d1f8c08ae5c9677bf7547a314b0a59";
   };
 
   propagatedBuildInputs = [ google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-secret-manager/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-secret-manager/default.nix
index a143a418c222..47e23c21422a 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-secret-manager/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-secret-manager/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-secret-manager";
-  version = "2.2.0";
+  version = "2.4.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "97a46d2318f00c1c6ae1a4ab587e338677c5cc1651d7c6304982d74fa364dd9d";
+    sha256 = "sha256-/ROngNZJld6iA8WjbJLLNzu5vFWPFUNdTikc70kNkQ4=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-spanner/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-spanner/default.nix
index c4849dd2f559..726e48ee192b 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-spanner/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-spanner/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-spanner";
-  version = "3.0.0";
+  version = "3.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "060c53bc6f541660a2fe868fd83a695207d4e7b050e04fe103d1e77634b813c7";
+    sha256 = "sha256-XnOCmxQ6YCO1C7RYHzcZY4ihrt2KommWTkTD9y+B5tg=";
   };
 
   propagatedBuildInputs = [ google-cloud-core grpc_google_iam_v1 libcst proto-plus sqlparse ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-speech/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-speech/default.nix
index c57329eebcc3..2261345f4205 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-speech/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-speech/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-speech";
-  version = "2.0.1";
+  version = "2.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0ch85h5xrb15fcml5v0f30s0niw02k4v8gi7i8a40161yj882hm7";
+    sha256 = "sha256-AviYDI68Z11M/rqHgQTQugYNemPTA5nW4aVQTiwMYxI=";
   };
 
   propagatedBuildInputs = [ libcst google-api-core proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-storage/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-storage/default.nix
index 84706a8b5a91..40d70176c5d6 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-storage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-storage/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-storage";
-  version = "1.35.1";
+  version = "1.37.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dc076b6af6da991252416639cb93831f8e50c8328d5ac3fb8e03e40cd8de2290";
+    sha256 = "sha256-IAPF7Uc/mzfQRfMMTIvn0w19Dripe80sWLOovFScTMw=";
   };
 
   propagatedBuildInputs = [
@@ -41,6 +41,8 @@ buildPythonPackage rec {
     "get"
     "post"
     "test_build_api_url"
+    "test_ctor_mtls"
+    "test_open"
   ];
 
   pytestFlagsArray = [
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-tasks/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-tasks/default.nix
index 5911bfe61562..c01c294ec334 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-tasks/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-tasks/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-tasks";
-  version = "2.1.0";
+  version = "2.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1jsf7y88lvln9r08pmx673ibmgw397qmir5drrcfvlmgqvszp7qx";
+    sha256 = "6be2f2bca14b4eb1c1bdb0f4ba1dadf791e79a2a3e1fae762e5631a3d9fe094e";
   };
 
   propagatedBuildInputs = [ google-api-core grpc_google_iam_v1 libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-testutils/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-testutils/default.nix
index 2380e9183b73..62139b81c26f 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-testutils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-testutils/default.nix
@@ -1,15 +1,15 @@
-{ lib, buildPythonPackage, fetchPypi, google-auth, six }:
+{ lib, buildPythonPackage, fetchPypi, click, google-auth, six }:
 
 buildPythonPackage rec {
   pname = "google-cloud-testutils";
-  version = "0.1.0";
+  version = "0.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1bn1pz00lxym3vkl6l45b3nydpmfdvmylwggh2lspldrxwx39a0k";
+    sha256 = "sha256-ojvnzCO8yxrm3rt0pH3FtRhYtjIvzwNMqS/npKy4lvM=";
   };
 
-  propagatedBuildInputs = [ google-auth six ];
+  propagatedBuildInputs = [ click google-auth six ];
 
   # does not contain tests
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-texttospeech/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-texttospeech/default.nix
index 3c84c21344a9..ab4415e3412b 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-texttospeech/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-texttospeech/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-texttospeech";
-  version = "2.2.0";
+  version = "2.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "17igfwh34369gkvsbrm46j1ii61i6268wg2g2dl9c65nf9z3kgfb";
+    sha256 = "sha256-zzssVnXA1xe3270yEOREJ9GdmyRPjV1F4EBelf9AQ/c=";
   };
 
   propagatedBuildInputs = [ libcst google-api-core proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-translate/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-translate/default.nix
index 2b0ac55fa2eb..a884919c7e18 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-translate/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-translate/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-translate";
-  version = "3.0.2";
+  version = "3.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1s2gvlzfqd2gsrzaz7yl9q8s1k03dlsjahgg95s017vlcn21d0v1";
+    sha256 = "sha256-zVRD2lWRaKtSlZn84Rqpj+a1OT7Wcak524TKsBctueE=";
   };
 
   propagatedBuildInputs = [ google-api-core google-cloud-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-videointelligence/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-videointelligence/default.nix
index 26e3320a5ccb..f56b00af0a54 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-videointelligence/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-videointelligence/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-videointelligence";
-  version = "2.0.0";
+  version = "2.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1yhmizig41ymr2dz0i6ccrwszp0ivyykmq11vqxp82l9ncjima82";
+    sha256 = "sha256-gn/KWf3A4SkTqt9rqwYcsaxvfKXPvb7DXJ+zryGjWIA=";
   };
 
   propagatedBuildInputs = [ google-api-core proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-vision/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-vision/default.nix
index b69229123809..5857de341d29 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-vision/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-vision/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-vision";
-  version = "2.1.0";
+  version = "2.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2bae8b4aca9aa38ad7459102cc5743c506adf9060ad2b3b15cff1e8021085017";
+    sha256 = "sha256-6XYHADzyk0/WSGk9wni9bOtVURJ+U2Eve8LAh0Eg7KI=";
   };
 
   propagatedBuildInputs = [ libcst google-api-core proto-plus];
diff --git a/nixpkgs/pkgs/development/python-modules/google-cloud-websecurityscanner/default.nix b/nixpkgs/pkgs/development/python-modules/google-cloud-websecurityscanner/default.nix
index ac91ab85bd64..971f5cce90e7 100644
--- a/nixpkgs/pkgs/development/python-modules/google-cloud-websecurityscanner/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-cloud-websecurityscanner/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-websecurityscanner";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "14sky9bkl00n65ksig3f6psm31pkmkvlcprlk6s9if470j40zrhx";
+    sha256 = "sha256-lrMnp9jVndz0C8VdreVudYdwh7zSdRniPHYm9BNdjak=";
   };
 
   propagatedBuildInputs = [ google-api-core libcst proto-plus ];
diff --git a/nixpkgs/pkgs/development/python-modules/google-i18n-address/default.nix b/nixpkgs/pkgs/development/python-modules/google-i18n-address/default.nix
index 590962590e5f..53ce654e41bb 100644
--- a/nixpkgs/pkgs/development/python-modules/google-i18n-address/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/google-i18n-address/default.nix
@@ -1,8 +1,9 @@
-{ buildPythonPackage, fetchPypi, lib, requests, pytestCheckHook, mock }:
+{ buildPythonPackage, fetchPypi, pythonAtLeast, lib, requests, pytestCheckHook, mock }:
 
 buildPythonPackage rec {
   pname = "google-i18n-address";
   version = "2.4.0";
+  disabled = pythonAtLeast "3.9";
 
   src = fetchPypi {
     inherit pname version;
@@ -15,7 +16,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Google's i18n address data packaged for Python";
-    homepage = "https://pypi.org/project/google-i18n-address/";
+    homepage = "https://github.com/mirumee/google-i18n-address";
     maintainers = with maintainers; [ SuperSandro2000 ];
     license = licenses.bsd3;
   };
diff --git a/nixpkgs/pkgs/development/python-modules/google-music-proto/default.nix b/nixpkgs/pkgs/development/python-modules/google-music-proto/default.nix
deleted file mode 100644
index a883f707bdf1..000000000000
--- a/nixpkgs/pkgs/development/python-modules/google-music-proto/default.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchPypi
-, pythonOlder
-, attrs
-, audio-metadata
-, importlib-metadata
-, marshmallow
-, pendulum
-, protobuf
-}:
-
-buildPythonPackage rec {
-  pname = "google-music-proto";
-  version = "2.10.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "91b78c0de4f59b1e5503fd6d49cb3fec029d9199cca0794c87667e643342e987";
-  };
-
-  postPatch = ''
-    sed -i -e "/audio-metadata/c\'audio-metadata'," -e "/marshmallow/c\'marshmallow'," setup.py
-    substituteInPlace setup.py \
-      --replace "'attrs>=18.2,<19.4'" "'attrs'"
-  '';
-
-  propagatedBuildInputs = [
-    attrs
-    audio-metadata
-    marshmallow
-    pendulum
-    protobuf
-  ] ++ lib.optionals (pythonOlder "3.8") [
-    importlib-metadata
-  ];
-
-  # No tests
-  doCheck = false;
-  pythonImportsCheck = [ "google_music_proto" ];
-
-  meta = with lib; {
-    homepage = "https://github.com/thebigmunch/google-music-proto";
-    description = "Sans-I/O wrapper of Google Music API calls";
-    license = licenses.mit;
-    maintainers = with maintainers; [ jakewaksbaum ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/google-music-utils/default.nix b/nixpkgs/pkgs/development/python-modules/google-music-utils/default.nix
deleted file mode 100644
index 801b4b78a178..000000000000
--- a/nixpkgs/pkgs/development/python-modules/google-music-utils/default.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchFromGitHub
-, audio-metadata
-, multidict
-, poetry
-, pytestCheckHook
-}:
-
-buildPythonPackage rec {
-  pname = "google-music-utils";
-  version = "2.5.0";
-
-  # Pypi tarball doesn't contain tests
-  src = fetchFromGitHub {
-    owner = "thebigmunch";
-    repo = "google-music-utils";
-    rev = version;
-    sha256 = "0vwbrgakk23fypjspmscz4gllnb3dksv2njy4j4bm8vyr6fwbi5f";
-  };
-  format = "pyproject";
-
-  postPatch = ''
-    substituteInPlace pyproject.toml \
-      --replace 'multidict = "^4.0"' 'multidict = ">4.0"'
-  '';
-
-  nativeBuildInputs = [ poetry ];
-
-  propagatedBuildInputs = [ audio-metadata multidict ];
-
-  checkInputs = [ pytestCheckHook ];
-
-  meta = with lib; {
-    homepage = "https://github.com/thebigmunch/google-music-utils";
-    description = "A set of utility functionality for google-music and related projects";
-    license = licenses.mit;
-    maintainers = with maintainers; [ jakewaksbaum ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/google-music/default.nix b/nixpkgs/pkgs/development/python-modules/google-music/default.nix
deleted file mode 100644
index 90978ad2cba7..000000000000
--- a/nixpkgs/pkgs/development/python-modules/google-music/default.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchPypi
-, appdirs
-, audio-metadata
-, google-music-proto
-, httpx
-, protobuf
-, requests_oauthlib
-, tenacity
-}:
-
-buildPythonPackage rec {
-  pname = "google-music";
-  version = "3.7.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "0fsp491ifsw0i1r98l8xr41m8d00nw9n5bin8k3laqzq1p65d6dp";
-  };
-
-  propagatedBuildInputs = [
-    appdirs
-    audio-metadata
-    google-music-proto
-    httpx
-    protobuf
-    requests_oauthlib
-    tenacity
-  ];
-
-  # No tests
-  doCheck = false;
-
-  meta = with lib; {
-    homepage = "https://github.com/thebigmunch/google-music";
-    description = "A Google Music API wrapper";
-    license = licenses.mit;
-    maintainers = with maintainers; [ jakewaksbaum ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/googleapis_common_protos/default.nix b/nixpkgs/pkgs/development/python-modules/googleapis-common-protos/default.nix
index 898971629ae0..1b54d64f1a2c 100644
--- a/nixpkgs/pkgs/development/python-modules/googleapis_common_protos/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/googleapis-common-protos/default.nix
@@ -3,16 +3,15 @@
 , fetchPypi
 , grpc
 , protobuf
-, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "googleapis-common-protos";
-  version = "1.52.0";
+  version = "1.53.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0lakcsd35qm5x4visvw6z5f1niasv9a0mjyf2bd98wqi0z41c1sn";
+    sha256 = "sha256-qI7okDqgqB9sPOwtXPYtPIqmfAZDmwSWtJBI+xhU6/Q=";
   };
 
   propagatedBuildInputs = [ grpc protobuf ];
diff --git a/nixpkgs/pkgs/development/python-modules/googlemaps/default.nix b/nixpkgs/pkgs/development/python-modules/googlemaps/default.nix
index 007d4eb2cea7..938a472eddf1 100644
--- a/nixpkgs/pkgs/development/python-modules/googlemaps/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/googlemaps/default.nix
@@ -1,28 +1,32 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, pytest-cov
+, pytestCheckHook
+, pythonOlder
 , requests
 , responses
-, pytestCheckHook
-, pytestcov
-, isPy27
 }:
 
 buildPythonPackage rec {
   pname = "googlemaps";
-  version = "4.4.2";
-  disabled = isPy27;
+  version = "4.4.5";
+  disabled = pythonOlder "3.5";
 
   src = fetchFromGitHub {
     owner = "googlemaps";
     repo = "google-maps-services-python";
     rev = "v${version}";
-    sha256 = "DYhW1OGce/0gY7Jmwq6iM45PxLyXIYo4Cfg2u6Xuyg4=";
+    sha256 = "sha256-Rdfp98UqTMbqcOpkzh0Dz8fNSSbuvCnCztCkxiBgaAA=";
   };
 
   propagatedBuildInputs = [ requests ];
 
-  checkInputs = [ pytestCheckHook responses pytestcov ];
+  checkInputs = [
+    pytest-cov
+    pytestCheckHook
+    responses
+  ];
 
   disabledTests = [
     # touches network
@@ -30,6 +34,8 @@ buildPythonPackage rec {
     "test_transit_without_time"
   ];
 
+  pythonImportsCheck = [ "googlemaps" ];
+
   meta = with lib; {
     homepage = "https://github.com/googlemaps/google-maps-services-python";
     description = "Python client library for Google Maps API Web Services";
diff --git a/nixpkgs/pkgs/development/python-modules/gpsoauth/default.nix b/nixpkgs/pkgs/development/python-modules/gpsoauth/default.nix
index 1ad50642e2b9..b821c7e1f583 100644
--- a/nixpkgs/pkgs/development/python-modules/gpsoauth/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gpsoauth/default.nix
@@ -16,16 +16,21 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.4.1";
+  version = "0.4.3";
   pname = "gpsoauth";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1c3f45824d45ac3d06b9d9a0c0eccafe1052505d31ac9a698aef8b00fb0dfc37";
+    sha256 = "b38f654450ec55f130c9414d457355d78030a2c29c5ad8f20b28304a9fc8fad7";
   };
 
   propagatedBuildInputs = [ cffi cryptography enum34 idna ipaddress ndg-httpsclient pyopenssl pyasn1 pycparser pycryptodomex requests six ];
 
+  # no tests executed
+  doCheck = false;
+
+  pythonImportsCheck = [ "gpsoauth" ];
+
   meta = with lib; {
     description = "A python client library for Google Play Services OAuth";
     homepage = "https://github.com/simon-weber/gpsoauth";
diff --git a/nixpkgs/pkgs/development/python-modules/gradient-utils/default.nix b/nixpkgs/pkgs/development/python-modules/gradient-utils/default.nix
index cf0ffb6bb417..ee8d1bde6222 100644
--- a/nixpkgs/pkgs/development/python-modules/gradient-utils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gradient-utils/default.nix
@@ -1,12 +1,13 @@
-{ buildPythonPackage
+{ lib
+, buildPythonPackage
 , fetchFromGitHub
 , hyperopt
-, lib
 , mock
 , numpy
-, poetry
+, poetry-core
 , prometheus_client
 , pytestCheckHook
+, requests
 }:
 
 buildPythonPackage rec {
@@ -24,23 +25,39 @@ buildPythonPackage rec {
   postPatch = ''
     substituteInPlace pyproject.toml \
       --replace 'numpy = "1.18.5"' 'numpy = "^1.18.5"' \
-      --replace 'hyperopt = "0.1.2"' 'hyperopt = ">=0.1.2"'
+      --replace 'hyperopt = "0.1.2"' 'hyperopt = ">=0.1.2"' \
+      --replace 'wheel = "^0.35.1"' 'wheel = "*"'
   '';
 
-  nativeBuildInputs = [ poetry ];
-  checkInputs = [ mock pytestCheckHook ];
-  propagatedBuildInputs = [ hyperopt prometheus_client numpy ];
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    hyperopt
+    prometheus_client
+    numpy
+  ];
+
+  checkInputs = [
+    mock
+    requests
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOSTNAME=myhost-experimentId
+  '';
 
-  preCheck = "export HOSTNAME=myhost-experimentId";
   disabledTests = [
     "test_add_metrics_pushes_metrics" # requires a working prometheus push gateway
   ];
 
+  pythonImportsCheck = [ "gradient_utils" ];
+
   meta = with lib; {
-    description = "Gradient ML SDK";
-    homepage    = "https://github.com/Paperspace/gradient-utils";
-    license     = licenses.mit;
-    platforms   = platforms.unix;
+    description = "Python utils and helpers library for Gradient";
+    homepage = "https://github.com/Paperspace/gradient-utils";
+    license = licenses.mit;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ freezeboy ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/gradient/default.nix b/nixpkgs/pkgs/development/python-modules/gradient/default.nix
index 14df3b882bba..1965e0d3aded 100644
--- a/nixpkgs/pkgs/development/python-modules/gradient/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gradient/default.nix
@@ -1,17 +1,32 @@
-{ lib, fetchPypi, buildPythonPackage
-, attrs, boto3, requests, gradient_statsd, terminaltables
-, click-completion , click-didyoumean, click-help-colors
-, colorama, requests_toolbelt, gradient-utils, halo, progressbar2
-, marshmallow, pyyaml, websocket_client
+{ lib
+, attrs
+, boto3
+, buildPythonPackage
+, click-completion
+, click-didyoumean
+, click-help-colors
+, colorama
+, fetchPypi
+, gradient_statsd
+, gradient-utils
+, halo
+, marshmallow
+, progressbar2
+, pyopenssl
+, pyyaml
+, requests
+, requests_toolbelt
+, terminaltables
+, websocket_client
 }:
 
 buildPythonPackage rec {
   pname = "gradient";
-  version = "1.4.0";
+  version = "1.4.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "15s21945hg342195ig7nchap5mdnsw931iis92pr7hy8ff0rks3n";
+    sha256 = "a8fa91669c97440049132119019e90d0a9cf09e96352cf43c7c6ca244894bd4e";
   };
 
   postPatch = ''
@@ -19,12 +34,28 @@ buildPythonPackage rec {
       --replace 'attrs<=' 'attrs>=' \
       --replace 'colorama==' 'colorama>=' \
       --replace 'PyYAML==' 'PyYAML>=' \
-      --replace 'marshmallow<' 'marshmallow>='
+      --replace 'marshmallow<' 'marshmallow>=' \
+      --replace 'websocket-client==' 'websocket-client>='
   '';
 
-  propagatedBuildInputs = [ attrs boto3 requests gradient_statsd terminaltables
-    click-completion click-didyoumean click-help-colors requests_toolbelt
-    colorama gradient-utils halo marshmallow progressbar2 pyyaml websocket_client
+  propagatedBuildInputs = [
+    attrs
+    boto3
+    click-completion
+    click-didyoumean
+    click-help-colors
+    colorama
+    gradient_statsd
+    gradient-utils
+    halo
+    marshmallow
+    progressbar2
+    pyopenssl
+    pyyaml
+    requests
+    requests_toolbelt
+    terminaltables
+    websocket_client
   ];
 
   # tries to use /homeless-shelter to mimic container usage, etc
@@ -32,9 +63,9 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "The command line interface for Gradient";
-    homepage    = "https://github.com/Paperspace/gradient-cli";
-    license     = licenses.isc;
-    platforms   = platforms.unix;
+    homepage = "https://github.com/Paperspace/gradient-cli";
+    license = licenses.isc;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ thoughtpolice ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/gradient_statsd/default.nix b/nixpkgs/pkgs/development/python-modules/gradient_statsd/default.nix
index ada005d14f8e..180e20c9f560 100644
--- a/nixpkgs/pkgs/development/python-modules/gradient_statsd/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gradient_statsd/default.nix
@@ -1,5 +1,5 @@
 { lib, fetchPypi, buildPythonPackage
-, boto3, requests, datadog, configparser, python
+, requests, datadog, configparser, python
 }:
 
 buildPythonPackage rec {
diff --git a/nixpkgs/pkgs/development/python-modules/graphene/default.nix b/nixpkgs/pkgs/development/python-modules/graphene/default.nix
index bf7d08cdce36..2839fc337cd8 100644
--- a/nixpkgs/pkgs/development/python-modules/graphene/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/graphene/default.nix
@@ -2,7 +2,6 @@
 , buildPythonPackage
 , fetchFromGitHub
 , aniso8601
-, iso8601
 , graphql-core
 , graphql-relay
 , promise
diff --git a/nixpkgs/pkgs/development/python-modules/graphite-web/default.nix b/nixpkgs/pkgs/development/python-modules/graphite-web/default.nix
index 17ac91329163..81260110f929 100644
--- a/nixpkgs/pkgs/development/python-modules/graphite-web/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/graphite-web/default.nix
@@ -1,6 +1,19 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k
-, django, django_tagging, whisper, pycairo, cairocffi, ldap, memcached, pytz, urllib3, scandir
+{ lib, buildPythonPackage, fetchPypi
+, django
+, memcached
+, txamqp
+, django_tagging
+, gunicorn
+, pytz
+, pyparsing
+, cairocffi
+, whisper
+, whitenoise
+, scandir
+, urllib3
+, six
 }:
+
 buildPythonPackage rec {
   pname = "graphite-web";
   version = "1.1.7";
@@ -15,8 +28,19 @@ buildPythonPackage rec {
   ];
 
   propagatedBuildInputs = [
-    django django_tagging whisper pycairo cairocffi
-    ldap memcached pytz urllib3 scandir
+    django
+    memcached
+    txamqp
+    django_tagging
+    gunicorn
+    pytz
+    pyparsing
+    cairocffi
+    whisper
+    whitenoise
+    scandir
+    urllib3
+    six
   ];
 
   # Carbon-s default installation is /opt/graphite. This env variable ensures
@@ -28,6 +52,8 @@ buildPythonPackage rec {
       --replace "join(WEBAPP_DIR, 'content')" "join('$out', 'webapp', 'content')"
   '';
 
+  pythonImportsCheck = [ "graphite" ];
+
   meta = with lib; {
     homepage = "http://graphiteapp.org/";
     description = "Enterprise scalable realtime graphing";
diff --git a/nixpkgs/pkgs/development/python-modules/graphql-relay/default.nix b/nixpkgs/pkgs/development/python-modules/graphql-relay/default.nix
index fa6a9ec60a73..08e27c194873 100644
--- a/nixpkgs/pkgs/development/python-modules/graphql-relay/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/graphql-relay/default.nix
@@ -1,17 +1,32 @@
-{ lib, buildPythonPackage, fetchPypi, graphql-core, pytestCheckHook }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, graphql-core
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+, typing-extensions
+}:
 
 buildPythonPackage rec {
   pname = "graphql-relay";
-  version = "3.0.0";
+  version = "3.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0mjmpf4abrxfyln0ykxq4xa6lp7xwgqr8631qp011hv0nfl6jgxd";
+    sha256 = "sha256-cNWn7lmV6nwqmjflEidmOxpGTx9A6Y/d6VC+VBXf4LQ=";
   };
 
-  propagatedBuildInputs = [ graphql-core ];
+  propagatedBuildInputs = [
+    graphql-core
+  ] ++ lib.optionals (pythonOlder "3.8") [
+    typing-extensions
+  ];
 
-  checkInputs = [ pytestCheckHook ];
+  checkInputs = [
+    pytest-asyncio
+    pytestCheckHook
+  ];
 
   pythonImportsCheck = [ "graphql_relay" ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/graphtage/default.nix b/nixpkgs/pkgs/development/python-modules/graphtage/default.nix
new file mode 100644
index 000000000000..c222ea521bb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/graphtage/default.nix
@@ -0,0 +1,48 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, lib
+, pytestCheckHook
+, pythonOlder
+  # Python dependencies
+, colorama
+, intervaltree
+, json5
+, pyyaml
+, scipy
+, tqdm
+, typing-extensions
+}:
+
+buildPythonPackage rec {
+  pname = "graphtage";
+  version = "0.2.5";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "trailofbits";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-cFOTbPv7CnRdet7bx5LVq5xp9LG4yNm0oxlW5aSEeZs=";
+  };
+
+  propagatedBuildInputs = [
+    colorama
+    intervaltree
+    json5
+    pyyaml
+    scipy
+    tqdm
+    typing-extensions
+  ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "graphtage" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/trailofbits/graphtage";
+    description = "A utility to diff tree-like files such as JSON and XML";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ veehaitch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/graspologic/default.nix b/nixpkgs/pkgs/development/python-modules/graspologic/default.nix
index 4fd6ccf19c57..b4e8803784b5 100644
--- a/nixpkgs/pkgs/development/python-modules/graspologic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/graspologic/default.nix
@@ -37,7 +37,7 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [ pytestCheckHook pytestcov ];
-  pytestFlagsArray = [ "tests" "--ignore=docs" ];
+  pytestFlagsArray = [ "tests" "--ignore=docs" "--ignore=tests/test_sklearn.py" ];
   disabledTests = [ "gridplot_outputs" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/gremlinpython/default.nix b/nixpkgs/pkgs/development/python-modules/gremlinpython/default.nix
index 97d169283b23..59da8f173d97 100644
--- a/nixpkgs/pkgs/development/python-modules/gremlinpython/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gremlinpython/default.nix
@@ -1,22 +1,23 @@
-{ stdenv, lib, buildPythonPackage, fetchFromGitHub, python, pythonOlder
-, pytestCheckHook, pyhamcrest, pytestrunner, pytest
+{ lib, buildPythonPackage, fetchFromGitHub
+, pytestCheckHook, pyhamcrest, pytestrunner
 , six, isodate, tornado, aenum, radish-bdd, mock
 }:
 
 buildPythonPackage rec {
   pname = "gremlinpython";
-  version = "3.4.8";
+  version = "3.4.10";
 
   # pypi tarball doesn't include tests
   src = fetchFromGitHub {
     owner = "apache";
     repo = "tinkerpop";
     rev = version;
-    sha256 = "0kcyhfxz7z4f8i64gig8q1q9dhy24cprbh63vwsdiwryg74q4chl";
+    sha256 = "0i9lkrwbsmpx1h9480vf97pibm2v37sgw2qm2r1c0i8gg5bcmhj3";
   };
   sourceRoot = "source/gremlin-python/src/main/jython";
   postPatch = ''
     substituteInPlace setup.py \
+      --replace 'aenum>=1.4.5,<3.0.0' 'aenum' \
       --replace 'tornado>=4.4.1,<6.0' 'tornado' \
       --replace 'PyHamcrest>=1.9.0,<2.0.0' 'PyHamcrest' \
       --replace 'radish-bdd==0.8.6' 'radish-bdd' \
diff --git a/nixpkgs/pkgs/development/python-modules/grpc_google_iam_v1/default.nix b/nixpkgs/pkgs/development/python-modules/grpc_google_iam_v1/default.nix
index 7291cd4b65e0..9a74206f02e0 100644
--- a/nixpkgs/pkgs/development/python-modules/grpc_google_iam_v1/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/grpc_google_iam_v1/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , grpcio
-, googleapis_common_protos
+, googleapis-common-protos
 , pytest
 }:
 
@@ -15,7 +15,7 @@ buildPythonPackage rec {
     sha256 = "0bfb5b56f648f457021a91c0df0db4934b6e0c300bd0f2de2333383fe958aa72";
   };
 
-  propagatedBuildInputs = [ grpcio googleapis_common_protos ];
+  propagatedBuildInputs = [ grpcio googleapis-common-protos ];
 
   # non-standard test format, and python3 will load local google folder first
   # but tests cannot be ran if google folder is removed or moved
diff --git a/nixpkgs/pkgs/development/python-modules/grpcio-tools/default.nix b/nixpkgs/pkgs/development/python-modules/grpcio-tools/default.nix
index 8ac1cd6f0d6c..d2d06450b925 100644
--- a/nixpkgs/pkgs/development/python-modules/grpcio-tools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/grpcio-tools/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "grpcio-tools";
-  version = "1.35.0";
+  version = "1.36.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9e2a41cba9c5a20ae299d0fdd377fe231434fa04cbfbfb3807293c6ec10b03cf";
+    sha256 = "80ef584f7b917f575e4b8f2ec59cd4a4d98c2046e801a735f3136b05742a36a6";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/nixpkgs/pkgs/development/python-modules/grpcio/default.nix b/nixpkgs/pkgs/development/python-modules/grpcio/default.nix
index 1b1ffb975fb6..0fe6b9343eb3 100644
--- a/nixpkgs/pkgs/development/python-modules/grpcio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/grpcio/default.nix
@@ -1,6 +1,5 @@
 { lib, stdenv
 , buildPythonPackage
-, darwin
 , grpc
 , six
 , protobuf
@@ -20,8 +19,7 @@ buildPythonPackage rec {
 
   outputs = [ "out" "dev" ];
 
-  nativeBuildInputs = [ cython pkg-config ]
-    ++ lib.optional stdenv.isDarwin darwin.cctools;
+  nativeBuildInputs = [ cython pkg-config ];
 
   buildInputs = [ c-ares openssl zlib ];
   propagatedBuildInputs = [ six protobuf ]
diff --git a/nixpkgs/pkgs/development/python-modules/gsd/default.nix b/nixpkgs/pkgs/development/python-modules/gsd/default.nix
index 8eefb1f4318b..b23cfc71e602 100644
--- a/nixpkgs/pkgs/development/python-modules/gsd/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gsd/default.nix
@@ -1,10 +1,10 @@
 { lib, buildPythonPackage, fetchFromGitHub, isPy27
-, numpy
-, pytest
+, cython, numpy
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
-  version = "1.9.3";
+  version = "2.4.1";
   pname = "gsd";
   disabled = isPy27;
 
@@ -12,14 +12,18 @@ buildPythonPackage rec {
     owner = "glotzerlab";
     repo = pname;
     rev = "v${version}";
-    sha256 = "07hw29r2inyp493dia4fx3ysfr1wxi2jb3n9cmwdi0l54s2ahqvf";
+    sha256 = "02zxfmqw7a5kz8qjdph9a9961mbkd4haxwwa28yjkxs5hzs5x3c8";
   };
 
+  nativeBuildInputs = [ cython ];
   propagatedBuildInputs = [ numpy ];
 
-  checkInputs = [ pytest ];
-  checkPhase = ''
-    pytest
+  checkInputs = [ pytestCheckHook ];
+  preCheck = ''
+    pushd gsd/test
+  '';
+  postCheck = ''
+    popd
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/gspread/default.nix b/nixpkgs/pkgs/development/python-modules/gspread/default.nix
index 0370f80b4a40..beaf1e4f9038 100644
--- a/nixpkgs/pkgs/development/python-modules/gspread/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gspread/default.nix
@@ -7,12 +7,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "3.6.0";
+  version = "3.7.0";
   pname = "gspread";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e04f1a6267b3929fc1600424c5ec83906d439672cafdd61a9d5b916a139f841c";
+    sha256 = "4bda4ab8c5edb9e41cf4ae40d4d5fb30447522b4e43608e05c01351ab1b96912";
   };
 
   propagatedBuildInputs = [ requests google-auth google-auth-oauthlib ];
diff --git a/nixpkgs/pkgs/development/python-modules/gssapi/default.nix b/nixpkgs/pkgs/development/python-modules/gssapi/default.nix
index e5149f6025ad..9a1d54e6b5e3 100644
--- a/nixpkgs/pkgs/development/python-modules/gssapi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gssapi/default.nix
@@ -7,7 +7,7 @@
 , decorator
 , nose
 , krb5Full
-, darwin
+, GSS
 , parameterized
 , shouldbe
 , cython
@@ -17,20 +17,20 @@
 
 buildPythonPackage rec {
   pname = "gssapi";
-  version = "1.6.10";
+  version = "1.6.12";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "pythongssapi";
     repo = "python-${pname}";
     rev = "v${version}";
-    sha256 = "11w8z9ik6zzv3pw3319mz91cgbfkgx0mffxbapqnhilzij2jad4q";
+    sha256 = "sha256-x86/KMcXChPLzoCqR9xwemusWktf/seHLQmEKLco3GQ=";
   };
 
   # It's used to locate headers
   postPatch = ''
     substituteInPlace setup.py \
-      --replace "get_output('krb5-config gssapi --prefix')" "'${lib.getDev krb5Full}'"
+      --replace 'get_output(f"{kc} gssapi --prefix")' '"${lib.getDev krb5Full}"'
   '';
 
   nativeBuildInputs = [
@@ -44,7 +44,7 @@ buildPythonPackage rec {
   ];
 
   buildInputs = lib.optionals stdenv.isDarwin [
-    darwin.apple_sdk.frameworks.GSS
+    GSS
   ];
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/guppy3/default.nix b/nixpkgs/pkgs/development/python-modules/guppy3/default.nix
new file mode 100644
index 000000000000..578f979914cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/guppy3/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, tkinter
+}:
+
+buildPythonPackage rec {
+  pname = "guppy3";
+  version = "3.1.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "zhuyifei1999";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0yjsn8najbic4f50nj6jzhzrhj1bw6918w0gihdkzhqynwgqi64m";
+  };
+
+  propagatedBuildInputs = [ tkinter ];
+
+  # Tests are starting a Tkinter GUI
+  doCheck = false;
+  pythonImportsCheck = [ "guppy" ];
+
+  meta = with lib; {
+    description = "Python Programming Environment & Heap analysis toolset";
+    homepage = "https://zhuyifei1999.github.io/guppy3/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/gviz-api/default.nix b/nixpkgs/pkgs/development/python-modules/gviz-api/default.nix
index fabc2d147fca..92f33abb594a 100644
--- a/nixpkgs/pkgs/development/python-modules/gviz-api/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/gviz-api/default.nix
@@ -8,8 +8,7 @@ buildPythonPackage rec {
   format = "wheel";
 
   src = fetchPypi {
-    inherit pname version;
-    format = "wheel";
+    inherit pname version format;
     sha256 = "1yag559lpmwfdxpxn679a6ajifcbpgljr5n6k5b7rrj38k2xq7jg";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/h3/default.nix b/nixpkgs/pkgs/development/python-modules/h3/default.nix
index e66a3f5e9fcb..3552b6922fcd 100644
--- a/nixpkgs/pkgs/development/python-modules/h3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/h3/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "h3";
-  version = "3.7.1";
+  version = "3.7.2";
 
   # pypi version does not include tests
   src = fetchFromGitHub {
     owner = "uber";
     repo = "h3-py";
     rev = "v${version}";
-    sha256 = "sha256-MIVV3kZGsIsaJ/ccJOK3+j1VwkUsZGHS5d1sGOBa1Ec=";
+    sha256 = "00yi5ncfhi2wpakwm9visi1jlnnaaha66y90fjcsfyvi4hkm8xv2";
   };
 
   dontConfigure = true;
diff --git a/nixpkgs/pkgs/development/python-modules/hass-nabucasa/default.nix b/nixpkgs/pkgs/development/python-modules/hass-nabucasa/default.nix
index 102ab3a2540c..0397a2d7629e 100644
--- a/nixpkgs/pkgs/development/python-modules/hass-nabucasa/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hass-nabucasa/default.nix
@@ -15,13 +15,13 @@
 
 buildPythonPackage rec {
   pname = "hass-nabucasa";
-  version = "0.41.0";
+  version = "0.42.0";
 
   src = fetchFromGitHub {
     owner = "nabucasa";
     repo = pname;
     rev = version;
-    sha256 = "sha256-ewWw3PyJGRHP23J6WBBWs9YGl4vTb9/j/soZ6n5wbLM=";
+    sha256 = "sha256-vDgjuNgwNp9cDgiCNxhACOcuaxcrR+0DW/U5OaSW0n4=";
   };
 
   postPatch = ''
@@ -49,7 +49,7 @@ buildPythonPackage rec {
   meta = with lib; {
     homepage = "https://github.com/NabuCasa/hass-nabucasa";
     description = "Home Assistant cloud integration by Nabu Casa, inc.";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ Scriptkiddi ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/hatasmota/default.nix b/nixpkgs/pkgs/development/python-modules/hatasmota/default.nix
index daa181a9cfc5..961137ed9ab2 100644
--- a/nixpkgs/pkgs/development/python-modules/hatasmota/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hatasmota/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonPackage rec {
   pname = "hatasmota";
-  version = "0.2.8";
+  version = "0.2.9";
 
   src = fetchFromGitHub {
     owner = "emontnemery";
     repo = pname;
     rev = version;
-    sha256 = "sha256-DuVpo+g5VS7bkj/DZi0vNOAPjPkzfIA5I2BD5KJ/rNQ=";
+    sha256 = "sha256-+4jlzemF5f4Qz4QHDaErsmVHq1Pjn/vsvoq/oCbW/hI=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/hcloud/default.nix b/nixpkgs/pkgs/development/python-modules/hcloud/default.nix
index 8f9d69a8941d..192589cdc8fb 100644
--- a/nixpkgs/pkgs/development/python-modules/hcloud/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hcloud/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "hcloud";
-  version = "1.10.0";
+  version = "1.11.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "11sdyays90lmkbdxhllc8ccx0xhrafb7dknqgjlrfpzq04v67vyy";
+    sha256 = "1yq7g9hk6b95nqd0f7kvh9r8ij8k9hs6gmjif83qip98xvkdwf0b";
   };
 
   propagatedBuildInputs = [ future requests python-dateutil ];
diff --git a/nixpkgs/pkgs/development/python-modules/hdbscan/default.nix b/nixpkgs/pkgs/development/python-modules/hdbscan/default.nix
index 6ee76e5271a7..d2590d14955c 100644
--- a/nixpkgs/pkgs/development/python-modules/hdbscan/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hdbscan/default.nix
@@ -1,8 +1,9 @@
 { lib
 , buildPythonPackage
+, fetchpatch
 , cython
 , numpy
-, nose
+, pytestCheckHook
 , scipy
 , scikitlearn
 , fetchPypi
@@ -12,17 +13,28 @@
 
 buildPythonPackage rec {
   pname = "hdbscan";
-  version = "0.8.26";
+  version = "0.8.27";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0zlj2y42f0hrklviv21j9m895259ad8273dxgh7b44702781r9l1";
+    sha256 = "e3a418d0d36874f7b6a1bf0b7461f3857fc13a525fd48ba34caed2fe8973aa26";
   };
-
-  checkInputs = [ nose ];
+  patches = [
+    # This patch fixes compatibility with numpy 1.20. It will be in the next release
+    # after 0.8.27
+    (fetchpatch {
+      url = "https://github.com/scikit-learn-contrib/hdbscan/commit/5b67a4fba39c5aebe8187a6a418da677f89a63e0.patch";
+      sha256 = "07d7jdwk0b8kgaqkifd529sarji01j1jiih7cfccc5kxmlb5py9h";
+    })
+  ];
 
   nativeBuildInputs = [ cython ];
   propagatedBuildInputs = [ numpy scipy scikitlearn joblib six ];
+  preCheck = ''
+    cd hdbscan/tests
+    rm __init__.py
+  '';
+  checkInputs = [ pytestCheckHook ];
 
   meta = with lib; {
     description = "Hierarchical Density-Based Spatial Clustering of Applications with Noise, a clustering algorithm with a scikit-learn compatible API";
diff --git a/nixpkgs/pkgs/development/python-modules/hdmedians/default.nix b/nixpkgs/pkgs/development/python-modules/hdmedians/default.nix
index f1b0d13e56e5..cc953aa696e3 100644
--- a/nixpkgs/pkgs/development/python-modules/hdmedians/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hdmedians/default.nix
@@ -7,12 +7,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.14.1";
+  version = "0.14.2";
   pname = "hdmedians";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ccefaae26302afd843c941b3b662f1119d5a36dec118077310f811a7a1ed8871";
+    sha256 = "b47aecb16771e1ba0736557255d80ae0240b09156bff434321de559b359ac2d6";
   };
 
   # nose was specified in setup.py as a build dependency...
diff --git a/nixpkgs/pkgs/development/python-modules/hetzner/default.nix b/nixpkgs/pkgs/development/python-modules/hetzner/default.nix
index 9b89567d8ef5..4264183e5f53 100644
--- a/nixpkgs/pkgs/development/python-modules/hetzner/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hetzner/default.nix
@@ -5,13 +5,13 @@
 
 buildPythonPackage rec {
   pname = "hetzner";
-  version = "0.8.2";
+  version = "0.8.3";
 
   src = fetchFromGitHub {
     repo = "hetzner";
     owner = "aszlig";
     rev = "v${version}";
-    sha256 = "152fklxff08s71v0b78yp5ajwpqyszm3sd7j0qsrwa2x9ik4968h";
+    sha256 = "0nhm7j2y4rgmrl0c1rklg982qllp7fky34dchqwd4czbsdnv9j7a";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/hg-evolve/default.nix b/nixpkgs/pkgs/development/python-modules/hg-evolve/default.nix
index 38a770e879fa..4c74621b483b 100644
--- a/nixpkgs/pkgs/development/python-modules/hg-evolve/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hg-evolve/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "hg-evolve";
-  version = "10.1.0";
+  version = "10.2.0.post1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a386e6ee2d9a0e332a49f1cb210c4c11ba9844bcd52808270f48e688314783d8";
+    sha256 = "391aa877a61ed04c58b8d82d465b3771f632bb9b19f22cbf18f0e5a1f42f8d4e";
   };
 
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/hickle/default.nix b/nixpkgs/pkgs/development/python-modules/hickle/default.nix
index 0806573d7bec..036122f702b4 100644
--- a/nixpkgs/pkgs/development/python-modules/hickle/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hickle/default.nix
@@ -19,12 +19,12 @@
 
 buildPythonPackage rec {
   pname   = "hickle";
-  version = "4.0.1";
+  version = "4.0.4";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fcf2c4f9e4b7f0d9dae7aa6c59a58473884017875d3b17898d56eaf8a9c1da96";
+    sha256 = "0d35030a76fe1c7fa6480088cde932689960ed354a2539ffaf5f3c90c578c06f";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/holidays/default.nix b/nixpkgs/pkgs/development/python-modules/holidays/default.nix
index 3ac51ac050fb..fe362fa86da8 100644
--- a/nixpkgs/pkgs/development/python-modules/holidays/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/holidays/default.nix
@@ -1,32 +1,25 @@
 { lib
 , buildPythonPackage
-, fetchPypi
 , convertdate
 , dateutil
+, fetchPypi
 , hijri-converter
 , korean-lunar-calendar
+, pytestCheckHook
+, pythonOlder
 , six
-, python
-, flake8
 }:
 
 buildPythonPackage rec {
   pname = "holidays";
-  version = "0.10.5.2";
+  version = "0.11.1";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0g4hqbb94cwxlcwsjzrzxzlann1ks2r4mgnfzqz74a2rg1nih5zd";
+    sha256 = "sha256-f6/YRvZ/Drfh+cGcOPSnlnvweu1d7S3XqKovk3sOoBs=";
   };
 
-  postPatch = ''
-    # ignore too long line issues
-    # https://github.com/dr-prodigy/python-holidays/issues/423
-    substituteInPlace tests.py \
-      --replace "flake8.get_style_guide(ignore=[" "flake8.get_style_guide(ignore=['E501', "
-  '';
-
-
   propagatedBuildInputs = [
     convertdate
     dateutil
@@ -36,13 +29,9 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    flake8
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest
-  '';
-
   pythonImportsCheck = [ "holidays" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/holoviews/default.nix b/nixpkgs/pkgs/development/python-modules/holoviews/default.nix
index 4d9da17bd3a9..667da5aa6499 100644
--- a/nixpkgs/pkgs/development/python-modules/holoviews/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/holoviews/default.nix
@@ -11,18 +11,20 @@
 , bokeh
 , scipy
 , panel
+, colorcet
 }:
 
 buildPythonPackage rec {
   pname = "holoviews";
-  version = "1.13.5";
+  version = "1.14.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3f8a00ce1cc67a388a3a949441accd7e7e9ca9960ba16b49ee96a50305105a01";
+    sha256 = "64f85cf2c99b083b96f26cd26452aec4b41ced6d9e57f56ae8d72b88defc61c9";
   };
 
   propagatedBuildInputs = [
+    colorcet
     param
     numpy
     pyviz-comms
diff --git a/nixpkgs/pkgs/development/python-modules/homepluscontrol/default.nix b/nixpkgs/pkgs/development/python-modules/homepluscontrol/default.nix
new file mode 100644
index 000000000000..680c4a5a7266
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/homepluscontrol/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, aiohttp
+, aioresponses
+, buildPythonPackage
+, fetchFromGitHub
+, pyjwt
+, pytestCheckHook
+, pythonOlder
+, yarl
+}:
+
+buildPythonPackage rec {
+  pname = "homepluscontrol";
+  version = "0.0.5";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "chemaaa";
+    repo = pname;
+    rev = version;
+    sha256 = "1nd3a7nhh1xb70cdh2h2bimwbffvpc3457smyzr9fqkjwfbcrr93";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    pyjwt
+    yarl
+  ];
+
+  checkInputs = [
+    aioresponses
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "homepluscontrol" ];
+
+  meta = with lib; {
+    description = "Python API to interact with the Legrand Eliot Home and Control";
+    homepage = "https://github.com/chemaaa/homepluscontrol";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/howdoi/default.nix b/nixpkgs/pkgs/development/python-modules/howdoi/default.nix
index e6323c951ee9..f75a84c01b87 100644
--- a/nixpkgs/pkgs/development/python-modules/howdoi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/howdoi/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "howdoi";
-  version = "2.0.10";
+  version = "2.0.14";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e561e3c5d4f39ab1f86e9f24bb0b2803ee6e312de61e90907f739aa638f35215";
+    sha256 = "9416be3c8a319fc0764a743a2ad05fa374876dab71dbe15ce86c3a05ece44a0a";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/hstspreload/default.nix b/nixpkgs/pkgs/development/python-modules/hstspreload/default.nix
index 7562e36e4d95..55aafc620424 100644
--- a/nixpkgs/pkgs/development/python-modules/hstspreload/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hstspreload/default.nix
@@ -6,14 +6,14 @@
 
 buildPythonPackage rec {
   pname = "hstspreload";
-  version = "2020.12.22";
+  version = "2021.3.29";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "sethmlarson";
     repo = pname;
     rev = version;
-    sha256 = "1jzcw4clmpbyw67pzskms5rq5b7285iwh42jzc4ly6jz9amggdzc";
+    sha256 = "sha256-F5EXwCoXYmFkV0VWT5leIWZU2xH1t6T0LuxodAANS8E=";
   };
 
   # tests require network connection
@@ -25,6 +25,6 @@ buildPythonPackage rec {
     description = "Chromium HSTS Preload list as a Python package and updated daily";
     homepage = "https://github.com/sethmlarson/hstspreload";
     license = licenses.bsd3;
-    maintainers = [ maintainers.costrouc ];
+    maintainers = with maintainers; [ costrouc SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/httpbin/default.nix b/nixpkgs/pkgs/development/python-modules/httpbin/default.nix
index 2e711141fcba..ace9a7041e3f 100644
--- a/nixpkgs/pkgs/development/python-modules/httpbin/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/httpbin/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, fetchpatch
 , flask
 , flask-limiter
 , markupsafe
diff --git a/nixpkgs/pkgs/development/python-modules/httpcore/default.nix b/nixpkgs/pkgs/development/python-modules/httpcore/default.nix
index aa15c2555e67..dbbdf0bb38c0 100644
--- a/nixpkgs/pkgs/development/python-modules/httpcore/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/httpcore/default.nix
@@ -9,18 +9,20 @@
 , pytestcov
 , sniffio
 , uvicorn
+, trustme
+, trio
 }:
 
 buildPythonPackage rec {
   pname = "httpcore";
-  version = "0.12.0";
+  version = "0.12.3";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "encode";
     repo = pname;
     rev = version;
-    sha256 = "0bwxn7m7r7h6k41swxj0jqj3nzi76wqxwbnry6y7d4qfh4m26g2j";
+    sha256 = "09hbjc5wzhrnri5y3idxcq329d7jiaxljc7y6npwv9gh9saln109";
   };
 
   propagatedBuildInputs = [
@@ -34,11 +36,15 @@ buildPythonPackage rec {
     pytestCheckHook
     pytestcov
     uvicorn
+    trustme
+    trio
   ];
 
   pytestFlagsArray = [
     # these tests fail during dns lookups: httpcore.ConnectError: [Errno -2] Name or service not known
+    "--ignore=tests/test_threadsafety.py"
     "--ignore=tests/sync_tests/test_interfaces.py"
+    "--ignore=tests/sync_tests/test_retries.py"
   ];
 
   pythonImportsCheck = [ "httpcore" ];
diff --git a/nixpkgs/pkgs/development/python-modules/httplib2/default.nix b/nixpkgs/pkgs/development/python-modules/httplib2/default.nix
index b23d501f1e53..ce3b3aa1f671 100644
--- a/nixpkgs/pkgs/development/python-modules/httplib2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/httplib2/default.nix
@@ -1,21 +1,53 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy27
+, mock
+, pyparsing
+, pytest-forked
+, pytest-randomly
+, pytest-timeout
+, pytest-xdist
+, pytestCheckHook
+, six
+}:
 
 buildPythonPackage rec {
   pname = "httplib2";
-  version = "0.18.1";
+  version = "0.19.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "8af66c1c52c7ffe1aa5dc4bcd7c769885254b0756e6e69f953c7f0ab49a70ba3";
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04y2bc2yv3q84llxnafqrciqxjqpxbrd8glbnvvr16c20fwc3r4q";
   };
 
-  # Needs setting up
-  doCheck = false;
+  postPatch = ''
+    sed -i "/--cov/d" setup.cfg
+  '';
+
+  propagatedBuildInputs = [ pyparsing ];
+
+  checkInputs = [
+    mock
+    pytest-forked
+    pytest-randomly
+    pytest-timeout
+    pytest-xdist
+    six
+    pytestCheckHook
+  ];
+
+  # Don't run tests for Python 2.7
+  doCheck = !isPy27;
+  pytestFlagsArray = [ "--ignore python2" ];
+  pythonImportsCheck = [ "httplib2" ];
 
   meta = with lib; {
-    homepage = "https://github.com/httplib2/httplib2";
     description = "A comprehensive HTTP client library";
+    homepage = "https://httplib2.readthedocs.io";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/httpretty/default.nix b/nixpkgs/pkgs/development/python-modules/httpretty/default.nix
index 8974672d0a93..b4a82d04fa18 100644
--- a/nixpkgs/pkgs/development/python-modules/httpretty/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/httpretty/default.nix
@@ -19,7 +19,7 @@
 
 buildPythonPackage rec {
   pname = "httpretty";
-  version = "1.0.3";
+  version = "1.0.5";
 
   # drop this for version > 0.9.7
   # Flaky tests: https://github.com/gabrielfalcao/HTTPretty/pull/394
@@ -27,7 +27,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9335cbd8f38745e0e2dc4755d8932a77d378d93e15804969504b1e6b568d613c";
+    sha256 = "e53c927c4d3d781a0761727f1edfad64abef94e828718e12b672a678a8b3e0b5";
   };
 
   propagatedBuildInputs = [ six ];
diff --git a/nixpkgs/pkgs/development/python-modules/httpsig/default.nix b/nixpkgs/pkgs/development/python-modules/httpsig/default.nix
index 30c918d86feb..accc731eeadf 100644
--- a/nixpkgs/pkgs/development/python-modules/httpsig/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/httpsig/default.nix
@@ -1,9 +1,10 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, setuptools_scm
+, setuptools-scm
 , pycryptodome
 , requests
+, six
 }:
 
 buildPythonPackage rec {
@@ -15,13 +16,17 @@ buildPythonPackage rec {
     sha256 = "1rkc3zwsq53rjsmc47335m4viljiwdbmw3y2zry4z70j8q1dbmki";
   };
 
-  buildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ pycryptodome requests ];
+  buildInputs = [
+    setuptools-scm
+  ];
 
-  # Jailbreak pycryptodome
-  preBuild = ''
-    substituteInPlace setup.py --replace "==3.4.7" ""
-  '';
+  propagatedBuildInputs = [
+    pycryptodome
+    requests
+    six
+  ];
+
+  pythonImportsCheck = [ "httpsig" ];
 
   meta = with lib; {
     description = "Sign HTTP requests with secure signatures";
diff --git a/nixpkgs/pkgs/development/python-modules/httpx/default.nix b/nixpkgs/pkgs/development/python-modules/httpx/default.nix
index 6e81cc92193c..2aba203ea01f 100644
--- a/nixpkgs/pkgs/development/python-modules/httpx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/httpx/default.nix
@@ -18,14 +18,14 @@
 
 buildPythonPackage rec {
   pname = "httpx";
-  version = "0.16.1";
+  version = "0.17.1";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "encode";
     repo = pname;
     rev = version;
-    sha256 = "00gmq45fckcqkj910bvd7pyqz1mvgsdvz4s0k7dzbnc5czzq1f4a";
+    sha256 = "sha256-P4Uki+vlAgVECBUz9UGvv1ip49jmf0kYbyU2/mkWE3U=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/huggingface-hub/default.nix b/nixpkgs/pkgs/development/python-modules/huggingface-hub/default.nix
new file mode 100644
index 000000000000..0fce65f2b8bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/huggingface-hub/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, pythonOlder
+, filelock
+, importlib-metadata
+, requests
+, tqdm
+}:
+
+buildPythonPackage rec {
+  pname = "huggingface-hub";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "huggingface";
+    repo = "huggingface_hub";
+    rev = "v${version}";
+    hash = "sha256-0DSgWmodeRmvGq2v3n86BzRx5Xdb8fIQh+G/2O2d+yo=";
+  };
+
+  propagatedBuildInputs = [
+    filelock
+    requests
+    tqdm
+  ] ++ lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
+
+  # Tests require network access.
+  doCheck = false;
+  pythonImportsCheck = [ "huggingface_hub" ];
+
+   meta = with lib; {
+    homepage = "https://github.com/huggingface/huggingface_hub";
+    description = "Download and publish models and other files on the huggingface.co hub";
+    changelog = "https://github.com/huggingface/huggingface_hub/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ danieldk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/humanfriendly/default.nix b/nixpkgs/pkgs/development/python-modules/humanfriendly/default.nix
index 49cb31b7d030..81ea4286c96f 100644
--- a/nixpkgs/pkgs/development/python-modules/humanfriendly/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/humanfriendly/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "humanfriendly";
-  version = "8.2";
+  version = "9.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bf52ec91244819c780341a3438d5d7b09f431d3f113a475147ac9b7b167a3d12";
+    sha256 = "sha256-BmVilWY5qyH/JnbR/aC1mH6YXFNPx2cAoZvVS8uBEh0=";
   };
 
   propagatedBuildInputs = lib.optional (pythonOlder "3.3") monotonic;
diff --git a/nixpkgs/pkgs/development/python-modules/humanize/default.nix b/nixpkgs/pkgs/development/python-modules/humanize/default.nix
index b6f78e5cf8fd..ef66870ddfd7 100644
--- a/nixpkgs/pkgs/development/python-modules/humanize/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/humanize/default.nix
@@ -2,31 +2,31 @@
 , buildPythonPackage
 , fetchPypi
 , isPy27
-, mock
 , setuptools_scm
+, setuptools
+, pytestCheckHook
+, freezegun
 }:
 
 buildPythonPackage rec {
-  version = "3.1.0";
+  version = "3.2.0";
   pname = "humanize";
   disabled = isPy27; # setup.py no longer compatible
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fd3eb915310335c63a54d4507289ecc7b3a7454cd2c22ac5086d061a3cbfd592";
+    sha256 = "09ph6fd1362xdn2hgwdgh30z0zqjp3bgvr1akyvm36b8jm400sdb";
   };
 
   nativeBuildInputs = [ setuptools_scm ];
-  checkInputs = [ mock ];
-
-  doCheck = false;
+  propagatedBuildInputs = [ setuptools ];
+  checkInputs = [ pytestCheckHook freezegun ];
 
   meta = with lib; {
     description = "Python humanize utilities";
     homepage = "https://github.com/jmoiron/humanize";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
-    platforms = platforms.unix;
+    maintainers = with maintainers; [ rmcgibbo ];
   };
 
 }
diff --git a/nixpkgs/pkgs/development/python-modules/hupper/default.nix b/nixpkgs/pkgs/development/python-modules/hupper/default.nix
index 1fe5ab7153d3..27e308ee4477 100644
--- a/nixpkgs/pkgs/development/python-modules/hupper/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hupper/default.nix
@@ -1,5 +1,10 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi
-, pytest, pytestcov, watchdog, mock
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, pytest-cov
+, watchdog
 }:
 
 buildPythonPackage rec {
@@ -11,11 +16,14 @@ buildPythonPackage rec {
     sha256 = "3818f53dabc24da66f65cf4878c1c7a9b5df0c46b813e014abdd7c569eb9a02a";
   };
 
-  checkPhase = ''
-    py.test
-  '';
-
   # FIXME: watchdog dependency is disabled on Darwin because of #31865, which causes very silent
   # segfaults in the testsuite that end up failing the tests in a background thread (in myapp)
-  checkInputs = [ pytest pytestcov mock ] ++ lib.optional (!stdenv.isDarwin) watchdog;
+  checkInputs = [ pytestCheckHook pytest-cov ] ++ lib.optional (!stdenv.isDarwin) watchdog;
+
+  meta = with lib; {
+    description = "in-process file monitor / reloader for reloading your code automatically during development";
+    homepage = "https://github.com/Pylons/hupper";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/hvac/default.nix b/nixpkgs/pkgs/development/python-modules/hvac/default.nix
index f7eb29484142..f67b5de7ee06 100644
--- a/nixpkgs/pkgs/development/python-modules/hvac/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hvac/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "hvac";
-  version = "0.10.7";
+  version = "0.10.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6ee2ba6002f11151472fa873b6637d902fc6045a2193aea08b39ae8147c230ba";
+    sha256 = "cd74138994b1b99cdb75d34aadfd900352b3170bfc31c5e4cc0ff63eaa731cf9";
   };
 
   propagatedBuildInputs = [ requests six ];
diff --git a/nixpkgs/pkgs/development/python-modules/hvplot/default.nix b/nixpkgs/pkgs/development/python-modules/hvplot/default.nix
index aaad8f2b1dec..c5fb601ea426 100644
--- a/nixpkgs/pkgs/development/python-modules/hvplot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hvplot/default.nix
@@ -18,11 +18,11 @@
 
 buildPythonPackage rec {
   pname = "hvplot";
-  version = "0.7.0";
+  version = "0.7.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1c709bebb737ebd71a0433f2333ed15f03dd3c431d4646c41c2b9fcbae4a29b7";
+    sha256 = "cdb61183d3cdb1296c7f63c6aab59ee72b7b79b9ddc18abce2ebd3214e8de9db";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/hwi/default.nix b/nixpkgs/pkgs/development/python-modules/hwi/default.nix
index 7c34235a190b..5da15fa3e233 100644
--- a/nixpkgs/pkgs/development/python-modules/hwi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hwi/default.nix
@@ -7,28 +7,20 @@
 , libusb1
 , mnemonic
 , pyaes
-, pythonAtLeast
+, typing-extensions
 }:
 
 buildPythonPackage rec {
   pname = "hwi";
-  version = "1.2.1";
-  disabled = pythonAtLeast "3.9";
+  version = "2.0.1";
 
   src = fetchFromGitHub {
     owner = "bitcoin-core";
     repo = "HWI";
     rev = version;
-    sha256 = "0fs3152lw7y5l9ssr5as8gd739m9lb7wxpv1vc5m77k5nw7l8ax5";
+    sha256 = "148m0vgwm6l8drcx6j3fjs2zpdzvslk4w2nkb8nm0g8qdlm6gjlw";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "'ecdsa>=0.13.0,<0.14.0'" "'ecdsa'" \
-      --replace "'hidapi>=0.7.99,<0.8.0'" "'hidapi'" \
-      --replace "'mnemonic>=0.18.0,<0.19.0'" "'mnemonic'"
-  '';
-
   propagatedBuildInputs = [
     bitbox02
     ecdsa
@@ -36,6 +28,7 @@ buildPythonPackage rec {
     libusb1
     mnemonic
     pyaes
+    typing-extensions
   ];
 
   # tests require to clone quite a few firmwares
diff --git a/nixpkgs/pkgs/development/python-modules/hypothesis/default.nix b/nixpkgs/pkgs/development/python-modules/hypothesis/default.nix
index dac4ca43fc91..e956cb9cc46f 100644
--- a/nixpkgs/pkgs/development/python-modules/hypothesis/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/hypothesis/default.nix
@@ -1,7 +1,14 @@
-{ lib, buildPythonPackage, fetchFromGitHub
-, isPy3k, attrs, coverage, enum34, pexpect
-, doCheck ? true, pytest, pytest_xdist, flaky, mock
+{ lib
+, buildPythonPackage
+, pythonAtLeast
+, fetchFromGitHub
+, attrs
+, pexpect
+, doCheck ? true
+, pytestCheckHook
+, pytest-xdist
 , sortedcontainers
+, tzdata
 }:
 buildPythonPackage rec {
   # https://hypothesis.readthedocs.org/en/latest/packaging.html
@@ -10,36 +17,40 @@ buildPythonPackage rec {
   # pytz fake_factory django numpy pytest
   # If you need these, you can just add them to your environment.
 
-  version = "5.30.0";
   pname = "hypothesis";
+  version = "5.49.0";
 
   # Use github tarballs that includes tests
   src = fetchFromGitHub {
     owner = "HypothesisWorks";
     repo = "hypothesis-python";
     rev = "hypothesis-python-${version}";
-    sha256 = "0fmc4jfaksr285fjhp18ibj2rr8cxmbd0pwx370r5wf8jnhm6jb3";
+    sha256 = "1lr9a93vdx70s9i1zazazif5hy8fbqhvwqq402ygpf53yw4lgi2w";
   };
 
   postUnpack = "sourceRoot=$sourceRoot/hypothesis-python";
 
   propagatedBuildInputs = [
     attrs
-    coverage
     sortedcontainers
-  ] ++ lib.optional (!isPy3k) enum34;
+  ];
+
+  checkInputs = [ pytestCheckHook pytest-xdist pexpect ]
+    ++ lib.optional (pythonAtLeast "3.9") tzdata;
 
-  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
+  # This file changes how pytest runs and breaks it
+  preCheck = ''
+    rm tox.ini
   '';
 
+  pytestFlagsArray = [ "tests/cover" ];
+
   meta = with lib; {
     description = "A Python library for property based testing";
     homepage = "https://github.com/HypothesisWorks/hypothesis";
     license = licenses.mpl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/hypothesmith/default.nix b/nixpkgs/pkgs/development/python-modules/hypothesmith/default.nix
new file mode 100644
index 000000000000..4bf1ca8d02f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/hypothesmith/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi, hypothesis, lark-parser, libcst, black, parso, pytestCheckHook, pytest-cov, pytest-xdist }:
+
+buildPythonPackage rec {
+  pname = "hypothesmith";
+  version = "0.1.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-+f8EexXE7TEs49pX6idXD4bWtTzhKvnyXlnmV2oAQQo=";
+  };
+
+  propagatedBuildInputs = [ hypothesis lark-parser libcst ];
+
+  checkInputs = [ black parso pytestCheckHook pytest-cov pytest-xdist ];
+
+  pythonImportsCheck = [ "hypothesmith" ];
+
+  meta = with lib; {
+    description = "Hypothesis strategies for generating Python programs, something like CSmith";
+    homepage = "https://github.com/Zac-HD/hypothesmith";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/iaqualink/default.nix b/nixpkgs/pkgs/development/python-modules/iaqualink/default.nix
new file mode 100644
index 000000000000..223f3893e18d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/iaqualink/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pytest-runner
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "iaqualink";
+  version = "0.4.0";
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "flz";
+    repo = "iaqualink-py";
+    rev = "v${version}";
+    sha256 = "13iwngjjqzr1pkmskbc2wakccvcjkf4bk65f4jp4ywpciilr4zjw";
+  };
+
+  nativeBuildInputs = [ pytest-runner ];
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "iaqualink" ];
+
+  meta = with lib; {
+    description = "Python library for Jandy iAqualink";
+    homepage = "https://github.com/flz/iaqualink-py";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/icmplib/default.nix b/nixpkgs/pkgs/development/python-modules/icmplib/default.nix
index 89f49d9cf624..2718b6340540 100644
--- a/nixpkgs/pkgs/development/python-modules/icmplib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/icmplib/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "icmplib";
-  version = "2.0.2";
+  version = "2.1.1";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "ValentinBELYN";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0djsbksgml2h18w6509w59s88730w1xaxdxzws12alq4m5v4hirr";
+    sha256 = "06xx9854yzxa7x1mjfzbhhw5rfzgjnw269j5k0rshyqh3qvw1nwv";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/identify/default.nix b/nixpkgs/pkgs/development/python-modules/identify/default.nix
index f3b8393a2759..cb4d538da3dd 100644
--- a/nixpkgs/pkgs/development/python-modules/identify/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/identify/default.nix
@@ -1,20 +1,33 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, editdistance
+}:
 
 buildPythonPackage rec {
   pname = "identify";
-  version = "1.5.13";
+  version = "1.6.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "70b638cf4743f33042bebb3b51e25261a0a10e80f978739f17e7fd4837664a66";
+
+  src = fetchFromGitHub {
+    owner = "pre-commit";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1sqhqqjp53dwm8yq4nrgggxbvzs3szbg49z5sj2ss9xzlgmimclm";
   };
 
-  # Tests not included in PyPI tarball
-  doCheck = false;
+  checkInputs = [
+    editdistance
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "identify" ];
 
   meta = with lib; {
     description = "File identification library for Python";
     homepage = "https://github.com/chriskuehl/identify";
     license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ijson/default.nix b/nixpkgs/pkgs/development/python-modules/ijson/default.nix
index 8ccc7eb4e0c0..3f65b9291ae6 100644
--- a/nixpkgs/pkgs/development/python-modules/ijson/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ijson/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "ijson";
-  version = "3.1.3";
+  version = "3.1.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d29977f7235b5bf83c372825c6abd8640ba0e3a8e031d3ffc3b63deaf6ae1487";
+    sha256 = "1d1003ae3c6115ec9b587d29dd136860a81a23c7626b682e2b5b12c9fd30e4ea";
   };
 
   doCheck = false; # something about yajl
diff --git a/nixpkgs/pkgs/development/python-modules/image-match/default.nix b/nixpkgs/pkgs/development/python-modules/image-match/default.nix
index 7464f3c89972..ed5179d6db5f 100644
--- a/nixpkgs/pkgs/development/python-modules/image-match/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/image-match/default.nix
@@ -24,6 +24,7 @@ buildPythonPackage {
 
   # tests cannot work without elasticsearch
   doCheck = false;
+  pythonImportsCheck = [ "image_match" ];
 
   meta = with lib; {
     homepage = "https://github.com/ascribe/image-match";
diff --git a/nixpkgs/pkgs/development/python-modules/imagecorruptions/default.nix b/nixpkgs/pkgs/development/python-modules/imagecorruptions/default.nix
index 8d2b7fd8da88..ee1df820a401 100644
--- a/nixpkgs/pkgs/development/python-modules/imagecorruptions/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/imagecorruptions/default.nix
@@ -26,6 +26,9 @@ buildPythonPackage rec {
     opencv3
   ];
 
+  doCheck = false;
+  pythonImportsCheck = [ "imagecorruptions" ];
+
   meta = with lib; {
     homepage = "https://github.com/bethgelab/imagecorruptions";
     description = "This package provides a set of image corruptions";
diff --git a/nixpkgs/pkgs/development/python-modules/imap-tools/default.nix b/nixpkgs/pkgs/development/python-modules/imap-tools/default.nix
index 107febe4041b..136415eb54e5 100644
--- a/nixpkgs/pkgs/development/python-modules/imap-tools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/imap-tools/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "imap-tools";
-  version = "0.37.0";
+  version = "0.39.0";
 
   disabled = isPy27;
 
@@ -15,7 +15,7 @@ buildPythonPackage rec {
     owner = "ikvk";
     repo = "imap_tools";
     rev = "v${version}";
-    sha256 = "1501lk3fjxqmzxffahbj33y795gwl96yqvk3fs86cchm6vz2gnkk";
+    sha256 = "sha256-PyksCYVe7Ij/+bZpntHgY51I/ZVnC6L20TcKfTLr2CY=";
   };
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/imbalanced-learn/default.nix b/nixpkgs/pkgs/development/python-modules/imbalanced-learn/default.nix
index e0c2adb8e8bb..cf3fca9aa03c 100644
--- a/nixpkgs/pkgs/development/python-modules/imbalanced-learn/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/imbalanced-learn/default.nix
@@ -1,31 +1,22 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27
-, fetchpatch
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy27
 , pandas
 , pytestCheckHook
 , scikitlearn
-, tensorflow
 }:
 
 buildPythonPackage rec {
   pname = "imbalanced-learn";
-  version = "0.7.0";
+  version = "0.8.0";
   disabled = isPy27; # scikit-learn>=0.21 doesn't work on python2
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "da59de0d1c0fa66f62054dd9a0a295a182563aa1abbb3bf9224a3678fcfe8fa4";
+    sha256 = "0a9xrw4qsh95g85pg2611hvj6xcfncw646si2icaz22haw1x410w";
   };
 
-  patches = [
-    # Fix compatibility with scikit-learn 0.24. This patch will be included in releases of
-    # imbalanced-learn after 0.7.0
-    (fetchpatch {
-      url = "https://github.com/scikit-learn-contrib/imbalanced-learn/commit/dc4051fe0011c68d900be05971b71016d4ad9e90.patch";
-      sha256 = "1rv61k9wv4q37a0v943clr8fflcg9ly530smgndgkjlxkyzw6swh";
-      excludes = ["doc/conf.py" "build_tools/*" "azure-pipelines.yml"];
-    })
-  ];
-
   propagatedBuildInputs = [ scikitlearn ];
   checkInputs = [ pytestCheckHook pandas ];
   preCheck = ''
@@ -37,6 +28,10 @@ buildPythonPackage rec {
     "_generator"
     "show_versions"
     "test_make_imbalanced_iris"
+    "test_rusboost[SAMME.R]"
+
+    # https://github.com/scikit-learn-contrib/imbalanced-learn/issues/824
+    "ValueDifferenceMetric"
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/iminuit/default.nix b/nixpkgs/pkgs/development/python-modules/iminuit/default.nix
new file mode 100644
index 000000000000..5bfb66fe4c6c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/iminuit/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, isPy3k, fetchPypi, cmake, numpy, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "iminuit";
+  version = "2.4.0";
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "350c13d33f3ec5884335aea1cc11a17ae49dd8e6b2181c3f1b3c9c27e2e0b228";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  propagatedBuildInputs = [ numpy ];
+
+  dontUseCmakeConfigure = true;
+
+  checkInputs = [ pytestCheckHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/scikit-hep/iminuit";
+    description = "Python interface for the Minuit2 C++ library";
+    license = with licenses; [ mit lgpl2Only ];
+    maintainers = with maintainers; [ veprbl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/immutables/default.nix b/nixpkgs/pkgs/development/python-modules/immutables/default.nix
index 41dcc6b2c11e..196ea78bba70 100644
--- a/nixpkgs/pkgs/development/python-modules/immutables/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/immutables/default.nix
@@ -1,19 +1,28 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "immutables";
-  version = "0.14";
+  version = "0.15";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0y0aqw29g525frdnmv9paljzacpp4s21sadfbca5b137iciwr8d0";
+    sha256 = "3713ab1ebbb6946b7ce1387bb9d1d7f5e09c45add58c2a2ee65f963c171e746b";
   };
 
-  meta = {
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "immutables" ];
+
+  meta = with lib; {
     description = "An immutable mapping type for Python";
     homepage = "https://github.com/MagicStack/immutables";
-    license = with lib.licenses; [ asl20 ];
-    maintainers = with lib.maintainers; [ catern ];
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ catern ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/importlib-resources/default.nix b/nixpkgs/pkgs/development/python-modules/importlib-resources/default.nix
index 22c05e3319c6..ccb2190cf045 100644
--- a/nixpkgs/pkgs/development/python-modules/importlib-resources/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/importlib-resources/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "importlib_resources";
-  version = "3.3.0";
+  version = "3.3.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7b51f0106c8ec564b1bef3d9c588bc694ce2b92125bbb6278f4f2f5b54ec3592";
+    sha256 = "0ed250dbd291947d1a298e89f39afcc477d5a6624770503034b72588601bcc05";
   };
 
   nativeBuildInputs = [ setuptools_scm toml ];
diff --git a/nixpkgs/pkgs/development/python-modules/incomfort-client/default.nix b/nixpkgs/pkgs/development/python-modules/incomfort-client/default.nix
new file mode 100644
index 000000000000..d281ece24635
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/incomfort-client/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "incomfort-client";
+  version = "0.4.5";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "zxdavb";
+    repo = pname;
+    rev = version;
+    sha256 = "0r9f15fcjwhrq6ldji1dzbb76wsvinpkmyyaj7n55rl6ibnsyrwp";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "incomfortclient" ];
+
+  meta = with lib; {
+    description = "Python module to poll Intergas boilers via a Lan2RF gateway";
+    homepage = "https://github.com/zxdavb/incomfort-client";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/inflect/default.nix b/nixpkgs/pkgs/development/python-modules/inflect/default.nix
index c0f6fe920505..b8ebce462dce 100644
--- a/nixpkgs/pkgs/development/python-modules/inflect/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/inflect/default.nix
@@ -1,16 +1,32 @@
-{ buildPythonPackage, fetchPypi, isPy27, setuptools_scm, nose, six, importlib-metadata, toml }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy27
+, setuptools_scm
+, toml
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "inflect";
-  version = "5.0.2";
+  version = "5.3.0";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d284c905414fe37c050734c8600fe170adfb98ba40f72fc66fed393f5b8d5ea0";
+    sha256 = "41a23f6788962e9775e40e2ecfb1d6455d02de315022afeedd3c5dc070019d73";
   };
 
   nativeBuildInputs = [ setuptools_scm toml ];
-  propagatedBuildInputs = [ six importlib-metadata ];
-  checkInputs = [ nose ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "inflect" ];
+
+  meta = with lib; {
+    description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles";
+    homepage = "https://github.com/jaraco/inflect";
+    changelog = "https://github.com/jaraco/inflect/blob/v${version}/CHANGES.rst";
+    license = licenses.mit;
+  };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/influxdb-client/default.nix b/nixpkgs/pkgs/development/python-modules/influxdb-client/default.nix
index 56436cdd0eb9..82153f4b3d9b 100644
--- a/nixpkgs/pkgs/development/python-modules/influxdb-client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/influxdb-client/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "influxdb-client";
-  version = "1.14.0";
+  version = "1.15.0";
 
   disabled = pythonOlder "3.6"; # requires python version >=3.6
 
@@ -22,7 +22,7 @@ buildPythonPackage rec {
     owner = "influxdata";
     repo = "influxdb-client-python";
     rev = "v${version}";
-    sha256 = "1qq727gwz5migr3xlqxj57qxv1y52g7xpkdgggz2wz739w5czffd";
+    sha256 = "1b2xh78v965rgafyj7cdbjm2p96d74f7ifsqllc7242n9wv3k53q";
   };
 
   # makes test not reproducible
diff --git a/nixpkgs/pkgs/development/python-modules/influxdb/default.nix b/nixpkgs/pkgs/development/python-modules/influxdb/default.nix
index 69fe83b8779b..6b3a46ea3915 100644
--- a/nixpkgs/pkgs/development/python-modules/influxdb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/influxdb/default.nix
@@ -1,38 +1,70 @@
 { lib
 , buildPythonPackage
-, fetchPypi
-, requests
 , dateutil
+, fetchFromGitHub
+, fetchpatch
+, mock
+, msgpack
+, nose
+, pandas
+, pytestCheckHook
 , pytz
+, requests
+, requests-mock
 , six
-, msgpack
-, fetchpatch
 }:
 
 buildPythonPackage rec {
   pname = "influxdb";
   version = "5.3.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "9bcaafd57ac152b9824ab12ed19f204206ef5df8af68404770554c5b55b475f6";
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = "influxdb-python";
+    rev = "v${version}";
+    sha256 = "1jfkf53jcf8lcq98qc0bw5d1d0yp3558mh8l2dqc9jlsm0smigjs";
   };
 
+  propagatedBuildInputs = [
+    requests
+    dateutil
+    pytz
+    six
+    msgpack
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    requests-mock
+    mock
+    nose
+    pandas
+  ];
+
   patches = [
     (fetchpatch {
+      # Relaxes msgpack pinning
       url = "https://github.com/influxdata/influxdb-python/commit/cc41e290f690c4eb67f75c98fa9f027bdb6eb16b.patch";
       sha256 = "1fb9qrq1kp24pixjwvzhdy67z3h0wnj92aj0jw0a25fd0rdxdvg4";
     })
   ];
 
-  # ImportError: No module named tests
-  doCheck = false;
-  propagatedBuildInputs = [ requests dateutil pytz six msgpack ];
+  disabledTests = [
+    # Tests cause FutureWarning due to use of 'record' instead of 'records' in pandas.
+    #   https://github.com/influxdata/influxdb-python/pull/845
+    # Also type mismatches in assertEqual on DataFrame:
+    #   b'foo[30 chars]_one=1.0,column_two=1.0 0\nfoo,tag_one=red,tag[47 chars]00\n' !=
+    #   b'foo[30 chars]_one="1",column_two=1i 0\nfoo,tag_one=red,tag_[46 chars]00\n'
+    "test_write_points_from_dataframe_with_nan_json"
+    "test_write_points_from_dataframe_with_tags_and_nan_json"
+  ];
+
+  pythonImportsCheck = [ "influxdb" ];
 
   meta = with lib; {
     description = "Python client for InfluxDB";
     homepage = "https://github.com/influxdb/influxdb-python";
     license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/intake/default.nix b/nixpkgs/pkgs/development/python-modules/intake/default.nix
index 922d543fd1de..49cf660bf568 100644
--- a/nixpkgs/pkgs/development/python-modules/intake/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/intake/default.nix
@@ -23,13 +23,12 @@
 
 buildPythonPackage rec {
   pname = "intake";
-  version = "0.6.0";
-
+  version = "0.6.1";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0c284abeb74927a7366dcab6cefc010c4d050365b8af61c37326a2473a490a4e";
+    sha256 = "f09800203fcaf1512f9234e54dbd07ec2b5217aafd21716385725ec052f5a52e";
   };
 
   propagatedBuildInputs = [
@@ -64,14 +63,17 @@ buildPythonPackage rec {
     PATH=$out/bin:$PATH
   '';
 
-  # disable tests which touch network
-  disabledTests = ''
+  disabledTests = [
+    # disable tests which touch network
     "test_discover"
     "test_filtered_compressed_cache"
     "test_get_dir"
     "test_remote_cat"
     "http"
-  '';
+
+    # broken test
+    "test_read_pattern"
+  ];
 
   meta = with lib; {
     description = "Data load and catalog system";
diff --git a/nixpkgs/pkgs/development/python-modules/intelhex/default.nix b/nixpkgs/pkgs/development/python-modules/intelhex/default.nix
index 0634e9190242..e5b0cc6fbc74 100644
--- a/nixpkgs/pkgs/development/python-modules/intelhex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/intelhex/default.nix
@@ -1,25 +1,23 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, fetchpatch
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "intelhex";
-  version = "2.2.1";
+  version = "2.3.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780";
+    sha256 = "sha256-iStzYacZ9JRSN9qMz3VOlRPbMvViiFJ4WuoQjc0lAJM=";
   };
 
-  patches = [
-    # patch the tests to check for the correct version string (2.2.1)
-    (fetchpatch {
-      url = "https://patch-diff.githubusercontent.com/raw/bialix/intelhex/pull/26.patch";
-      sha256 = "1f3f2cyf9ipb9zdifmjs8rqhg028dhy91vabxxn3l7br657s8r2l";
-    })
-  ];
+  checkInputs = [ pytestCheckHook ];
+
+  pytestFlagsArray = [ "intelhex/test.py" ];
+
+  pythonImportsCheck = [ "intelhex" ];
 
   meta = {
     homepage = "https://github.com/bialix/intelhex";
diff --git a/nixpkgs/pkgs/development/python-modules/internetarchive/default.nix b/nixpkgs/pkgs/development/python-modules/internetarchive/default.nix
index ca91ad954a44..0d1fb08e2a4e 100644
--- a/nixpkgs/pkgs/development/python-modules/internetarchive/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/internetarchive/default.nix
@@ -19,11 +19,11 @@
 
 buildPythonPackage rec {
   pname = "internetarchive";
-  version = "1.9.9";
+  version = "2.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a1614cbf35499d833e07699ddfd344764f86959fd5535aa9ce1203f57a77f970";
+    sha256 = "515e6646a2b917c15f2241670d21f14a014b9c67dc509aef4d4aca5a59cdda65";
   };
 
   propagatedBuildInputs = [
@@ -52,7 +52,8 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "A Python and Command-Line Interface to Archive.org";
     homepage = "https://github.com/jjjake/internetarchive";
-    license = licenses.agpl3;
+    changelog = "https://github.com/jjjake/internetarchive/raw/v${version}/HISTORY.rst";
+    license = licenses.agpl3Plus;
     maintainers = [ maintainers.marsam ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ipykernel/default.nix b/nixpkgs/pkgs/development/python-modules/ipykernel/default.nix
index c8539598fe6f..98944d2543c4 100644
--- a/nixpkgs/pkgs/development/python-modules/ipykernel/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ipykernel/default.nix
@@ -2,7 +2,6 @@
 , stdenv
 , buildPythonPackage
 , fetchPypi
-, fetchpatch
 , flaky
 , ipython
 , jupyter_client
@@ -15,23 +14,15 @@
 
 buildPythonPackage rec {
   pname = "ipykernel";
-  version = "5.2.1";
+  version = "5.5.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1a3hr7wx3ywwskr99hgp120dw9ab1vmcaxdixlsbd9bg6ly3fdr9";
+    sha256 = "98321abefdf0505fb3dc7601f60fc4087364d394bd8fad53107eb1adee9ff475";
   };
 
   propagatedBuildInputs = [ ipython jupyter_client traitlets tornado ];
 
-  # https://github.com/ipython/ipykernel/pull/377
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/ipython/ipykernel/commit/a3bf849dbd368a1826deb9dfc94c2bd3e5ed04fe.patch";
-      sha256 = "1yhpwqixlf98a3n620z92mfips3riw6psijqnc5jgs2p58fgs2yc";
-    })
-  ];
-
   checkInputs = [ pytestCheckHook nose flaky ];
   dontUseSetuptoolsCheck = true;
   preCheck = ''
diff --git a/nixpkgs/pkgs/development/python-modules/ipython/default.nix b/nixpkgs/pkgs/development/python-modules/ipython/default.nix
index dd9004aa0cb3..d9447e91385f 100644
--- a/nixpkgs/pkgs/development/python-modules/ipython/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ipython/default.nix
@@ -22,12 +22,12 @@
 
 buildPythonPackage rec {
   pname = "ipython";
-  version = "7.19.0";
+  version = "7.21.0";
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cbb2ef3d5961d44e6a963b9817d4ea4e1fa2eb589c371a470fed14d8d40cbd6a";
+    sha256 = "04323f72d5b85b606330b6d7e2dc8d2683ad46c3905e955aa96ecc7a99388e70";
   };
 
   prePatch = lib.optionalString stdenv.isDarwin ''
diff --git a/nixpkgs/pkgs/development/python-modules/ircrobots/default.nix b/nixpkgs/pkgs/development/python-modules/ircrobots/default.nix
index 41973e805846..947da75ce9a9 100644
--- a/nixpkgs/pkgs/development/python-modules/ircrobots/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ircrobots/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "ircrobots";
-  version = "0.3.6";
+  version = "0.3.7";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "jesopo";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1c8h8b78gmnfipppr9dxp7sl6wd9lx4l3pdwykaib1f49dqwavys";
+    sha256 = "0cm4hcmprca24d979ydbzwn9mfxw16jki6ld7yykxryf0983nqc7";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/iso8601/default.nix b/nixpkgs/pkgs/development/python-modules/iso8601/default.nix
index b83374fff3e1..783f6f1eb305 100644
--- a/nixpkgs/pkgs/development/python-modules/iso8601/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/iso8601/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "iso8601";
-  version = "0.1.13";
+  version = "0.1.14";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f7dec22af52025d4526be94cc1303c7d8f5379b746a3f54a8c8446384392eeb1";
+    sha256 = "8aafd56fa0290496c5edbb13c311f78fa3a241f0853540da09d9363eae3ebd79";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/jabberbot/default.nix b/nixpkgs/pkgs/development/python-modules/jabberbot/default.nix
deleted file mode 100644
index d00ccd06c8d6..000000000000
--- a/nixpkgs/pkgs/development/python-modules/jabberbot/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ lib, buildPythonPackage, isPy3k, fetchPypi, xmpppy }:
-
-buildPythonPackage rec {
-  pname = "jabberbot";
-  version = "0.16";
-
-  disabled = isPy3k;
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1qr7c5p9a0nzsvri1djnd5r3d7ilh2mdxvviqn1s2hcc70rha65d";
-  };
-
-  propagatedBuildInputs = [ xmpppy ];
-
-  doCheck = false; # lol, it does not even specify dependencies properly
-
-  meta = with lib; {
-    description = "A framework for writing Jabber/XMPP bots and services";
-    homepage = "http://thp.io/2007/python-jabberbot/";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ mic92 ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/jaraco_classes/default.nix b/nixpkgs/pkgs/development/python-modules/jaraco_classes/default.nix
index a3d19df76537..9054f1f109c5 100644
--- a/nixpkgs/pkgs/development/python-modules/jaraco_classes/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jaraco_classes/default.nix
@@ -1,19 +1,34 @@
-{ buildPythonPackage, fetchPypi, isPy27, setuptools_scm, six, more-itertools }:
+{ lib, buildPythonPackage, fetchFromGitHub, isPy27
+, setuptools_scm, toml
+, more-itertools
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "jaraco.classes";
-  version = "3.1.0";
+  version = "3.1.1";
   disabled = isPy27;
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1avsxzm5mwylmy2zbxq3xvn48z5djb0qy3hwv4ryncprivzri1n3";
+  src = fetchFromGitHub {
+    owner = "jaraco";
+    repo = "jaraco.classes";
+    rev = "v${version}";
+    sha256 = "0wzrcsxi9gb65inayg0drm08iaw37jm1lqxhz3860i6pwjh503pr";
   };
 
   pythonNamespaces = [ "jaraco" ];
 
-  nativeBuildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ six more-itertools ];
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
 
-  doCheck = false;
+  nativeBuildInputs = [ setuptools_scm toml ];
+
+  propagatedBuildInputs = [ more-itertools ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  meta = with lib; {
+    description = "Utility functions for Python class constructs";
+    homepage = "https://github.com/jaraco/jaraco.classes";
+    license = licenses.mit;
+  };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/jc/default.nix b/nixpkgs/pkgs/development/python-modules/jc/default.nix
index e1318b51aefe..61c9e85ced2e 100644
--- a/nixpkgs/pkgs/development/python-modules/jc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jc/default.nix
@@ -10,14 +10,14 @@
 
 buildPythonPackage rec {
   pname = "jc";
-  version = "1.14.3";
+  version = "1.14.4";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "kellyjonbrazil";
     repo = "jc";
     rev = "v${version}";
-    sha256 = "sha256-6ofw74onFECJYYSuZlOVcNVAVuJaJKV4pkaJ4cTrvPk=";
+    sha256 = "sha256-RJiJByORpdMWZkA7q7A+WoV4S/UcOP/VZ5TVxFMLYSg=";
   };
 
   propagatedBuildInputs = [ ruamel_yaml xmltodict pygments ];
diff --git a/nixpkgs/pkgs/development/python-modules/jellyfin-apiclient-python/default.nix b/nixpkgs/pkgs/development/python-modules/jellyfin-apiclient-python/default.nix
index 33c14dbaeb2d..b06db621b730 100644
--- a/nixpkgs/pkgs/development/python-modules/jellyfin-apiclient-python/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jellyfin-apiclient-python/default.nix
@@ -1,24 +1,23 @@
-{ lib, buildPythonPackage, fetchFromGitHub, requests
+{ lib, buildPythonPackage, fetchPypi, requests
 , websocket_client, pythonOlder }:
 
 buildPythonPackage rec {
   pname = "jellyfin-apiclient-python";
-  version = "1.6.1";
+  version = "1.7.2";
   disabled = pythonOlder "3.6";
 
-  src = fetchFromGitHub {
-    owner = "iwalton3";
-    repo = "jellyfin-apiclient-python";
-    rev = "v${version}";
-    sha256 = "0f7czq83ic22fz1vnf0cavb7l3grcxxd5yyw9wcjz3g1j2d76735";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-nSLUa9/jAT6XrHo77kV5HYBxPO/lhcWKqPfpES7ul9A=";
   };
 
   propagatedBuildInputs = [ requests websocket_client ];
 
+  doCheck = false; # no tests
   pythonImportsCheck = [ "jellyfin_apiclient_python" ];
 
   meta = with lib; {
-    homepage = "https://github.com/iwalton3/jellyfin-apiclient-python";
+    homepage = "https://github.com/jellyfin/jellyfin-apiclient-python";
     description = "Python API client for Jellyfin";
     license = licenses.gpl3;
     maintainers = with maintainers; [ jojosch ];
diff --git a/nixpkgs/pkgs/development/python-modules/jenkins-job-builder/default.nix b/nixpkgs/pkgs/development/python-modules/jenkins-job-builder/default.nix
index 7d4f6dd93639..3ae6bf84ae4f 100644
--- a/nixpkgs/pkgs/development/python-modules/jenkins-job-builder/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jenkins-job-builder/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "jenkins-job-builder";
-  version = "3.8.0";
+  version = "3.9.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-uRyeRP1y3GS7tXb0kHLBi7+trJRme/Ke3xgOY+LqZ6k=";
+    sha256 = "4a53e146843d567c375c2e61e70a840d75a412402fd78c1dd3da5642a6aaa375";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/jinja2/default.nix b/nixpkgs/pkgs/development/python-modules/jinja2/default.nix
index 5dc3cbe105e5..dce93d33ab50 100644
--- a/nixpkgs/pkgs/development/python-modules/jinja2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jinja2/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "Jinja2";
-  version = "2.11.2";
+  version = "2.11.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0";
+    sha256 = "a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/joblib/default.nix b/nixpkgs/pkgs/development/python-modules/joblib/default.nix
index 16edf3c04e14..9c54418bafef 100644
--- a/nixpkgs/pkgs/development/python-modules/joblib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/joblib/default.nix
@@ -13,12 +13,12 @@
 
 buildPythonPackage rec {
   pname = "joblib";
-  version = "0.17.0";
-  disabled = pythonOlder "3.6";
+  version = "1.0.0";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9e284edd6be6b71883a63c9b7f124738a3c16195513ad940eae7e3438de885d5";
+    sha256 = "092bnvr724cfvka8267z687bf086fvm7i1hwslkyrzf1g836dn3s";
   };
 
   checkInputs = [ sphinx numpydoc pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/johnnycanencrypt/default.nix b/nixpkgs/pkgs/development/python-modules/johnnycanencrypt/default.nix
index 77789fa44dbe..460b0cddf616 100644
--- a/nixpkgs/pkgs/development/python-modules/johnnycanencrypt/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/johnnycanencrypt/default.nix
@@ -1,14 +1,12 @@
 { lib
 , stdenv
-, rustPlatform
 , fetchFromGitHub
-, pipInstallHook
+, buildPythonPackage
+, rustPlatform
 , llvmPackages
 , pkg-config
-, maturin
 , pcsclite
 , nettle
-, python
 , requests
 , vcrpy
 , numpy
@@ -17,7 +15,7 @@
 , PCSC
 }:
 
-rustPlatform.buildRustPackage rec {
+buildPythonPackage rec {
   pname = "johnnycanencrypt";
   version = "0.5.0";
   disabled = pythonOlder "3.7";
@@ -28,7 +26,16 @@ rustPlatform.buildRustPackage rec {
     rev = "v${version}";
     sha256 = "192wfrlyylrpzq70yki421mi1smk8q2cyki2a1d03q7h6apib3j4";
   };
-  cargoPatches = [ ./Cargo.lock.patch ];
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit patches src;
+    name = "${pname}-${version}";
+    hash = "sha256-2XhXCKyXVlFgbcOoMy/A5ajiIVxBii56YeI29mO720U=";
+  };
+
+  format = "pyproject";
+
+  patches = [ ./Cargo.lock.patch ];
 
   cargoSha256 = "0ifvpdizcdp2c5x2x2j1bhhy5a75q0pk7a63dmh52mlpmh45fy6r";
 
@@ -42,10 +49,10 @@ rustPlatform.buildRustPackage rec {
   nativeBuildInputs = [
     llvmPackages.clang
     pkg-config
-    python
-    maturin
-    pipInstallHook
-  ];
+  ] ++ (with rustPlatform; [
+    cargoSetupHook
+    maturinBuildHook
+  ]);
 
   buildInputs = [
     pcsclite
@@ -67,17 +74,6 @@ rustPlatform.buildRustPackage rec {
     sed '/project-url = /d' -i Cargo.toml
   '';
 
-  buildPhase = ''
-    runHook preBuild
-    maturin build --release --manylinux off --strip --cargo-extra-args="-j $NIX_BUILD_CORES --frozen"
-    runHook postBuild
-  '';
-
-  installPhase = ''
-    install -Dm644 -t dist target/wheels/*.whl
-    pipInstallPhase
-  '';
-
   preCheck = ''
     export TESTDIR=$(mktemp -d)
     cp -r tests/ $TESTDIR
diff --git a/nixpkgs/pkgs/development/python-modules/josepy/default.nix b/nixpkgs/pkgs/development/python-modules/josepy/default.nix
index b6e6f47b64b1..3f30da8da9b4 100644
--- a/nixpkgs/pkgs/development/python-modules/josepy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/josepy/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "josepy";
-  version = "1.6.0";
+  version = "1.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0aab1c3ceffe045e7fd5bcfe7685e27e9d2758518d9ba7116b5de34087e70bf5";
+    sha256 = "d265414fa16d7a8b7a1d1833b4ebb19a22bd0deae5d44413cf9040fd8491d85a";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/jq/default.nix b/nixpkgs/pkgs/development/python-modules/jq/default.nix
index 3d4097b07186..efc1152678f3 100644
--- a/nixpkgs/pkgs/development/python-modules/jq/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jq/default.nix
@@ -2,16 +2,21 @@
 
 buildPythonPackage rec {
   pname = "jq";
-  version = "1.1.1";
+  version = "1.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "62d649c4f6f26ed91810c8db075f5fe05319c3dc99dbebcd2d31b0b697a4592e";
+    sha256 = "77e747c6ad10ce65479f5f9064ab036483bf307bf71fdd7d6235ef895fcc506e";
   };
+
   patches = [ ./jq-py-setup.patch ];
 
   buildInputs = [ jq ];
 
+  # no tests executed
+  doCheck = false;
+  pythonImportsCheck = [ "jq" ];
+
   meta = {
     description = "Python bindings for jq, the flexible JSON processor";
     homepage = "https://github.com/mwilliamson/jq.py";
diff --git a/nixpkgs/pkgs/development/python-modules/jsbeautifier/default.nix b/nixpkgs/pkgs/development/python-modules/jsbeautifier/default.nix
index a5468fa273b5..09eb45f964cd 100644
--- a/nixpkgs/pkgs/development/python-modules/jsbeautifier/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jsbeautifier/default.nix
@@ -2,14 +2,14 @@
 
 buildPythonApplication rec {
   pname = "jsbeautifier";
-  version = "1.13.0";
+  version = "1.13.5";
 
   propagatedBuildInputs = [ six editorconfig ];
   checkInputs = [ pytest ];
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f5565fbcd95f79945e124324815e586ae0d2e43df5af82a4400390e6ea789e8b";
+    sha256 = "4532a6bc85ba91ffc542b55d65cd13cedc971a934f26f51ed56d4c680b3fbe66";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/json-rpc/default.nix b/nixpkgs/pkgs/development/python-modules/json-rpc/default.nix
new file mode 100644
index 000000000000..e475c3117df3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/json-rpc/default.nix
@@ -0,0 +1,24 @@
+{ lib, isPy27, buildPythonPackage, fetchPypi, pytestCheckHook, mock }:
+
+let
+  pythonEnv = lib.optional isPy27 mock;
+in buildPythonPackage rec {
+  pname = "json-rpc";
+  version = "1.13.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "12bmblnznk174hqg2irggx4hd3cq1nczbwkpsqqzr13hbg7xpw6y";
+  };
+
+  checkInputs = pythonEnv ++ [ pytestCheckHook ];
+
+  nativeBuildInputs = pythonEnv;
+
+  meta = with lib; {
+    description = "JSON-RPC 1/2 transport implementation";
+    homepage = "https://github.com/pavlov99/json-rpc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/json5/default.nix b/nixpkgs/pkgs/development/python-modules/json5/default.nix
new file mode 100644
index 000000000000..cecce31e0ecc
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/json5/default.nix
@@ -0,0 +1,30 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, hypothesis
+, lib
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "json5";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "dpranke";
+    repo = "pyjson5";
+    rev = "v${version}";
+    sha256 = "sha256-VkJnZG1BuC49/jJuwObbqAF48CtbWU9rDEYW4Dg0w4U=";
+  };
+
+  checkInputs = [
+    hypothesis
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dpranke/pyjson5";
+    description = "A Python implementation of the JSON5 data format";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ veehaitch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/jsonpath-ng/default.nix b/nixpkgs/pkgs/development/python-modules/jsonpath-ng/default.nix
new file mode 100644
index 000000000000..a623c859e168
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/jsonpath-ng/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, decorator
+, fetchFromGitHub
+, ply
+, pytestCheckHook
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "jsonpath-ng";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "h2non";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1cxjwhx0nj85a3awnl7j6afnk07awzv45qfwxl5jqbbc9cxh5bd6";
+  };
+
+  propagatedBuildInputs = [
+    decorator
+    ply
+    six
+  ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  disabledTestFiles = [
+    # Exclude tests that require oslotest
+    "tests/test_jsonpath_rw_ext.py"
+  ];
+
+  pythonImportsCheck = [ "jsonpath_ng" ];
+
+  meta = with lib; {
+    description = "JSONPath implementation for Python";
+    homepage = "https://github.com/h2non/jsonpath-ng";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/jsonpickle/default.nix b/nixpkgs/pkgs/development/python-modules/jsonpickle/default.nix
index 66e7d62aa839..abf3c27e98ff 100644
--- a/nixpkgs/pkgs/development/python-modules/jsonpickle/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jsonpickle/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "jsonpickle";
-  version = "1.4.1";
+  version = "1.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e8d4b7cd0bd6826001a74377df1079a76ad8bae0f909282de2554164c837c8ba";
+    sha256 = "c9b99b28a9e6a3043ec993552db79f4389da11afcb1d0246d93c79f4b5e64062";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/jupyter-packaging/default.nix b/nixpkgs/pkgs/development/python-modules/jupyter-packaging/default.nix
new file mode 100644
index 000000000000..fdc28f08ef4b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/jupyter-packaging/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, packaging
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "jupyter-packaging";
+  version = "0.7.12";
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-sUAyV3GIGn33t/LRSZe2GQY/51rnVrkCWFLkNGAAu7g=";
+  };
+
+  propagatedBuildInputs = [ packaging ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  # disable tests depending on network connection
+  disabledTests = [ "test_develop" "test_install" ];
+
+  pythonImportsCheck = [ "jupyter_packaging" ];
+
+  meta = with lib; {
+    description = "Jupyter Packaging Utilities";
+    homepage = "https://github.com/jupyter/jupyter-packaging";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/jupyter_client/default.nix b/nixpkgs/pkgs/development/python-modules/jupyter_client/default.nix
index 47d3bb6af0c0..456e82e75f18 100644
--- a/nixpkgs/pkgs/development/python-modules/jupyter_client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupyter_client/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "jupyter_client";
-  version = "6.1.7";
+  version = "6.1.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "49e390b36fe4b4226724704ea28d9fb903f1a3601b6882ce3105221cd09377a1";
+    sha256 = "649ca3aca1e28f27d73ef15868a7c7f10d6e70f761514582accec3ca6bb13085";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/jupyter_console/default.nix b/nixpkgs/pkgs/development/python-modules/jupyter_console/default.nix
index 372698744cf7..712117d50113 100644
--- a/nixpkgs/pkgs/development/python-modules/jupyter_console/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupyter_console/default.nix
@@ -12,12 +12,12 @@
 
 buildPythonPackage rec {
   pname = "jupyter_console";
-  version = "6.2.0";
+  version = "6.3.0";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7f6194f4f4692d292da3f501c7f343ccd5e36c6a1becf7b7515e23e66d6bf1e9";
+    sha256 = "947f66bbdeee2221b4fb3a6b78225d337b8f10832f14cecf7932183635abe1d9";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/jupyter_core/default.nix b/nixpkgs/pkgs/development/python-modules/jupyter_core/default.nix
index 54ea49c34004..cff5dc194aa4 100644
--- a/nixpkgs/pkgs/development/python-modules/jupyter_core/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupyter_core/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "jupyter_core";
-  version = "4.7.0";
+  version = "4.7.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "aa1f9496ab3abe72da4efe0daab0cb2233997914581f9a071e07498c6add8ed3";
+    sha256 = "79025cb3225efcd36847d0840f3fc672c0abd7afd0de83ba8a1d3837619122b4";
   };
 
   checkInputs = [ pytest mock glibcLocales nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/jupyter_server/default.nix b/nixpkgs/pkgs/development/python-modules/jupyter_server/default.nix
new file mode 100644
index 000000000000..a9f98781b4fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/jupyter_server/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, pytestCheckHook
+, pytest-tornasync
+, jinja2
+, tornado
+, pyzmq
+, ipython_genutils
+, traitlets
+, jupyter_core
+, jupyter_client
+, nbformat
+, nbconvert
+, send2trash
+, terminado
+, prometheus_client
+, anyio
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "jupyter_server";
+  version = "1.4.1";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-sBJvI39nlTPuxGJEz8ZtYeOh+OwPrS1HNS+hnT51Tkc=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "anyio>=2.0.2" "anyio"
+  '';
+
+  propagatedBuildInputs = [
+    jinja2
+    tornado
+    pyzmq
+    ipython_genutils
+    traitlets
+    jupyter_core
+    jupyter_client
+    nbformat
+    nbconvert
+    send2trash
+    terminado
+    prometheus_client
+    anyio
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-tornasync
+    requests
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  pytestFlagsArray = [ "jupyter_server/tests/" ];
+
+  # disabled failing tests
+  disabledTests = [ "test_server_extension_list" "test_list_formats" "test_base_url" ];
+
+  meta = with lib; {
+    description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications.";
+    homepage = "https://github.com/jupyter-server/jupyter_server";
+    license = licenses.bsdOriginal;
+    maintainers = [ maintainers.elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/jupyterhub/default.nix b/nixpkgs/pkgs/development/python-modules/jupyterhub/default.nix
index 704d9174ebd7..108d11853f05 100644
--- a/nixpkgs/pkgs/development/python-modules/jupyterhub/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupyterhub/default.nix
@@ -1,33 +1,40 @@
 { lib
+, stdenv
 , buildPythonPackage
+, pythonOlder
 , fetchPypi
 , fetchzip
 , alembic
-, ipython
-, jinja2
-, python-oauth2
-, prometheus_client
 , async_generator
+, certipy
+, dateutil
+, entrypoints
+, jinja2
+, jupyter-telemetry
+, oauthlib
 , pamela
+, prometheus_client
+, requests
 , sqlalchemy
 , tornado
 , traitlets
-, requests
-, notebook
-, pythonOlder
 , nodePackages
-, oauthlib
-, certipy
-, jupyter-telemetry
+, beautifulsoup4
+, cryptography
+, notebook
+, pytest-asyncio
+, pytestCheckHook
+, requests-mock
+, virtualenv
 }:
 
 let
   # js/css assets that setup.py tries to fetch via `npm install` when building
-  # from source.
+  # from source. https://github.com/jupyterhub/jupyterhub/blob/master/package.json
   bootstrap =
     fetchzip {
-      url = "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz";
-      sha256 = "0r7s54bbf68ri1na9bbabyf12mcpb6zk5ja2q6z82aw1fa4xi3yd";
+      url = "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz";
+      sha256 = "1ywmxqdccg0mgx0xknrn1hlrfnhcwphc12y9l91zizx26fqfmzgc";
     };
   font-awesome =
     fetchzip {
@@ -36,30 +43,30 @@ let
     };
   jquery =
     fetchzip {
-      url = "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz";
-      sha256 = "1j6y18miwzafdj8kfpwbmbn9qvgnbnpc7l4arqrhqj33m04xrlgi";
+      url = "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz";
+      sha256 = "0yi9ql493din1qa1s923nd5zvd0klk1sx00xj1wx2yambmq86vm9";
     };
   moment =
     fetchzip {
-      url = "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz";
-      sha256 = "12gb3p0rz5wyjwykv9g0pix7dd352lx1z7rzdjsf2brhwc4ffyip";
+      url = "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz";
+      sha256 = "0ifzzla4zffw23g3xvhwx3fj3jny6cjzxfzl1x0317q8wa0c7w5i";
     };
   requirejs =
     fetchzip {
-      url = "https://registry.npmjs.org/requirejs/-/requirejs-2.3.4.tgz";
-      sha256 = "0q6mkj0iv341kks06dya6lfs2kdw0n6vc7n4a7aa3ia530fk9vja";
+      url = "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz";
+      sha256 = "165hkli3qcd59cjqvli9r5f92i0h7czkmhcg1cgwamw2d0b7xibz";
     };
 
 in
 
 buildPythonPackage rec {
   pname = "jupyterhub";
-  version = "1.1.0";
-  disabled = pythonOlder "3.5";
+  version = "1.3.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1mqknz0rxqzx4nc57vscvfh2d4znzlzpy83ancqxdaq3b8i70al5";
+    sha256 = "13pf6qhimpaxj20871ff5rvwwan59320cdhhrn9cfh6314971zq5";
   };
 
   # Most of this only applies when building from source (e.g. js/css assets are
@@ -86,12 +93,7 @@ buildPythonPackage rec {
       "'${nodePackages.configurable-http-proxy}/bin/configurable-http-proxy'"
 
     substituteInPlace setup.py --replace \
-      "'npm', 'run', 'lessc', '--'" \
-      "'${nodePackages.less}/bin/lessc'"
-
-    substituteInPlace setup.py --replace \
-      "'npm', 'install', '--progress=false'" \
-      "'true'"
+      "'npm'" "'true'"
 
     declare -A deps
     deps[bootstrap]=${bootstrap}
@@ -109,19 +111,52 @@ buildPythonPackage rec {
   '';
 
   propagatedBuildInputs = [
-    alembic ipython jinja2 pamela python-oauth2 requests sqlalchemy tornado
-    traitlets prometheus_client async_generator notebook certipy oauthlib
+    # https://github.com/jupyterhub/jupyterhub/blob/master/requirements.txt
+    alembic
+    async_generator
+    certipy
+    dateutil
+    entrypoints
+    jinja2
     jupyter-telemetry
+    oauthlib
+    pamela
+    prometheus_client
+    requests
+    sqlalchemy
+    tornado
+    traitlets
   ];
 
-  # Disable tests because they take an excessive amount of time to complete.
-  doCheck = false;
+  preCheck = ''
+    substituteInPlace jupyterhub/tests/test_spawner.py --replace \
+      "'jupyterhub-singleuser'" "'$out/bin/jupyterhub-singleuser'"
+  '';
 
+  checkInputs = [
+    # https://github.com/jupyterhub/jupyterhub/blob/master/dev-requirements.txt
+    beautifulsoup4
+    cryptography
+    notebook
+    pytest-asyncio
+    pytestCheckHook
+    requests-mock
+    virtualenv
+  ];
+
+  disabledTests = [
+    # Tries to install older versions through pip
+    "test_upgrade"
+    # Testcase fails to find requests import
+    "test_external_service"
+  ];
 
   meta = with lib; {
     description = "Serves multiple Jupyter notebook instances";
     homepage = "https://jupyter.org/";
     license = licenses.bsd3;
     maintainers = with maintainers; [ ixxie cstrahan ];
+    # E   OSError: dlopen(/nix/store/43zml0mlr17r5jsagxr00xxx91hz9lky-openpam-20170430/lib/libpam.so, 6): image not found
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/jupyterlab/default.nix b/nixpkgs/pkgs/development/python-modules/jupyterlab/default.nix
index ff725ce18297..f22b52b25b6a 100644
--- a/nixpkgs/pkgs/development/python-modules/jupyterlab/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupyterlab/default.nix
@@ -4,19 +4,21 @@
 , jupyterlab_server
 , notebook
 , pythonOlder
+, jupyter-packaging
+, nbclassic
 }:
 
 buildPythonPackage rec {
   pname = "jupyterlab";
-  version = "2.2.9";
+  version = "3.0.12";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3be8f8edea173753dd838c1b6d3bbcb6f5c801121f824a477025c1b6a1d33dc6";
+    sha256 = "929c60d7fb4aa704084c02d8ededc209b8b378e0b3adab46158b7fa6acc24230";
   };
 
-  propagatedBuildInputs = [ jupyterlab_server notebook ];
+  propagatedBuildInputs = [ jupyterlab_server notebook jupyter-packaging nbclassic ];
 
   makeWrapperArgs = [
     "--set" "JUPYTERLAB_DIR" "$out/share/jupyter/lab"
diff --git a/nixpkgs/pkgs/development/python-modules/jupyterlab_server/default.nix b/nixpkgs/pkgs/development/python-modules/jupyterlab_server/default.nix
index 3d9b5b9f831b..c110cc0590fe 100644
--- a/nixpkgs/pkgs/development/python-modules/jupyterlab_server/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/jupyterlab_server/default.nix
@@ -1,34 +1,45 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, notebook
 , jsonschema
 , pythonOlder
 , requests
-, pytest
+, pytestCheckHook
 , pyjson5
+, Babel
+, jupyter_server
+, pytest-tornasync
+, pytestcov
+, strict-rfc3339
 }:
 
 buildPythonPackage rec {
   pname = "jupyterlab_server";
-  version = "1.2.0";
+  version = "2.3.0";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5431d9dde96659364b7cc877693d5d21e7b80cea7ae3959ecc2b87518e5f5d8c";
+    sha256 = "sha256-56AkWqPeI6GAPeLv9AHkykWUU42fWYBhNPMEGabYtqM=";
   };
 
-  checkInputs = [ requests pytest ];
-  propagatedBuildInputs = [ notebook jsonschema pyjson5 ];
+  propagatedBuildInputs = [ requests jsonschema pyjson5 Babel jupyter_server ];
 
-  # test_listing test fails
-  # this is a new package and not all tests pass
-  doCheck = false;
+  checkInputs = [
+    pytestCheckHook
+    pytest-tornasync
+    pytestcov
+    strict-rfc3339
+  ];
 
-  checkPhase = ''
-    pytest
-  '';
+  disabledTests = [
+    "test_get_locale"
+    "test_get_installed_language_pack_locales_passes"
+    "test_get_installed_package_locales"
+    "test_get_installed_packages_locale"
+    "test_get_language_packs"
+    "test_get_language_pack"
+  ];
 
   meta = with lib; {
     description = "JupyterLab Server";
diff --git a/nixpkgs/pkgs/development/python-modules/kaggle/default.nix b/nixpkgs/pkgs/development/python-modules/kaggle/default.nix
index 8ff129637375..6b67818decfc 100644
--- a/nixpkgs/pkgs/development/python-modules/kaggle/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/kaggle/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "kaggle";
-  version = "1.5.10";
+  version = "1.5.12";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "05a2a3d4adeebc8a465d037999ba8db2cb471a24b41d623d4bcb80aac02ddbc9";
+    sha256 = "b4d87d107bff743aaa805c2b382c3661c4c175cdb159656d4972be2a9cef42cb";
   };
 
   # The version bounds in the setup.py file are unnecessarily restrictive.
diff --git a/nixpkgs/pkgs/development/python-modules/keep/default.nix b/nixpkgs/pkgs/development/python-modules/keep/default.nix
index 5a70dcb4676d..8b9823b6f031 100644
--- a/nixpkgs/pkgs/development/python-modules/keep/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/keep/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "keep";
-  version = "2.10";
+  version = "2.10.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ce71d14110df197ab5afdbd26a14c0bd266b79671118ae1351835fa192e61d9b";
+    sha256 = "3abbe445347711cecd9cbb80dab4a0777418972fc14a14e9387d0d2ae4b6adb7";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/kerberos/default.nix b/nixpkgs/pkgs/development/python-modules/kerberos/default.nix
index 7a9ce3aab448..c4772d606518 100644
--- a/nixpkgs/pkgs/development/python-modules/kerberos/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/kerberos/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, kerberos
+, libkrb5
 }:
 
 buildPythonPackage rec {
@@ -13,7 +13,7 @@ buildPythonPackage rec {
     sha256 = "cdd046142a4e0060f96a00eb13d82a5d9ebc0f2d7934393ed559bac773460a2c";
   };
 
-  nativeBuildInputs = [ kerberos ];
+  nativeBuildInputs = [ libkrb5 ];
 
   # No tests in archive
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/kivy-garden/default.nix b/nixpkgs/pkgs/development/python-modules/kivy-garden/default.nix
new file mode 100644
index 000000000000..edfad0c9b91d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/kivy-garden/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "kivy-garden";
+  version = "0.1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  pythonImportsCheck = [ "garden" ];
+
+  # There are no tests in the Pypi archive and building from source is not
+  # easily feasible because the build is done using buildozer and multiple
+  # repositories.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "The kivy garden installation script, split into its own package for convenient use in buildozer.";
+    homepage = "https://pypi.python.org/pypi/kivy-garden";
+    license = licenses.mit;
+    maintainers = with maintainers; [ risson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/kivy/default.nix b/nixpkgs/pkgs/development/python-modules/kivy/default.nix
new file mode 100644
index 000000000000..d4fa39c0c363
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/kivy/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, buildPythonPackage, fetchPypi
+, pkg-config, cython, docutils
+, kivy-garden
+, mesa, mtdev, SDL2, SDL2_image, SDL2_ttf, SDL2_mixer, gst_all_1
+, pillow, requests, pygments
+}:
+
+buildPythonPackage rec {
+  pname = "Kivy";
+  version = "2.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1n0j9046vgjncy50v06r3wcg3q2l37jp8n0cznr64dz48kml8pnj";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    cython
+    docutils
+  ];
+
+  buildInputs = [
+    mesa
+    mtdev
+    SDL2
+    SDL2_image
+    SDL2_ttf
+    SDL2_mixer
+
+    # NOTE: The degree to which gstreamer actually works is unclear
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+  ];
+
+  propagatedBuildInputs = [
+    kivy-garden
+    pillow
+    pygments
+    requests
+  ];
+
+  KIVY_NO_CONFIG = 1;
+  KIVY_NO_ARGS = 1;
+  KIVY_NO_FILELOG = 1;
+
+  postPatch = ''
+    substituteInPlace kivy/lib/mtdev.py \
+      --replace "LoadLibrary('libmtdev.so.1')" "LoadLibrary('${mtdev}/lib/libmtdev.so.1')"
+  '';
+
+  /*
+    We cannot run tests as Kivy tries to import itself before being fully
+    installed.
+  */
+  doCheck = false;
+  pythonImportsCheck = [ "kivy" ];
+
+  meta = with lib; {
+    description = "Library for rapid development of hardware-accelerated multitouch applications.";
+    homepage = "https://pypi.python.org/pypi/kivy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ risson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/knack/default.nix b/nixpkgs/pkgs/development/python-modules/knack/default.nix
index c08bdab4cf34..0b4c24afa4dc 100644
--- a/nixpkgs/pkgs/development/python-modules/knack/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/knack/default.nix
@@ -4,7 +4,6 @@
 , argcomplete
 , colorama
 , jmespath
-, knack
 , pygments
 , pyyaml
 , six
@@ -16,11 +15,11 @@
 
 buildPythonPackage rec {
   pname = "knack";
-  version = "0.7.2";
+  version = "0.8.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dfc6aef6760ea9a9620577e01540617678d78cab3111a0f03e8b9f987d0f08ca";
+    sha256 = "16aa47240add6badd933a0b27576f3c090d7469177dc941e3ece05ca88123199";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/kombu/default.nix b/nixpkgs/pkgs/development/python-modules/kombu/default.nix
index 1aa22a62e19f..a5ca1a7ab2a4 100644
--- a/nixpkgs/pkgs/development/python-modules/kombu/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/kombu/default.nix
@@ -22,8 +22,6 @@ buildPythonPackage rec {
   postPatch = ''
     substituteInPlace requirements/test.txt \
       --replace "pytest-sugar" ""
-    substituteInPlace requirements/default.txt \
-      --replace "amqp==2.5.1" "amqp~=2.5"
   '';
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/labelbox/default.nix b/nixpkgs/pkgs/development/python-modules/labelbox/default.nix
index 1efe01092124..1c29d7473681 100644
--- a/nixpkgs/pkgs/development/python-modules/labelbox/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/labelbox/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "labelbox";
-  version = "2.4.9";
+  version = "2.4.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "488fb0b2233738c3bba3d3bf67b941f105553b7286cca3099ac0120dd247bd84";
+    sha256 = "e5a631a94ac2059648a884bebf39f7ca1e689baef4a2497f9aa5ec598e24deb7";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/labgrid/0001-serialdriver-remove-pyserial-version-check.patch b/nixpkgs/pkgs/development/python-modules/labgrid/0001-serialdriver-remove-pyserial-version-check.patch
new file mode 100644
index 000000000000..d3e3082b352d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/labgrid/0001-serialdriver-remove-pyserial-version-check.patch
@@ -0,0 +1,33 @@
+From 75baa1751973378cb96fb204b0a18a74e5caa2d1 Mon Sep 17 00:00:00 2001
+From: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+Date: Wed, 17 Feb 2021 14:03:20 +0100
+Subject: [PATCH] serialdriver: remove pyserial version check
+
+This check isn't required on NixOS, since pyserial within NixOS already
+contains the patches.
+
+Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+---
+ labgrid/driver/serialdriver.py | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/labgrid/driver/serialdriver.py b/labgrid/driver/serialdriver.py
+index 126f674e..59a92269 100644
+--- a/labgrid/driver/serialdriver.py
++++ b/labgrid/driver/serialdriver.py
+@@ -27,12 +27,6 @@ class SerialDriver(ConsoleExpectMixin, Driver, ConsoleProtocol):
+         bindings = {"port": "SerialPort", }
+     else:
+         bindings = {"port": {"SerialPort", "NetworkSerialPort"}, }
+-    if version.parse(serial.__version__) != version.Version('3.4.0.1'):
+-        message = ("The installed pyserial version does not contain important RFC2217 fixes.\n"
+-                   "You can install the labgrid fork via:\n"
+-                   "pip uninstall pyserial\n"
+-                   "pip install https://github.com/labgrid-project/pyserial/archive/v3.4.0.1.zip#egg=pyserial\n")  # pylint: disable=line-too-long
+-        warnings.warn(message)
+ 
+     txdelay = attr.ib(default=0.0, validator=attr.validators.instance_of(float))
+     timeout = attr.ib(default=3.0, validator=attr.validators.instance_of(float))
+-- 
+2.30.0
+
diff --git a/nixpkgs/pkgs/development/python-modules/labgrid/default.nix b/nixpkgs/pkgs/development/python-modules/labgrid/default.nix
new file mode 100644
index 000000000000..e9f0eda56cc7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/labgrid/default.nix
@@ -0,0 +1,80 @@
+{ ansicolors
+, attrs
+, autobahn
+, buildPythonPackage
+, fetchFromGitHub
+, jinja2
+, lib
+, mock
+, pexpect
+, psutil
+, pyserial
+, pytestCheckHook
+, pytest-dependency
+, pytest-mock
+, pyudev
+, pyusb
+, pyyaml
+, requests
+, setuptools-scm
+, xmodem
+}:
+
+buildPythonPackage rec {
+  pname = "labgrid";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "labgrid-project";
+    repo = "labgrid";
+    rev = "v${version}";
+    sha256 = "sha256-wMYsgZXNP8kTt/x8c4e96BXrbjIZZ6RsH04BfD0zGwo=";
+  };
+
+  patches = [
+    # Pyserial within Nixpkgs already includes the necessary fix, remove the
+    # pyserial version check from labgrid.
+    ./0001-serialdriver-remove-pyserial-version-check.patch
+  ];
+
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [
+    ansicolors
+    attrs
+    autobahn
+    jinja2
+    pexpect
+    pyserial
+    pyudev
+    pyusb
+    pyyaml
+    requests
+    xmodem
+  ];
+
+  preBuild = ''
+    export SETUPTOOLS_SCM_PRETEND_VERSION="${version}"
+  '';
+
+  checkInputs = [
+    mock
+    psutil
+    pytestCheckHook
+    pytest-mock
+    pytest-dependency
+  ];
+
+  disabledTests = [
+    "docker"
+    "sshmanager"
+  ];
+
+  meta = with lib; {
+    description = "Embedded control & testing library";
+    homepage = "https://labgrid.org";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/labmath/default.nix b/nixpkgs/pkgs/development/python-modules/labmath/default.nix
new file mode 100644
index 000000000000..24018fd7420e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/labmath/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "labmath";
+  version = "1.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-/fZ61tJ6PVZsubr3OXlbg/VxyyKimz36uPV+r33kgD0=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "labmath/DESCRIPTION.rst" "PKG-INFO"
+  '';
+
+  pythonImportsCheck = [ "labmath" ];
+
+  meta = with lib; {
+    homepage = "https://pypi.org/project/labmath";
+    description = "Module for basic math in the general vicinity of computational number theory";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/lammps-cython/default.nix b/nixpkgs/pkgs/development/python-modules/lammps-cython/default.nix
index 4c16010f4af8..cf6bdc38ffaa 100644
--- a/nixpkgs/pkgs/development/python-modules/lammps-cython/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lammps-cython/default.nix
@@ -9,10 +9,7 @@
 , pymatgen
 , ase
 , pytestrunner
-, pytest_4
-, pytestcov
 , isPy3k
-, openssh
 }:
 
 buildPythonPackage rec {
@@ -26,7 +23,6 @@ buildPythonPackage rec {
   };
 
   buildInputs = [ cython pytestrunner ];
-  checkInputs = [ pytest_4 pytestcov openssh ];
   propagatedBuildInputs = [ mpi4py pymatgen ase numpy ];
 
   preBuild = ''
@@ -44,10 +40,14 @@ buildPythonPackage rec {
     EOF
   '';
 
+  pythonImportsCheck = [ "lammps" ];
+
   meta = {
     description = "Pythonic Wrapper to LAMMPS using cython";
     homepage = "https://gitlab.com/costrouc/lammps-cython";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ costrouc ];
+    # fails import check
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix b/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix
index a95a8907422a..d8996a153e64 100644
--- a/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lark-parser/default.nix
@@ -1,28 +1,36 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, regex
+  # Test inputs
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "lark-parser";
-  version = "0.8.8";
+  version = "0.11.2";
 
   src = fetchFromGitHub {
     owner = "lark-parser";
     repo = "lark";
     rev = version;
-    sha256 = "1q2dvkkfx9dvag5v5ps0ki4avh7i003gn9sj30jy1rsv1bg4y2mb";
+    sha256 = "1v1piaxpz4780km2z5i6sr9ygi9wpn09yyh999b3f4y0dcz20pbd";
   };
 
-  # tests of Nearley support require js2py
-  preCheck = ''
-    rm -r tests/test_nearley
-  '';
+  propagatedBuildInputs = [ regex ];
 
-  meta = {
+  checkInputs = [ pytestCheckHook ];
+  disabledTestPaths = [
+    "tests/test_nearley" # requires Js2Py package (not in nixpkgs)
+  ];
+  disabledTests = [
+    "test_override_rule"  # has issue with file access paths
+  ];
+
+  meta = with lib; {
     description = "A modern parsing library for Python, implementing Earley & LALR(1) and an easy interface";
     homepage = "https://github.com/lark-parser/lark";
-    license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ fridh ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ fridh drewrisinger ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/launchpadlib/default.nix b/nixpkgs/pkgs/development/python-modules/launchpadlib/default.nix
index 6c5112312bb3..e39e313baa7f 100644
--- a/nixpkgs/pkgs/development/python-modules/launchpadlib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/launchpadlib/default.nix
@@ -10,6 +10,7 @@
 , six
 , testresources
 , wadllib
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -32,6 +33,8 @@ buildPythonPackage rec {
     wadllib
   ];
 
+  checkInputs = [ pytestCheckHook ];
+
   preCheck = ''
     export HOME=$TMPDIR
   '';
@@ -41,7 +44,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Script Launchpad through its web services interfaces. Officially supported";
     homepage = "https://help.launchpad.net/API/launchpadlib";
-    license = licenses.lgpl3;
+    license = licenses.lgpl3Only;
     maintainers = [ maintainers.marsam ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/lazr-restfulclient/default.nix b/nixpkgs/pkgs/development/python-modules/lazr-restfulclient/default.nix
index 93956c51b256..cb78dfff1a29 100644
--- a/nixpkgs/pkgs/development/python-modules/lazr-restfulclient/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lazr-restfulclient/default.nix
@@ -8,6 +8,10 @@
 , setuptools
 , six
 , wadllib
+, fixtures
+, lazr-uri
+, pytestCheckHook
+, wsgi-intercept
 }:
 
 buildPythonPackage rec {
@@ -23,7 +27,9 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ distro httplib2 oauthlib setuptools six wadllib ];
 
-  doCheck = false; # requires to package lazr.restful, lazr.authentication, and wsgi_intercept
+  # E   ModuleNotFoundError: No module named 'lazr.uri'
+  doCheck = false;
+  checkInputs = [ fixtures lazr-uri pytestCheckHook wsgi-intercept ];
 
   pythonImportsCheck = [ "lazr.restfulclient" ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/ldap/default.nix b/nixpkgs/pkgs/development/python-modules/ldap/default.nix
index e5cd3d3828e1..1b1aea2ab114 100644
--- a/nixpkgs/pkgs/development/python-modules/ldap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ldap/default.nix
@@ -1,5 +1,6 @@
 { buildPythonPackage, fetchPypi
-, pyasn1, pyasn1-modules, pytest
+, pyasn1, pyasn1-modules
+, pythonAtLeast, pytestCheckHook
 , openldap, cyrus_sasl, lib, stdenv }:
 
 buildPythonPackage rec {
@@ -13,20 +14,22 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ pyasn1 pyasn1-modules ];
 
+  checkInputs = [ pytestCheckHook ];
   buildInputs = [ openldap cyrus_sasl ];
 
-  checkInputs = [ pytest ];
-
-  checkPhase = ''
+  preCheck = ''
     # Needed by tests to setup a mockup ldap server.
     export BIN="${openldap}/bin"
     export SBIN="${openldap}/bin"
     export SLAPD="${openldap}/libexec/slapd"
     export SCHEMA="${openldap}/etc/schema"
-
-    py.test
   '';
 
+  disabledTests = lib.optionals (pythonAtLeast "3.9") [
+    # See https://github.com/python-ldap/python-ldap/issues/407
+    "test_simple_bind_noarg"
+  ];
+
   doCheck = !stdenv.isDarwin;
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/ldaptor/default.nix b/nixpkgs/pkgs/development/python-modules/ldaptor/default.nix
index e3694bffe378..0d0c1159332a 100644
--- a/nixpkgs/pkgs/development/python-modules/ldaptor/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ldaptor/default.nix
@@ -8,25 +8,23 @@
 , service-identity
 , zope_interface
 , isPy3k
-, pythonAtLeast
 , python
 }:
 
 buildPythonPackage rec {
   pname = "ldaptor";
-  version = "20.1.1";
+  version = "21.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "778f45d68a0b5d63a892c804c05e57b464413a41d8ae52f92ae569321473ab67";
+    sha256 = "sha256-jEnrGTddSqs+W4NYYGFODLF+VrtaIOGHSAj6W+xno1g=";
   };
 
   propagatedBuildInputs = [
     twisted passlib pyopenssl pyparsing service-identity zope_interface
   ];
 
-  # https://github.com/twisted/ldaptor/pull/210
-  disabled = !isPy3k || pythonAtLeast "3.9";
+  disabled = !isPy3k;
 
   checkPhase = ''
     ${python.interpreter} -m twisted.trial ldaptor
diff --git a/nixpkgs/pkgs/development/python-modules/ledgerblue/default.nix b/nixpkgs/pkgs/development/python-modules/ledgerblue/default.nix
index fe94753f1a62..a900c61d40b8 100644
--- a/nixpkgs/pkgs/development/python-modules/ledgerblue/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ledgerblue/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "ledgerblue";
-  version = "0.1.34";
+  version = "0.1.35";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f9553d496fbc6b612d98cc9db2f1648c1bcb63939c988ee1520e8fcb9bd77b24";
+    sha256 = "44fbd8fcf62430a6b84d4e826a9ef7fc21c77a7d8ff275f3952d6086ef06d076";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/lektor/default.nix b/nixpkgs/pkgs/development/python-modules/lektor/default.nix
index 844e28aa0788..febb1b1f0b16 100644
--- a/nixpkgs/pkgs/development/python-modules/lektor/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lektor/default.nix
@@ -12,8 +12,8 @@
 , flask
 , pyopenssl
 , ndg-httpsclient
-, pytest
-, pytestcov
+, pytestCheckHook
+, pytest-cov
 , pytest-mock
 , pytest-pylint
 , pytest-click
@@ -39,13 +39,9 @@ buildPythonPackage rec {
   ] ++ lib.optionals isPy27 [ functools32 ];
 
   checkInputs = [
-    pytest pytestcov pytest-mock pytest-pylint pytest-click
+    pytestCheckHook pytest-cov pytest-mock pytest-pylint pytest-click
   ];
 
-  checkPhase = ''
-    pytest
-  '';
-
   # many errors -- tests assume inside of git repo, linting errors 13/317 fail
   doCheck = false;
 
diff --git a/nixpkgs/pkgs/development/python-modules/libagent/default.nix b/nixpkgs/pkgs/development/python-modules/libagent/default.nix
index 47be977755cd..5334513e23c8 100644
--- a/nixpkgs/pkgs/development/python-modules/libagent/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libagent/default.nix
@@ -25,7 +25,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Using hardware wallets as SSH/GPG agent";
     homepage = "https://github.com/romanz/trezor-agent";
-    license = licenses.gpl3;
+    license = licenses.lgpl3Only;
     maintainers = with maintainers; [ np ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/libcst/default.nix b/nixpkgs/pkgs/development/python-modules/libcst/default.nix
index f064c34e1586..ed6e7755bf15 100644
--- a/nixpkgs/pkgs/development/python-modules/libcst/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libcst/default.nix
@@ -1,9 +1,21 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder, black, isort
-, pytestCheckHook, pyyaml, typing-extensions, typing-inspect, dataclasses }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, hypothesis
+, dataclasses
+, hypothesmith
+, pytestCheckHook
+, pyyaml
+, typing-extensions
+, typing-inspect
+, black
+, isort
+}:
 
 buildPythonPackage rec {
   pname = "libcst";
-  version = "0.3.13";
+  version = "0.3.18";
 
   # Some files for tests missing from PyPi
   # https://github.com/Instagram/LibCST/issues/331
@@ -11,34 +23,30 @@ buildPythonPackage rec {
     owner = "instagram";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0pbddjrsqj641mr6zijk2phfn15dampbx268zcws4bhhhnrxlj65";
+    sha256 = "sha256-19yGaKBLpGASSPv/aSX0kx9lh2JxKExHJDKKtuBbuqI=";
   };
 
   disabled = pythonOlder "3.6";
 
-  propagatedBuildInputs = [ pyyaml typing-inspect ]
+  propagatedBuildInputs = [ hypothesis typing-extensions typing-inspect pyyaml ]
     ++ lib.optional (pythonOlder "3.7") dataclasses;
 
-  checkInputs = [ black isort pytestCheckHook ];
+  checkInputs = [ black hypothesmith isort pytestCheckHook ];
+
+  # can't run tests due to circular dependency on hypothesmith -> licst
+  doCheck = false;
 
-  # https://github.com/Instagram/LibCST/issues/346
-  # https://github.com/Instagram/LibCST/issues/347
   preCheck = ''
     python -m libcst.codegen.generate visitors
     python -m libcst.codegen.generate return_types
-    rm libcst/tests/test_fuzz.py
-    rm libcst/tests/test_pyre_integration.py
-    rm libcst/metadata/tests/test_full_repo_manager.py
-    rm libcst/metadata/tests/test_type_inference_provider.py
   '';
 
   pythonImportsCheck = [ "libcst" ];
 
   meta = with lib; {
-    description =
-      "A Concrete Syntax Tree (CST) parser and serializer library for Python.";
+    description = "A Concrete Syntax Tree (CST) parser and serializer library for Python.";
     homepage = "https://github.com/Instagram/libcst";
     license = with licenses; [ mit asl20 psfl ];
-    maintainers = with maintainers; [ maintainers.ruuda ];
+    maintainers = with maintainers; [ ruuda SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/libnacl/default.nix b/nixpkgs/pkgs/development/python-modules/libnacl/default.nix
index 2406738cf1bb..f8cb85ab4182 100644
--- a/nixpkgs/pkgs/development/python-modules/libnacl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libnacl/default.nix
@@ -1,33 +1,41 @@
-{ lib, stdenv, buildPythonPackage, fetchFromGitHub, pytest, libsodium }:
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, libsodium
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "libnacl";
-  version = "1.7.1";
+  version = "1.7.2";
 
   src = fetchFromGitHub {
     owner = "saltstack";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10rpim9lf0qd861a3miq8iqg8w87slqwqni7nq66h72jdk130axg";
+    sha256 = "sha256-nttR9PQimhqd2pByJ5IJzJ4RmSI4y7lcX7a7jcK+vqc=";
   };
 
-  checkInputs = [ pytest ];
-  propagatedBuildInputs = [ libsodium ];
+  buildInputs = [ libsodium ];
 
   postPatch =
-    let soext = stdenv.hostPlatform.extensions.sharedLibrary; in ''
-    substituteInPlace "./libnacl/__init__.py" --replace "ctypes.cdll.LoadLibrary('libsodium${soext}')" "ctypes.cdll.LoadLibrary('${libsodium}/lib/libsodium${soext}')"
-  '';
+    let soext = stdenv.hostPlatform.extensions.sharedLibrary; in
+    ''
+      substituteInPlace "./libnacl/__init__.py" --replace \
+        "ctypes.cdll.LoadLibrary('libsodium${soext}')" \
+        "ctypes.cdll.LoadLibrary('${libsodium}/lib/libsodium${soext}')"
+    '';
 
-  checkPhase = ''
-    py.test
-  '';
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "libnacl" ];
 
   meta = with lib; {
-    maintainers = with maintainers; [ xvapx ];
     description = "Python bindings for libsodium based on ctypes";
-    homepage = "https://pypi.python.org/pypi/libnacl";
+    homepage = "https://libnacl.readthedocs.io/";
     license = licenses.asl20;
     platforms = platforms.unix;
+    maintainers = with maintainers; [ xvapx ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/librouteros/default.nix b/nixpkgs/pkgs/development/python-modules/librouteros/default.nix
new file mode 100644
index 000000000000..32c9889681ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/librouteros/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy3k
+, pytestCheckHook
+, pytest-xdist
+}:
+
+buildPythonPackage rec {
+  pname = "librouteros";
+  version = "3.1.0";
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "luqasz";
+    repo = pname;
+    rev = version;
+    sha256 = "1skjwnqa3vcpq9gzgpw93wdmisq15fp0q07kzyq3fgx4yg7b6sql";
+  };
+
+  checkInputs = [
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Disable tests which require QEMU to run
+    "test_login"
+    "test_long_word"
+    "test_query"
+    "test_add_then_remove"
+    "test_add_then_update"
+    "test_generator_ditch"
+  ];
+
+  pythonImportsCheck = [ "librouteros" ];
+
+  meta = with lib; {
+    description = "Python implementation of the MikroTik RouterOS API";
+    homepage = "https://librouteros.readthedocs.io/";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/libusb1/default.nix b/nixpkgs/pkgs/development/python-modules/libusb1/default.nix
index 0446299fd1bd..cc0ba39e64ef 100644
--- a/nixpkgs/pkgs/development/python-modules/libusb1/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libusb1/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "libusb1";
-  version = "1.9.1";
+  version = "1.9.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "14ljk7rywy3fiv23dpayvk14y1ywma729r3b1x2cxf68919g2gnh";
+    sha256 = "17hqck808m59jv6m2g4hasnay44pycy3y0im01fq9jpr3ymcdbi7";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/libversion/default.nix b/nixpkgs/pkgs/development/python-modules/libversion/default.nix
index 2edc9211d928..4bc2dfa2ffda 100644
--- a/nixpkgs/pkgs/development/python-modules/libversion/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/libversion/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "libversion";
-  version = "1.2.1";
+  version = "1.2.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1h8x9hglrqi03f461lhw3wwz23zs84dgw7hx4laxcmyrgvyzvcq1";
+    sha256 = "cf9ef702d0bc750f0ad44a2cffe8ebd83cd356b92cc25f767846509f84ea7e73";
   };
 
   nativeBuildInputs = [ pkg-config ];
diff --git a/nixpkgs/pkgs/development/python-modules/lightgbm/default.nix b/nixpkgs/pkgs/development/python-modules/lightgbm/default.nix
index 62686234b6e9..1018ceaec4b2 100644
--- a/nixpkgs/pkgs/development/python-modules/lightgbm/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lightgbm/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "lightgbm";
-  version = "3.1.1";
+  version = "3.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "babece2e3613e97748a67ed45387bb0e984bdb1f4126e39f010fbfe7503c7b20";
+    sha256 = "000c6e0e225834a8a94a84571cf41e4b7c7b97a0db6d286c1237de8ba6066726";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/lightparam/default.nix b/nixpkgs/pkgs/development/python-modules/lightparam/default.nix
index 0c3eb5292a88..936cc9a06269 100644
--- a/nixpkgs/pkgs/development/python-modules/lightparam/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lightparam/default.nix
@@ -1,4 +1,4 @@
-{ lib, pkgs, buildPythonPackage, fetchFromGitHub, isPy3k
+{ lib, buildPythonPackage, fetchFromGitHub, isPy3k
 , ipython
 , ipywidgets
 , numpy
diff --git a/nixpkgs/pkgs/development/python-modules/lima/default.nix b/nixpkgs/pkgs/development/python-modules/lima/default.nix
new file mode 100644
index 000000000000..16a5f01ed7a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/lima/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildPythonPackage, fetchPypi, isPy3k, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "lima";
+  version = "0.5";
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0qqj0053r77ppkcyyk2fhpaxjzsl1h98nf9clpny6cs66sdl241v";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  meta = with lib; {
+    description = "Lightweight Marshalling of Python 3 Objects.";
+    homepage = "https://github.com/b6d/lima";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/limnoria/default.nix b/nixpkgs/pkgs/development/python-modules/limnoria/default.nix
index 86a505d4448c..6f0532a390a9 100644
--- a/nixpkgs/pkgs/development/python-modules/limnoria/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/limnoria/default.nix
@@ -7,12 +7,12 @@
 
 buildPythonPackage rec {
   pname = "limnoria";
-  version = "2021.01.15";
+  version = "2021.03.13";
   disabled = isPy27; # abandoned upstream
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5d7109fc779c44070e3c57186eae59b133014835d5fe15b262fa9438d7599c81";
+    sha256 = "c13dd7a84eddfcf9c3068d57f3c9da90ea7c0d11688dc3f78f9265f3f093c6ea";
   };
 
   patchPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/linode-api/default.nix b/nixpkgs/pkgs/development/python-modules/linode-api/default.nix
index 7df182d94fed..48d5a1e80802 100644
--- a/nixpkgs/pkgs/development/python-modules/linode-api/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/linode-api/default.nix
@@ -1,41 +1,38 @@
-{
-  buildPythonPackage,
-  fetchFromGitHub,
-  pythonOlder,
-  lib,
-  requests,
-  future,
-  enum34,
-  mock }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, requests
+, pytestCheckHook
+, mock
+}:
 
 buildPythonPackage rec {
   pname = "linode-api";
-  version = "4.1.8b1"; # NOTE: this is a beta, and the API may change in future versions.
-
-  disabled = (pythonOlder "2.7");
-
-  propagatedBuildInputs = [ requests future ]
-                             ++ lib.optionals (pythonOlder "3.4") [ enum34 ];
-
-  postPatch = (lib.optionalString (!pythonOlder "3.4") ''
-    sed -i -e '/"enum34",/d' setup.py
-  '');
-
-  doCheck = true;
-  checkInputs = [ mock ];
+  version = "5.0.0";
+  disabled = pythonOlder "3.6";
 
   # Sources from Pypi exclude test fixtures
   src = fetchFromGitHub {
-    rev = "v${version}";
     owner = "linode";
     repo = "python-linode-api";
-    sha256 = "0qfqn92fr876dncwbkf2vhm90hnf7lwpg80hzwyzyzwz1hcngvjg";
+    rev = version;
+    sha256 = "0lqi15vks4fxbki1l7n1bfzygjy3w17d9wchjxvp22ijmas44yai";
   };
 
-  meta = {
+  propagatedBuildInputs = [ requests ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "linode_api4" ];
+
+  meta = with lib; {
+    description = "Python library for the Linode API v4";
     homepage = "https://github.com/linode/python-linode-api";
-    description = "The official python library for the Linode API v4 in python.";
-    license = lib.licenses.bsd3;
-    maintainers = with lib.maintainers; [ glenns ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ glenns ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/livestreamer/default.nix b/nixpkgs/pkgs/development/python-modules/livestreamer/default.nix
index 184a215c407a..98878c90640f 100644
--- a/nixpkgs/pkgs/development/python-modules/livestreamer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/livestreamer/default.nix
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     sha256 = "1fp3d3z2grb1ls97smjkraazpxnvajda2d1g1378s6gzmda2jvjd";
   };
 
-  buildInputs = [ pkgs.makeWrapper ];
+  nativeBuildInputs = [ pkgs.makeWrapper ];
 
   propagatedBuildInputs = [ pkgs.rtmpdump pycrypto requests ]
     ++ lib.optionals isPy27 [ singledispatch futures ];
diff --git a/nixpkgs/pkgs/development/python-modules/llfuse/default.nix b/nixpkgs/pkgs/development/python-modules/llfuse/default.nix
index e615582a282d..44aa9136b07c 100644
--- a/nixpkgs/pkgs/development/python-modules/llfuse/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/llfuse/default.nix
@@ -1,44 +1,53 @@
-{ lib, stdenv, fetchPypi, fetchpatch, buildPythonPackage, pkg-config, pytest, fuse, attr, which
-, contextlib2, osxfuse
+{ lib
+, stdenv
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, contextlib2
+, cython
+, fuse
+, pkg-config
+, pytestCheckHook
+, python
+, which
 }:
 
 buildPythonPackage rec {
   pname = "llfuse";
-  version = "1.3.8";
+  version = "1.4.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1g2cdhdqrb6m7655qp61pn61pwj1ql61cdzhr2jvl3w4i8877ddr";
-  };
-
-  patches = [
-    # fix tests with pytest 6
-    (fetchpatch {
-      url = "https://github.com/python-llfuse/python-llfuse/commit/1ed8b280d2544eedf8bf209761bef0d2519edd17.diff";
-      sha256 = "0wailfrr1i0n2m9ylwpr00jh79s7z3l36w7x19jx1x4djcz2hdps";
-    })
-  ];
+  disabled = pythonOlder "3.5";
 
-  nativeBuildInputs = [ pkg-config ];
+  src = fetchFromGitHub {
+    owner = "python-llfuse";
+    repo = "python-llfuse";
+    rev = "release-${version}";
+    sha256 = "1dcpdg6cpkmdbyg66fgrylj7dp9zqzg5bf23y6m6673ykgxlv480";
+  };
 
-  buildInputs =
-    lib.optionals stdenv.isLinux [ fuse ]
-    ++ lib.optionals stdenv.isDarwin [ osxfuse ];
+  nativeBuildInputs = [ cython pkg-config ];
 
-  checkInputs = [ pytest which ] ++
-    lib.optionals stdenv.isLinux [ attr ];
+  buildInputs = [ fuse ];
 
   propagatedBuildInputs = [ contextlib2 ];
 
-  checkPhase = ''
-    py.test -k "not test_listdir" ${lib.optionalString stdenv.isDarwin ''-m "not uses_fuse"''}
+  preBuild = ''
+    ${python.interpreter} setup.py build_cython
   '';
 
+  # On Darwin, the test requires macFUSE to be installed outside of Nix.
+  doCheck = !stdenv.isDarwin;
+  checkInputs = [ pytestCheckHook which ];
+
+  disabledTests = [
+    "test_listdir" # accesses /usr/bin
+  ];
+
   meta = with lib; {
     description = "Python bindings for the low-level FUSE API";
     homepage = "https://github.com/python-llfuse/python-llfuse";
     license = licenses.lgpl2Plus;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ bjornfor ];
+    maintainers = with maintainers; [ bjornfor dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/llvmlite/default.nix b/nixpkgs/pkgs/development/python-modules/llvmlite/default.nix
index 02ee088782aa..609dcb82237d 100644
--- a/nixpkgs/pkgs/development/python-modules/llvmlite/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/llvmlite/default.nix
@@ -12,13 +12,13 @@
 
 buildPythonPackage rec {
   pname = "llvmlite";
-  version = "0.34.0";
+  version = "0.35.0";
 
   disabled = isPyPy || !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f03ee0d19bca8f2fe922bb424a909d05c28411983b0c2bc58b020032a0d11f63";
+    sha256 = "80e51d5aa02ad72da9870e89d21f9b152b0220ca551b4596a6c0614bcde336fc";
   };
 
   nativeBuildInputs = [ llvm ];
diff --git a/nixpkgs/pkgs/development/python-modules/localimport/default.nix b/nixpkgs/pkgs/development/python-modules/localimport/default.nix
new file mode 100644
index 000000000000..3c41618d5b83
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/localimport/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "localimport";
+  version = "1.7.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-p7ACOzJRwH9hICMcxtVt/r+twEoFsDxPKGuarFnFIbo=";
+  };
+
+  pythonImportsCheck = [ "localimport" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/NiklasRosenstein/py-localimport";
+    description = "Isolated import of Python modules";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/locket/default.nix b/nixpkgs/pkgs/development/python-modules/locket/default.nix
index e0be7d8f9440..fd75a965c52f 100644
--- a/nixpkgs/pkgs/development/python-modules/locket/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/locket/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "locket";
-  version = "0.2.0";
+  version = "0.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz";
+    sha256 = "3e1faba403619fe201552f083f1ecbf23f550941bc51985ac6ed4d02d25056dd";
   };
 
   buildInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/loguru/default.nix b/nixpkgs/pkgs/development/python-modules/loguru/default.nix
index 458d2ca50329..8146f8b183e1 100644
--- a/nixpkgs/pkgs/development/python-modules/loguru/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/loguru/default.nix
@@ -1,19 +1,36 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, isPy27, colorama, pytestCheckHook }:
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, fetchpatch
+, isPy27
+, colorama
+, pytestCheckHook
+, pythonAtLeast
+}:
 
 buildPythonPackage rec {
   pname = "loguru";
   version = "0.5.3";
 
-  disabled = isPy27;
+  # python3.9 compatibility should be in the next release after 0.5.3
+  disabled = isPy27 || pythonAtLeast "3.9";
   src = fetchPypi {
     inherit pname version;
     sha256 = "b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319";
   };
 
-  checkInputs = [ pytestCheckHook colorama ];
+  patches = [
+    # Fixes tests with pytest>=6.2.2. Will be part of the next release after 0.5.3
+    (fetchpatch {
+      url = "https://github.com/Delgan/loguru/commit/31cf758ee9d22dbfa125f38153782fe20ac9dce5.patch";
+      sha256 = "1lzbs8akg1s7s6xjl3samf4c4bpssqvwg5fn3mwlm4ysr7jd5y67";
+    })
+  ];
 
-  pytestFlagsArray = lib.optionals stdenv.isDarwin [ "--ignore=tests/test_multiprocessing.py" ];
+  checkInputs = [ pytestCheckHook colorama ];
 
+  disabledTestPaths = lib.optionals stdenv.isDarwin [ "tests/test_multiprocessing.py" ];
   disabledTests = [ "test_time_rotation_reopening" "test_file_buffering" ]
     ++ lib.optionals stdenv.isDarwin [ "test_rotation_and_retention" "test_rotation_and_retention_timed_file" "test_renaming" "test_await_complete_inheritance" ];
 
@@ -21,6 +38,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/Delgan/loguru";
     description = "Python logging made (stupidly) simple";
     license = licenses.mit;
-    maintainers = with maintainers; [ jakewaksbaum ];
+    maintainers = with maintainers; [ jakewaksbaum rmcgibbo ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/lsassy/default.nix b/nixpkgs/pkgs/development/python-modules/lsassy/default.nix
index 6b1d5ec2bb4c..ad9d09b32662 100644
--- a/nixpkgs/pkgs/development/python-modules/lsassy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lsassy/default.nix
@@ -4,7 +4,6 @@
 , impacket
 , netaddr
 , pypykatz
-, pytestCheckHook
 }:
 
 buildPythonPackage rec {
diff --git a/nixpkgs/pkgs/development/python-modules/luftdaten/default.nix b/nixpkgs/pkgs/development/python-modules/luftdaten/default.nix
index dbbe3d252125..71daa4bdbfa4 100644
--- a/nixpkgs/pkgs/development/python-modules/luftdaten/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/luftdaten/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "luftdaten";
-  version = "0.6.4";
+  version = "0.6.5";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1w1f0kmiwslg1dxn7gq0ak8f5wajlwl03r5zklshjc11j34b4d5i";
+    sha256 = "sha256-5SFb+psULyg9UKVY3oJPNLF3TGS/W+Bxoj79iTzReL4=";
   };
 
   propagatedBuildInputs = [ aiohttp async-timeout ];
@@ -16,9 +16,11 @@ buildPythonPackage rec {
   # No tests implemented
   doCheck = false;
 
+  pythonImportsCheck = [ "luftdaten" ];
+
   meta = with lib; {
     description = "Python API for interacting with luftdaten.info";
-    homepage = "https://github.com/fabaff/python-luftdaten";
+    homepage = "https://github.com/home-assistant-ecosystem/python-luftdaten";
     license = licenses.mit;
     maintainers = with maintainers; [ dotlambda ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/lupa/default.nix b/nixpkgs/pkgs/development/python-modules/lupa/default.nix
new file mode 100644
index 000000000000..e50404e50472
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/lupa/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildPythonPackage
+, cython
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "lupa";
+  version = "1.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "13ifv0nxbf70xg69sp49j484m8cnid7rgh8f94pgfb50dj01vqd3";
+  };
+
+  nativeBuildInputs = [ cython ];
+
+  pythonImportsCheck = [ "lupa" ];
+
+  meta = with lib; {
+    description = "Lua in Python";
+    homepage = "https://github.com/scoder/lupa";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/lxml/default.nix b/nixpkgs/pkgs/development/python-modules/lxml/default.nix
index aa009e0a3e73..36b1539834d6 100644
--- a/nixpkgs/pkgs/development/python-modules/lxml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/lxml/default.nix
@@ -1,23 +1,24 @@
-{ lib, buildPythonPackage, fetchFromGitHub
+{ stdenv, lib, buildPythonPackage, fetchFromGitHub
 , cython
 , libxml2
 , libxslt
 , zlib
+, xcodebuild
 }:
 
 buildPythonPackage rec {
   pname = "lxml";
-  version = "4.5.2";
+  version = "4.6.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "${pname}-${version}";
-    sha256 = "1d0cpwdjxfzwjzmnz066ibzicyj2vhx15qxmm775l8hxqi65xps4";
+    sha256 = "1zidx62sxh2r4fmjfjzd4f6i4yxgzkpd20nafbyr0i0wnw9da3fd";
   };
 
   # setuptoolsBuildPhase needs dependencies to be passed through nativeBuildInputs
-  nativeBuildInputs = [ libxml2.dev libxslt.dev cython ];
+  nativeBuildInputs = [ libxml2.dev libxslt.dev cython ] ++ lib.optionals stdenv.isDarwin [ xcodebuild ];
   buildInputs = [ libxml2 libxslt zlib ];
 
   # tests are meant to be ran "in-place" in the same directory as src
diff --git a/nixpkgs/pkgs/development/python-modules/maestral/default.nix b/nixpkgs/pkgs/development/python-modules/maestral/default.nix
index 990545e41736..63425b6c853a 100644
--- a/nixpkgs/pkgs/development/python-modules/maestral/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/maestral/default.nix
@@ -1,30 +1,27 @@
-{ lib, stdenv
+{ lib
 , buildPythonPackage
 , fetchFromGitHub
 , pythonOlder
 , python
-, alembic, bugsnag, click, dropbox, fasteners, keyring, keyrings-alt, packaging, pathspec, Pyro5, requests, setuptools, sdnotify, sqlalchemy, survey, watchdog
+, click, desktop-notifier, dropbox, fasteners, keyring, keyrings-alt, packaging, pathspec, Pyro5, requests, setuptools, sdnotify, survey, watchdog
 , importlib-metadata
-, importlib-resources
-, dbus-next
 }:
 
 buildPythonPackage rec {
   pname = "maestral";
-  version = "1.3.1";
+  version = "1.4.3";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "SamSchott";
     repo = "maestral";
     rev = "v${version}";
-    sha256 = "sha256-SspyTdmAbbmWN3AqVp9bj/QfAKLVgU2bLiiHjZO0aCM=";
+    sha256 = "sha256-3GleQNkJrGIkFqOL2Dq0jTpgw7ts9ecpovKbyh3OrEI=";
   };
 
   propagatedBuildInputs = [
-    alembic
-    bugsnag
     click
+    desktop-notifier
     dropbox
     fasteners
     keyring
@@ -35,15 +32,10 @@ buildPythonPackage rec {
     requests
     setuptools
     sdnotify
-    sqlalchemy
     survey
     watchdog
   ] ++ lib.optionals (pythonOlder "3.8") [
     importlib-metadata
-  ] ++ lib.optionals (pythonOlder "3.9") [
-    importlib-resources
-  ] ++ lib.optionals stdenv.isLinux [
-    dbus-next
   ];
 
   makeWrapperArgs = [
diff --git a/nixpkgs/pkgs/development/python-modules/makefun/default.nix b/nixpkgs/pkgs/development/python-modules/makefun/default.nix
new file mode 100644
index 000000000000..1f5596a46ccc
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/makefun/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, fetchPypi
+, buildPythonPackage
+, setuptools_scm
+}:
+
+buildPythonPackage rec {
+  pname = "makefun";
+  version = "1.11.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-2qNQpILtWLVyREPGUUMhkem5ewyDdDh50JExccaigIU=";
+  };
+
+  nativeBuildInputs = [ setuptools_scm ];
+
+  # Disabling tests for now due to various (transitive) dependencies on modules
+  # from @smarie which are, as of yet, not part of nixpkgs. Also introduces
+  # a tricky dependency: makefun tests depend on pytest-cases, installing
+  # pytest-cases depends on makefun.
+  doCheck = false;
+
+  pythonImportsCheck = [ "makefun" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/smarie/python-makefun";
+    description = "Small library to dynamically create python functions";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ veehaitch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/managesieve/default.nix b/nixpkgs/pkgs/development/python-modules/managesieve/default.nix
index e23c3621c2e9..fd2eac2b2c7e 100644
--- a/nixpkgs/pkgs/development/python-modules/managesieve/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/managesieve/default.nix
@@ -1,26 +1,25 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, pytestrunner
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "managesieve";
-  version = "0.6";
+  version = "0.7.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ee70e298e9b68eb81f93d52a1320a034fdc182f3927fdd551836fc93b0ed2c5f";
+    sha256 = "44930a3b48332d23b35a5305ae7ba47904d4485ed1b7a22208b7d5ad9d60427a";
   };
 
-  checkInputs = [ pytestrunner pytest ];
+  checkInputs = [ pytestCheckHook ];
 
   meta = with lib; {
     description = "ManageSieve client library for remotely managing Sieve scripts";
-    homepage    = "https://managesieve.readthedocs.io/";
-    # PSFL for the python module, GPLv3 for sieveshell
-    license     = with licenses; [ gpl3 psfl ];
+    homepage = "https://managesieve.readthedocs.io/";
+    # PSFL for the python module, GPLv3 only for sieveshell
+    license = with licenses; [ gpl3Only psfl ];
     maintainers = with maintainers; [ dadada ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/marisa-trie/default.nix b/nixpkgs/pkgs/development/python-modules/marisa-trie/default.nix
index 031f7b04021b..e646ee71ec43 100644
--- a/nixpkgs/pkgs/development/python-modules/marisa-trie/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/marisa-trie/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, cython
 , pytestrunner
 , pytest
 , hypothesis
@@ -20,7 +21,11 @@ buildPythonPackage rec {
       --replace "hypothesis==" "hypothesis>="
   '';
 
-  nativeBuildInputs = [ pytestrunner ];
+  nativeBuildInputs = [ cython pytestrunner ];
+
+  preBuild = ''
+    ./update_cpp.sh
+  '';
 
   checkInputs = [ pytest hypothesis ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/mat2/default.nix b/nixpkgs/pkgs/development/python-modules/mat2/default.nix
new file mode 100644
index 000000000000..0b097024a55f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mat2/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, buildPythonPackage
+, python
+, pythonOlder
+, fetchFromGitLab
+, substituteAll
+, bubblewrap
+, exiftool
+, ffmpeg
+, mime-types
+, wrapGAppsHook
+, gdk-pixbuf
+, gobject-introspection
+, librsvg
+, poppler_gi
+, mutagen
+, pygobject3
+, pycairo
+, dolphinIntegration ? false, plasma5Packages
+}:
+
+buildPythonPackage rec {
+  pname = "mat2";
+  version = "0.12.1";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitLab {
+    domain = "0xacab.org";
+    owner = "jvoisin";
+    repo = "mat2";
+    rev = version;
+    sha256 = "sha256-TxHelOr7ygp4R+dW+oJ034l2w9zrB4gn0QLs5Pa4EFE=";
+  };
+
+  patches = [
+    # hardcode paths to some binaries
+    (substituteAll ({
+      src = ./paths.patch;
+      bwrap = "${bubblewrap}/bin/bwrap";
+      exiftool = "${exiftool}/bin/exiftool";
+      ffmpeg = "${ffmpeg}/bin/ffmpeg";
+      # remove once faf0f8a8a4134edbeec0a73de7f938453444186d is in master
+      mimetypes = "${mime-types}/etc/mime.types";
+    } // lib.optionalAttrs dolphinIntegration {
+      kdialog = "${plasma5Packages.kdialog}/bin/kdialog";
+    }))
+    # the executable shouldn't be called .mat2-wrapped
+    ./executable-name.patch
+    # hardcode path to mat2 executable
+    ./tests.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace dolphin/mat2.desktop \
+      --replace "@mat2@" "$out/bin/mat2" \
+      --replace "@mat2svg@" "$out/share/icons/hicolor/scalable/apps/mat2.svg"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gobject-introspection
+    librsvg
+    poppler_gi
+  ];
+
+  propagatedBuildInputs = [
+    mutagen
+    pygobject3
+    pycairo
+  ];
+
+  postInstall = ''
+    install -Dm 444 data/mat2.svg -t "$out/share/icons/hicolor/scalable/apps"
+    install -Dm 444 doc/mat2.1 -t "$out/share/man/man1"
+    install -Dm 444 nautilus/mat2.py -t "$out/share/nautilus-python/extensions"
+    buildPythonPath "$out $pythonPath"
+    patchPythonScript "$out/share/nautilus-python/extensions/mat2.py"
+  '' + lib.optionalString dolphinIntegration ''
+    install -Dm 444 dolphin/mat2.desktop -t "$out/share/kservices5/ServiceMenus"
+  '';
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover -v
+  '';
+
+  meta = with lib; {
+    description = "A handy tool to trash your metadata";
+    homepage = "https://0xacab.org/jvoisin/mat2";
+    changelog = "https://0xacab.org/jvoisin/mat2/-/blob/${version}/CHANGELOG.md";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/mat2/executable-name.patch b/nixpkgs/pkgs/development/python-modules/mat2/executable-name.patch
new file mode 100644
index 000000000000..6eee0a949400
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mat2/executable-name.patch
@@ -0,0 +1,13 @@
+diff --git a/mat2 b/mat2
+index 3b77e1e..b99a633 100755
+--- a/mat2
++++ b/mat2
+@@ -46,7 +46,7 @@ def __check_file(filename: str, mode: int = os.R_OK) -> bool:
+ 
+ 
+ def create_arg_parser() -> argparse.ArgumentParser:
+-    parser = argparse.ArgumentParser(description='Metadata anonymisation toolkit 2')
++    parser = argparse.ArgumentParser(description='Metadata anonymisation toolkit 2', prog='mat2')
+ 
+     parser.add_argument('-V', '--verbose', action='store_true',
+                         help='show more verbose status information')
diff --git a/nixpkgs/pkgs/development/python-modules/mat2/paths.patch b/nixpkgs/pkgs/development/python-modules/mat2/paths.patch
new file mode 100644
index 000000000000..e0144be9fef6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mat2/paths.patch
@@ -0,0 +1,111 @@
+diff --git a/dolphin/mat2.desktop b/dolphin/mat2.desktop
+index e623962..5d69ae2 100644
+--- a/dolphin/mat2.desktop
++++ b/dolphin/mat2.desktop
+@@ -7,5 +7,5 @@ Type=Service
+ [Desktop Action cleanMetadata]
+ Name=Clean metadata
+ Name[es]=Limpiar metadatos
+-Icon=/usr/share/icons/hicolor/scalable/apps/mat2.svg
+-Exec=kdialog --yesno  "$( mat2 -s %U )" --title "Clean Metadata?" && mat2 %U
++Icon=@mat2svg@
++Exec=@kdialog@ --yesno  "$( @mat2@ -s %U )" --title "Clean Metadata?" && @mat2@ %U
+diff --git a/libmat2/bubblewrap.py b/libmat2/bubblewrap.py
+index 970d5dd..5d3c0b7 100644
+--- a/libmat2/bubblewrap.py
++++ b/libmat2/bubblewrap.py
+@@ -22,11 +22,7 @@ CalledProcessError = subprocess.CalledProcessError
+ 
+ 
+ def _get_bwrap_path() -> str:
+-    which_path = shutil.which('bwrap')
+-    if which_path:
+-        return which_path
+-
+-    raise RuntimeError("Unable to find bwrap")  # pragma: no cover
++    return '@bwrap@'
+ 
+ 
+ def _get_bwrap_args(tempdir: str,
+@@ -37,16 +33,11 @@ def _get_bwrap_args(tempdir: str,
+ 
+     # XXX: use --ro-bind-try once all supported platforms
+     # have a bubblewrap recent enough to support it.
+-    ro_bind_dirs = ['/usr', '/lib', '/lib64', '/bin', '/sbin', '/etc/alternatives', cwd]
++    ro_bind_dirs = ['/nix/store', cwd]
+     for bind_dir in ro_bind_dirs:
+         if os.path.isdir(bind_dir):  # pragma: no cover
+             ro_bind_args.extend(['--ro-bind', bind_dir, bind_dir])
+ 
+-    ro_bind_files = ['/etc/ld.so.cache']
+-    for bind_file in ro_bind_files:
+-        if os.path.isfile(bind_file):  # pragma: no cover
+-            ro_bind_args.extend(['--ro-bind', bind_file, bind_file])
+-
+     args = ro_bind_args + \
+         ['--dev', '/dev',
+          '--proc', '/proc',
+diff --git a/libmat2/exiftool.py b/libmat2/exiftool.py
+index eb65b2a..51a0fa1 100644
+--- a/libmat2/exiftool.py
++++ b/libmat2/exiftool.py
+@@ -1,8 +1,6 @@
+-import functools
+ import json
+ import logging
+ import os
+-import shutil
+ import subprocess
+ from typing import Dict, Union, Set
+ 
+@@ -70,14 +68,5 @@ class ExiftoolParser(abstract.AbstractParser):
+             return False
+         return True
+ 
+-@functools.lru_cache()
+ def _get_exiftool_path() -> str:  # pragma: no cover
+-    which_path = shutil.which('exiftool')
+-    if which_path:
+-        return which_path
+-
+-    # Exiftool on Arch Linux has a weird path
+-    if os.access('/usr/bin/vendor_perl/exiftool', os.X_OK):
+-        return '/usr/bin/vendor_perl/exiftool'
+-
+-    raise RuntimeError("Unable to find exiftool")
++    return '@exiftool@'
+diff --git a/libmat2/parser_factory.py b/libmat2/parser_factory.py
+index 9965432..bd45179 100644
+--- a/libmat2/parser_factory.py
++++ b/libmat2/parser_factory.py
+@@ -8,6 +8,7 @@ from . import abstract, UNSUPPORTED_EXTENSIONS
+ 
+ T = TypeVar('T', bound='abstract.AbstractParser')
+ 
++mimetypes.init(['@mimetypes@'])
+ mimetypes.add_type('application/epub+zip', '.epub')
+ mimetypes.add_type('application/x-dtbncx+xml', '.ncx')  # EPUB Navigation Control XML File
+ 
+diff --git a/libmat2/video.py b/libmat2/video.py
+index b4a3232..3dd7ee5 100644
+--- a/libmat2/video.py
++++ b/libmat2/video.py
+@@ -1,6 +1,4 @@
+ import subprocess
+-import functools
+-import shutil
+ import logging
+ 
+ from typing import Dict, Union
+@@ -135,10 +133,5 @@ class MP4Parser(AbstractFFmpegParser):
+     }
+ 
+ 
+-@functools.lru_cache()
+ def _get_ffmpeg_path() -> str:  # pragma: no cover
+-    which_path = shutil.which('ffmpeg')
+-    if which_path:
+-        return which_path
+-
+-    raise RuntimeError("Unable to find ffmpeg")
++    return '@ffmpeg@'
diff --git a/nixpkgs/pkgs/development/python-modules/mat2/tests.patch b/nixpkgs/pkgs/development/python-modules/mat2/tests.patch
new file mode 100644
index 000000000000..8958d937dd43
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mat2/tests.patch
@@ -0,0 +1,18 @@
+diff --git a/tests/test_climat2.py b/tests/test_climat2.py
+index cede642..2d5ad77 100644
+--- a/tests/test_climat2.py
++++ b/tests/test_climat2.py
+@@ -10,12 +10,7 @@ import glob
+ from libmat2 import images, parser_factory
+ 
+ 
+-mat2_binary = ['./mat2']
+-
+-if 'MAT2_GLOBAL_PATH_TESTSUITE' in os.environ:
+-    # Debian runs tests after installing the package
+-    # https://0xacab.org/jvoisin/mat2/issues/16#note_153878
+-    mat2_binary = ['/usr/bin/env', 'mat2']
++mat2_binary = [os.environ['out'] + '/bin/mat2']
+ 
+ 
+ class TestHelp(unittest.TestCase):
diff --git a/nixpkgs/pkgs/development/python-modules/matplotlib/default.nix b/nixpkgs/pkgs/development/python-modules/matplotlib/default.nix
index bf21422b7721..4be4189f8c7a 100644
--- a/nixpkgs/pkgs/development/python-modules/matplotlib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/matplotlib/default.nix
@@ -20,14 +20,14 @@ assert enableTk -> (tcl != null)
 assert enableQt -> pyqt5 != null;
 
 buildPythonPackage rec {
-  version = "3.3.3";
+  version = "3.3.4";
   pname = "matplotlib";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b1b60c6476c4cfe9e5cf8ab0d3127476fd3d5f05de0f343a452badaad0e4bdec";
+    sha256 = "3e477db76c22929e4c6876c44f88d790aacdf3c3f8f3a90cb1975c0bf37825b0";
   };
 
   XDG_RUNTIME_DIR = "/tmp";
diff --git a/nixpkgs/pkgs/development/python-modules/mautrix/default.nix b/nixpkgs/pkgs/development/python-modules/mautrix/default.nix
index d46b505991f3..6a6e35367331 100644
--- a/nixpkgs/pkgs/development/python-modules/mautrix/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mautrix/default.nix
@@ -1,14 +1,14 @@
 { lib, buildPythonPackage, fetchPypi, aiohttp, pythonOlder
-, sqlalchemy, ruamel_yaml, CommonMark, lxml, fetchpatch
+, sqlalchemy, ruamel_yaml, CommonMark, lxml
 }:
 
 buildPythonPackage rec {
   pname = "mautrix";
-  version = "0.8.12";
+  version = "0.8.17";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "471684d40cbc2f7db345f2f809553b221a34d1c81e04bcdcb08a2832f140db1e";
+    sha256 = "9a15a8e39f9d0b36c91dfe0f5dd1efc8752cc1d317057840a3dbffd6ee90e068";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/mcstatus/default.nix b/nixpkgs/pkgs/development/python-modules/mcstatus/default.nix
new file mode 100644
index 000000000000..7ed7a0ff328b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mcstatus/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, asyncio-dgram
+, buildPythonPackage
+, click
+, dnspython
+, fetchFromGitHub
+, mock
+, pytestCheckHook
+, pythonOlder
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "mcstatus";
+  version = "5.1.2";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "Dinnerbone";
+    repo = pname;
+    rev = "release-${version}";
+    sha256 = "16k5vcqpd9r7mm1cg9khzba42rcxs491h8gk2klymav249yzrwk7";
+  };
+
+  propagatedBuildInputs = [
+    asyncio-dgram
+    click
+    dnspython
+    six
+  ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements.txt --replace "dnspython3" "dnspython"
+  '';
+
+  pythonImportsCheck = [ "mcstatus" ];
+
+  meta = with lib; {
+    description = "Python library for checking the status of Minecraft servers";
+    homepage = "https://github.com/Dinnerbone/mcstatus";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/mergedeep/default.nix b/nixpkgs/pkgs/development/python-modules/mergedeep/default.nix
index cdd19beb68d9..46de34050239 100644
--- a/nixpkgs/pkgs/development/python-modules/mergedeep/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mergedeep/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "mergedeep";
-  version = "1.3.1";
+  version = "1.3.4";
   disabled = isPy27;
 
   # PyPI tarball doesn't include tests directory
@@ -10,7 +10,7 @@ buildPythonPackage rec {
     owner = "clarketm";
     repo = "mergedeep";
     rev = "v${version}";
-    sha256 = "1ryccb64hg438y1wsjlfp4ciq05q4c6khwhllwdnndm8cbkbrgph";
+    sha256 = "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/meshio/default.nix b/nixpkgs/pkgs/development/python-modules/meshio/default.nix
new file mode 100644
index 000000000000..2c293b3b9c26
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/meshio/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, numpy
+, netcdf4
+, h5py
+, exdown
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "meshio";
+  version = "4.3.10";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1i34bk8bbc0dnizrlgj0yxnbzyvndkmnl6ryymxgcl9rv1abkfki";
+  };
+
+  propagatedBuildInputs = [
+    numpy
+    netcdf4
+    h5py
+  ];
+
+  checkInputs = [
+    exdown
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = ["meshio"];
+
+  meta = with lib; {
+    homepage = "https://github.com/nschloe/meshio";
+    description = "I/O for mesh files.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wd15 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/metar/default.nix b/nixpkgs/pkgs/development/python-modules/metar/default.nix
new file mode 100644
index 000000000000..e832c7cf56fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/metar/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "metar";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "python-metar";
+    repo = "python-metar";
+    rev = "v${version}";
+    sha256 = "019vfq9191cdvvq1afdcdgdgbzpj7wq6pz9li8ggim71azjnv5nn";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "metar" ];
+
+  meta = with lib; {
+    description = "Python parser for coded METAR weather reports";
+    homepage = "https://github.com/python-metar/python-metar";
+    license = with licenses; [ bsd1 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/micawber/default.nix b/nixpkgs/pkgs/development/python-modules/micawber/default.nix
index 73f50d32a5f4..97681291a63a 100644
--- a/nixpkgs/pkgs/development/python-modules/micawber/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/micawber/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "micawber";
-  version = "0.5.2";
+  version = "0.5.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ac2d737d8ff27ed01ea3825ed8806970e8137d7b342cef37b39b6dd17e6eb3a4";
+    sha256 = "05ef4c89e307e3031dd1d85a3a557cd7f9f900f7dbbbcb33dde454940ca38460";
   };
 
   propagatedBuildInputs = [ beautifulsoup4 ];
diff --git a/nixpkgs/pkgs/development/python-modules/milc/default.nix b/nixpkgs/pkgs/development/python-modules/milc/default.nix
index 998f0a58b2ba..afdab1194b78 100644
--- a/nixpkgs/pkgs/development/python-modules/milc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/milc/default.nix
@@ -4,31 +4,32 @@
 , appdirs
 , argcomplete
 , colorama
-, gnugrep
+, nose2
+, semver
 }:
 
 buildPythonPackage rec {
   pname = "milc";
-  version = "1.0.10";
+  version = "1.3.0";
 
   src = fetchFromGitHub {
     owner = "clueboard";
     repo = "milc";
     rev = version;
-    sha256 = "04mk057b6jh0k4maqkg80kpilxak9r7vlr9xqwzczh2gs3g2x573";
+    sha256 = "sha256-koyOBz+pB/vkTHOR1p77ACO11/ULDIBzqsszUUpnE88=";
   };
 
-  checkInputs = [ gnugrep ];
   propagatedBuildInputs = [ appdirs argcomplete colorama ];
 
-  # Upstream has a nose2 test suite that runs this hello script in a handful of
-  # ways, but it's not in setup.py and makes assumptions about relative paths in
-  # the src repo, so just sanity-check basic functionality.
+  checkInputs = [ nose2 semver ];
+
   checkPhase = ''
-    patchShebangs ./hello
-    ./hello | grep "Hello, World"
+    patchShebangs example hello
+    nose2
   '';
 
+  pythonImportsCheck = [ "milc" ];
+
   meta = with lib; {
     description = "An Opinionated Batteries-Included Python 3 CLI Framework";
     homepage = "https://milc.clueboard.co";
diff --git a/nixpkgs/pkgs/development/python-modules/minidump/default.nix b/nixpkgs/pkgs/development/python-modules/minidump/default.nix
index 346430d23926..45adc7adb748 100644
--- a/nixpkgs/pkgs/development/python-modules/minidump/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/minidump/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "minidump";
-  version = "0.0.13";
+  version = "0.0.16";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1w93yh2dz7llxjgv0jn7gf9praz7d5952is7idgh0lsyj67ri2ms";
+    sha256 = "65a71ca1da2b73ee96daa9d52e4fb9c9b80a849475502c6a1c2a80a68bd149b0";
   };
 
   # Upstream doesn't have tests
diff --git a/nixpkgs/pkgs/development/python-modules/minio/default.nix b/nixpkgs/pkgs/development/python-modules/minio/default.nix
index 00ea5b06c646..09389f7cf1b0 100644
--- a/nixpkgs/pkgs/development/python-modules/minio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/minio/default.nix
@@ -8,6 +8,7 @@
 , pytz
 , pytestCheckHook
 , urllib3
+, certifi
 }:
 
 buildPythonPackage rec {
@@ -26,6 +27,7 @@ buildPythonPackage rec {
     python-dateutil
     pytz
     urllib3
+    certifi
   ];
 
   checkInputs = [ faker mock nose pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/mitmproxy/default.nix b/nixpkgs/pkgs/development/python-modules/mitmproxy/default.nix
index dd351931e062..e9c12548269f 100644
--- a/nixpkgs/pkgs/development/python-modules/mitmproxy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mitmproxy/default.nix
@@ -1,21 +1,25 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
 , buildPythonPackage
-, isPy27
-, fetchpatch
-# Mitmproxy requirements
+, pythonOlder
+  # Mitmproxy requirements
+, asgiref
 , blinker
 , brotli
 , certifi
 , click
 , cryptography
 , flask
+, h11
 , h2
 , hyperframe
 , kaitaistruct
 , ldap3
+, msgpack
 , passlib
 , protobuf
+, publicsuffix2
 , pyasn1
 , pyopenssl
 , pyparsing
@@ -26,45 +30,31 @@
 , tornado
 , urwid
 , wsproto
-, publicsuffix2
 , zstandard
-# Additional check requirements
+  # Additional check requirements
 , beautifulsoup4
 , glibcLocales
-, pytest
-, requests
-, asynctest
+, hypothesis
 , parver
 , pytest-asyncio
-, hypothesis
-, asgiref
-, msgpack
+, pytest-timeout
+, pytest-xdist
+, pytestCheckHook
+, requests
 }:
 
 buildPythonPackage rec {
   pname = "mitmproxy";
-  version = "5.3.0";
-  disabled = isPy27;
+  version = "6.0.2";
+  disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
-    owner  = pname;
-    repo   = pname;
-    rev    = "v${version}";
-    sha256 = "04y7fxxssrs14i7zl7fwlwrpnms39i7a6m18481sg8vlrkbagxjr";
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FyIZKFQtf6qvwo4+NzPa/KOmBCcdGJ3jCqxz26+S2e4=";
   };
 
-  postPatch = ''
-    # remove dependency constraints
-    sed 's/>=\([0-9]\.\?\)\+\( \?, \?<\([0-9]\.\?\)\+\)\?\( \?, \?!=\([0-9]\.\?\)\+\)\?//' -i setup.py
-  '';
-
-  doCheck = (!stdenv.isDarwin);
-
-  checkPhase = ''
-    export HOME=$(mktemp -d)
-    pytest -k 'not test_get_version' # expects a Git repository
-  '';
-
   propagatedBuildInputs = [
     setuptools
     # setup.py
@@ -75,6 +65,7 @@ buildPythonPackage rec {
     click
     cryptography
     flask
+    h11
     h2
     hyperframe
     kaitaistruct
@@ -96,21 +87,39 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    asynctest
     beautifulsoup4
-    flask
     glibcLocales
     hypothesis
     parver
-    pytest
     pytest-asyncio
+    pytest-timeout
+    pytest-xdist
+    pytestCheckHook
     requests
   ];
 
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    # remove dependency constraints
+    sed 's/>=\([0-9]\.\?\)\+\( \?, \?<\([0-9]\.\?\)\+\)\?\( \?, \?!=\([0-9]\.\?\)\+\)\?//' -i setup.py
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  disabledTests = [
+    # Tests require a git repository
+    "test_get_version"
+  ];
+
+  pythonImportsCheck = [ "mitmproxy" ];
+
   meta = with lib; {
     description = "Man-in-the-middle proxy";
-    homepage    = "https://mitmproxy.org/";
-    license     = licenses.mit;
+    homepage = "https://mitmproxy.org/";
+    license = licenses.mit;
     maintainers = with maintainers; [ fpletz kamilchm ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/mlxtend/default.nix b/nixpkgs/pkgs/development/python-modules/mlxtend/default.nix
index 35f55bb27930..44402b36ec08 100644
--- a/nixpkgs/pkgs/development/python-modules/mlxtend/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mlxtend/default.nix
@@ -45,5 +45,7 @@ buildPythonPackage rec {
     license= licenses.bsd3;
     maintainers = with maintainers; [ evax ];
     platforms = platforms.unix;
+    # incompatible with nixpkgs scikitlearn version
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/mmh3/default.nix b/nixpkgs/pkgs/development/python-modules/mmh3/default.nix
index cd2b01d05782..66d33d97f702 100644
--- a/nixpkgs/pkgs/development/python-modules/mmh3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mmh3/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "mmh3";
-  version = "2.5.1";
+  version = "3.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0265pvfbcsijf51szsh14qk3l3zgs0rb5rbrw11zwan52yi0jlhq";
+    sha256 = "d1ec578c09a07d3518ec9be540b87546397fa3455de73c166fcce51eaa5c41c5";
   };
 
   pythonImportsCheck = [ "mmh3" ];
diff --git a/nixpkgs/pkgs/development/python-modules/mock/default.nix b/nixpkgs/pkgs/development/python-modules/mock/default.nix
index e905add00f5f..72e40d750ed1 100644
--- a/nixpkgs/pkgs/development/python-modules/mock/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mock/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "mock";
-  version = "4.0.2";
+  version = "4.0.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72";
+    sha256 = "7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc";
   };
 
   propagatedBuildInputs = [ six pbr ] ++ lib.optionals isPy27 [ funcsigs ];
diff --git a/nixpkgs/pkgs/development/python-modules/mocket/default.nix b/nixpkgs/pkgs/development/python-modules/mocket/default.nix
index 2102718ab6ef..76b64be7430b 100644
--- a/nixpkgs/pkgs/development/python-modules/mocket/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mocket/default.nix
@@ -1,10 +1,11 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder, isPy27
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, isPy3k
 , decorator
 , http-parser
-, importlib-metadata
-, python
 , python_magic
-, six
 , urllib3
 , pytestCheckHook
 , pytest-mock
@@ -13,15 +14,17 @@
 , redis
 , requests
 , sure
+, pook
 }:
 
 buildPythonPackage rec {
   pname = "mocket";
-  version = "3.9.39";
+  version = "3.9.40";
+  disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1mbcgfy1vfwwzn54vkq8xmfzdyc28brfpqk4d55r3a6abwwsn6a4";
+    sha256 = "061w3zqf4ir7hfj0vzl58lg8szsik1fxv126s32x03nk1sd39r6v";
   };
 
   propagatedBuildInputs = [
@@ -29,8 +32,7 @@ buildPythonPackage rec {
     http-parser
     python_magic
     urllib3
-    six
-  ] ++ lib.optionals (isPy27) [ six ];
+  ];
 
   checkInputs = [
     pytestCheckHook
@@ -40,13 +42,14 @@ buildPythonPackage rec {
     redis
     requests
     sure
+    pook
   ];
 
   pytestFlagsArray = [
-    "--ignore=tests/main/test_pook.py" # pook is not packaged
-    "--ignore=tests/main/test_redis.py" # requires a live redis instance
+    # Requires a live Redis instance
+    "--ignore=tests/main/test_redis.py"
   ] ++ lib.optionals (pythonOlder "3.8") [
-    # uses IsolatedAsyncioTestCase which is only available >= 3.8
+    # Uses IsolatedAsyncioTestCase which is only available >= 3.8
     "--ignore=tests/tests38/test_http_aiohttp.py"
   ];
 
@@ -61,6 +64,7 @@ buildPythonPackage rec {
     "test_truesendall_with_recording_https"
     "test_truesendall_after_mocket_session"
     "test_real_request_session"
+    "test_asyncio_record_replay"
   ];
 
   pythonImportsCheck = [ "mocket" ];
diff --git a/nixpkgs/pkgs/development/python-modules/modeled/default.nix b/nixpkgs/pkgs/development/python-modules/modeled/default.nix
index 66fe63e3daf1..acf8ee4c1123 100644
--- a/nixpkgs/pkgs/development/python-modules/modeled/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/modeled/default.nix
@@ -24,9 +24,11 @@ buildPythonPackage rec {
 
   checkInputs = [ pytestCheckHook ];
 
+  pythonImportsCheck = [ "modeled" ];
+
   meta = with lib; {
     description = "Universal data modeling for Python";
-    homepage = "https://bitbucket.org/userzimmermann/python-modeled";
+    homepage = "https://github.com/modeled/modeled";
     license = licenses.lgpl3Only;
     maintainers = [ maintainers.costrouc ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/moderngl_window/default.nix b/nixpkgs/pkgs/development/python-modules/moderngl_window/default.nix
index b4aee8c61cf7..7f6d9893c969 100644
--- a/nixpkgs/pkgs/development/python-modules/moderngl_window/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/moderngl_window/default.nix
@@ -7,7 +7,6 @@
 , pyglet
 , pillow
 , pyrr
-, pytest
 }:
 
 buildPythonPackage rec {
diff --git a/nixpkgs/pkgs/development/python-modules/moinmoin/default.nix b/nixpkgs/pkgs/development/python-modules/moinmoin/default.nix
index cc00643b71ae..b4ecf28724a4 100644
--- a/nixpkgs/pkgs/development/python-modules/moinmoin/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/moinmoin/default.nix
@@ -4,14 +4,14 @@
 
 buildPythonPackage rec {
   pname = "moinmoin";
-  version = "1.9.10";
+  version = "1.9.11";
 
   # SyntaxError in setup.py
   disabled = isPy3k;
 
   src = fetchurl {
     url = "http://static.moinmo.in/files/moin-${version}.tar.gz";
-    sha256 = "0g05lnl1s8v61phi3z1g3b6lfj4g98grj9kw8nyjl246x0c489ja";
+    sha256 = "sha256-Ar4x1V851P4MYlPfi0ngG3bQlWNMvRtW0YX2bh4MPPU=";
   };
 
   patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/more-itertools/default.nix b/nixpkgs/pkgs/development/python-modules/more-itertools/default.nix
index 74c214d9231d..2f26cc0c86fa 100644
--- a/nixpkgs/pkgs/development/python-modules/more-itertools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/more-itertools/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "more-itertools";
-  version = "8.6.0";
+  version = "8.7.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b3a9005928e5bed54076e6e549c792b306fddfe72b2d1d22dd63d42d5d3899cf";
+    sha256 = "c5d6da9ca3ff65220c3bfd2a8db06d698f05d4d2b9be57e1deb2be5a45019713";
   };
 
   checkInputs = [ nose ];
@@ -25,6 +25,7 @@ buildPythonPackage rec {
 
   meta = {
     homepage = "https://more-itertools.readthedocs.org";
+    changelog = "https://more-itertools.readthedocs.io/en/stable/versions.html";
     description = "Expansion of the itertools module";
     license = lib.licenses.mit;
   };
diff --git a/nixpkgs/pkgs/development/python-modules/moto/default.nix b/nixpkgs/pkgs/development/python-modules/moto/default.nix
index 3efc09bc0017..ddc3896c6a55 100644
--- a/nixpkgs/pkgs/development/python-modules/moto/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/moto/default.nix
@@ -1,7 +1,6 @@
 { lib, buildPythonPackage, fetchPypi, isPy27, fetchpatch
 , aws-xray-sdk
 , backports_tempfile
-, boto
 , boto3
 , botocore
 , cfn-lint
@@ -11,7 +10,6 @@
 , jinja2
 , jsondiff
 , mock
-, nose
 , pyaml
 , python-jose
 , pytz
@@ -24,34 +22,42 @@
 , xmltodict
 , parameterized
 , idna
+, nose
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "moto";
-  version = "1.3.14";
+  version = "1.3.16";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0fm09074qic24h8rw9a0paklygyb7xd0ch4890y4v8lj2pnsxbkr";
+    sha256 = "0zy0prsyip264i6h03lxsn1qg1n3dc8c4iyfawckjqvm24gnns3c";
   };
 
   postPatch = ''
     substituteInPlace setup.py \
-      --replace "jsondiff==1.1.2" "jsondiff~=1.1"
-    sed -i '/datetime/d' setup.py # should be taken care of by std library
+      --replace "ecdsa<0.15" "ecdsa"
   '';
 
   patches = [
-    # loosen idna upper limit
+    # Remove dependence on boto. The boto library  (long ago superseded by boto3)
+    # has not had an official release in over two years or even a commit in the
+    # last 18 months. These patches should be included in the next moto release
+    # after 1.3.16
+    (fetchpatch {
+      url = "https://github.com/spulec/moto/pull/3503/commits/ae85c539fd57034c4d5cfd0f95af41ff19862dd1.patch";
+      sha256 = "16hr2py6q701d8ih6zcvs3lbanshpbk15ixckgdqngjf160k5m9p";
+      excludes = ["tests/test_ec2/test_ec2_cloudformation.py"];
+    })
     (fetchpatch {
-      url = "https://github.com/spulec/moto/commit/649b497f71cce95a6474a3ff6f3c9c3339efb68f.patch";
-      sha256 = "03qdybzlskgbdadmlcg6ayxfp821b5iaa8q2542cwkcq7msqbbqc";
+      url = "https://github.com/spulec/moto/pull/3468/commits/6ee39bd7fda4d3623569e10dcd9561bf2cd1d0bd.patch";
+      sha256 = "10m3xdqxgys7spav9mkbhcn4z0124rlprwxnw6ysb10610xlna0i";
     })
   ];
 
   propagatedBuildInputs = [
     aws-xray-sdk
-    boto
     boto3
     botocore
     cfn-lint
@@ -72,26 +78,183 @@ buildPythonPackage rec {
     idna
   ] ++ lib.optionals isPy27 [ backports_tempfile ];
 
-  checkInputs = [ boto3 freezegun nose sure parameterized ];
+  # Next release after 1.3.16 will not require `nose`
+  checkInputs = [ boto3 nose freezegun pytestCheckHook sure parameterized ];
 
-  checkPhase = ''
-    nosetests -v ./tests/ \
-              -e test_invoke_function_from_sns \
-              -e test_invoke_requestresponse_function \
-              -e test_context_manager \
-              -e test_decorator_start_and_stop \
-              -e test_invoke_event_function \
-              -e test_invoke_function_from_dynamodb \
-              -e test_invoke_function_from_sqs \
-              -e test_invoke_lambda_error \
-              -e test_invoke_async_function \
-              -e test_passthrough_requests
-  '';
+  # Multiple test files still import boto, rather than boto3 like
+  # boto is long-deprecated and broken on python3.9
+  # https://github.com/spulec/moto/blob/63ce647123755e4c4693a89f52c254596004c098/tests/test_autoscaling/test_autoscaling.py#L2
+  # NOTE: This should change to use disabledTestFiles / disabledTestPaths once that
+  # feature stabalizes: see #113153 (mostly the discussion therein), #113167, #110700
+  pytestFlagsArray = [
+    "--ignore=tests/test_awslambda/test_policy.py"
+    "--ignore=tests/test_autoscaling/test_autoscaling.py"
+    "--ignore=tests/test_autoscaling/test_cloudformation.py"
+    "--ignore=tests/test_autoscaling/test_elbv2.py"
+    "--ignore=tests/test_autoscaling/test_launch_configurations.py"
+    "--ignore=tests/test_autoscaling/test_policies.py"
+    "--ignore=tests/test_autoscaling/test_server.py"
+    "--ignore=tests/test_awslambda/test_lambda.py"
+    "--ignore=tests/test_awslambda/test_lambda_cloudformation.py"
+    "--ignore=tests/test_batch/test_cloudformation.py"
+    "--ignore=tests/test_batch/test_server.py"
+    "--ignore=tests/test_cloudformation/test_cloudformation_depends_on.py"
+    "--ignore=tests/test_cloudformation/test_cloudformation_stack_crud.py"
+    "--ignore=tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py"
+    "--ignore=tests/test_cloudformation/test_cloudformation_stack_integration.py"
+    "--ignore=tests/test_cloudformation/test_stack_parsing.py"
+    "--ignore=tests/test_cloudformation/test_validate.py"
+    "--ignore=tests/test_cloudwatch/test_cloudwatch.py"
+    "--ignore=tests/test_cognitoidentity/test_server.py"
+    "--ignore=tests/test_config/test_config.py"
+    "--ignore=tests/test_core/test_auth.py"
+    "--ignore=tests/test_core/test_decorator_calls.py"
+    "--ignore=tests/test_core/test_nested.py"
+    "--ignore=tests/test_core/test_server.py"
+    "--ignore=tests/test_datapipeline/test_datapipeline.py"
+    "--ignore=tests/test_datapipeline/test_server.py"
+    "--ignore=tests/test_datasync/test_datasync.py"
+    "--ignore=tests/test_dynamodb/test_dynamodb.py"
+    "--ignore=tests/test_dynamodb/test_dynamodb_table_with_range_key.py"
+    "--ignore=tests/test_dynamodb/test_dynamodb_table_without_range_key.py"
+    "--ignore=tests/test_dynamodb/test_server.py"
+    "--ignore=tests/test_dynamodb2/test_dynamodb.py"
+    "--ignore=tests/test_dynamodb2/test_dynamodb_table_with_range_key.py"
+    "--ignore=tests/test_dynamodb2/test_dynamodb_table_without_range_key.py"
+    "--ignore=tests/test_dynamodb2/test_server.py"
+    "--ignore=tests/test_ec2/test_amazon_dev_pay.py"
+    "--ignore=tests/test_ec2/test_amis.py"
+    "--ignore=tests/test_ec2/test_availability_zones_and_regions.py"
+    "--ignore=tests/test_ec2/test_customer_gateways.py"
+    "--ignore=tests/test_ec2/test_dhcp_options.py"
+    "--ignore=tests/test_ec2/test_elastic_block_store.py"
+    "--ignore=tests/test_ec2/test_elastic_ip_addresses.py"
+    "--ignore=tests/test_ec2/test_elastic_network_interfaces.py"
+    "--ignore=tests/test_ec2/test_general.py"
+    "--ignore=tests/test_ec2/test_instances.py"
+    "--ignore=tests/test_ec2/test_internet_gateways.py"
+    "--ignore=tests/test_ec2/test_ip_addresses.py"
+    "--ignore=tests/test_ec2/test_key_pairs.py"
+    "--ignore=tests/test_ec2/test_monitoring.py"
+    "--ignore=tests/test_ec2/test_network_acls.py"
+    "--ignore=tests/test_ec2/test_placement_groups.py"
+    "--ignore=tests/test_ec2/test_regions.py"
+    "--ignore=tests/test_ec2/test_reserved_instances.py"
+    "--ignore=tests/test_ec2/test_route_tables.py"
+    "--ignore=tests/test_ec2/test_security_groups.py"
+    "--ignore=tests/test_ec2/test_spot_instances.py"
+    "--ignore=tests/test_ec2/test_subnets.py"
+    "--ignore=tests/test_ec2/test_tags.py"
+    "--ignore=tests/test_ec2/test_virtual_private_gateways.py"
+    "--ignore=tests/test_ec2/test_vm_export.py"
+    "--ignore=tests/test_ec2/test_vm_import.py"
+    "--ignore=tests/test_ec2/test_vpc_peering.py"
+    "--ignore=tests/test_ec2/test_vpcs.py"
+    "--ignore=tests/test_ec2/test_vpn_connections.py"
+    "--ignore=tests/test_ec2/test_vpn_connections.py"
+    "--ignore=tests/test_ec2/test_windows.py"
+    "--ignore=tests/test_ecs/test_ecs_boto3.py"
+    "--ignore=tests/test_elb/test_elb.py"
+    "--ignore=tests/test_elb/test_server.py"
+    "--ignore=tests/test_elbv2/test_elbv2.py"
+    "--ignore=tests/test_elbv2/test_server.py"
+    "--ignore=tests/test_emr/test_emr.py"
+    "--ignore=tests/test_emr/test_server.py"
+    "--ignore=tests/test_glacier/test_glacier_archives.py"
+    "--ignore=tests/test_glacier/test_glacier_jobs.py"
+    "--ignore=tests/test_glacier/test_glacier_vaults.py"
+    "--ignore=tests/test_iam/test_iam.py"
+    "--ignore=tests/test_iam/test_iam_cloudformation.py"
+    "--ignore=tests/test_iam/test_iam_groups.py"
+    "--ignore=tests/test_iam/test_server.py"
+    "--ignore=tests/test_iot/test_server.py"
+    "--ignore=tests/test_iotdata/test_server.py"
+    "--ignore=tests/test_kinesis/test_kinesis.py"
+    "--ignore=tests/test_kinesis/test_kinesis_cloudformation.py"
+    "--ignore=tests/test_kinesis/test_server.py"
+    "--ignore=tests/test_kinesisvideo/test_server.py"
+    "--ignore=tests/test_kinesisvideoarchivedmedia/test_server.py"
+    "--ignore=tests/test_kms/test_kms.py"
+    "--ignore=tests/test_kms/test_server.py"
+    "--ignore=tests/test_kms/test_utils.py"
+    "--ignore=tests/test_logs/test_logs.py"
+    "--ignore=tests/test_polly/test_server.py"
+    "--ignore=tests/test_rds/test_rds.py"
+    "--ignore=tests/test_rds/test_server.py"
+    "--ignore=tests/test_rds2/test_server.py"
+    "--ignore=tests/test_redshift/test_redshift.py"
+    "--ignore=tests/test_redshift/test_server.py"
+    "--ignore=tests/test_resourcegroupstaggingapi/test_resourcegroupstaggingapi.py"
+    "--ignore=tests/test_route53/test_route53.py"
+    "--ignore=tests/test_s3/test_s3.py"
+    "--ignore=tests/test_s3/test_s3_cloudformation.py"
+    "--ignore=tests/test_s3/test_s3_lifecycle.py"
+    "--ignore=tests/test_s3/test_s3_storageclass.py"
+    "--ignore=tests/test_s3/test_s3_utils.py"
+    "--ignore=tests/test_s3bucket_path/test_s3bucket_path.py"
+    "--ignore=tests/test_s3bucket_path/test_s3bucket_path_combo.py"
+    "--ignore=tests/test_secretsmanager/test_server.py"
+    "--ignore=tests/test_ses/test_server.py"
+    "--ignore=tests/test_ses/test_ses.py"
+    "--ignore=tests/test_ses/test_ses_boto3.py"
+    "--ignore=tests/test_ses/test_ses_sns_boto3.py"
+    "--ignore=tests/test_sns/test_application.py"
+    "--ignore=tests/test_sns/test_application_boto3.py"
+    "--ignore=tests/test_sns/test_publishing.py"
+    "--ignore=tests/test_sns/test_publishing_boto3.py"
+    "--ignore=tests/test_sns/test_server.py"
+    "--ignore=tests/test_sns/test_subscriptions.py"
+    "--ignore=tests/test_sns/test_subscriptions_boto3.py"
+    "--ignore=tests/test_sns/test_topics.py"
+    "--ignore=tests/test_sns/test_topics_boto3.py"
+    "--ignore=tests/test_sqs/test_server.py"
+    "--ignore=tests/test_sqs/test_sqs.py"
+    "--ignore=tests/test_ssm/test_ssm_boto3.py"
+    "--ignore=tests/test_ssm/test_ssm_docs.py"
+    "--ignore=tests/test_sts/test_server.py"
+    "--ignore=tests/test_sts/test_sts.py"
+    "--ignore=tests/test_swf/models/test_activity_task.py"
+    "--ignore=tests/test_swf/models/test_decision_task.py"
+    "--ignore=tests/test_swf/models/test_timeout.py"
+    "--ignore=tests/test_swf/models/test_workflow_execution.py"
+    "--ignore=tests/test_swf/responses/test_activity_tasks.py"
+    "--ignore=tests/test_swf/responses/test_activity_types.py"
+    "--ignore=tests/test_swf/responses/test_decision_tasks.py"
+    "--ignore=tests/test_swf/responses/test_domains.py"
+    "--ignore=tests/test_swf/responses/test_timeouts.py"
+    "--ignore=tests/test_swf/responses/test_workflow_executions.py"
+    "--ignore=tests/test_swf/responses/test_workflow_types.py"
+  ];
 
-  # Disabling because of 20 failing tests due to https://github.com/spulec/moto/issues/2728
-  # We should enable these as soon as possible again though. Note the issue
-  # is unrelated to the docutils 0.16 bump.
-  doCheck = false;
+  disabledTests = [
+    # these tests rely on the network
+    "test_server"
+    "test_managedblockchain_nodes"
+    "test_swf"
+    "test_simple_instance"
+    "test_passthrough_requests"
+    "test_s3_server_get"
+    "test_s3_server_bucket_create"
+    "test_s3_server_post_to_bucket"
+    "test_s3_server_put_ipv6"
+    "test_s3_server_put_ipv4"
+    "test_http_proxying_integration"
+    "test_submit_job_by_name"
+    "test_submit_job"
+    "test_list_jobs"
+    "test_terminate_job"
+    "test_idtoken_contains_kid_header"
+    "test_latest_meta_data"
+    "test_meta_data_iam"
+    "test_meta_data_security_credentials"
+    "test_meta_data_default_role"
+    "test_reset_api"
+    "test_data_api"
+    "test_requests_to_amazon_subdomains_dont_work"
+    "test_get_records_seq"
+    "test_stream_with_range_key"
+    "test_create_notebook_instance_bad_volume_size"
+  ];
 
   meta = with lib; {
     description = "Allows your tests to easily mock out AWS Services";
diff --git a/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix b/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix
index 058133665f4a..6e8fd896d913 100644
--- a/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mpi4py/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchPypi, python, buildPythonPackage, mpi, openssh }:
+{ lib, fetchPypi, fetchpatch, python, buildPythonPackage, mpi, openssh }:
 
 buildPythonPackage rec {
   pname = "mpi4py";
@@ -9,6 +9,12 @@ buildPythonPackage rec {
     sha256 = "012d716c8b9ed1e513fcc4b18e5af16a8791f51e6d1716baccf988ad355c5a1f";
   };
 
+  patches = [ (fetchpatch {
+    name = "disable-broken-test"; # upstream patch
+    url = "https://github.com/mpi4py/mpi4py/commit/e13cc3ee59ec6ec2c6ee20e384e1e649d5027e8a.patch";
+    sha256 = "0iwknrhxnfmsqjj8ahpn50c8pcdyv9p3wmcqi1jhr4i5y7lnmvvx";
+  })];
+
   passthru = {
     inherit mpi;
   };
diff --git a/nixpkgs/pkgs/development/python-modules/mplfinance/default.nix b/nixpkgs/pkgs/development/python-modules/mplfinance/default.nix
new file mode 100644
index 000000000000..b1d0bf2b9aa9
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mplfinance/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, fetchPypi, matplotlib, pandas }:
+
+buildPythonPackage rec {
+  pname = "mplfinance";
+  version = "0.12.7a7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-pATiprTELt8GrEkeKjILPfpdNDVoex5t+Mc+6Gg7cPY=";
+  };
+
+  propagatedBuildInputs = [ matplotlib pandas ];
+
+  # tests are only included on GitHub where this version misses a tag
+  # and half of them fail
+  doCheck = false;
+
+  pythonImportsCheck = [ "mplfinance" ];
+
+  meta = with lib; {
+    description = "Matplotlib utilities for the visualization, and visual analysis, of financial data";
+    homepage = "https://github.com/matplotlib/mplfinance";
+    license = [ licenses.bsd3 ];
+    maintainers = [ maintainers.ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/mpv/default.nix b/nixpkgs/pkgs/development/python-modules/mpv/default.nix
index 0ff66fa8132e..11d0bed476af 100644
--- a/nixpkgs/pkgs/development/python-modules/mpv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mpv/default.nix
@@ -4,14 +4,14 @@
 
 buildPythonPackage rec {
   pname = "mpv";
-  version = "0.4.7";
+  version = "0.5.2";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "jaseg";
     repo = "python-mpv";
     rev = "v${version}";
-    sha256 = "1gq2ynzbpmc7bv066ddv2f4rnmvfsi7034vhf9ffp7yzbixf6ys8";
+    sha256 = "0ffskpynhl1252h6a05087lvpjgn1cn2z3caiv3i666dn1n79fjd";
   };
 
   buildInputs = [ mpv ];
@@ -28,6 +28,6 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "A python interface to the mpv media player";
     homepage = "https://github.com/jaseg/python-mpv";
-    license = licenses.agpl3;
+    license = licenses.agpl3Plus;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/msal/default.nix b/nixpkgs/pkgs/development/python-modules/msal/default.nix
index 37266df5f216..3df0527589a1 100644
--- a/nixpkgs/pkgs/development/python-modules/msal/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/msal/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "msal";
-  version = "1.8.0";
+  version = "1.10.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1dcc737ca517df53438bc9a3fae97f17d93d7a93fa1389e6bc44e82eee81ab83";
+    sha256 = "582e92e3b9fa68084dca6ecfd8db866ddc75cd9043de267c79d6b6277dd27f55";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/msldap/default.nix b/nixpkgs/pkgs/development/python-modules/msldap/default.nix
index d068380a7a2f..e9790db9f5eb 100644
--- a/nixpkgs/pkgs/development/python-modules/msldap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/msldap/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "msldap";
-  version = "0.3.25";
+  version = "0.3.28";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b5ef61c4f05493cfe78b3f955878a3d0a71950eead5ebb484282f07456a47bea";
+    sha256 = "sha256-0sMi5PpwMWf/W+Hu0akQVF/1ZkbanfOzYDC3R6lZrSE=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/msrest/default.nix b/nixpkgs/pkgs/development/python-modules/msrest/default.nix
index 21b93bf5bfe3..acdcf69e301d 100644
--- a/nixpkgs/pkgs/development/python-modules/msrest/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/msrest/default.nix
@@ -18,7 +18,7 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.6.19";
+  version = "0.6.21";
   pname = "msrest";
 
   # no tests in PyPI tarball
@@ -27,7 +27,7 @@ buildPythonPackage rec {
     owner = "Azure";
     repo = "msrest-for-python";
     rev = "v${version}";
-    sha256 = "sha256-hcUJrWw5EU0aO5Gyhn5+LmuRQN9Bom59cTz3maQ0jvw=";
+    sha256 = "sha256-IlBwlVQ/v+vJmCWNbFZKGL6a9K09z4AYrPm3kwaA/nI=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/mullvad-api/default.nix b/nixpkgs/pkgs/development/python-modules/mullvad-api/default.nix
new file mode 100644
index 000000000000..22e6647b57d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/mullvad-api/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "mullvad-api";
+  version = "1.0.0";
+
+  src = fetchPypi {
+    pname = "mullvad_api";
+    inherit version;
+    sha256 = "0r0hc2d6vky52hxdqxn37w0y42ddh1zal6zz2cvqlxamc53wbiv1";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "mullvad_api" ];
+
+  meta = with lib; {
+    description = "Python client for the Mullvad API";
+    homepage = "https://github.com/meichthys/mullvad-api";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/murmurhash/default.nix b/nixpkgs/pkgs/development/python-modules/murmurhash/default.nix
index c2a7eb193377..ca2ffea183b7 100644
--- a/nixpkgs/pkgs/development/python-modules/murmurhash/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/murmurhash/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "murmurhash";
-  version = "1.0.4";
+  version = "1.0.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "422084ac1fe994cb7c893689c600923dee4e2c3fc74e832f7d9a8d6fdcc362d5";
+    sha256 = "98ec9d727bd998a35385abd56b062cf0cca216725ea7ec5068604ab566f7e97f";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/mxnet/default.nix b/nixpkgs/pkgs/development/python-modules/mxnet/default.nix
index 2ad3b9fd6df1..47f4d80ad927 100644
--- a/nixpkgs/pkgs/development/python-modules/mxnet/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mxnet/default.nix
@@ -9,7 +9,7 @@
 }:
 
 buildPythonPackage {
-  inherit (pkgs.mxnet) name version src meta;
+  inherit (pkgs.mxnet) pname version src meta;
 
   buildInputs = [ pkgs.mxnet ];
   propagatedBuildInputs = [ requests numpy graphviz ];
diff --git a/nixpkgs/pkgs/development/python-modules/myfitnesspal/default.nix b/nixpkgs/pkgs/development/python-modules/myfitnesspal/default.nix
index 0638ce5d1ee5..35d1c70a23a7 100644
--- a/nixpkgs/pkgs/development/python-modules/myfitnesspal/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/myfitnesspal/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "myfitnesspal";
-  version = "1.16.1";
+  version = "1.16.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c2275e91c794a3569a76c47c78cf2ff04d7f569a98558227e899ead7b30af0d6";
+    sha256 = "44b31623fd71fedd891c3f66be3bc1caa6f1caf88076a75236ab74f8807f6ae5";
   };
 
   # Remove overly restrictive version constraints
diff --git a/nixpkgs/pkgs/development/python-modules/myjwt/default.nix b/nixpkgs/pkgs/development/python-modules/myjwt/default.nix
new file mode 100644
index 000000000000..d80e66e07bf0
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/myjwt/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, click
+, colorama
+, cryptography
+, exrex
+, pyopenssl
+, pyperclip
+, questionary
+, requests
+, pytestCheckHook
+, pytest-mock
+, requests-mock
+}:
+
+buildPythonPackage rec {
+  pname = "myjwt";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mBouamama";
+    repo = "MyJWT";
+    rev = version;
+    sha256 = "1n3lvdrzp6wbbcygjwa7xar2jnhjnrz7a9khmn2phhkkngxm5rc4";
+  };
+
+  patches = [ ./pinning.patch ];
+
+  propagatedBuildInputs = [
+    click
+    colorama
+    cryptography
+    exrex
+    pyopenssl
+    pyperclip
+    questionary
+    requests
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-mock
+    requests-mock
+  ];
+
+  pythonImportsCheck = [ "myjwt" ];
+
+  meta = with lib; {
+    description = "CLI tool for testing vulnerabilities on Json Web Token(JWT)";
+    homepage = "https://github.com/mBouamama/MyJWT";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    # Build failures
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/myjwt/pinning.patch b/nixpkgs/pkgs/development/python-modules/myjwt/pinning.patch
new file mode 100644
index 000000000000..abae9d0e2ecb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/myjwt/pinning.patch
@@ -0,0 +1,21 @@
+diff --git a/requirements.txt b/requirements.txt
+index 3017e02..2b465db 100644
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -1,8 +1,8 @@
+-click==7.1.2
+-colorama==0.4.4
+-cryptography==3.3.1
+-exrex==0.10.5
+-pyOpenSSL==20.0.1
+-pyperclip==1.8.1
+-questionary==1.9.0
+-requests==2.25.1
++click
++colorama
++cryptography
++exrex
++pyOpenSSL
++pyperclip
++questionary
++requests
diff --git a/nixpkgs/pkgs/development/python-modules/mypy-protobuf/default.nix b/nixpkgs/pkgs/development/python-modules/mypy-protobuf/default.nix
index 69178edb6919..6c6ea7b7b1c9 100644
--- a/nixpkgs/pkgs/development/python-modules/mypy-protobuf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mypy-protobuf/default.nix
@@ -1,12 +1,14 @@
-{ lib, fetchPypi, buildPythonApplication, protobuf }:
+{ lib, fetchPypi, buildPythonApplication, protobuf, pythonOlder }:
 
 buildPythonApplication rec {
   pname = "mypy-protobuf";
-  version = "1.23";
+  version = "2.4";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cf79c77e828a2de9bdc74b43ad4abd4c2a3a30f0471b46e9b4e01b9877f166fb";
+    sha256 = "77e10c476cdd3ee14535c2357e64deac6b1a69f33eb500d795b064acda48c66f";
   };
 
   propagatedBuildInputs = [ protobuf ];
diff --git a/nixpkgs/pkgs/development/python-modules/mypy/default.nix b/nixpkgs/pkgs/development/python-modules/mypy/default.nix
index 4bea992f6ba8..dbbcb30ffcec 100644
--- a/nixpkgs/pkgs/development/python-modules/mypy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/mypy/default.nix
@@ -1,22 +1,15 @@
-{ lib, stdenv, fetchFromGitHub, buildPythonPackage, typed-ast, psutil, isPy3k
+{ lib, stdenv, fetchPypi, buildPythonPackage, typed-ast, psutil, isPy3k
 , mypy-extensions
 , typing-extensions
-, fetchpatch
 }:
 buildPythonPackage rec {
   pname = "mypy";
-  version = "0.790";
+  version = "0.812";
   disabled = !isPy3k;
 
-  # Fetch 0.790 from GitHub temporarily because mypyc.analysis is missing from
-  # the Pip package (see also https://github.com/python/mypy/issues/9584). It
-  # should be possible to move back to Pypi for the next release.
-  src = fetchFromGitHub {
-    owner = "python";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "0zq3lpdf9hphcklk40wz444h8w3dkhwa12mqba5j9lmg11klnhz7";
-    fetchSubmodules = true;
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "069i9qnfanp7dn8df1vspnqb0flvsszzn22v00vj08nzlnd061yd";
   };
 
   propagatedBuildInputs = [ typed-ast psutil mypy-extensions typing-extensions ];
@@ -34,23 +27,6 @@ buildPythonPackage rec {
     "mypyc.analysis"
   ];
 
-  # These three patches are required to make compilation with mypyc work for
-  # 0.790, see also https://github.com/python/mypy/issues/9584.
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/python/mypy/commit/f6522ae646a8d87ce10549f29fcf961dc014f154.patch";
-      sha256 = "0d3jp4d0b7vdc0prk07grhajsy7x3wcynn2xysnszawiww93bfrh";
-    })
-    (fetchpatch {
-      url = "https://github.com/python/mypy/commit/acd603496237a78b109ca9d89991539633cbbb99.patch";
-      sha256 = "0ry1rxpz2ws7zzrmq09pra9dlzxb84zhs8kxwf5xii1k1bgmrljr";
-    })
-    (fetchpatch {
-      url = "https://github.com/python/mypy/commit/81818b23b5d53f31caf3515d6f0b54e3c018d790.patch";
-      sha256 = "002y24kfscywkw4mz9lndsps543j4xhr2kcnfbrqr4i0yxlvdbca";
-    })
-  ];
-
   # Compile mypy with mypyc, which makes mypy about 4 times faster. The compiled
   # version is also the default in the wheels on Pypi that include binaries.
   # is64bit: unfortunately the build would exhaust all possible memory on i686-linux.
diff --git a/nixpkgs/pkgs/development/python-modules/nats-python/default.nix b/nixpkgs/pkgs/development/python-modules/nats-python/default.nix
new file mode 100644
index 000000000000..5bf5b2a6d21c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/nats-python/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, poetry-core
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "nats-python";
+  version = "0.8.0";
+  disabled = pythonOlder "3.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Gr1N";
+    repo = "nats-python";
+    rev = version;
+    sha256 = "1j7skyxldir3mphvnsyhjxmf3cimv4h7n5v58jl2gff4yd0hdw7g";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  patches = [
+    # Switch to poetry-core, https://github.com/Gr1N/nats-python/pull/19
+    (fetchpatch {
+      name = "use-poetry-core.patch";
+      url = "https://github.com/Gr1N/nats-python/commit/71b25b324212dccd7fc06ba3914491adba22e83f.patch";
+      sha256 = "1fip1qpzk2ka7qgkrdpdr6vnrnb1p8cwapa51xp0h26nm7yis1gl";
+    })
+  ];
+
+  # Tests require a running NATS server
+  doCheck = false;
+
+  pythonImportsCheck = [ "pynats" ];
+
+  meta = with lib; {
+    description = "Python client for NATS messaging system";
+    homepage = "https://github.com/Gr1N/nats-python";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/natsort/default.nix b/nixpkgs/pkgs/development/python-modules/natsort/default.nix
index e4c42496597e..d475f21fcb51 100644
--- a/nixpkgs/pkgs/development/python-modules/natsort/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/natsort/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "natsort";
-  version = "7.1.0";
+  version = "7.1.1";
 
   checkInputs = [
     pytest
@@ -27,7 +27,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "33f3f1003e2af4b4df20908fe62aa029999d136b966463746942efbfc821add3";
+    sha256 = "00c603a42365830c4722a2eb7663a25919551217ec09a243d3399fa8dd4ac403";
   };
 
   # Does not support Python 2
diff --git a/nixpkgs/pkgs/development/python-modules/nbclassic/default.nix b/nixpkgs/pkgs/development/python-modules/nbclassic/default.nix
new file mode 100644
index 000000000000..3644b4e48dd7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/nbclassic/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, notebook
+, pythonOlder
+, jupyter_server
+, pytestCheckHook
+, pytest-tornasync
+}:
+
+buildPythonPackage rec {
+  pname = "nbclassic";
+  version = "0.2.6";
+  disabled = pythonOlder "3.5";
+
+  # tests only on github
+  src = fetchFromGitHub {
+    owner = "jupyterlab";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-stp0LZJAOCrnObvJIPEVt8mMb8yL29nlHECypbTg3ec=";
+  };
+
+  propagatedBuildInputs = [ jupyter_server notebook ];
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-tornasync
+  ];
+
+  meta = with lib; {
+    description = "Jupyter lab environment notebook server extension.";
+    license = with licenses; [ bsd3 ];
+    homepage = "https://github.com/jupyterlab/nbclassic";
+    maintainers = [ maintainers.elohmeier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/nbclient/default.nix b/nixpkgs/pkgs/development/python-modules/nbclient/default.nix
index c320415e0754..169b89f7b892 100644
--- a/nixpkgs/pkgs/development/python-modules/nbclient/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nbclient/default.nix
@@ -6,12 +6,12 @@
 
 buildPythonPackage rec {
   pname = "nbclient";
-  version = "0.5.1";
+  version = "0.5.3";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "01e2d726d16eaf2cde6db74a87e2451453547e8832d142f73f72fddcd4fe0250";
+    sha256 = "db17271330c68c8c88d46d72349e24c147bb6f34ec82d8481a8f025c4d26589c";
   };
 
   inherit doCheck;
diff --git a/nixpkgs/pkgs/development/python-modules/nbconvert/default.nix b/nixpkgs/pkgs/development/python-modules/nbconvert/default.nix
index 582a6132c259..02eda2beb195 100644
--- a/nixpkgs/pkgs/development/python-modules/nbconvert/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nbconvert/default.nix
@@ -30,6 +30,16 @@ buildPythonPackage rec {
     sha256 = "cbbc13a86dfbd4d1b5dee106539de0795b4db156c894c2c5dc382062bbc29002";
   };
 
+  # Add $out/share/jupyter to the list of paths that are used to search for
+  # various exporter templates
+  patches = [
+    ./templates.patch
+  ];
+
+  postPatch = ''
+    substituteAllInPlace ./nbconvert/exporters/templateexporter.py
+  '';
+
   checkInputs = [ pytestCheckHook glibcLocales ];
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/nbconvert/templates.patch b/nixpkgs/pkgs/development/python-modules/nbconvert/templates.patch
new file mode 100644
index 000000000000..cadaf69a7b84
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/nbconvert/templates.patch
@@ -0,0 +1,12 @@
+diff --git a/nbconvert/exporters/templateexporter.py b/nbconvert/exporters/templateexporter.py
+index 0d540eb1..440f6382 100644
+--- a/nbconvert/exporters/templateexporter.py
++++ b/nbconvert/exporters/templateexporter.py
+@@ -616,6 +616,7 @@ class TemplateExporter(Exporter):
+         if DEV_MODE:
+             root_dirs.append(os.path.abspath(os.path.join(ROOT, '..', '..', 'share', 'jupyter')))
+         root_dirs.extend(jupyter_path())
++        root_dirs.append(os.path.join("@out@", "share", "jupyter"))
+         return root_dirs
+ 
+     def _init_resources(self, resources):
diff --git a/nixpkgs/pkgs/development/python-modules/nbdime/default.nix b/nixpkgs/pkgs/development/python-modules/nbdime/default.nix
index 299cfc87024c..66e1edd93908 100644
--- a/nixpkgs/pkgs/development/python-modules/nbdime/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nbdime/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, callPackage, isPy3k
+{ lib, buildPythonPackage, fetchPypi, isPy3k
 , hypothesis
 , setuptools_scm
 , six
@@ -49,7 +49,7 @@ buildPythonPackage rec {
     "test_filter_cmd_invalid_filter"
     "test_inline_merge"
     "test_interrogate_filter_no_repo"
-    "test_merge_input_strategy_inline_source_conflict"
+    "test_merge"
   ];
 
   nativeBuildInputs = [ setuptools_scm ];
diff --git a/nixpkgs/pkgs/development/python-modules/nbformat/default.nix b/nixpkgs/pkgs/development/python-modules/nbformat/default.nix
index 3bd119179a45..a3143780e1c7 100644
--- a/nixpkgs/pkgs/development/python-modules/nbformat/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nbformat/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "nbformat";
-  version = "5.0.8";
+  version = "5.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f545b22138865bfbcc6b1ffe89ed5a2b8e2dc5d4fe876f2ca60d8e6f702a30f8";
+    sha256 = "sha256-HSI+ZKGL+nzfLbLpuoqBgxL8KgcB0ukQtY32aAk4WlY=";
   };
 
   LC_ALL="en_US.utf8";
diff --git a/nixpkgs/pkgs/development/python-modules/nbsmoke/default.nix b/nixpkgs/pkgs/development/python-modules/nbsmoke/default.nix
index b7ddf35caec6..86c5afd8c4a7 100644
--- a/nixpkgs/pkgs/development/python-modules/nbsmoke/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nbsmoke/default.nix
@@ -35,6 +35,7 @@ buildPythonPackage rec {
 
   # tests not included with pypi release
   doCheck = false;
+  pythonImportsCheck = [ "nbsmoke" ];
 
   meta = with lib; {
     description = "Basic notebook checks and linting";
diff --git a/nixpkgs/pkgs/development/python-modules/nbsphinx/default.nix b/nixpkgs/pkgs/development/python-modules/nbsphinx/default.nix
index 979b357607e5..2622b815f1ee 100644
--- a/nixpkgs/pkgs/development/python-modules/nbsphinx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nbsphinx/default.nix
@@ -7,7 +7,6 @@
 , nbformat
 , sphinx
 , traitlets
-, python
 , isPy3k
 }:
 
diff --git a/nixpkgs/pkgs/development/python-modules/ndjson/default.nix b/nixpkgs/pkgs/development/python-modules/ndjson/default.nix
index 175b04d31074..b69e8401eb51 100644
--- a/nixpkgs/pkgs/development/python-modules/ndjson/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ndjson/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, wheel, watchdog, flake8
+{ lib, buildPythonPackage, fetchPypi, watchdog, flake8
 , pytest, pytestrunner, coverage, sphinx, twine }:
 
 buildPythonPackage rec {
@@ -16,6 +16,7 @@ buildPythonPackage rec {
     homepage = "https://github.com/rhgrant10/ndjson";
     description = "JsonDecoder";
     platforms = platforms.unix;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ freezeboy ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/netcdf4/default.nix b/nixpkgs/pkgs/development/python-modules/netcdf4/default.nix
index 60f7dbe6c239..35e5e063bb7c 100644
--- a/nixpkgs/pkgs/development/python-modules/netcdf4/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/netcdf4/default.nix
@@ -3,13 +3,13 @@
 }:
 buildPythonPackage rec {
   pname = "netCDF4";
-  version = "1.5.5.1";
+  version = "1.5.6";
 
   disabled = isPyPy;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d957e55a667d1fc651ddef22fea10ded0f142b7d9dbbf4d08c0012d32f445abd";
+    sha256 = "7577f4656af8431b2fa6b6797acb45f81fa1890120e9123b3645e14765da5a7c";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/netdata/default.nix b/nixpkgs/pkgs/development/python-modules/netdata/default.nix
index f4e625b12b4e..3b1ccbb73f70 100644
--- a/nixpkgs/pkgs/development/python-modules/netdata/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/netdata/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "netdata";
-  version = "0.2.0";
+  version = "0.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "14kyjp1q3clizs1bqx4rp31d2awjmi5v65z8sarr2ycgwqqmkrzw";
+    sha256 = "sha256-oGOT4RvftI/2Ri2icM/AtglNZXt10jkFh/rlr6A46YE=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/nodepy-runtime/default.nix b/nixpkgs/pkgs/development/python-modules/nodepy-runtime/default.nix
new file mode 100644
index 000000000000..5be806e4cefe
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/nodepy-runtime/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, localimport
+, pathlib2
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "nodepy-runtime";
+  version = "2.1.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-6tSsD76EpCZxkdulv1BcUZtIXGWLG6PuII25J8STygE=";
+  };
+
+  propagatedBuildInputs = [
+    localimport
+    pathlib2
+    six
+  ];
+
+  pythonImportsCheck = [
+    "nodepy"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nodepy/nodepy";
+    description = "Runtime for Python inspired by Node.JS";
+    longDescription = ''
+      Node.py is a Python runtime and package manager compatible with CPython
+      2.7 and 3.3 – 3.6. It provides a separate import mechanism for modules
+      inspired by Node.js, bringing dependency management and ease of deployment
+      for Python applications up to par with other languages without virtual
+      environments.
+
+      Node.py comes with a built-in package manager that builds on Pip for
+      standard Python dependencies but also adds the capability to install
+      packages that are specifically developed for Node.py. To install the
+      dependencies of the package manager you must specify the [pm] install
+      extra.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/nose-timer/default.nix b/nixpkgs/pkgs/development/python-modules/nose-timer/default.nix
index c93f5bda9838..bbc164c85e2b 100644
--- a/nixpkgs/pkgs/development/python-modules/nose-timer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nose-timer/default.nix
@@ -1,20 +1,44 @@
-{ buildPythonPackage, fetchPypi, lib, nose, }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, nose
+, mock
+, parameterized
+, termcolor
+}:
 
 buildPythonPackage rec {
   pname = "nose-timer";
-  version = "1.0.0";
+  version = "1.0.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "09hwjwbczi06bfqgiylb2yxs5h88jdl26zi1fdqxdzvamrkksf2c";
+  src = fetchFromGitHub {
+    owner = "mahmoudimus";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0xsai2l5i1av62y9y0q63wy2zk27klmf2jizgghhxg2y8nfa8x3x";
   };
 
   propagatedBuildInputs = [ nose ];
 
+  checkInputs = [
+    mock
+    nose
+    parameterized
+    termcolor
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    nosetests --verbosity 2 tests
+    runHook postCheck
+  '';
+
+  pythonImportsCheck = [ "nosetimer" ];
+
   meta = with lib; {
+    description = "A timer plugin for nosetests";
     homepage = "https://github.com/mahmoudimus/nose-timer";
     license = licenses.mit;
-    description = "A timer plugin for nosetests (how much time does every test take?)";
     maintainers = with maintainers; [ doronbehar ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/notebook/default.nix b/nixpkgs/pkgs/development/python-modules/notebook/default.nix
index bab3aa590ec6..bfc5d8c60c1a 100644
--- a/nixpkgs/pkgs/development/python-modules/notebook/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/notebook/default.nix
@@ -12,7 +12,6 @@
 , tornado
 , ipython_genutils
 , traitlets
-, jupyter
 , jupyter_core
 , jupyter_client
 , nbformat
@@ -28,12 +27,12 @@
 
 buildPythonPackage rec {
   pname = "notebook";
-  version = "6.1.5";
+  version = "6.2.0";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3db37ae834c5f3b6378381229d0e5dfcbfb558d08c8ce646b1ad355147f5e91d";
+    sha256 = "0464b28e18e7a06cec37e6177546c2322739be07962dd13bf712bcb88361f013";
   };
 
   LC_ALL = "en_US.utf8";
diff --git a/nixpkgs/pkgs/development/python-modules/notify/default.nix b/nixpkgs/pkgs/development/python-modules/notify/default.nix
index 1a60cf70d2d2..8aa70b43e665 100644
--- a/nixpkgs/pkgs/development/python-modules/notify/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/notify/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation {
       configure
   '';
 
-  nativeBuildInputs = [ pkgs.pkgconfig ];
+  nativeBuildInputs = [ pkgs.pkg-config ];
   buildInputs = [ python pygobject2 pygtk pkgs.libnotify pkgs.glib pkgs.gtk2 pkgs.dbus-glib ];
 
   postInstall = "cd $out/lib/python*/site-packages && ln -s gtk-*/pynotify .";
diff --git a/nixpkgs/pkgs/development/python-modules/ntc-templates/default.nix b/nixpkgs/pkgs/development/python-modules/ntc-templates/default.nix
index a85bd0f8fc37..dc7ba5d8b681 100644
--- a/nixpkgs/pkgs/development/python-modules/ntc-templates/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ntc-templates/default.nix
@@ -2,6 +2,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , isPy27
+, poetry-core
 , textfsm
 , pytestCheckHook
 , ruamel_yaml
@@ -10,22 +11,36 @@
 
 buildPythonPackage rec {
   pname = "ntc-templates";
-  version = "1.6.0";
+  version = "2.0.0";
+  format = "pyproject";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "networktocode";
     repo = pname;
-    rev = "dc27599b0c5f3bb6ff23049e781b5dab2849c2c3";  # not tagged
-    sha256 = "1vg5y5c51vc9dj3b8qcffh6dz85ri11zb1azxmyvgbq86pcvbx9f";
+    rev = "v${version}";
+    sha256 = "05ifbzps9jxrrkrqybsdbm67jhynfcjc298pqkhp21q5jwnlrl72";
   };
 
-  propagatedBuildInputs = [ textfsm ];
+  nativeBuildInputs = [
+    poetry-core
+  ];
 
-  checkInputs = [ pytestCheckHook ruamel_yaml yamllint ];
+  propagatedBuildInputs = [
+    textfsm
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    ruamel_yaml
+    yamllint
+  ];
 
   # https://github.com/networktocode/ntc-templates/issues/743
-  disabledTests = [ "test_raw_data_against_mock" "test_verify_parsed_and_reference_data_exists" ];
+  disabledTests = [
+    "test_raw_data_against_mock"
+    "test_verify_parsed_and_reference_data_exists"
+  ];
 
   meta = with lib; {
     description = "TextFSM templates for parsing show commands of network devices";
diff --git a/nixpkgs/pkgs/development/python-modules/ntlm-auth/default.nix b/nixpkgs/pkgs/development/python-modules/ntlm-auth/default.nix
index 080734bd25e8..d56fccde051d 100644
--- a/nixpkgs/pkgs/development/python-modules/ntlm-auth/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ntlm-auth/default.nix
@@ -1,10 +1,10 @@
 { lib
 , buildPythonPackage
+, cryptography
 , fetchFromGitHub
 , mock
-, pytest
+, pytestCheckHook
 , requests
-, unittest2
 , six
 }:
 
@@ -19,13 +19,18 @@ buildPythonPackage rec {
     sha256 = "00dpf5bfsy07frsjihv1k10zmwcyq4bvkilbxha7h6nlwpcm2409";
   };
 
-  checkInputs = [ mock pytest requests unittest2 ];
-  propagatedBuildInputs = [ six ];
+  propagatedBuildInputs = [
+    cryptography
+    six
+  ];
 
-  # Functional tests require networking
-  checkPhase = ''
-    py.test --ignore=tests/functional/test_iis.py
-  '';
+  checkInputs = [
+    mock
+    pytestCheckHook
+    requests
+  ];
+
+  pythonImportsCheck = [ "ntlm_auth" ];
 
   meta = with lib; {
     description = "Calculates NTLM Authentication codes";
diff --git a/nixpkgs/pkgs/development/python-modules/numba/default.nix b/nixpkgs/pkgs/development/python-modules/numba/default.nix
index aa08ead2d971..48ed52499c5e 100644
--- a/nixpkgs/pkgs/development/python-modules/numba/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/numba/default.nix
@@ -1,34 +1,31 @@
 { lib
 , stdenv
+, pythonAtLeast
 , pythonOlder
 , fetchPypi
 , python
 , buildPythonPackage
-, isPy27
-, isPy3k
 , numpy
 , llvmlite
-, funcsigs
-, singledispatch
+, setuptools
 , libcxx
 }:
 
 buildPythonPackage rec {
-  version = "0.51.2";
+  version = "0.52.0";
   pname = "numba";
-  # uses f-strings
-  disabled = pythonOlder "3.6";
+  # uses f-strings, python 3.9 is not yet supported
+  disabled = pythonOlder "3.6" || pythonAtLeast "3.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "16bd59572114adbf5f600ea383880d7b2071ae45477e84a24994e089ea390768";
+    sha256 = "44661c5bd85e3d3619be0a40eedee34e397e9ccb3d4c458b70e10bf95d1ce933";
   };
 
   NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${libcxx}/include/c++/v1";
 
-  propagatedBuildInputs = [numpy llvmlite]
-    ++ lib.optionals isPy27 [ funcsigs singledispatch];
-
+  propagatedBuildInputs = [ numpy llvmlite setuptools ];
+  pythonImportsCheck = [ "numba" ];
   # Copy test script into $out and run the test suite.
   checkPhase = ''
     ${python.interpreter} -m numba.runtests
diff --git a/nixpkgs/pkgs/development/python-modules/numcodecs/default.nix b/nixpkgs/pkgs/development/python-modules/numcodecs/default.nix
index 3857e80bbd39..89471207c944 100644
--- a/nixpkgs/pkgs/development/python-modules/numcodecs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/numcodecs/default.nix
@@ -13,12 +13,12 @@
 
 buildPythonPackage rec {
   pname = "numcodecs";
-  version = "0.7.2";
+  version = "0.7.3";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4a038064d5604e6181a64db668d7b700d9ae87e4041984c04cbf0042469664b0";
+    sha256 = "022b12ad83eb623ec53f154859d49f6ec43b15c36052fa864eaf2d9ee786dd85";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/numpy-stl/default.nix b/nixpkgs/pkgs/development/python-modules/numpy-stl/default.nix
index cb43084556e8..2176b5f94979 100644
--- a/nixpkgs/pkgs/development/python-modules/numpy-stl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/numpy-stl/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "numpy-stl";
-  version = "2.13.0";
+  version = "2.15.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "648386e6cdad3218adc4e3e6a349bee41c55a61980dace616c05d6a31e8c652d";
+    sha256 = "f57fdb3c0e420f729dbe54ec3add9bdbbd19b62183aa8f4576e00e5834b2ef52";
   };
 
   checkInputs = [ pytest pytestrunner ];
diff --git a/nixpkgs/pkgs/development/python-modules/numpy/default.nix b/nixpkgs/pkgs/development/python-modules/numpy/default.nix
index 51eeab3177e2..ed6f80b34a69 100644
--- a/nixpkgs/pkgs/development/python-modules/numpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/numpy/default.nix
@@ -4,15 +4,15 @@
 , buildPythonPackage
 , gfortran
 , hypothesis
-, pytest_5
+, pytest
 , blas
 , lapack
 , writeTextFile
 , isPyPy
 , cython
 , setuptoolsBuildHook
-, fetchpatch
- }:
+, pythonOlder
+}:
 
 assert (!blas.isILP64) && (!lapack.isILP64);
 
@@ -40,31 +40,26 @@ let
   };
 in buildPythonPackage rec {
   pname = "numpy";
-  version = "1.19.4";
+  version = "1.20.1";
   format = "pyproject.toml";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "141ec3a3300ab89c7f2b0775289954d193cc8edb621ea05f99db9cb181530512";
+    sha256 = "02m6sms6wb4flfg8y4h0msan4y7w7qgfqxhdk21lcabhm2339iiv";
   };
 
-  nativeBuildInputs = [ gfortran cython setuptoolsBuildHook ];
-  buildInputs = [ blas lapack ];
-
-  patches = [
-    # For compatibility with newer pytest
-    (fetchpatch {
-      url = "https://github.com/numpy/numpy/commit/ba315034759fbf91c61bb55390edc86e7b2627f3.patch";
-      sha256 = "F2P5q61CyhqsZfwkLmxb7A9YdE+43FXLbQkSjop2rVY=";
-    })
-  ] ++ lib.optionals python.hasDistutilsCxxPatch [
+  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
   ];
 
+  nativeBuildInputs = [ gfortran cython setuptoolsBuildHook ];
+  buildInputs = [ blas lapack ];
+
   # we default openblas to build with 64 threads
   # if a machine has more than 64 threads, it will segfault
   # see https://github.com/xianyi/OpenBLAS/issues/2993
@@ -83,7 +78,7 @@ in buildPythonPackage rec {
   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)
 
   checkInputs = [
-    pytest_5 # pytest 6 will error: "module is already imported: hypothesis"
+    pytest
     hypothesis
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/numtraits/default.nix b/nixpkgs/pkgs/development/python-modules/numtraits/default.nix
deleted file mode 100644
index 624f32fd337b..000000000000
--- a/nixpkgs/pkgs/development/python-modules/numtraits/default.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchPypi
-, pytest
-, six
-, numpy
-, traitlets
-}:
-
-buildPythonPackage rec {
-  pname = "numtraits";
-  version = "0.2";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "2fca9a6c9334f7358ef1a3e2e64ccaa6a479fc99fc096910e0d5fbe8edcdfd7e";
-  };
-
-  checkInputs = [ pytest ];
-  propagatedBuildInputs = [ six numpy traitlets];
-
-  checkPhase = ''
-    py.test
-  '';
-
-  meta = {
-    description = "Numerical traits for Python objects";
-    license = lib.licenses.bsd2;
-    maintainers = with lib.maintainers; [ fridh ];
-    homepage = "https://github.com/astrofrog/numtraits";
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/nunavut/default.nix b/nixpkgs/pkgs/development/python-modules/nunavut/default.nix
index 63b5214b27ba..df831ab6b535 100644
--- a/nixpkgs/pkgs/development/python-modules/nunavut/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nunavut/default.nix
@@ -7,12 +7,12 @@
 
  buildPythonPackage rec {
   pname = "nunavut";
-  version = "1.0.1";
+  version = "1.0.2";
   disabled = pythonOlder "3.5"; # only python>=3.5 is supported
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1gvs3fx2l15y5ffqsxxjfa4p1ydaqbq7qp5nsgb8jbz871358jxm";
+    sha256 = "c6fe0a1b92c44bb64b2427f944fee663fe1aaf3d4d4080d04ad9c212b40a8763";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/nvchecker/default.nix b/nixpkgs/pkgs/development/python-modules/nvchecker/default.nix
index 17537be82b49..b3fd0384ef48 100644
--- a/nixpkgs/pkgs/development/python-modules/nvchecker/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/nvchecker/default.nix
@@ -1,9 +1,11 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, fetchpatch
 , pythonOlder
 , pytestCheckHook
 , setuptools
+, packaging
 , toml
 , structlog
 , appdirs
@@ -19,18 +21,26 @@
 
 buildPythonPackage rec {
   pname = "nvchecker";
-  version = "2.2";
+  version = "2.3";
 
   # Tests not included in PyPI tarball
   src = fetchFromGitHub {
     owner = "lilydjwg";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0b17pikqyxcsid69lwnjl44n8z46ydjmxxdnbzasfdl7r83l7ijr";
+    sha256 = "0ikqjlw6v7va69i8qskj1lf07ik84q4n3qgsb7khk520gv2ks3sx";
   };
 
+  patches = [
+    # Fix test that fail in sandbox build. See https://github.com/lilydjwg/nvchecker/pull/179
+    (fetchpatch {
+      url = "https://github.com/lilydjwg/nvchecker/commit/7366d82bfc3dcf231f7908e259bf2437cf7dafd5.patch";
+      sha256 = "0pwrwa2wyy4i668lk2mqzzy6y3xi08mq3w520b4954kfm07g75a9";
+    })
+  ];
+
   nativeBuildInputs = [ installShellFiles docutils ];
-  propagatedBuildInputs = [ setuptools toml structlog appdirs tornado pycurl aiohttp ];
+  propagatedBuildInputs = [ setuptools packaging toml structlog appdirs tornado pycurl aiohttp ];
   checkInputs = [ pytestCheckHook pytest-asyncio flaky pytest-httpbin ];
 
   disabled = pythonOlder "3.7";
diff --git a/nixpkgs/pkgs/development/python-modules/oauthenticator/default.nix b/nixpkgs/pkgs/development/python-modules/oauthenticator/default.nix
index 2394e32403f9..839582e87f0d 100644
--- a/nixpkgs/pkgs/development/python-modules/oauthenticator/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/oauthenticator/default.nix
@@ -1,41 +1,42 @@
 { lib
 , buildPythonPackage
+, pythonOlder
+, fetchPypi
+, google-api-python-client
+, google-auth-oauthlib
 , jupyterhub
-, globus-sdk
 , mwoauth
-, codecov
-, flake8
 , pyjwt
-, pytest
-, pytestcov
-, pytest-tornado
+, pytest-asyncio
+, pytestCheckHook
 , requests-mock
-, pythonOlder
-, fetchPypi
 }:
 
 buildPythonPackage rec {
   pname = "oauthenticator";
-  version = "0.12.3";
+  version = "0.13.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f86e18e954ae37796ee149fe01ab0be0707d9e0415d62336ba3447e7b4383461";
+    sha256 = "5202adcd96ddbbccbc267da02f2d14e977300c81291aaa77be4fd9f2e27cfa37";
   };
 
-  checkPhase = ''
-    py.test oauthenticator/tests
-  '';
-
-  # No tests in archive
-  doCheck = false;
-
-  checkInputs = [  globus-sdk mwoauth codecov flake8 pytest
-    pytestcov pytest-tornado requests-mock pyjwt ];
-
-  propagatedBuildInputs = [ jupyterhub ];
-
-  disabled = pythonOlder "3.4";
+  propagatedBuildInputs = [
+    jupyterhub
+  ];
+
+  pytestFlagsArray = [ "oauthenticator/tests" ];
+
+  checkInputs = [
+    google-api-python-client
+    google-auth-oauthlib
+    mwoauth
+    pyjwt
+    pytest-asyncio
+    pytestCheckHook
+    requests-mock
+  ];
 
   meta = with lib; {
     description = "Authenticate JupyterHub users with common OAuth providers, including GitHub, Bitbucket, and more.";
diff --git a/nixpkgs/pkgs/development/python-modules/objgraph/default.nix b/nixpkgs/pkgs/development/python-modules/objgraph/default.nix
index c79b11252be0..0d2da52f015c 100644
--- a/nixpkgs/pkgs/development/python-modules/objgraph/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/objgraph/default.nix
@@ -3,7 +3,7 @@
 , fetchPypi
 , isPyPy
 , substituteAll
-, graphvizPkg
+, graphvizPkgs
 , graphviz
 , mock
 }:
@@ -23,7 +23,7 @@ buildPythonPackage rec {
   patches = [
     (substituteAll {
       src = ./hardcode-graphviz-path.patch;
-      graphviz = graphvizPkg;
+      graphviz = graphvizPkgs;
     })
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/onnx/default.nix b/nixpkgs/pkgs/development/python-modules/onnx/default.nix
index 278d7c1df046..90683a84f46a 100644
--- a/nixpkgs/pkgs/development/python-modules/onnx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/onnx/default.nix
@@ -1,5 +1,4 @@
 { lib
-, fetchpatch
 , buildPythonPackage
 , fetchPypi
 , pythonOlder
@@ -18,7 +17,7 @@
 
 buildPythonPackage rec {
   pname = "onnx";
-  version = "1.8.0";
+  version = "1.8.1";
 
   # Due to Protobuf packaging issues this build of Onnx with Python 2 gives
   # errors on import.
@@ -27,7 +26,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5f787fd3ce1290e12da335237b3b921152157e51aa09080b65631b3ce3fcc50c";
+    sha256 = "9d65c52009a90499f8c25fdfe5acda3ac88efe0788eb1d5f2575a989277145fb";
   };
 
   nativeBuildInputs = [ cmake ];
@@ -47,7 +46,8 @@ buildPythonPackage rec {
   ];
 
   postPatch = ''
-    patchShebangs tools/protoc-gen-mypy.py
+    chmod +x tools/protoc-gen-mypy.sh.in
+    patchShebangs tools/protoc-gen-mypy.sh.in tools/protoc-gen-mypy.py
   '';
 
   preBuild = ''
diff --git a/nixpkgs/pkgs/development/python-modules/openhomedevice/default.nix b/nixpkgs/pkgs/development/python-modules/openhomedevice/default.nix
new file mode 100644
index 000000000000..625980b3b9db
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/openhomedevice/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, async-upnp-client
+, buildPythonPackage
+, fetchFromGitHub
+, lxml
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "openhomedevice";
+  version = "1.0.0";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "bazwilliams";
+    repo = pname;
+    rev = version;
+    sha256 = "04qdlyzc8xsk7qxyn9l59pbwnlw49zknw0r5lqwx402va12g4ra0";
+  };
+
+  propagatedBuildInputs = [
+    async-upnp-client
+    lxml
+  ];
+
+  # Tests are currently outdated
+  # https://github.com/bazwilliams/openhomedevice/issues/20
+  doCheck = false;
+  pythonImportsCheck = [ "openhomedevice" ];
+
+  meta = with lib; {
+    description = "Python module to access Linn Ds and Openhome devices";
+    homepage = "https://github.com/bazwilliams/openhomedevice";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/openpyxl/default.nix b/nixpkgs/pkgs/development/python-modules/openpyxl/default.nix
index 5a7d2a6425b0..48941c808161 100644
--- a/nixpkgs/pkgs/development/python-modules/openpyxl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/openpyxl/default.nix
@@ -10,12 +10,12 @@
 
 buildPythonPackage rec {
   pname = "openpyxl";
-  version = "3.0.5";
+  version = "3.0.6";
   disabled = isPy27; # 2.6.4 was final python2 release
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "18e11f9a650128a12580a58e3daba14e00a11d9e907c554a17ea016bf1a2c71b";
+    sha256 = "b229112b46e158b910a5d1b270b212c42773d39cab24e8db527f775b82afc041";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/openrazer/common.nix b/nixpkgs/pkgs/development/python-modules/openrazer/common.nix
index 2ed723944dda..35655b207a59 100644
--- a/nixpkgs/pkgs/development/python-modules/openrazer/common.nix
+++ b/nixpkgs/pkgs/development/python-modules/openrazer/common.nix
@@ -1,12 +1,12 @@
 { lib
 , fetchFromGitHub
 }: rec {
-  version = "2.9.0";
+  version = "3.0.0";
   src = fetchFromGitHub {
     owner = "openrazer";
     repo = "openrazer";
     rev = "v${version}";
-    sha256 = "1js7hq7zx5kj99brffrfaaah283ydkffmmrzsxv4mkd3nnd6rykk";
+    sha256 = "sha256-gw6Qt9BntPcF3zw19PXftDbhoCeBr8hwrujy51rb5Fc=";
   };
   meta = with lib; {
     homepage = "https://openrazer.github.io/";
diff --git a/nixpkgs/pkgs/development/python-modules/openrouteservice/default.nix b/nixpkgs/pkgs/development/python-modules/openrouteservice/default.nix
index c35405f417b2..cae450a9af33 100644
--- a/nixpkgs/pkgs/development/python-modules/openrouteservice/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/openrouteservice/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "openrouteservice";
-  version = "2.3.0";
+  version = "2.3.3";
 
   src = fetchFromGitHub {
     owner = "GIScience";
     repo = "${pname}-py";
     rev = "v${version}";
-    sha256 = "ySXzOQI9NcF1W/otbL7i3AY628/74ZkJjDMQ9ywVEPc=";
+    sha256 = "1d5qbygb81fhpwfdm1a118r3xv45xz9n9avfkgxkvw1n8y6ywz2q";
   };
 
   checkInputs = [ pytestCheckHook responses ];
diff --git a/nixpkgs/pkgs/development/python-modules/opensensemap-api/default.nix b/nixpkgs/pkgs/development/python-modules/opensensemap-api/default.nix
index d9f4cb6b1add..8311cb6c57e1 100644
--- a/nixpkgs/pkgs/development/python-modules/opensensemap-api/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/opensensemap-api/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "opensensemap-api";
-  version = "0.1.5";
+  version = "0.1.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f3iqwl8ynvrkdd961v2hjsbldwbr217pv5pay2m5f0m974bhblx";
+    sha256 = "sha256-e60aVIoKFqo++WJHUYGutugkjB8YgyNQgJbILgAyOOY=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/openwrt-luci-rpc/default.nix b/nixpkgs/pkgs/development/python-modules/openwrt-luci-rpc/default.nix
index 2e7666d3ab0b..7b806ecebe23 100644
--- a/nixpkgs/pkgs/development/python-modules/openwrt-luci-rpc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/openwrt-luci-rpc/default.nix
@@ -1,33 +1,39 @@
-{ buildPythonPackage
-, fetchPypi
-, lib
+{ lib
+, buildPythonPackage
 , click
-, requests
+, fetchPypi
 , packaging
+, pytestCheckHook
+, requests
 }:
 
-with lib;
-
 buildPythonPackage rec {
   pname = "openwrt-luci-rpc";
-  version = "1.1.7";
+  version = "1.1.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8074c1ed24cdd1fadc5a99bd63d9313a0a44703714473ed781ed11e7fb45c96f";
+    sha256 = "sha256-DkitN+mwCZ14QEn2fTOqUrQTtoncR1ifP3WDSQ6qkkk=";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py --replace "requests==2.21.0" "requests"
-    substituteInPlace setup.py --replace "packaging==19.1" "packaging"
-  '';
+  propagatedBuildInputs = [
+    click
+    requests
+    packaging
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
 
-  propagatedBuildInputs = [ click requests packaging ];
+  pythonImportsCheck = [ "openwrt_luci_rpc" ];
 
-  meta = {
-    description = ''
-      Python3 module for interacting with the OpenWrt Luci RPC interface.
-      Supports 15.X & 17.X & 18.X or newer releases of OpenWrt.
+  meta = with lib; {
+    description = "Python module for interacting with the OpenWrt Luci RPC interface";
+    longDescription = ''
+      This module allows you to use the Luci RPC interface to fetch connected devices
+      on your OpenWrt based router. Supports 15.X & 17.X & 18.X or newer releases of
+      OpenWrt.
     '';
     homepage = "https://github.com/fbradyirl/openwrt-luci-rpc";
     license = licenses.asl20;
diff --git a/nixpkgs/pkgs/development/python-modules/openwrt-ubus-rpc/default.nix b/nixpkgs/pkgs/development/python-modules/openwrt-ubus-rpc/default.nix
new file mode 100644
index 000000000000..14d0909e658e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/openwrt-ubus-rpc/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+, urllib3
+}:
+
+buildPythonPackage rec {
+  pname = "openwrt-ubus-rpc";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "Noltari";
+    repo = "python-ubus-rpc";
+    rev = version;
+    sha256 = "19scncc1w9ar3pw4yrw24akjgm74n2m7y308hzl1i360daf5p21k";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    urllib3
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "openwrt.ubus" ];
+
+  meta = with lib; {
+    description = "Python API for OpenWrt ubus RPC";
+    homepage = "https://github.com/Noltari/python-ubus-rpc";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/osmnx/default.nix b/nixpkgs/pkgs/development/python-modules/osmnx/default.nix
index e1c22ddbfa3c..3cd420c7491f 100755
--- a/nixpkgs/pkgs/development/python-modules/osmnx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/osmnx/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonPackage, fetchFromGitHub, geopandas, descartes, matplotlib, networkx, numpy
-, pandas, requests, Rtree, shapely, pytest, coverage, coveralls, folium, scikitlearn, scipy}:
+, pandas, requests, Rtree, shapely, folium, scikitlearn, scipy}:
 
 buildPythonPackage rec {
   pname = "osmnx";
@@ -14,14 +14,9 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ geopandas descartes matplotlib networkx numpy pandas requests Rtree shapely folium scikitlearn scipy ];
 
-  checkInputs = [ coverage pytest coveralls ];
-  #Fails when using sandboxing as it requires internet connection, works fine without it
+  # requires network
   doCheck = false;
-
-  #Check phase for the record
-  #checkPhase = ''
-  #  coverage run --source osmnx -m pytest --verbose
-  #'';
+  pythonImportsCheck = [ "osmnx" ];
 
   meta = with lib; {
     description = "A package to easily download, construct, project, visualize, and analyze complex street networks from OpenStreetMap with NetworkX.";
diff --git a/nixpkgs/pkgs/development/python-modules/osmpythontools/default.nix b/nixpkgs/pkgs/development/python-modules/osmpythontools/default.nix
index ccb15aec01b3..3cb0bc49e724 100644
--- a/nixpkgs/pkgs/development/python-modules/osmpythontools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/osmpythontools/default.nix
@@ -13,15 +13,17 @@
 
 buildPythonPackage rec {
   pname = "osmpythontools";
-  version = "0.2.9";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "mocnik-science";
     repo = "osm-python-tools";
     rev = "v${version}";
-    sha256 = "1qpj03fgn8rmrg9a9vk7bw32k9hdy15g5p2q3a6q52ykpb78jdz5";
+    sha256 = "0r72z7f7kmvvbd9zvgci8rwmfj85xj34mb3x5dj3jcv5ij5j72yh";
   };
 
+  # Upstream setup.py has test dependencies in `install_requires` argument.
+  # Remove them, as we don't run the tests.
   patches = [ ./remove-test-only-dependencies.patch ];
 
   propagatedBuildInputs = [
@@ -55,7 +57,7 @@ buildPythonPackage rec {
       Nominatim, and the OpenStreetMap editing API.
     '';
     homepage = "https://github.com/mocnik-science/osm-python-tools";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ das-g ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ovito/default.nix b/nixpkgs/pkgs/development/python-modules/ovito/default.nix
deleted file mode 100644
index a33e5d19b44e..000000000000
--- a/nixpkgs/pkgs/development/python-modules/ovito/default.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ lib, stdenv
-, fetchFromGitLab
-, cmake
-, ffmpeg
-, netcdf
-, qscintilla
-, zlib
-, boost
-, git
-, fftw
-, hdf5
-, libssh
-, qt5
-, python
-}:
-
-stdenv.mkDerivation rec {
-  version = "3.3.5";
-  pname = "ovito";
-
-  src = fetchFromGitLab {
-    owner = "stuko";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "2tptLK0RU0afSFFE7uzL8bZ5j+nyRyh97ujJAHFh0wQ=";
-  };
-
-  nativeBuildInputs = [ cmake git ];
-  buildInputs = [ ffmpeg netcdf qscintilla zlib boost zlib fftw hdf5 libssh qt5.qtbase qt5.qtsvg ];
-
-  propagatedBuildInputs = with python.pkgs; [ sphinx numpy sip pyqt5 matplotlib ase ];
-
-  meta = with lib; {
-    description = "Scientific visualization and analysis software for atomistic simulation data";
-    homepage = "https://www.ovito.org";
-    license = with licenses; [ gpl3Only mit ];
-    maintainers = with maintainers; [ costrouc ];
-    # ensures not built on hydra
-    # https://github.com/NixOS/nixpkgs/pull/46846#issuecomment-436388048
-    hydraPlatforms = [ ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/packageurl-python/default.nix b/nixpkgs/pkgs/development/python-modules/packageurl-python/default.nix
new file mode 100644
index 000000000000..afca46ec8a80
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/packageurl-python/default.nix
@@ -0,0 +1,22 @@
+{ buildPythonPackage, fetchPypi, lib, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "packageurl-python";
+  version = "0.9.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0mpvj8imsaqhrgfq1cxx16flc5201y78kqa7bh2i5zxsc29843mx";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "packageurl" ];
+
+  meta = with lib; {
+    description = "Python parser and builder for package URLs";
+    homepage = "https://github.com/package-url/packageurl-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ armijnhemel ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/packaging/default.nix b/nixpkgs/pkgs/development/python-modules/packaging/default.nix
index 689c2e4516d7..a261c8c1e268 100644
--- a/nixpkgs/pkgs/development/python-modules/packaging/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/packaging/default.nix
@@ -5,21 +5,21 @@
 , six
 , pytestCheckHook
 , pretend
-, flit-core
+, setuptools
 }:
 
 buildPythonPackage rec {
   pname = "packaging";
-  version = "20.7";
+  version = "20.8";
   format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "Ba87uF0yA3fbKBzyVKsFDhp+vL9UEGhamkB+GKH4EjY=";
+    sha256 = "sha256-eFmBhacAikcNZFJqgFnemqpEkjjygPyetrE7psQQkJM=";
   };
 
   nativeBuildInputs = [
-    flit-core
+    setuptools
   ];
 
   propagatedBuildInputs = [ pyparsing six ];
@@ -29,10 +29,6 @@ buildPythonPackage rec {
     pretend
   ];
 
-  checkPhase = ''
-    py.test tests
-  '';
-
   # Prevent circular dependency
   doCheck = false;
 
diff --git a/nixpkgs/pkgs/development/python-modules/pandas-datareader/default.nix b/nixpkgs/pkgs/development/python-modules/pandas-datareader/default.nix
index ea0ba44e99da..d4aa1551bedc 100644
--- a/nixpkgs/pkgs/development/python-modules/pandas-datareader/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pandas-datareader/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, pytestCheckHook
 , isPy27
 , pandas
 , lxml
diff --git a/nixpkgs/pkgs/development/python-modules/pandas/default.nix b/nixpkgs/pkgs/development/python-modules/pandas/default.nix
index ab70a7782adf..7fd551e192c9 100644
--- a/nixpkgs/pkgs/development/python-modules/pandas/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pandas/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
 , python
@@ -8,36 +9,41 @@
 , cython
 , dateutil
 , html5lib
+, jinja2
 , lxml
 , numexpr
 , openpyxl
 , pytz
-, sqlalchemy
 , scipy
+, sqlalchemy
 , tables
 , xlrd
 , xlwt
-# Test Inputs
+# Test inputs
 , glibcLocales
 , hypothesis
-, moto
 , pytestCheckHook
+, pytest-xdist
+, pytest-asyncio
+, XlsxWriter
 # Darwin inputs
 , runtimeShell
-, libcxx ? null
+, libcxx
 }:
 
 buildPythonPackage rec {
   pname = "pandas";
-  version = "1.1.5";
+  version = "1.2.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "06vhk75hmzgv1sfbjzgnsw9x10h7y6bd6s6z7d6lfnn7wcgc83zi";
+    sha256 = "078b4nncn6778ymmqn80j2q6n7fcs4d6bbaraar5nypgbaw10vyz";
   };
 
   nativeBuildInputs = [ cython ];
+
   buildInputs = lib.optional stdenv.isDarwin libcxx;
+
   propagatedBuildInputs = [
     beautifulsoup4
     bottleneck
@@ -54,9 +60,17 @@ buildPythonPackage rec {
     xlwt
   ];
 
-  checkInputs = [ pytestCheckHook glibcLocales moto hypothesis ];
+  checkInputs = [
+    glibcLocales
+    hypothesis
+    jinja2
+    pytest-asyncio
+    pytest-xdist
+    pytestCheckHook
+    XlsxWriter
+  ];
 
-  # doesn't work with -Werror,-Wunused-command-line-argument
+  # Doesn't work with -Werror,-Wunused-command-line-argument
   # https://github.com/NixOS/nixpkgs/issues/39687
   hardeningDisable = lib.optional stdenv.cc.isClang "strictoverflow";
 
@@ -70,52 +84,33 @@ buildPythonPackage rec {
                 "['pandas/src/klib', 'pandas/src', '$cpp_sdk']"
   '';
 
-  # Parallel Cythonization is broken in Python 3.8 on Darwin. Fixed in the next
-  # release. https://github.com/pandas-dev/pandas/pull/30862
-  setupPyBuildFlags = lib.optionals (!(isPy38 && stdenv.isDarwin)) [
-    # As suggested by
-    # https://pandas.pydata.org/pandas-docs/stable/development/contributing.html#creating-a-python-environment
-    "--parallel=$NIX_BUILD_CORES"
-  ];
-
   doCheck = !stdenv.isAarch64; # upstream doesn't test this architecture
 
   pytestFlagsArray = [
     "--skip-slow"
     "--skip-network"
+    "--numprocesses" "0"
   ];
+
   disabledTests = [
-    # since dateutil 0.6.0 the following fails: test_fallback_plural, test_ambiguous_flags, test_ambiguous_compat
-    # was supposed to be solved by https://github.com/dateutil/dateutil/issues/321, but is not the case
-    "test_fallback_plural"
-    "test_ambiguous_flags"
-    "test_ambiguous_compat"
     # Locale-related
     "test_names"
     "test_dt_accessor_datetime_name_accessors"
     "test_datetime_name_accessors"
-    # Can't import from test folder
-    "test_oo_optimizable"
     # Disable IO related tests because IO data is no longer distributed
     "io"
-    # KeyError Timestamp
-    "test_to_excel"
-    # ordering logic has changed
-    "numpy_ufuncs_other"
-    "order_without_freq"
-    # tries to import from pandas.tests post install
+    # Tries to import from pandas.tests post install
     "util_in_top_level"
-    # Fails with 1.0.5
-    "test_constructor_list_frames"
-    "test_constructor_with_embedded_frames"
-    # tries to import compiled C extension locally
+    # Tries to import compiled C extension locally
     "test_missing_required_dependency"
+    # AssertionError with 1.2.3
+    "test_from_coo"
   ] ++ lib.optionals stdenv.isDarwin [
     "test_locale"
     "test_clipboard"
   ];
 
-  # tests have relative paths, and need to reference compiled C extensions
+  # Tests have relative paths, and need to reference compiled C extensions
   # so change directory where `import .test` is able to be resolved
   preCheck = ''
     cd $out/${python.sitePackages}/pandas
@@ -132,6 +127,8 @@ buildPythonPackage rec {
     export PATH=$(pwd):$PATH
   '';
 
+  pythonImportsCheck = [ "pandas" ];
+
   meta = with lib; {
     # https://github.com/pandas-dev/pandas/issues/14866
     # pandas devs are no longer testing i686 so safer to assume it's broken
diff --git a/nixpkgs/pkgs/development/python-modules/papermill/default.nix b/nixpkgs/pkgs/development/python-modules/papermill/default.nix
index 56536de8446b..0311e783d397 100644
--- a/nixpkgs/pkgs/development/python-modules/papermill/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/papermill/default.nix
@@ -25,11 +25,11 @@
 
 buildPythonPackage rec {
   pname = "papermill";
-  version = "2.2.2";
+  version = "2.3.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1c452b1c5a9ab52b94c99d8b7705ae7173f6aa88a3d28a5d30cffba48a46f5b6";
+    sha256 = "sha256-ptwZXypS9b7Y1CkszqOa8PMzgyS+r9VikPlhbJUDNiM=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/papis/default.nix b/nixpkgs/pkgs/development/python-modules/papis/default.nix
index b05a525d91ad..3e7c6ae00116 100644
--- a/nixpkgs/pkgs/development/python-modules/papis/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/papis/default.nix
@@ -3,7 +3,7 @@
 , pyyaml, chardet, beautifulsoup4, colorama, bibtexparser
 , click, python-slugify, habanero, isbnlib, typing-extensions
 , prompt_toolkit, pygments, stevedore, tqdm, lxml
-, python-doi, isPy3k, pythonOlder, pytestcov
+, python-doi, isPy3k, pytestcov
 #, optional, dependencies
 , whoosh, pytest
 , stdenv
diff --git a/nixpkgs/pkgs/development/python-modules/param/default.nix b/nixpkgs/pkgs/development/python-modules/param/default.nix
index 9f6d78a8ecbe..8e090561ed06 100644
--- a/nixpkgs/pkgs/development/python-modules/param/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/param/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "param";
-  version = "1.10.0";
+  version = "1.10.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a284c1b42aff6367e8eea2f649d4f3f70a9f16c6f17d8ad672a31ff36089f995";
+    sha256 = "1f0f1133fbadcd2c5138e579b9934e29fd00f803af01d9bf6f9e6b80ecf1999b";
   };
 
   checkInputs = [ flake8 nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/parameterized/default.nix b/nixpkgs/pkgs/development/python-modules/parameterized/default.nix
index 207a6a38bd5a..1183c09e62eb 100644
--- a/nixpkgs/pkgs/development/python-modules/parameterized/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/parameterized/default.nix
@@ -1,28 +1,40 @@
-{ lib, fetchPypi, buildPythonPackage, nose, mock, glibcLocales, isPy3k, isPy38 }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, glibcLocales
+, isPy3k
+, mock
+, nose
+}:
 
 buildPythonPackage rec {
   pname = "parameterized";
-  version = "0.7.4";
+  version = "0.8.1";
+  disable = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "190f8cc7230eee0b56b30d7f074fd4d165f7c45e6077582d0813c8557e738490";
+    sha256 = "sha256-Qbv/N9YYZDD3f5ANd35btqJJKKHEb7HeaS+LUriDO1w=";
   };
 
-  # Tests require some python3-isms but code works without.
-  # python38 is not fully supported yet
-  doCheck = isPy3k && (!isPy38);
-
-  checkInputs = [ nose mock glibcLocales ];
+  checkInputs = [
+    nose
+    mock
+    glibcLocales
+  ];
 
   checkPhase = ''
+    runHook preCheck
     LC_ALL="en_US.UTF-8" nosetests -v
+    runHook postCheck
   '';
 
+  pythonImportsCheck = [ "parameterized" ];
+
   meta = with lib; {
     description = "Parameterized testing with any Python test framework";
-    homepage = "https://pypi.python.org/pypi/parameterized";
-    license = licenses.bsd3;
+    homepage = "https://github.com/wolever/parameterized";
+    license = licenses.bsd2;
     maintainers = with maintainers; [ ma27 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/parso/default.nix b/nixpkgs/pkgs/development/python-modules/parso/default.nix
index f9a87fa5f65f..a68f535d29db 100644
--- a/nixpkgs/pkgs/development/python-modules/parso/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/parso/default.nix
@@ -1,20 +1,30 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
 , pythonOlder
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "parso";
-  version = "0.8.0";
+  version = "0.8.1";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2b6db14759c528d857eeb9eac559c2166b2554548af39f5198bdfb976f72aa64";
+    sha256 = "8519430ad07087d4c997fda3a7918f7cfa27cb58972a8c89c2a0295a1c940e9e";
   };
 
+  patches = [
+    # Fix the flaky test due to slow moving time on Apple Silicon chips.
+    # Remove when https://github.com/davidhalter/parso/pull/177 is in the next release.
+    (fetchpatch {
+      url = "https://github.com/davidhalter/parso/pull/177/commits/2799a7a3c2cf87fdc2d0c19a0890acea425091ce.patch";
+      sha256 = "sha256-A5EQly1wR/7lo+L8Pp0UPSUIhC0WcblXEWQNvRMlZYA=";
+    })
+  ];
+
   checkInputs = [ pytestCheckHook ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/parts/default.nix b/nixpkgs/pkgs/development/python-modules/parts/default.nix
new file mode 100644
index 000000000000..1bf7f26adfd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/parts/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "parts";
+  version = "1.0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ym238hxwsw15ivvf6gzmkmla08b9hwhdyc3v6rs55wga9j3a4db";
+  };
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "parts" ];
+
+  meta = with lib; {
+    description = "Python library for common list functions related to partitioning lists";
+    homepage = "https://github.com/lapets/parts";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pecan/default.nix b/nixpkgs/pkgs/development/python-modules/pecan/default.nix
index a66c4077c3c9..50b62503ff87 100644
--- a/nixpkgs/pkgs/development/python-modules/pecan/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pecan/default.nix
@@ -16,7 +16,6 @@
 , Kajiki
 , mock
 , sqlalchemy
-, uwsgi
 , virtualenv
 }:
 
diff --git a/nixpkgs/pkgs/development/python-modules/percol/default.nix b/nixpkgs/pkgs/development/python-modules/percol/default.nix
index eddf58e559dc..58e7aff5601d 100644
--- a/nixpkgs/pkgs/development/python-modules/percol/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/percol/default.nix
@@ -1,25 +1,26 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k
-, six
-}:
+{ lib, buildPythonPackage, fetchFromGitHub, cmigemo }:
 
 buildPythonPackage rec {
   pname = "percol";
-  version = "0.2.1";
-  disabled = isPy3k;
+  version = "unstable-2019-07-24";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "7a649c6fae61635519d12a6bcacc742241aad1bff3230baef2cedd693ed9cfe8";
+  src = fetchFromGitHub {
+    owner = "mooz";
+    repo = "percol";
+    rev = "4b28037e328da3d0fe8165c11b800cbaddcb525e";
+    sha256 = "07sq3517wzn04j2dzlmczmcvx3w6r7xnzz3634zgf1zi6dbr2a3g";
   };
 
-  propagatedBuildInputs = [ six ];
+  propagatedBuildInputs = [ cmigemo ];
+
+  # package has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "percol" ];
 
   meta = with lib; {
     homepage = "https://github.com/mooz/percol";
     description = "Adds flavor of interactive filtering to the traditional pipe concept of shell";
     license = licenses.mit;
     maintainers = with maintainers; [ koral ];
-    broken = true; # missing cmigemo package which is missing libmigemo.so
-    # also doesn't support python3
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pex/default.nix b/nixpkgs/pkgs/development/python-modules/pex/default.nix
index e65f62c8ff7b..588a27159e8e 100644
--- a/nixpkgs/pkgs/development/python-modules/pex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pex/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "pex";
-  version = "2.1.21";
+  version = "2.1.30";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d580a26da1b342ab2ebbf675ba2bab04e98c4d1aaf2a6fea09f41d68dfc466ba";
+    sha256 = "ac170d656d2083d02048850005415d03d1767087e4f5037bc86defb6b23e712d";
   };
 
   nativeBuildInputs = [ setuptools ];
diff --git a/nixpkgs/pkgs/development/python-modules/pg8000/default.nix b/nixpkgs/pkgs/development/python-modules/pg8000/default.nix
index 9f9bb1702a90..efa4c3005fcd 100644
--- a/nixpkgs/pkgs/development/python-modules/pg8000/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pg8000/default.nix
@@ -1,29 +1,37 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, scramp
-, isPy3k
 , passlib
+, pythonOlder
+, scramp
 }:
 
 buildPythonPackage rec {
   pname = "pg8000";
-  version = "1.16.6";
-
-  disabled = !isPy3k;
+  version = "1.19.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8fc1e6a62ccb7c9830f1e7e9288e2d20eaf373cc8875b5c55b7d5d9b7717be91";
+    sha256 = "sha256-EexwwLIOpECAfiyGmUDxSE7qk9cbQ1gHtjhW3YK3RN0=";
   };
 
-  propagatedBuildInputs = [ passlib scramp ];
+  propagatedBuildInputs = [passlib scramp ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "scramp==1.3.0" "scramp>=1.3.0"
+  '';
+
+  # Tests require a running PostgreSQL instance
+  doCheck = false;
+  pythonImportsCheck = [ "pg8000" ];
 
   meta = with lib; {
+    description = "Python driver for PostgreSQL";
     homepage = "https://github.com/tlocke/pg8000";
-    description = "PostgreSQL interface library, for asyncio";
+    license = with licenses; [ bsd3 ];
     maintainers = with maintainers; [ domenkozar ];
     platforms = platforms.unix;
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pglast/default.nix b/nixpkgs/pkgs/development/python-modules/pglast/default.nix
index 767140e6bf8f..3240b0809922 100644
--- a/nixpkgs/pkgs/development/python-modules/pglast/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pglast/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "pglast";
-  version = "1.14";
+  version = "1.17";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "72652b9edc7bdbfc9c3192235fb2fa1b2fb73a681613368fcaec747d7f5e479f";
+    sha256 = "2979b38ca5f72cfa0a5db78af2f62d04db6a7647ee7f03eac7a67f9e86e3f5f9";
   };
 
   disabled = !isPy3k;
diff --git a/nixpkgs/pkgs/development/python-modules/phonemizer/backend-paths.patch b/nixpkgs/pkgs/development/python-modules/phonemizer/backend-paths.patch
index 1734addb0ef1..5f828aaaae13 100644
--- a/nixpkgs/pkgs/development/python-modules/phonemizer/backend-paths.patch
+++ b/nixpkgs/pkgs/development/python-modules/phonemizer/backend-paths.patch
@@ -1,8 +1,8 @@
 diff --git a/phonemizer/backend/espeak.py b/phonemizer/backend/espeak.py
-index 387c11c..ceb5e7e 100644
+index b4712bf..5628fd5 100644
 --- a/phonemizer/backend/espeak.py
 +++ b/phonemizer/backend/espeak.py
-@@ -81,10 +81,7 @@ class BaseEspeakBackend(BaseBackend):
+@@ -82,10 +82,7 @@ class BaseEspeakBackend(BaseBackend):
          if _ESPEAK_DEFAULT_PATH:
              return _ESPEAK_DEFAULT_PATH
  
@@ -15,10 +15,10 @@ index 387c11c..ceb5e7e 100644
      @classmethod
      def is_available(cls):
 diff --git a/phonemizer/backend/festival.py b/phonemizer/backend/festival.py
-index b5bc56d..0833160 100644
+index 3037be5..684ffff 100644
 --- a/phonemizer/backend/festival.py
 +++ b/phonemizer/backend/festival.py
-@@ -78,7 +78,7 @@ class FestivalBackend(BaseBackend):
+@@ -80,7 +80,7 @@ class FestivalBackend(BaseBackend):
          if _FESTIVAL_DEFAULT_PATH:
              return _FESTIVAL_DEFAULT_PATH
  
@@ -27,3 +27,16 @@ index b5bc56d..0833160 100644
  
      @classmethod
      def is_available(cls):
+diff --git a/test/test_punctuation.py b/test/test_punctuation.py
+index 6ed642a..08060df 100644
+--- a/test/test_punctuation.py
++++ b/test/test_punctuation.py
+@@ -28,7 +28,7 @@ ESPEAK_143 = (EspeakBackend.version(as_tuple=True) >= (1, 49, 3))
+ ESPEAK_150 = (EspeakBackend.version(as_tuple=True) >= (1, 50))
+ 
+ # True if we are using festival>=2.5
+-FESTIVAL_25 = (FestivalBackend.version(as_tuple=True) >= (2, 5))
++FESTIVAL_25 = False
+ 
+ 
+ @pytest.mark.parametrize(
diff --git a/nixpkgs/pkgs/development/python-modules/phonemizer/default.nix b/nixpkgs/pkgs/development/python-modules/phonemizer/default.nix
index 2d6531794313..43ce5f1e766d 100644
--- a/nixpkgs/pkgs/development/python-modules/phonemizer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/phonemizer/default.nix
@@ -2,24 +2,21 @@
 , substituteAll
 , buildPythonApplication
 , fetchPypi
-, python3Packages
-, pkgs
 , joblib
 , segments
 , attrs
 , espeak-ng
 , pytestCheckHook
-, pytestrunner
 , pytestcov
 }:
 
 buildPythonApplication rec {
   pname = "phonemizer";
-  version = "2.2.1";
+  version = "2.2.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "127n4f10zxq60qd8xvlc1amji4wbghqb90rfp25rzdk716kvgwab";
+    sha256 = "ae252f0bc7633e172b08622f318e7e112cde847e9281d4675ea7210157325146";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/phonenumbers/default.nix b/nixpkgs/pkgs/development/python-modules/phonenumbers/default.nix
index 354ca2796e19..72c61e08ce4b 100644
--- a/nixpkgs/pkgs/development/python-modules/phonenumbers/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/phonenumbers/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "phonenumbers";
-  version = "8.12.13";
+  version = "8.12.18";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "96d02120a3481e22d8a8eb5e4595ceec1930855749f6e4a06ef931881f59f562";
+    sha256 = "0aa0f5e1382d292a7ff2f8bc08673126521461c7f908e0220756449a734d8fef";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/piep/default.nix b/nixpkgs/pkgs/development/python-modules/piep/default.nix
index aacd9e314cb3..c99f408db62f 100644
--- a/nixpkgs/pkgs/development/python-modules/piep/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/piep/default.nix
@@ -3,11 +3,13 @@
 , fetchPypi
 , nose
 , pygments
+, isPy3k
 }:
 
 buildPythonPackage rec {
   version = "0.9.2";
   pname = "piep";
+  disabled = isPy3k;
 
   src = fetchPypi {
     inherit pname version;
diff --git a/nixpkgs/pkgs/development/python-modules/pikepdf/default.nix b/nixpkgs/pkgs/development/python-modules/pikepdf/default.nix
index 8ed27ea962ed..565822c33558 100644
--- a/nixpkgs/pkgs/development/python-modules/pikepdf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pikepdf/default.nix
@@ -23,12 +23,12 @@
 
 buildPythonPackage rec {
   pname = "pikepdf";
-  version = "2.5.2";
+  version = "2.8.0";
   disabled = ! isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-j8PpeyTa+9SxrAV8jxRMGEZ85V00KhqMQmiIkOrVjvM=";
+    sha256 = "74ff96fddd21cd4c0830eb549137ea9eccbdbff8cef4f684322b9afb8e42ccb5";
   };
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pillow-simd/default.nix b/nixpkgs/pkgs/development/python-modules/pillow-simd/default.nix
new file mode 100644
index 000000000000..3aed634dfb1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pillow-simd/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, buildPythonPackage, fetchFromGitHub, isPyPy, isPy3k
+, olefile, freetype, libjpeg, zlib, libtiff, libwebp, tcl, lcms2
+, tk, libX11, openjpeg, libimagequant, pyroma, numpy, pytestCheckHook
+}@args:
+
+import ../pillow/generic.nix (rec {
+  pname = "Pillow-SIMD";
+  version = "7.0.0.post3";
+
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "uploadcare";
+    repo = "pillow-simd";
+    rev = "v${version}";
+    sha256 = "1h832xp1bzf951hr4dmjmxqfsv28sx9lr2cq96qdz1c72k40zj1h";
+  };
+
+  meta = with lib; {
+    homepage = "https://python-pillow.github.io/pillow-perf/";
+    description = "The friendly PIL fork - SIMD version";
+    longDescription = ''
+      Pillow-SIMD is "following" Pillow. Pillow-SIMD versions are 100% compatible drop-in replacements for Pillow of the same version.
+
+      SIMD stands for "single instruction, multiple data" and its essence is in performing the same operation on multiple data points simultaneously by using multiple processing elements. Common CPU SIMD instruction sets are MMX, SSE-SSE4, AVX, AVX2, AVX512, NEON.
+
+      Currently, Pillow-SIMD can be compiled with SSE4 (default) or AVX2 support.
+    '';
+    license = "http://www.pythonware.com/products/pil/license.htm";
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+} // args )
diff --git a/nixpkgs/pkgs/development/python-modules/pillow/6.nix b/nixpkgs/pkgs/development/python-modules/pillow/6.nix
index 0e3fabf1fbca..51833edfd0b0 100644
--- a/nixpkgs/pkgs/development/python-modules/pillow/6.nix
+++ b/nixpkgs/pkgs/development/python-modules/pillow/6.nix
@@ -1,75 +1,22 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, isPyPy
-, olefile
-, freetype, libjpeg, zlib, libtiff, libwebp, tcl, lcms2, tk, libX11
-, openjpeg, libimagequant
-, pytest, pytestrunner, pyroma, numpy
-}:
+{ lib, stdenv, buildPythonPackage, fetchPypi, isPyPy, isPy3k
+, olefile, freetype, libjpeg, zlib, libtiff, libwebp, tcl, lcms2, tk, libX11
+, openjpeg, libimagequant, pyroma, numpy, pytestCheckHook
+}@args:
 
-buildPythonPackage rec {
+import ./generic.nix (rec {
   pname = "Pillow";
   version = "6.2.2";
 
+  disabled = !isPy3k;
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv";
   };
 
-  # 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
-  '';
-
-  checkPhase = ''
-    runHook preCheck
-    python -m pytest -v -x -W always${lib.optionalString stdenv.isDarwin " --deselect=Tests/test_file_icns.py::TestFileIcns::test_save --deselect=Tests/test_imagegrab.py::TestImageGrab::test_grab"}
-    runHook postCheck
-  '';
-
-  propagatedBuildInputs = [ olefile ];
-
-  checkInputs = [ pytest pytestrunner pyroma numpy ];
-
-  buildInputs = [
-    freetype libjpeg openjpeg libimagequant zlib libtiff libwebp tcl lcms2 ]
-    ++ 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="-L${libwebp}/lib"
-    export CFLAGS="-I${libwebp}/include"
-  ''
-  # Remove impurities
-  + lib.optionalString stdenv.isDarwin ''
-    substituteInPlace setup.py \
-      --replace '"/Library/Frameworks",' "" \
-      --replace '"/System/Library/Frameworks"' ""
-  '';
-
   meta = with lib; {
-    homepage = "https://python-pillow.github.io/";
-    description = "Fork of The Python Imaging Library (PIL)";
+    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
@@ -77,6 +24,6 @@ buildPythonPackage rec {
       processing and graphics capabilities.
     '';
     license = "http://www.pythonware.com/products/pil/license.htm";
-    maintainers = with maintainers; [ goibhniu prikhi ];
+    maintainers = with maintainers; [ goibhniu prikhi SuperSandro2000 ];
   };
-}
+} // args )
diff --git a/nixpkgs/pkgs/development/python-modules/pillow/default.nix b/nixpkgs/pkgs/development/python-modules/pillow/default.nix
index 4084df19404b..02611c5a9255 100644
--- a/nixpkgs/pkgs/development/python-modules/pillow/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pillow/default.nix
@@ -1,72 +1,19 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, isPyPy
-, olefile
-, freetype, libjpeg, zlib, libtiff, libwebp, tcl, lcms2, tk, libX11
-, openjpeg, libimagequant
-, pyroma, numpy, pytestCheckHook
-, isPy3k
-}:
+{ lib, stdenv, buildPythonPackage, fetchPypi, isPyPy, isPy3k
+, olefile, freetype, libjpeg, zlib, libtiff, libwebp, tcl, lcms2, tk, libX11
+, libxcb, openjpeg, libimagequant, pyroma, numpy, pytestCheckHook
+}@args:
 
-buildPythonPackage rec {
+import ./generic.nix (rec {
   pname = "Pillow";
-  version = "8.0.1";
+  version = "8.1.1";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "11c5c6e9b02c9dac08af04f093eb5a2f84857df70a7d4a6a6ad461aca803fb9e";
+    sha256 = "086g7nhv52wclrwnzbzs2x3nvyzs2hfq1bvgivsrp5f7r7wiiz7n";
   };
 
-  # 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_save" "test_grab" "test_grabclipboard" ];
-
-  propagatedBuildInputs = [ olefile ];
-
-  checkInputs = [ pytestCheckHook pyroma numpy ];
-
-  buildInputs = [
-    freetype libjpeg openjpeg libimagequant zlib libtiff libwebp tcl lcms2 ]
-    ++ 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="-L${libwebp}/lib"
-    export CFLAGS="-I${libwebp}/include"
-  ''
-  # Remove impurities
-  + lib.optionalString stdenv.isDarwin ''
-    substituteInPlace setup.py \
-      --replace '"/Library/Frameworks",' "" \
-      --replace '"/System/Library/Frameworks"' ""
-  '';
-
   meta = with lib; {
     homepage = "https://python-pillow.org/";
     description = "The friendly PIL fork (Python Imaging Library)";
@@ -76,7 +23,7 @@ buildPythonPackage rec {
       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 ];
+    license = licenses.hpnd;
+    maintainers = with maintainers; [ goibhniu prikhi SuperSandro2000 ];
   };
-}
+} // args )
diff --git a/nixpkgs/pkgs/development/python-modules/pillow/generic.nix b/nixpkgs/pkgs/development/python-modules/pillow/generic.nix
new file mode 100644
index 000000000000..64ae91895593
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pillow/generic.nix
@@ -0,0 +1,76 @@
+{ 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 ];
+
+  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"' ""
+  '';
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pims/default.nix b/nixpkgs/pkgs/development/python-modules/pims/default.nix
index bfe4e2b9ea03..2f9fbdccd550 100644
--- a/nixpkgs/pkgs/development/python-modules/pims/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pims/default.nix
@@ -23,6 +23,7 @@ buildPythonPackage rec {
 
   # not everything packaged with pypi release
   doCheck = false;
+  pythonImportsCheck = [ "pims" ];
 
   meta = with lib; {
     homepage = "https://github.com/soft-matter/pims";
diff --git a/nixpkgs/pkgs/development/python-modules/pip/default.nix b/nixpkgs/pkgs/development/python-modules/pip/default.nix
index f35ed6b3d116..6f859d365c59 100644
--- a/nixpkgs/pkgs/development/python-modules/pip/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pip/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname = "pip";
-  version = "20.3";
+  version = "20.3.4";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "pypa";
     repo = pname;
     rev = version;
-    sha256 = "e/2/0MrGY3myELmvuTAbNfXCBuT8kmvz9qTwITdDtQU=";
+    sha256 = "0hkhs9yc1cjdj1gn9wkycd3sy65c05q8k8rhqgsm5jbpksfssiwn";
     name = "${pname}-${version}-source";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/pipx/default.nix b/nixpkgs/pkgs/development/python-modules/pipx/default.nix
index c29847c9f29c..34a7bc6b31a1 100644
--- a/nixpkgs/pkgs/development/python-modules/pipx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pipx/default.nix
@@ -6,12 +6,13 @@
 , argcomplete
 , packaging
 , importlib-metadata
+, colorama
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "pipx";
-  version = "0.16.0.0";
+  version = "0.16.1.0";
 
   disabled = pythonOlder "3.6";
 
@@ -20,13 +21,14 @@ buildPythonPackage rec {
     owner = "pipxproject";
     repo = pname;
     rev = version;
-    sha256 = "08mn7vm8iw20pg0gfn491y1jx8wcyjijps6f1hy7ipzd5ckynscn";
+    sha256 = "081raqsaq7i2x4yxhxppv930jhajdwmngin5wazy7vqhiy3xc669";
   };
 
   propagatedBuildInputs = [
     userpath
     argcomplete
     packaging
+    colorama
   ] ++ lib.optionals (pythonOlder "3.8") [
     importlib-metadata
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/pivy/default.nix b/nixpkgs/pkgs/development/python-modules/pivy/default.nix
index 312c87ae5444..7645fdaec8aa 100644
--- a/nixpkgs/pkgs/development/python-modules/pivy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pivy/default.nix
@@ -11,6 +11,8 @@ buildPythonPackage rec {
     sha256 = "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx";
   };
 
+  dontUseCmakeConfigure = true;
+
   nativeBuildInputs = with pkgs; [
     swig qmake cmake
   ];
@@ -29,8 +31,7 @@ buildPythonPackage rec {
   ];
 
   dontUseQmakeConfigure = true;
-  dontUseCmakeConfigure = true;
-
+  dontWrapQtApps =true;
   doCheck = false;
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/pkgconfig/default.nix b/nixpkgs/pkgs/development/python-modules/pkgconfig/default.nix
index 1b03f720fbcd..098b79a15d05 100644
--- a/nixpkgs/pkgs/development/python-modules/pkgconfig/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pkgconfig/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "pkgconfig";
-  version = "1.5.1";
+  version = "1.5.2";
 
   inherit (pkg-config)
     setupHooks
@@ -14,7 +14,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "97bfe3d981bab675d5ea3ef259045d7919c93897db7d3b59d4e8593cba8d354f";
+    sha256 = "38d612488f0633755a2e7a8acab6c01d20d63dbc31af75e2a9ac98a6f638ca94";
   };
 
 
diff --git a/nixpkgs/pkgs/development/python-modules/pkutils/default.nix b/nixpkgs/pkgs/development/python-modules/pkutils/default.nix
index d674e876b147..c383f5ff86c4 100644
--- a/nixpkgs/pkgs/development/python-modules/pkutils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pkutils/default.nix
@@ -1,5 +1,4 @@
 { lib
-, pythonOlder
 , buildPythonPackage
 , isPy3k
 , fetchFromGitHub
diff --git a/nixpkgs/pkgs/development/python-modules/pleroma-bot/default.nix b/nixpkgs/pkgs/development/python-modules/pleroma-bot/default.nix
new file mode 100644
index 000000000000..1dca45eca762
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pleroma-bot/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, requests-mock
+, oauthlib
+, requests_oauthlib
+, requests
+, pyaml
+}:
+
+buildPythonPackage rec {
+  pname = "pleroma-bot";
+  version = "0.8.6";
+
+  src = fetchFromGitHub {
+    owner = "robertoszek";
+    repo = "pleroma-bot";
+    rev = version;
+    sha256 = "1q0xhgqq41zbqiawpd4kbdx41zhwxxp5ipn1c2rc8d7pjyb5p75w";
+  };
+
+  propagatedBuildInputs = [ pyaml requests requests_oauthlib oauthlib ];
+  checkInputs = [ pytestCheckHook requests-mock ];
+
+  pythonImportsCheck = [ "pleroma_bot" ];
+
+  meta = with lib; {
+    homepage = "https://robertoszek.github.io/pleroma-bot/";
+    description = "Bot for mirroring one or multiple Twitter accounts in Pleroma/Mastodon";
+    license = licenses.mit;
+    maintainers = with maintainers; [ robertoszek ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/plexapi/default.nix b/nixpkgs/pkgs/development/python-modules/plexapi/default.nix
index 5251ff1de0ec..1fbdd6773e67 100644
--- a/nixpkgs/pkgs/development/python-modules/plexapi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/plexapi/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "PlexAPI";
-  version = "4.3.1";
+  version = "4.5.0";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "pkkid";
     repo = "python-plexapi";
     rev = version;
-    sha256 = "sha256-gRXNOGd9YGcGysKbAtiNwi5NxPvv39F6PEXBjiYbVq4=";
+    sha256 = "sha256-MjV1JUHrIHTu3UHy4HnMtTEjSCx3U9kMgUkbCJOAZr0=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/plotly/default.nix b/nixpkgs/pkgs/development/python-modules/plotly/default.nix
index f11cf1c0984c..e2496d6097d9 100644
--- a/nixpkgs/pkgs/development/python-modules/plotly/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/plotly/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "plotly";
-  version = "4.13.0";
+  version = "4.14.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "20df14f7883807f57d96ac245841e086a1799f2c2778462a7f3bca704e369c66";
+    sha256 = "14cxlfl79i9bh3awsf4xgwr14ywm7lnrz2a81s7gp0if77nsx2kx";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/plugwise/default.nix b/nixpkgs/pkgs/development/python-modules/plugwise/default.nix
index f4be0e5140b5..289f1871f338 100644
--- a/nixpkgs/pkgs/development/python-modules/plugwise/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/plugwise/default.nix
@@ -19,13 +19,13 @@
 
 buildPythonPackage rec {
   pname = "plugwise";
-  version = "0.8.5";
+  version = "0.9.3";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = "python-plugwise";
     rev = version;
-    sha256 = "1gviyy31l1j8z0if2id3m13r43kw4mcgd8921813yfhmf174piq4";
+    sha256 = "sha256-MZ4R55vGUyWmR0Md83eNerzsgtYMch1vfQ3sqbm12bM=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/plyfile/default.nix b/nixpkgs/pkgs/development/python-modules/plyfile/default.nix
index b0936a50baa7..d3042c92e328 100644
--- a/nixpkgs/pkgs/development/python-modules/plyfile/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/plyfile/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "plyfile";
-  version = "0.7.2";
+  version = "0.7.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "59a25845d00a51098e6c9147c3c96ce89ad97395e256a4fabb4aed7cf7db5541";
+    sha256 = "5ac55b685cfcb3e8f70f3c5c2660bd1f6431a892a5319a612792b1ec09aec0f0";
   };
 
   propagatedBuildInputs = [ numpy ];
diff --git a/nixpkgs/pkgs/development/python-modules/poetry-core/default.nix b/nixpkgs/pkgs/development/python-modules/poetry-core/default.nix
index d5d4e36d3a37..80c4b5acfe8c 100644
--- a/nixpkgs/pkgs/development/python-modules/poetry-core/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/poetry-core/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "poetry-core";
-  version = "1.0.0";
+  version = "1.0.2";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "python-poetry";
     repo = pname;
     rev = version;
-    sha256 = "02pqkwzbg43xz2zsw8q7m0sfkj8wbw07in83gy0bk0znhljhp0vw";
+    sha256 = "sha256-OE6oc/3HYrMmgPnINxvSZ27m8YeZk5Gnn9ok8GlSIZ0=";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pook/default.nix b/nixpkgs/pkgs/development/python-modules/pook/default.nix
new file mode 100644
index 000000000000..480dc7dcba64
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pook/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, furl
+, jsonschema
+, nose
+, pytestCheckHook
+, pythonOlder
+, requests
+, xmltodict
+}:
+
+buildPythonPackage rec {
+  pname = "pook";
+  version = "1.0.1";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "h2non";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0z48vswj07kr2sdvq5qzrwqyijpmj2rlnh2z2b32id1mckr6nnz8";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Will be fixed with the new release, https://github.com/h2non/pook/issues/69
+      name = "use-match-keyword-in-pytest.patch";
+      url = "https://github.com/h2non/pook/commit/2071da27701c82ce02b015e01e2aa6fd203e7bb5.patch";
+      sha256 = "0i3qcpbdqqsnbygi46dyqamgkh9v8rhpbm4lkl75riw48j4n080k";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    furl
+    jsonschema
+    requests
+    xmltodict
+  ];
+
+  checkInputs = [
+    nose
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pook" ];
+
+  meta = with lib; {
+    description = "HTTP traffic mocking and testing made simple in Python";
+    homepage = "https://github.com/h2non/pook";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/poppler-qt5/default.nix b/nixpkgs/pkgs/development/python-modules/poppler-qt5/default.nix
index e94a234dc1a3..345f092a80fa 100644
--- a/nixpkgs/pkgs/development/python-modules/poppler-qt5/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/poppler-qt5/default.nix
@@ -34,6 +34,8 @@ buildPythonPackage rec {
   # no tests, just bindings for `poppler_qt5`
   doCheck = false;
 
+  dontWrapQtApps = true;
+
   meta = with lib; {
     homepage = "https://github.com/wbsoft/python-poppler-qt5";
     license = licenses.gpl2;
diff --git a/nixpkgs/pkgs/development/python-modules/portend/default.nix b/nixpkgs/pkgs/development/python-modules/portend/default.nix
index 1408f7ca905f..0429519c2021 100644
--- a/nixpkgs/pkgs/development/python-modules/portend/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/portend/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "portend";
-  version = "2.7.0";
+  version = "2.7.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ac0e57ae557f75dc47467579980af152e8f60bc2139547eff8469777d9110379";
+    sha256 = "986ed9a278e64a87b5b5f4c21e61c25bebdce9919a92238d9c14c37a7416482b";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/powerline/default.nix b/nixpkgs/pkgs/development/python-modules/powerline/default.nix
index 1ad17d0459dd..292c44cf58fa 100644
--- a/nixpkgs/pkgs/development/python-modules/powerline/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/powerline/default.nix
@@ -1,6 +1,5 @@
 { lib
 , fetchFromGitHub
-, python
 , buildPythonPackage
 , socat
 , psutil
@@ -14,14 +13,14 @@
 # TODO: bzr support is missing because nixpkgs switched to `breezy`
 
 buildPythonPackage rec {
-  version  = "2.8.1";
+  version  = "2.8.2";
   pname = "powerline";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "0xscckcbw75pbcl4546ndrjs4682pn2sqqrd6qvqm0s6zswg7a0y";
+    sha256 = "sha256-6V8ozl5KJQvytfflBmKJlIZQ5m3hkpCzMBtWZ2SzcQ0=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pplpy/default.nix b/nixpkgs/pkgs/development/python-modules/pplpy/default.nix
index de37c338bfa2..190e28e714cd 100644
--- a/nixpkgs/pkgs/development/python-modules/pplpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pplpy/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "pplpy";
-  version = "0.8.4";
+  version = "0.8.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0dk8l5r3f2jbkkasddvxwvhlq35pjsiirh801lrapv8lb16r2qmr";
+    sha256 = "500bd0f4ae1a76956fae7fcba77854f5ec3e64fce76803664983763c3f2bd8bd";
   };
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/prance/default.nix b/nixpkgs/pkgs/development/python-modules/prance/default.nix
index 758cd0a78464..f9d5b6f80b1f 100644
--- a/nixpkgs/pkgs/development/python-modules/prance/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/prance/default.nix
@@ -6,20 +6,19 @@
 , requests
 , six
 , semver
-, pytest
+, pytestCheckHook
 , pytestcov
 , pytestrunner
-, sphinx
 , openapi-spec-validator
 }:
 
 buildPythonPackage rec {
   pname = "prance";
-  version = "0.20.0";
+  version = "0.20.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f7e98b0f7e8ef0dd581c40d8a3e869e15e74b08026b862c3212447f8aa2426a7";
+    sha256 = "4ffcddae6218cf6753a02af36ca9fb1c92eec4689441789ee2e9963230882388";
   };
 
   buildInputs = [
@@ -35,18 +34,28 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytest
+    pytestCheckHook
     pytestcov
     openapi-spec-validator
   ];
 
   postPatch = ''
     substituteInPlace setup.py \
-      --replace "tests_require = dev_require," "tests_require = None,"
+      --replace "tests_require = dev_require," "tests_require = None," \
+      --replace "chardet~=4.0" "" \
+      --replace "semver~=2.13" ""
+    substituteInPlace setup.cfg \
+      --replace "--cov-fail-under=90" ""
   '';
 
-  # many tests require network connection
-  doCheck = false;
+  # Disable tests that require network
+  disabledTestPaths = [
+    "tests/test_convert.py"
+  ];
+  disabledTests = [
+    "test_fetch_url_http"
+  ];
+  pythonImportsCheck = [ "prance" ];
 
   meta = with lib; {
     description = "Resolving Swagger/OpenAPI 2.0 and 3.0.0 Parser";
diff --git a/nixpkgs/pkgs/development/python-modules/praw/default.nix b/nixpkgs/pkgs/development/python-modules/praw/default.nix
index 5ca1d3d83c91..5047c1e88b0d 100644
--- a/nixpkgs/pkgs/development/python-modules/praw/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/praw/default.nix
@@ -14,13 +14,13 @@
 
 buildPythonPackage rec {
   pname = "praw";
-  version = "7.1.4";
+  version = "7.2.0";
 
   src = fetchFromGitHub {
     owner = "praw-dev";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-onxag3kmswqqSycbwW+orofrukry0pCaRSxVRq2u53A=";
+    sha256 = "sha256-/GV5ZhrJxeChcYwmH/9FsLceAYRSeTCDe4lMEwdTa8Y=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/prawcore/default.nix b/nixpkgs/pkgs/development/python-modules/prawcore/default.nix
index 2b6eff885f9e..1e38f401a43d 100644
--- a/nixpkgs/pkgs/development/python-modules/prawcore/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/prawcore/default.nix
@@ -6,12 +6,12 @@
 
 buildPythonPackage rec {
   pname = "prawcore";
-  version = "1.5.0";
+  version = "2.0.0";
   disabled = isPy27; # see https://github.com/praw-dev/prawcore/pull/101
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f1eafc8a65d671f9892354f73142014fbb5d3a9ee621568c662d0a354e0578b";
+    sha256 = "sha256-tJjZtvVJkQBecn1SNcj0nqW6DJpteT+3Q7QPoInNNtE=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pre-commit/default.nix b/nixpkgs/pkgs/development/python-modules/pre-commit/default.nix
index 88fb6e3abf91..1b5af02dca0d 100644
--- a/nixpkgs/pkgs/development/python-modules/pre-commit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pre-commit/default.nix
@@ -2,7 +2,6 @@
 , aspy-yaml
 , cached-property
 , cfgv
-, futures
 , identify
 , importlib-metadata
 , importlib-resources
@@ -16,13 +15,13 @@
 
 buildPythonPackage rec {
   pname = "pre-commit";
-  version = "2.7.1";
+  version = "2.11.0";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit version;
     pname = "pre_commit";
-    sha256 = "0w2a104yhbw1z92rcwpq0gdjsxvr2bwx5ry5xhlf2psnfkjx6ky5";
+    sha256 = "15f1chxrbmfcajk1ngk3jvf6jjbigb5dg66wnn7phmlywaawpy06";
   };
 
   patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch b/nixpkgs/pkgs/development/python-modules/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
index c1bead48b345..6d274aae3c07 100644
--- a/nixpkgs/pkgs/development/python-modules/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
+++ b/nixpkgs/pkgs/development/python-modules/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
@@ -12,15 +12,15 @@ index 26f4919..4885ec1 100644
          if version != C.DEFAULT:
              cmd.extend(['-n', version])
 diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py
-index e17376e..0c1d2ab 100644
+index 43b7280..f0f2338 100644
 --- a/pre_commit/languages/python.py
 +++ b/pre_commit/languages/python.py
-@@ -204,7 +204,7 @@ def install_environment(
+@@ -192,7 +192,7 @@ def install_environment(
+         additional_dependencies: Sequence[str],
  ) -> None:
      envdir = prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version))
+-    venv_cmd = [sys.executable, '-mvirtualenv', envdir]
++    venv_cmd = ['@virtualenv@/bin/virtualenv', envdir]
      python = norm_version(version)
--    venv_cmd = (sys.executable, '-mvirtualenv', envdir, '-p', python)
-+    venv_cmd = ('@virtualenv@/bin/virtualenv', envdir, '-p', python)
-     install_cmd = ('python', '-mpip', 'install', '.', *additional_dependencies)
-
-     with clean_path_on_failure(envdir):
+     if python is not None:
+         venv_cmd.extend(('-p', python))
diff --git a/nixpkgs/pkgs/development/python-modules/preshed/default.nix b/nixpkgs/pkgs/development/python-modules/preshed/default.nix
index 767d5b867f0e..4fc1adfbf018 100644
--- a/nixpkgs/pkgs/development/python-modules/preshed/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/preshed/default.nix
@@ -9,11 +9,11 @@
 }:
 buildPythonPackage rec {
   pname = "preshed";
-  version = "3.0.4";
+  version = "3.0.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "13a779205d55ce323976ac06df597f9ec2d6f0563ebcf5652176cf4520c7d540";
+    sha256 = "c6d3dba39ed5059aaf99767017b9568c75b2d0780c3481e204b1daecde00360e";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/privacyidea/default.nix b/nixpkgs/pkgs/development/python-modules/privacyidea/default.nix
index 84cc4530b34e..c28a00901682 100644
--- a/nixpkgs/pkgs/development/python-modules/privacyidea/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/privacyidea/default.nix
@@ -1,34 +1,56 @@
-{ lib, buildPythonPackage, fetchFromGitHub, cacert, openssl, python
+{ lib, buildPythonPackage, fetchFromGitHub, cacert, openssl, python, nixosTests
 
 , cryptography, pyrad, pymysql, python-dateutil, flask-versioned, flask_script
 , defusedxml, croniter, flask_migrate, pyjwt, configobj, sqlsoup, pillow
 , python-gnupg, passlib, pyopenssl, beautifulsoup4, smpplib, flask-babel
 , ldap3, huey, pyyaml, qrcode, oauth2client, requests, lxml, cbor2, psycopg2
+, pydash
 
-, mock, pytest, responses, testfixtures
+, mock, pytestCheckHook, responses, testfixtures
 }:
 
 buildPythonPackage rec {
   pname = "privacyIDEA";
-  version = "3.3";
+  version = "3.5.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "188ki924dig899wlih45xfsm0s7mjkya56vii26bg02h91izrb4b";
+    sha256 = "sha256-k2om2LjkFRCT53ECPAJEztCiMdz4fF5eoipVUvSoyGo=";
+    fetchSubmodules = true;
   };
 
+  patches = [
+    # Subset of https://github.com/privacyidea/privacyidea/commit/359db6dd10212b8a210e0a83536e92e9e796a1f8,
+    # fixes app context errors in tests. Can be removed on the next bump.
+    ./fix-tests.patch
+  ];
+
   propagatedBuildInputs = [
     cryptography pyrad pymysql python-dateutil flask-versioned flask_script
     defusedxml croniter flask_migrate pyjwt configobj sqlsoup pillow
     python-gnupg passlib pyopenssl beautifulsoup4 smpplib flask-babel
     ldap3 huey pyyaml qrcode oauth2client requests lxml cbor2 psycopg2
+    pydash
   ];
 
-  checkInputs = [ openssl mock pytest responses testfixtures ];
-  # issues with hardware token tests
-  doCheck = false;
+  passthru.tests = { inherit (nixosTests) privacyidea; };
+
+  checkInputs = [ openssl mock pytestCheckHook responses testfixtures ];
+  disabledTests = [
+    "AESHardwareSecurityModuleTestCase"
+    "test_01_cert_request"
+    "test_01_loading_scripts"
+    "test_02_api_push_poll"
+    "test_02_cert_enrolled"
+    "test_02_enroll_rights"
+    "test_02_get_resolvers"
+    "test_02_success"
+    "test_03_get_identifiers"
+    "test_04_remote_user_auth"
+    "test_14_convert_timestamp_to_utc"
+  ];
 
   pythonImportsCheck = [ "privacyidea" ];
 
@@ -46,6 +68,6 @@ buildPythonPackage rec {
     description = "Multi factor authentication system (2FA, MFA, OTP Server)";
     license = licenses.agpl3Plus;
     homepage = "http://www.privacyidea.org";
-    maintainers = [ maintainers.globin ];
+    maintainers = with maintainers; [ globin ma27 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/privacyidea/fix-tests.patch b/nixpkgs/pkgs/development/python-modules/privacyidea/fix-tests.patch
new file mode 100644
index 000000000000..67c22d2052e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/privacyidea/fix-tests.patch
@@ -0,0 +1,28 @@
+diff --git a/privacyidea/lib/resolvers/LDAPIdResolver.py b/privacyidea/lib/resolvers/LDAPIdResolver.py
+index ae9d87764..cfc609931 100644
+--- a/privacyidea/lib/resolvers/LDAPIdResolver.py
++++ b/privacyidea/lib/resolvers/LDAPIdResolver.py
+@@ -97,11 +97,6 @@
+ SERVERPOOL_ROUNDS = 2
+ # The number of seconds a non-responding server is removed from the server pool
+ SERVERPOOL_SKIP = 30
+-# The number of seconds that ldap3 waits if no server is left in the pool, before
+-# starting the next round
+-pooling_loop_timeout = get_app_config_value("PI_LDAP_POOLING_LOOP_TIMEOUT", 10)
+-log.info("Setting system wide POOLING_LOOP_TIMEOUT to {0!s}.".format(pooling_loop_timeout))
+-ldap3.set_config_parameter("POOLING_LOOP_TIMEOUT", pooling_loop_timeout)
+ 
+ # 1 sec == 10^9 nano secs == 10^7 * (100 nano secs)
+ MS_AD_MULTIPLYER = 10 ** 7
+@@ -314,6 +309,11 @@ def __init__(self):
+         self.serverpool_rounds = SERVERPOOL_ROUNDS
+         self.serverpool_skip = SERVERPOOL_SKIP
+         self.serverpool = None
++        # The number of seconds that ldap3 waits if no server is left in the pool, before
++        # starting the next round
++        pooling_loop_timeout = get_app_config_value("PI_LDAP_POOLING_LOOP_TIMEOUT", 10)
++        log.info("Setting system wide POOLING_LOOP_TIMEOUT to {0!s}.".format(pooling_loop_timeout))
++        ldap3.set_config_parameter("POOLING_LOOP_TIMEOUT", pooling_loop_timeout)
+ 
+     def checkPass(self, uid, password):
+         """
diff --git a/nixpkgs/pkgs/development/python-modules/promise/default.nix b/nixpkgs/pkgs/development/python-modules/promise/default.nix
index 68668812fc8a..403f0c097916 100644
--- a/nixpkgs/pkgs/development/python-modules/promise/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/promise/default.nix
@@ -1,41 +1,35 @@
 { buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , lib
-
-, coveralls
-, gevent
+, six
+, pytestCheckHook
 , mock
 , pytest-asyncio
-, pytest-benchmark
-, pytestcov
-, six
 }:
 
 buildPythonPackage rec {
   pname = "promise";
-  version = "2.3";
+  version = "2.3.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1l4kknj97dj5pxfpsz3ln78x9a843561c740b1m4pfi3qlvq7lfz";
+  src = fetchFromGitHub {
+    owner = "syrusakbary";
+    repo = "promise";
+    rev = "v${version}";
+    sha256 = "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6";
   };
 
-  patchPhase = ''
-    substituteInPlace setup.py \
-      --replace '"futures",' ""
-  '';
-
   propagatedBuildInputs = [
-    gevent
     six
   ];
 
   checkInputs = [
-    coveralls
+    pytestCheckHook
     mock
     pytest-asyncio
-    pytest-benchmark
-    pytestcov
+  ];
+
+  disabledTestPaths = [
+    "tests/test_benchmark.py"
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/prompt_toolkit/default.nix b/nixpkgs/pkgs/development/python-modules/prompt_toolkit/default.nix
index 2fa885a69f71..e43931d914c5 100644
--- a/nixpkgs/pkgs/development/python-modules/prompt_toolkit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/prompt_toolkit/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "prompt_toolkit";
-  version = "3.0.8";
+  version = "3.0.16";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "25c95d2ac813909f813c93fde734b6e44406d1477a9faef7c915ff37d39c0a8c";
+    sha256 = "0fa02fa80363844a4ab4b8d6891f62dd0645ba672723130423ca4037b80c1974";
   };
   checkPhase = ''
     py.test -k 'not test_pathcompleter_can_expanduser'
diff --git a/nixpkgs/pkgs/development/python-modules/proto-plus/default.nix b/nixpkgs/pkgs/development/python-modules/proto-plus/default.nix
index cc9444098def..120d5215b2fe 100644
--- a/nixpkgs/pkgs/development/python-modules/proto-plus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/proto-plus/default.nix
@@ -3,24 +3,24 @@
 , fetchPypi
 , isPy3k
 , protobuf
-, googleapis_common_protos
+, googleapis-common-protos
 , pytestCheckHook
 , pytz
 }:
 
 buildPythonPackage rec {
   pname = "proto-plus";
-  version = "1.13.0";
+  version = "1.18.1";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1i5jjnwpd288378h37zads08h695iwmhxm0sxbr3ln6aax97rdb1";
+    sha256 = "sha256-z8RUdMftoP48S57KJUISTyoP9VQyQr7GHo0IvOD1vUg=";
   };
 
   propagatedBuildInputs = [ protobuf ];
 
-  checkInputs = [ pytestCheckHook pytz googleapis_common_protos ];
+  checkInputs = [ pytestCheckHook pytz googleapis-common-protos ];
 
   pythonImportsCheck = [ "proto" ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/protobuf/default.nix b/nixpkgs/pkgs/development/python-modules/protobuf/default.nix
index e7bbdd6ccdf8..60c6f333275b 100644
--- a/nixpkgs/pkgs/development/python-modules/protobuf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/protobuf/default.nix
@@ -1,6 +1,5 @@
 { buildPackages
 , lib
-, stdenv
 , fetchpatch
 , python
 , buildPythonPackage
@@ -20,12 +19,6 @@ buildPythonPackage {
   inherit disabled;
   doCheck = doCheck && !isPy27; # setuptools>=41.4 no longer collects correctly on python2
 
-  NIX_CFLAGS_COMPILE = toString (
-    # work around python distutils compiling C++ with $CC
-    lib.optional stdenv.isDarwin "-I${libcxx}/include/c++/v1"
-    ++ lib.optional (lib.versionOlder protobuf.version "2.7.0") "-std=c++98"
-  );
-
   outputs = [ "out" "dev" ];
 
   propagatedBuildInputs = [ six ] ++ lib.optionals isPy27 [ google-apputils ];
diff --git a/nixpkgs/pkgs/development/python-modules/protobuf3-to-dict/default.nix b/nixpkgs/pkgs/development/python-modules/protobuf3-to-dict/default.nix
new file mode 100644
index 000000000000..ffc21c1428fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/protobuf3-to-dict/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi, protobuf, six }:
+
+buildPythonPackage rec {
+  pname = "protobuf3-to-dict";
+  version = "0.1.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0nibblvj3n20zvq6d73zalbjqjby0w8ji5mim7inhn7vb9dw4hhy";
+  };
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "protobuf_to_dict" ];
+
+  propagatedBuildInputs = [ protobuf six ];
+
+  meta = with lib; {
+    description = "A teeny Python library for creating Python dicts from protocol buffers and the reverse";
+    homepage = "https://github.com/kaporzhu/protobuf-to-dict";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/proxmoxer/default.nix b/nixpkgs/pkgs/development/python-modules/proxmoxer/default.nix
new file mode 100644
index 000000000000..cdbec22bc1fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/proxmoxer/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, mock
+, nose
+, paramiko
+, pytestCheckHook
+, pythonOlder
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "proxmoxer";
+  version = "1.1.1";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "09fz8zbxjaly9zqksvq6cqp66plbsyjsmndy4g25ryys45siz1ny";
+  };
+
+  propagatedBuildInputs = [
+    paramiko
+    requests
+  ];
+
+  checkInputs = [
+    mock
+    nose
+    pytestCheckHook
+  ];
+
+  # Tests require openssh_wrapper which is outdated and not available
+  pytestFlagsArray = [ "tests/paramiko_tests.py" ];
+  pythonImportsCheck = [ "proxmoxer" ];
+
+  meta = with lib; {
+    description = "Python wrapper for Proxmox API v2";
+    homepage = "https://github.com/proxmoxer/proxmoxer";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/psautohint/default.nix b/nixpkgs/pkgs/development/python-modules/psautohint/default.nix
index 68d151336706..cfed6dd74cf6 100644
--- a/nixpkgs/pkgs/development/python-modules/psautohint/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/psautohint/default.nix
@@ -2,12 +2,12 @@
 , fonttools
 , lxml, fs # for fonttools extras
 , setuptools_scm
-, pytestCheckHook, pytest_5, pytestcov, pytest_xdist
+, pytestCheckHook, pytestcov, pytest_xdist
 }:
 
 buildPythonPackage rec {
   pname = "psautohint";
-  version = "2.2.0";
+  version = "2.3.0";
 
   disabled = pythonOlder "3.6";
 
@@ -15,7 +15,7 @@ buildPythonPackage rec {
     owner = "adobe-type-tools";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0gsgfr190xy2rnjf1gf7688xrh13ihgq10s19s4rv5hp6pmg9iaa";
+    sha256 = "1y7mqc2myn1gfzg4h018f8xza0q535shnqg6snnaqynz20i8jcfh";
     fetchSubmodules = true; # data dir for tests
   };
 
@@ -30,14 +30,14 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ fonttools lxml fs ];
 
   checkInputs = [
-    # Override pytestCheckHook to use pytest v5, because some tests fail on pytest >= v6
-    # https://github.com/adobe-type-tools/psautohint/issues/284#issuecomment-742800965
-    # Override might be able to be removed in future, check package dependency pins (coverage.yml)
-    (pytestCheckHook.override{ pytest = pytest_5; })
+    pytestCheckHook
     pytestcov
     pytest_xdist
   ];
   disabledTests = [
+    # Test that fails on pytest >= v6
+    # https://github.com/adobe-type-tools/psautohint/issues/284#issuecomment-742800965
+    "test_hashmap_old_version"
     # Slow tests, reduces test time from ~5 mins to ~30s
     "test_mmufo"
     "test_flex_ufo"
diff --git a/nixpkgs/pkgs/development/python-modules/psd-tools/default.nix b/nixpkgs/pkgs/development/python-modules/psd-tools/default.nix
index 783905c70241..92810ec6a5fb 100644
--- a/nixpkgs/pkgs/development/python-modules/psd-tools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/psd-tools/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "psd-tools";
-  version = "1.9.16";
+  version = "1.9.17";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dece6327b5aa03b53163c63e2bf90b4a7b0ff6872ef743adab140a59cb2318ff";
+    sha256 = "d01e11581442dfcc1bd73ac3278bdf1f98e9df8f083a11e5989632ff97322b65";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/psutil/default.nix b/nixpkgs/pkgs/development/python-modules/psutil/default.nix
index 6760ff168e56..a53005c7426a 100644
--- a/nixpkgs/pkgs/development/python-modules/psutil/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/psutil/default.nix
@@ -1,6 +1,6 @@
 { lib, stdenv, buildPythonPackage, fetchPypi, isPy27, python
 , darwin
-, pytest
+, pytestCheckHook
 , mock
 , ipaddress
 , unittest2
@@ -18,15 +18,20 @@ buildPythonPackage rec {
   # arch doesn't report frequency is the same way
   # tests segfaults on darwin https://github.com/giampaolo/psutil/issues/1715
   doCheck = !stdenv.isDarwin && stdenv.isx86_64;
-  checkInputs = [ pytest ]
+  checkInputs = [ pytestCheckHook ]
     ++ lib.optionals isPy27 [ mock ipaddress unittest2 ];
-  # out must be referenced as test import paths are relative
+  pytestFlagsArray = [
+    "$out/${python.sitePackages}/psutil/tests/test_system.py"
+  ];
   # disable tests which don't work in sandbox
   # cpu_times is flakey on darwin
-  checkPhase = ''
-    pytest $out/${python.sitePackages}/psutil/tests/test_system.py \
-      -k 'not user and not disk_io_counters and not sensors_battery and not cpu_times'
-  '';
+  disabledTests = [
+    "user"
+    "disk_io_counters"
+    "sensors_battery"
+    "cpu_times"
+    "cpu_freq"
+  ];
 
   buildInputs = lib.optionals stdenv.isDarwin [ darwin.IOKit ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/ptpython/default.nix b/nixpkgs/pkgs/development/python-modules/ptpython/default.nix
index 2758c3a582ff..51ad2e85ff2e 100644
--- a/nixpkgs/pkgs/development/python-modules/ptpython/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ptpython/default.nix
@@ -1,18 +1,30 @@
-{ lib, buildPythonPackage, pythonOlder, fetchPypi, prompt_toolkit, appdirs, docopt, jedi
-, pygments, importlib-metadata, isPy3k }:
+{ lib, buildPythonPackage, pythonOlder, fetchPypi
+, appdirs
+, black
+, importlib-metadata
+, isPy3k
+, jedi
+, prompt_toolkit
+, pygments
+}:
 
 buildPythonPackage rec {
   pname = "ptpython";
-  version = "3.0.7";
+  version = "3.0.16";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "34814eb410f854c823be4c4a34124e1dc8ca696da1c1fa611f9da606c5a8a609";
+    sha256 = "4b0f6e381a8251ec8d6aa94fe12f3400bf6edf789f89c8a6099f8a91d4a5d2e1";
   };
 
-  propagatedBuildInputs = [ appdirs prompt_toolkit docopt jedi pygments ]
-    ++ lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
+  propagatedBuildInputs = [
+    appdirs
+    black # yes, this is in install_requires
+    jedi
+    prompt_toolkit
+    pygments
+  ] ++ lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
 
   # no tests to run
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pubnub/default.nix b/nixpkgs/pkgs/development/python-modules/pubnub/default.nix
index e4bab25fd9c1..c2f1a9fb34dd 100644
--- a/nixpkgs/pkgs/development/python-modules/pubnub/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pubnub/default.nix
@@ -5,7 +5,6 @@
 , fetchFromGitHub
 , pycryptodomex
 , pytestCheckHook
-, pyyaml
 , pytest-vcr
 , pytest-asyncio
 , requests
@@ -14,16 +13,17 @@
 
 buildPythonPackage rec {
   pname = "pubnub";
-  version = "4.8.0";
+  version = "5.1.1";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = "python";
     rev = "v${version}";
-    sha256 = "16wjal95042kh5fxhvji0rwmw892pacqcnyms520mw15wcwilqir";
+    sha256 = "sha256-ir8f8A6XuN1ZQIYQbArChLzTlYu4ZKpkoOXQtSLOvKg=";
   };
 
   propagatedBuildInputs = [
+    aiohttp
     cbor2
     pycryptodomex
     requests
@@ -31,19 +31,15 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    aiohttp
-    pycryptodomex
     pytest-asyncio
     pytestCheckHook
     pytest-vcr
-
   ];
 
-  # Some tests don't pass with recent releases of tornado/twisted
-  pytestFlagsArray = [
-    "--ignore tests/integrational"
-    "--ignore tests/manual/asyncio"
-    "--ignore tests/manual/tornado/test_reconnections.py"
+  # Some tests don't pass with recent releases of twisted
+  disabledTestPaths = [
+    "tests/integrational"
+    "tests/manual/asyncio"
   ];
 
   pythonImportsCheck = [ "pubnub" ];
diff --git a/nixpkgs/pkgs/development/python-modules/pure-cdb/default.nix b/nixpkgs/pkgs/development/python-modules/pure-cdb/default.nix
new file mode 100644
index 000000000000..29905d72cf27
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pure-cdb/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildPythonPackage, pythonOlder, flake8 }:
+
+buildPythonPackage rec {
+  pname = "pure-cdb";
+  version = "3.1.1";
+  disabled = pythonOlder "3.4";
+
+  # Archive on pypi has no tests.
+  src = fetchFromGitHub {
+    owner = "bbayles";
+    repo = "python-pure-cdb";
+    rev = "v${version}";
+    hash = "sha256-/FAe4NkY5unt83BOnJ3QqBJFQCPdQnbMVl1fSZ511Fc=";
+  };
+
+  checkInputs = [ flake8 ];
+
+  pythonImportsCheck = [ "cdblib" ];
+
+  meta = with lib; {
+    description = "Python library for working with constant databases";
+    homepage = "https://python-pure-cdb.readthedocs.io/en/latest";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/py-cid/default.nix b/nixpkgs/pkgs/development/python-modules/py-cid/default.nix
new file mode 100644
index 000000000000..86c2e80601f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/py-cid/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, pytestCheckHook
+, base58
+, py-multibase
+, py-multicodec
+, morphys
+, py-multihash
+, hypothesis
+}:
+
+buildPythonPackage rec {
+  pname = "py-cid";
+  version = "0.3.0";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "ipld";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-aN7ee25ghKKa90+FoMDCdGauToePc5AzDLV3tONvh4U=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "base58>=1.0.2,<2.0" "base58>=1.0.2" \
+      --replace "py-multihash>=0.2.0,<1.0.0" "py-multihash>=0.2.0" \
+      --replace "'pytest-runner'," ""
+  '';
+
+  propagatedBuildInputs = [
+    base58
+    py-multibase
+    py-multicodec
+    morphys
+    py-multihash
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    hypothesis
+  ];
+
+  pythonImportsCheck = [ "cid" ];
+
+  meta = with lib; {
+    description = "Self-describing content-addressed identifiers for distributed systems implementation in Python";
+    homepage = "https://github.com/ipld/py-cid";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/py-cpuinfo/default.nix b/nixpkgs/pkgs/development/python-modules/py-cpuinfo/default.nix
index ae2f5ae9d6db..f9e276b3bb5f 100644
--- a/nixpkgs/pkgs/development/python-modules/py-cpuinfo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/py-cpuinfo/default.nix
@@ -1,28 +1,45 @@
 { lib
+, stdenv
 , fetchFromGitHub
+, fetchpatch
 , buildPythonPackage
-, pytest
+, pytestCheckHook
+, sysctl
 }:
 
 buildPythonPackage rec {
   pname = "py-cpuinfo";
-  version = "5.0.0";
+  version = "7.0.0";
 
   src = fetchFromGitHub {
      owner = "workhorsy";
      repo = pname;
      rev = "v${version}";
-     sha256 = "0lxl9n6djaz5h1zrb2jca4qwl41c2plxy8chr7yhcxnzg0srddqi";
+     sha256 = "10qfaibyb2syiwiyv74l7d97vnmlk079qirgnw3ncklqjs0s3gbi";
   };
 
+  patches = [
+    # Make it detect Apple Silicon, remove after https://github.com/workhorsy/py-cpuinfo/pull/161 is merged.
+    (fetchpatch {
+      url = "https://github.com/workhorsy/py-cpuinfo/commit/54c32da6678f9d75ec5acf4534056cdc85c2a04d.patch";
+      sha256 = "sha256-3R46KrpACAQ1V0CQtz48V5mQXxvplUQrXnACtiE8WqY=";
+    })
+    # Continuation of the patch above
+    (fetchpatch {
+      url = "https://github.com/workhorsy/py-cpuinfo/commit/0d00f4b99750f292c85ff23e1039ea9489cb7ec8.patch";
+      sha256 = "sha256-mHoXoCAEG2v3xpQppRFWzSvhYCp5i9CZkbEgtiLVzMs=";
+    })
+  ];
+
   checkInputs = [
-    pytest
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    pytest -k "not TestActual"
-    runHook postCheck
+  # On Darwin sysctl is used to read CPU information.
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace cpuinfo/cpuinfo.py \
+      --replace "len(_program_paths('sysctl')) > 0" "True" \
+      --replace "_run_and_get_stdout(['sysctl'" "_run_and_get_stdout(['${sysctl}/bin/sysctl'"
   '';
 
   meta = {
diff --git a/nixpkgs/pkgs/development/python-modules/py-multiaddr/default.nix b/nixpkgs/pkgs/development/python-modules/py-multiaddr/default.nix
new file mode 100644
index 000000000000..24fa6975cc5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/py-multiaddr/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, varint
+, base58
+, netaddr
+, idna
+, py-cid
+, py-multicodec
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "py-multiaddr";
+  version = "0.0.9";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "multiformats";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-cGM7iYQPP+UOkbTxRhzuED0pkcydFCO8vpx9wTc0/HI=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "'pytest-runner'," ""
+  '';
+
+  propagatedBuildInputs = [
+    varint
+    base58
+    netaddr
+    idna
+    py-cid
+    py-multicodec
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "multiaddr" ];
+
+  meta = with lib; {
+    description = "Composable and future-proof network addresses";
+    homepage = "https://github.com/multiformats/py-multiaddr";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/py-sonic/default.nix b/nixpkgs/pkgs/development/python-modules/py-sonic/default.nix
index c35e650e18bb..dce8157da566 100644
--- a/nixpkgs/pkgs/development/python-modules/py-sonic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/py-sonic/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "py-sonic";
-  version = "0.7.8";
+  version = "0.7.9";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1nfpiry1jlgcyxcs5zamyfxwdvdiwg4yw0v8jysfc74hm362rg7d";
+    sha256 = "1677b7287914567b5123de90ad872b441628d8a7777cf4a5f41671b813facf75";
   };
 
   # package has no tests
diff --git a/nixpkgs/pkgs/development/python-modules/pyTelegramBotAPI/default.nix b/nixpkgs/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
index ea5c93dbeaa1..76e9954a024a 100644
--- a/nixpkgs/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyTelegramBotAPI";
-  version = "3.7.4";
+  version = "3.7.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9b95f441c390fd30a4452a984406310f60a7f4803df57860ccb6a79881506c46";
+    sha256 = "859136cbd50e99922e1ea495d4ebe8235b2cb10fe419a5421f28855249db4278";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyairvisual/default.nix b/nixpkgs/pkgs/development/python-modules/pyairvisual/default.nix
index 882182a3a1ef..bcbb672f5c80 100644
--- a/nixpkgs/pkgs/development/python-modules/pyairvisual/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyairvisual/default.nix
@@ -15,7 +15,7 @@
 
 buildPythonPackage rec {
   pname = "pyairvisual";
-  version = "5.0.6";
+  version = "5.0.7";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -24,7 +24,7 @@ buildPythonPackage rec {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "sha256-7u8AwIr1Ah/7zCfXFwj/C/CaD/B3uLRkZ8Gf6d18Xp0=";
+    sha256 = "sha256-r/AJl36dv6+C92tc3kpX4/VzG69qdh4ERCyQxDOHdVU=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyalmond/default.nix b/nixpkgs/pkgs/development/python-modules/pyalmond/default.nix
new file mode 100644
index 000000000000..59a9339c2649
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyalmond/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pyalmond";
+  version = "0.0.3";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "stanford-oval";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0d1w83lr7k2wxcs846iz4mjyqn1ximnw6155kgl515v10fqyrhgk";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Tests require a running Almond instance
+  doCheck = false;
+  pythonImportsCheck = [ "pyalmond" ];
+
+  meta = with lib; {
+    description = "Python client for the Almond API";
+    homepage = "https://github.com/stanford-oval/pyalmond";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyarrow/default.nix b/nixpkgs/pkgs/development/python-modules/pyarrow/default.nix
index b9c84c484dfe..a38d5df50ddf 100644
--- a/nixpkgs/pkgs/development/python-modules/pyarrow/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyarrow/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, python, isPy3k, arrow-cpp, cmake, cython, futures, hypothesis, numpy, pandas, pytestCheckHook, pytest-lazy-fixture, pkg-config, setuptools_scm, six }:
+{ lib, buildPythonPackage, python, isPy3k, arrow-cpp, cmake, cython, hypothesis, numpy, pandas, pytestCheckHook, pytest-lazy-fixture, pkg-config, setuptools_scm, six }:
 
 let
   _arrow-cpp = arrow-cpp.override { python3 = python; };
diff --git a/nixpkgs/pkgs/development/python-modules/pyatv/default.nix b/nixpkgs/pkgs/development/python-modules/pyatv/default.nix
index 2fca74b33aa9..ddf2c9695a46 100644
--- a/nixpkgs/pkgs/development/python-modules/pyatv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyatv/default.nix
@@ -1,55 +1,58 @@
-{ lib, buildPythonPackage
+{ lib
+, buildPythonPackage
 , aiohttp
 , aiozeroconf
-, asynctest
 , cryptography
 , deepdiff
+, fetchFromGitHub
 , netifaces
 , protobuf
-, pytest
 , pytest-aiohttp
 , pytest-asyncio
-, pytestrunner
+, pytest-runner
+, pytest-timeout
+, pytestCheckHook
 , srptools
 , zeroconf
-, fetchFromGitHub
-, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "pyatv";
-  version = "0.7.6";
+  version = "0.7.7";
+
   src = fetchFromGitHub {
     owner = "postlund";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1lahv6f97fizgh5b2w5yz9455l8ygn99rslhiygkgjywi2flx3p3";
+    sha256 = "sha256-dPnh8XZN7ZVR2rYNnj7GSYXW5I2GNQwD/KRDTgs2AtI=";
   };
 
-  nativeBuildInputs = [ pytestrunner];
+  nativeBuildInputs = [ pytest-runner];
 
   propagatedBuildInputs = [
-    aiozeroconf
-    srptools
     aiohttp
-    protobuf
+    aiozeroconf
     cryptography
     netifaces
+    protobuf
+    srptools
     zeroconf
   ];
 
   checkInputs = [
     deepdiff
-    pytest
     pytest-aiohttp
     pytest-asyncio
+    pytest-timeout
     pytestCheckHook
   ];
 
   __darwinAllowLocalNetworking = true;
 
+  pythonImportsCheck = [ "pyatv" ];
+
   meta = with lib; {
-    description = "A python client library for the Apple TV";
+    description = "Python client library for the Apple TV";
     homepage = "https://github.com/postlund/pyatv";
     license = licenses.mit;
     maintainers = with maintainers; [ elseym ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyaxmlparser/default.nix b/nixpkgs/pkgs/development/python-modules/pyaxmlparser/default.nix
index e77c6dda8402..961b00e15332 100644
--- a/nixpkgs/pkgs/development/python-modules/pyaxmlparser/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyaxmlparser/default.nix
@@ -1,29 +1,19 @@
-{ buildPythonPackage, lib, lxml, click, fetchFromGitHub, pytest, isPy3k }:
+{ buildPythonPackage, lib, lxml, click, fetchFromGitHub, pytestCheckHook, asn1crypto }:
 
 buildPythonPackage rec {
-  version = "0.3.24";
+  version = "0.3.26";
   pname = "pyaxmlparser";
 
-  # the PyPI tarball doesn't ship tests.
   src = fetchFromGitHub {
     owner = "appknox";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0fys26p7xhbnbdzp80zm6n3mragp38p08nyrsnilfgnlpi6rjpg0";
+    sha256 = "sha256-wD0rN00q4ipKnKubptrgrjNwkBpqsA+ix2xedOOr8Yg=";
   };
 
-  disabled = !isPy3k;
+  propagatedBuildInputs = [ asn1crypto click lxml ];
 
-  postPatch = ''
-    substituteInPlace setup.py --replace "click==6.7" "click"
-  '';
-
-  propagatedBuildInputs = [ lxml click ];
-
-  checkInputs = [ pytest ];
-  checkPhase = ''
-    py.test tests/
-  '';
+  checkInputs = [ pytestCheckHook ];
 
   meta = with lib; {
     description = "Python3 Parser for Android XML file and get Application Name without using Androguard";
diff --git a/nixpkgs/pkgs/development/python-modules/pybids/default.nix b/nixpkgs/pkgs/development/python-modules/pybids/default.nix
index 9cca6cf57efc..034bdb6363a0 100644
--- a/nixpkgs/pkgs/development/python-modules/pybids/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pybids/default.nix
@@ -1,7 +1,6 @@
 { buildPythonPackage
 , lib
 , fetchPypi
-, isPy27
 , click
 , num2words
 , numpy
@@ -11,8 +10,7 @@
 , patsy
 , bids-validator
 , sqlalchemy
-, pytest
-, pathlib
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -36,11 +34,8 @@ buildPythonPackage rec {
     sqlalchemy
   ];
 
-  checkInputs = [ pytest ] ++ lib.optionals isPy27 [ pathlib ];
-
-  checkPhase = ''
-    pytest
-  '';
+  checkInputs = [ pytestCheckHook ];
+  pythonImportsCheck = [ "bids" ];
 
   meta = with lib; {
     description = "Python tools for querying and manipulating BIDS datasets";
diff --git a/nixpkgs/pkgs/development/python-modules/pybigwig/default.nix b/nixpkgs/pkgs/development/python-modules/pybigwig/default.nix
index be54a38cd996..cb1764b23b04 100644
--- a/nixpkgs/pkgs/development/python-modules/pybigwig/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pybigwig/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "pyBigWig";
-  version = "0.3.17";
+  version = "0.3.18";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "157x6v48y299zm382krf1dw08fdxg95im8lnabhp5vc94s04zxj1";
+    sha256 = "4c2a8c571b4100ad7c4c318c142eb48558646be52aaab28215a70426f5be31bc";
   };
 
   buildInputs = [ zlib ];
diff --git a/nixpkgs/pkgs/development/python-modules/pycdio/default.nix b/nixpkgs/pkgs/development/python-modules/pycdio/default.nix
index 712029b692ce..7e06b18e32b2 100644
--- a/nixpkgs/pkgs/development/python-modules/pycdio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pycdio/default.nix
@@ -26,7 +26,7 @@ buildPythonPackage rec {
     patchShebangs .
   '';
 
-  nativeBuildInputs = [ nose pkgs.pkgconfig pkgs.swig ];
+  nativeBuildInputs = [ nose pkgs.pkg-config pkgs.swig ];
   buildInputs = [ setuptools pkgs.libcdio ]
     ++ lib.optional stdenv.isDarwin pkgs.libiconv;
 
diff --git a/nixpkgs/pkgs/development/python-modules/pycec/default.nix b/nixpkgs/pkgs/development/python-modules/pycec/default.nix
new file mode 100644
index 000000000000..c65ea3a695ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pycec/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, libcec
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "pycec";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "konikvranik";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ivnmihajhfkwwghgl0f8n9ragpirbmbj1mhj9bmjjc29zzdc3m6";
+  };
+
+  propagatedBuildInputs = [
+    libcec
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pycec" ];
+
+  meta = with lib; {
+    description = "Python modules to access HDMI CEC devices";
+    homepage = "https://github.com/konikvranik/pycec/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pychannels/default.nix b/nixpkgs/pkgs/development/python-modules/pychannels/default.nix
new file mode 100644
index 000000000000..0c5e290334da
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pychannels/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "pychannels";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "fancybits";
+    repo = pname;
+    rev = version;
+    sha256 = "0dqc0vhf6c5r3g7nfbpa668x6z2zxrznk6h907s6sxkq4sbqnhqf";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Project has not published tests yet
+  doCheck = false;
+  pythonImportsCheck = [ "pychannels" ];
+
+  meta = with lib; {
+    description = "Python library for interacting with the Channels app";
+    homepage = "https://github.com/fancybits/pychannels";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix b/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix
index 9eefaa5f364f..cc68d83d02b0 100644
--- a/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pychromecast/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "PyChromecast";
-  version = "8.0.0";
+  version = "9.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0dlxgh57j25cvk2pqr2dj4lv6yn0pix2rcl2kzqsg2405rdjks91";
+    sha256 = "sha256-kHZWzqRtOdDpPsgVl5V470+29lX9i/TojmQh/NeCToU=";
   };
 
   disabled = !isPy3k;
diff --git a/nixpkgs/pkgs/development/python-modules/pycryptodomex/default.nix b/nixpkgs/pkgs/development/python-modules/pycryptodomex/default.nix
index d58821569e62..fae49e7be0a7 100644
--- a/nixpkgs/pkgs/development/python-modules/pycryptodomex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pycryptodomex/default.nix
@@ -1,17 +1,23 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
 
 buildPythonPackage rec {
   pname = "pycryptodomex";
-  version = "3.9.9";
-
-  meta = {
-    description = "A self-contained cryptographic library for Python";
-    homepage = "https://www.pycryptodome.org";
-    license = lib.licenses.bsd2;
-  };
+  version = "3.10.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7b5b7c5896f8172ea0beb283f7f9428e0ab88ec248ce0a5b8c98d73e26267d51";
+    sha256 = "sha256-VBzT4+JS+xmntI9CC3mLU0gzArf+TZlUyUdgXQomPWI=";
+  };
+
+  pythonImportsCheck = [ "Cryptodome" ];
+
+  meta = with lib; {
+    description = "A self-contained cryptographic library for Python";
+    homepage = "https://www.pycryptodome.org";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pydaikin/default.nix b/nixpkgs/pkgs/development/python-modules/pydaikin/default.nix
new file mode 100644
index 000000000000..209ef3dbc235
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pydaikin/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromBitbucket
+, freezegun
+, netifaces
+, pytest-aiohttp
+, pytestCheckHook
+, pythonOlder
+, urllib3
+}:
+
+buildPythonPackage rec {
+  pname = "pydaikin";
+  version = "2.4.1";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromBitbucket {
+    owner = "mustang51";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1624adp4lqd1n9flnf0wqrcibml2nd19ga3fmxzjg4x5z6767bs3";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    netifaces
+    urllib3
+  ];
+
+  checkInputs = [
+    freezegun
+    pytest-aiohttp
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pydaikin" ];
+
+  meta = with lib; {
+    description = "Python Daikin HVAC appliances interface";
+    homepage = "https://bitbucket.org/mustang51/pydaikin";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pydantic/default.nix b/nixpkgs/pkgs/development/python-modules/pydantic/default.nix
index 9bf4bede1faf..d3c6e37bbe4b 100644
--- a/nixpkgs/pkgs/development/python-modules/pydantic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pydantic/default.nix
@@ -1,44 +1,45 @@
 { lib
 , buildPythonPackage
-, fetchFromGitHub
-, ujson
 , email_validator
-, typing-extensions
-, python
-, isPy3k
-, pytest
-, pytestcov
+, fetchFromGitHub
 , pytest-mock
+, pytestCheckHook
+, python-dotenv
+, pythonOlder
+, typing-extensions
+, ujson
 }:
 
 buildPythonPackage rec {
   pname = "pydantic";
-  version = "1.7.3";
-  disabled = !isPy3k;
+  version = "1.8";
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "samuelcolvin";
     repo = pname;
     rev = "v${version}";
-    sha256 = "xihEDmly0vprmA+VdeCoGXg9PjWRPmBWAwk/9f2DLts=";
+    sha256 = "sha256-+HfnM/IrFlUyQJdiOYyaJUNenh8dLtd8CUJWSbn6hwQ=";
   };
 
   propagatedBuildInputs = [
-    ujson
     email_validator
+    python-dotenv
     typing-extensions
+    ujson
   ];
 
   checkInputs = [
-    pytest
-    pytestcov
     pytest-mock
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    pytest
+  preCheck = ''
+    export HOME=$(mktemp -d)
   '';
 
+  pythonImportsCheck = [ "pydantic" ];
+
   meta = with lib; {
     homepage = "https://github.com/samuelcolvin/pydantic";
     description = "Data validation and settings management using Python type hinting";
diff --git a/nixpkgs/pkgs/development/python-modules/pydash/0001-Only-build-unit-tests.patch b/nixpkgs/pkgs/development/python-modules/pydash/0001-Only-build-unit-tests.patch
new file mode 100644
index 000000000000..56a5ff391194
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pydash/0001-Only-build-unit-tests.patch
@@ -0,0 +1,30 @@
+From 2fe7a445bafedee2c43050e40697d8b0fd7f7b30 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Fri, 19 Mar 2021 19:37:34 +0100
+Subject: [PATCH] Only build unit-tests
+
+---
+ setup.cfg | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/setup.cfg b/setup.cfg
+index 2c2f49f..a5ec152 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -83,13 +83,6 @@ force_sort_within_sections = true
+ junit_family = xunit2
+ addopts =
+     --verbose
+-    --doctest-modules
+-    --no-cov-on-fail
+-    --cov-fail-under=100
+-    --cov-report=term-missing
+-    --cov-report=xml:build/coverage/coverage.xml
+-    --cov-report=html:build/coverage
+-    --junitxml=build/testresults/junit.xml
+ 
+ [coverage:run]
+ omit =
+-- 
+2.29.3
+
diff --git a/nixpkgs/pkgs/development/python-modules/pydash/default.nix b/nixpkgs/pkgs/development/python-modules/pydash/default.nix
new file mode 100644
index 000000000000..7d75896397f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pydash/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchFromGitHub, mock, pytestCheckHook, invoke }:
+
+buildPythonPackage rec {
+  pname = "pydash";
+  version = "4.9.3";
+
+  src = fetchFromGitHub {
+    owner = "dgilland";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-BAyiSnILvujUOFOAkiXSgyozs2Q809pYihHwa+6BHcQ=";
+  };
+
+  patches = [ ./0001-Only-build-unit-tests.patch ];
+
+  checkInputs = [ mock pytestCheckHook invoke ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dgilland/pydash";
+    description = "The kitchen sink of Python utility libraries for doing \"stuff\" in a functional way. Based on the Lo-Dash Javascript library.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pydeconz/default.nix b/nixpkgs/pkgs/development/python-modules/pydeconz/default.nix
new file mode 100644
index 000000000000..73d989468c55
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pydeconz/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, aiohttp
+, aioresponses
+, buildPythonPackage
+, fetchFromGitHub
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pydeconz";
+  version = "78";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "Kane610";
+    repo = "deconz";
+    rev = "v${version}";
+    sha256 = "sha256-uIRuLNGFX7gq59/ntfks9pECiGkX7jjKh2jmjxFRcv4=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  checkInputs = [
+    aioresponses
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pydeconz" ];
+
+  meta = with lib; {
+    description = "Python library wrapping the Deconz REST API";
+    homepage = "https://github.com/Kane610/deconz";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pydot/default.nix b/nixpkgs/pkgs/development/python-modules/pydot/default.nix
index 0a637a48ba2f..00e36ec37312 100644
--- a/nixpkgs/pkgs/development/python-modules/pydot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pydot/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "pydot";
-  version = "1.4.1";
+  version = "1.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d49c9d4dd1913beec2a997f831543c8cbd53e535b1a739e921642fe416235f01";
+    sha256 = "248081a39bcb56784deb018977e428605c1c758f10897a339fce1dd728ff007d";
   };
 
   patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/pydrive/default.nix b/nixpkgs/pkgs/development/python-modules/pydrive/default.nix
index aa0515323e29..5d1fc187c9f5 100644
--- a/nixpkgs/pkgs/development/python-modules/pydrive/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pydrive/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, google_api_python_client
+, google-api-python-client
 , oauth2client
 , pyyaml
 }:
@@ -17,7 +17,7 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    google_api_python_client
+    google-api-python-client
     oauth2client
     pyyaml
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyeight/default.nix b/nixpkgs/pkgs/development/python-modules/pyeight/default.nix
new file mode 100644
index 000000000000..b3a2de5ed404
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyeight/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, aiohttp
+, async-timeout
+, buildPythonPackage
+, fetchFromGitHub
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "pyeight";
+  version = "0.1.5";
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "mezz64";
+    repo = "pyEight";
+    rev = version;
+    sha256 = "1wzmjqs8zx611b71ip7a0phyas96vxpq8xpnhrirfi9l09kdjgsw";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    async-timeout
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pyeight" ];
+
+  meta = with lib; {
+    description = "Python library to interface with the Eight Sleep API";
+    homepage = "https://github.com/mezz64/pyEight";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyelftools/default.nix b/nixpkgs/pkgs/development/python-modules/pyelftools/default.nix
index 258c97a3c112..ef9a7f1368ee 100644
--- a/nixpkgs/pkgs/development/python-modules/pyelftools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyelftools/default.nix
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     sha256 = "09igdym2qj2fvfcazbz25qybmgz7ccrn25xn3havfkdkka0z0i3p";
   };
 
-  doCheck = stdenv.is64bit && !stdenv.isDarwin;
+  doCheck = stdenv.hostPlatform.system == "x86_64-linux";
 
   checkPhase = ''
     patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" test/external_tools/readelf
diff --git a/nixpkgs/pkgs/development/python-modules/pyexcel-xls/default.nix b/nixpkgs/pkgs/development/python-modules/pyexcel-xls/default.nix
index 34d11830e570..7e09a21e3627 100644
--- a/nixpkgs/pkgs/development/python-modules/pyexcel-xls/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyexcel-xls/default.nix
@@ -11,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "pyexcel-xls";
-  version = "0.6.1";
+  version = "0.6.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c4cc1fb4ac5d1682a44d9a368a43ec2e089ad6fc46884648ccfad46863e3da0a";
+    sha256 = "2fbf66e8df88051eaaa9745be433903d18db819ddd3a987c992ead1d68b7feb5";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pyfakefs/default.nix b/nixpkgs/pkgs/development/python-modules/pyfakefs/default.nix
index 64ec58487c45..8ba9b3fc46fc 100644
--- a/nixpkgs/pkgs/development/python-modules/pyfakefs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyfakefs/default.nix
@@ -1,13 +1,19 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, pythonOlder, python, pytest, glibcLocales }:
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
-  version = "4.3.2";
+  version = "4.3.3";
   pname = "pyfakefs";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dfeed4715e2056e3e56b9c5f51a679ce2934897eef926f3d14e5364e43f19070";
+    sha256 = "sha256-/7KrJkoLg69Uii2wxQl5jiCDYd85YBuomK5lzs+1nLs=";
   };
 
   postPatch = ''
@@ -17,28 +23,22 @@ buildPythonPackage rec {
     substituteInPlace pyfakefs/tests/fake_os_test.py \
       --replace "test_path_links_not_resolved" "notest_path_links_not_resolved" \
       --replace "test_append_mode_tell_linux_windows" "notest_append_mode_tell_linux_windows"
-    substituteInPlace pyfakefs/tests/fake_filesystem_unittest_test.py \
-      --replace "test_copy_real_file" "notest_copy_real_file"
   '' + (lib.optionalString stdenv.isDarwin ''
     # this test fails on darwin due to case-insensitive file system
     substituteInPlace pyfakefs/tests/fake_os_test.py \
       --replace "test_rename_dir_to_existing_dir" "notest_rename_dir_to_existing_dir"
   '');
 
-  checkInputs = [ pytest glibcLocales ];
-
-  checkPhase = ''
-    export LC_ALL=en_US.UTF-8
-    ${python.interpreter} -m pyfakefs.tests.all_tests
-    ${python.interpreter} -m pyfakefs.tests.all_tests_without_extra_packages
-    ${python.interpreter} -m pytest pyfakefs/pytest_tests/pytest_plugin_test.py
-  '';
+  checkInputs = [ pytestCheckHook ];
+  # https://github.com/jmcgeheeiv/pyfakefs/issues/581 (OSError: [Errno 9] Bad file descriptor)
+  disabledTests = [ "test_open_existing_pipe" ];
+  pythonImportsCheck = [ "pyfakefs" ];
 
   meta = with lib; {
     description = "Fake file system that mocks the Python file system modules";
-    license     = licenses.asl20;
-    homepage    = "http://pyfakefs.org/";
-    changelog   = "https://github.com/jmcgeheeiv/pyfakefs/blob/master/CHANGES.md";
+    homepage = "http://pyfakefs.org/";
+    changelog = "https://github.com/jmcgeheeiv/pyfakefs/blob/master/CHANGES.md";
+    license = licenses.asl20;
     maintainers = with maintainers; [ gebner ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyfftw/default.nix b/nixpkgs/pkgs/development/python-modules/pyfftw/default.nix
index 155254a6af35..96e807f8eba3 100644
--- a/nixpkgs/pkgs/development/python-modules/pyfftw/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyfftw/default.nix
@@ -10,20 +10,18 @@ buildPythonPackage rec {
     sha256 = "60988e823ca75808a26fd79d88dbae1de3699e72a293f812aa4534f8a0a58cb0";
   };
 
+  preConfigure = ''
+    export LDFLAGS="-L${fftw.out}/lib -L${fftwFloat.out}/lib -L${fftwLongDouble.out}/lib"
+    export CFLAGS="-I${fftw.dev}/include -I${fftwFloat.dev}/include -I${fftwLongDouble.dev}/include"
+  '';
+
   buildInputs = [ fftw fftwFloat fftwLongDouble];
 
   propagatedBuildInputs = [ numpy scipy cython dask ];
 
   # Tests cannot import pyfftw. pyfftw works fine though.
   doCheck = false;
-
-  preConfigure = ''
-    export LDFLAGS="-L${fftw.out}/lib -L${fftwFloat.out}/lib -L${fftwLongDouble.out}/lib"
-    export CFLAGS="-I${fftw.dev}/include -I${fftwFloat.dev}/include -I${fftwLongDouble.dev}/include"
-  '';
-  #+ optionalString isDarwin ''
-  #  export DYLD_LIBRARY_PATH="${pkgs.fftw.out}/lib"
-  #'';
+  pythonImportsCheck = [ "pyfftw" ];
 
   meta = with lib; {
     description = "A pythonic wrapper around FFTW, the FFT library, presenting a unified interface for all the supported transforms";
diff --git a/nixpkgs/pkgs/development/python-modules/pyflume/default.nix b/nixpkgs/pkgs/development/python-modules/pyflume/default.nix
new file mode 100644
index 000000000000..a1d36670a396
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyflume/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+, pyjwt
+, ratelimit
+, pytz
+, requests
+, requests-mock
+}:
+
+buildPythonPackage rec {
+  pname = "pyflume";
+  version = "0.6.2";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "ChrisMandich";
+    repo = "PyFlume";
+    rev = "v${version}";
+    sha256 = "0i181c8722j831bjlcjwv5ccy20hl8zzlv7bfp8w0976gdmv4iz8";
+  };
+
+  propagatedBuildInputs = [
+    pyjwt
+    ratelimit
+    pytz
+    requests
+  ];
+
+  checkInputs = [
+    requests-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pyflume" ];
+
+  meta = with lib; {
+    description = "Python module to work with Flume sensors";
+    homepage = "https://github.com/ChrisMandich/PyFlume";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyflunearyou/default.nix b/nixpkgs/pkgs/development/python-modules/pyflunearyou/default.nix
new file mode 100644
index 000000000000..c8706760343e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyflunearyou/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, aiohttp
+, aresponses
+, aiocache
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-asyncio
+, pytest-aiohttp
+, pytestCheckHook
+, pythonOlder
+, msgpack
+, ujson
+}:
+
+buildPythonPackage rec {
+  pname = "pyflunearyou";
+  version = "2.0.1";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "bachya";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-2a4OKPmy9tFLJqRg9bEXqrbr3RKVHmKPSYDrtAEqvdo=";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    aiocache
+    msgpack
+    ujson
+  ];
+
+  checkInputs = [
+    aresponses
+    pytest-asyncio
+    pytest-aiohttp
+    pytestCheckHook
+  ];
+
+  # Ignore the examples directory as the files are prefixed with test_.
+  # disabledTestFiles doesn't seem to work here
+  pytestFlagsArray = [ "--ignore examples/" ];
+  pythonImportsCheck = [ "pyflunearyou" ];
+
+  meta = with lib; {
+    description = "Python library for retrieving UV-related information from Flu Near You";
+    homepage = "https://github.com/bachya/pyflunearyou";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyfma/default.nix b/nixpkgs/pkgs/development/python-modules/pyfma/default.nix
index 936f9c2a02df..405098113acb 100644
--- a/nixpkgs/pkgs/development/python-modules/pyfma/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyfma/default.nix
@@ -1,18 +1,22 @@
 { lib
 , buildPythonPackage
+, isPy27
 , fetchPypi
 , pybind11
+, exdown
 , numpy
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "pyfma";
-  version = "0.1.1";
+  version = "0.1.2";
+
+  disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2c9ea44c5e30ca8318ca794ff1e3941d3dc7958901b1a9c430d38734bf7b6f8d";
+    sha256 = "3a9e2503fd01baa4978af5f491b79b7646d7872df9ecc7ab63ba10c250c50d8a";
   };
 
   buildInputs = [
@@ -20,17 +24,12 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    exdown
     numpy
-    pytest
+    pytestCheckHook
   ];
 
-  preBuild = ''
-    export HOME=$(mktemp -d)
-  '';
-
-  checkPhase = ''
-    pytest test
-  '';
+  pythonImportsCheck = [ "pyfma" ];
 
   meta = with lib; {
     description = "Fused multiply-add for Python";
diff --git a/nixpkgs/pkgs/development/python-modules/pygraphviz/default.nix b/nixpkgs/pkgs/development/python-modules/pygraphviz/default.nix
index e9b66a95771b..bac70be9987f 100644
--- a/nixpkgs/pkgs/development/python-modules/pygraphviz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pygraphviz/default.nix
@@ -1,40 +1,48 @@
-{ lib, buildPythonPackage, isPy3k, fetchPypi, substituteAll, graphviz
-, pkg-config, doctest-ignore-unicode, mock, nose }:
+{ lib
+, buildPythonPackage
+, isPy3k
+, fetchPypi
+, substituteAll
+, graphviz
+, coreutils
+, pkg-config
+, pytest
+}:
 
 buildPythonPackage rec {
   pname = "pygraphviz";
-  version = "1.6";
+  version = "1.7";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "411ae84a5bc313e3e1523a1cace59159f512336318a510573b47f824edef8860";
+    sha256 = "a7bec6609f37cf1e64898c59f075afd659106cf9356c5f387cecaa2e0cdb2304";
     extension = "zip";
   };
 
-  nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ graphviz ];
-  checkInputs = [ doctest-ignore-unicode mock nose ];
-
   patches = [
-    # pygraphviz depends on graphviz being in PATH. This patch always prepends
-    # graphviz to PATH.
+    # pygraphviz depends on graphviz executables and wc being in PATH
     (substituteAll {
-      src = ./graphviz-path.patch;
-      inherit graphviz;
+      src = ./path.patch;
+      path = lib.makeBinPath [ graphviz coreutils ];
     })
   ];
 
-  # The tests are currently failing because of a bug in graphviz 2.40.1.
-  # Upstream does not want to skip the relevant tests:
-  # https://github.com/pygraphviz/pygraphviz/pull/129
-  doCheck = false;
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ graphviz ];
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    pytest --pyargs pygraphviz
+  '';
 
   meta = with lib; {
     description = "Python interface to Graphviz graph drawing package";
     homepage = "https://github.com/pygraphviz/pygraphviz";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ matthiasbeyer ];
+    maintainers = with maintainers; [ matthiasbeyer dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pygraphviz/graphviz-path.patch b/nixpkgs/pkgs/development/python-modules/pygraphviz/graphviz-path.patch
deleted file mode 100644
index e4ff925009d7..000000000000
--- a/nixpkgs/pkgs/development/python-modules/pygraphviz/graphviz-path.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/pygraphviz/agraph.py b/pygraphviz/agraph.py
-index 8f72024..2d8358e 100644
---- a/pygraphviz/agraph.py
-+++ b/pygraphviz/agraph.py
-@@ -1557,7 +1557,7 @@ class AGraph(object):
-         import os
-         import glob
- 
--        paths = os.environ["PATH"]
-+        paths = '@graphviz@/bin:' + os.environ["PATH"]
-         if os.name == "nt":
-             exe = ".exe"
-         else:
diff --git a/nixpkgs/pkgs/development/python-modules/pygraphviz/path.patch b/nixpkgs/pkgs/development/python-modules/pygraphviz/path.patch
new file mode 100644
index 000000000000..a895eae77567
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pygraphviz/path.patch
@@ -0,0 +1,13 @@
+diff --git a/pygraphviz/agraph.py b/pygraphviz/agraph.py
+index d539ba0..f5bac3f 100644
+--- a/pygraphviz/agraph.py
++++ b/pygraphviz/agraph.py
+@@ -1792,7 +1792,7 @@ class AGraph:
+         if platform.system() == "Windows":
+             name += ".exe"
+ 
+-        paths = os.environ["PATH"]
++        paths = '@path@'
+         for path in paths.split(os.pathsep):
+             match = glob.glob(os.path.join(path, name))
+             if match:
diff --git a/nixpkgs/pkgs/development/python-modules/pygtrie/default.nix b/nixpkgs/pkgs/development/python-modules/pygtrie/default.nix
index e22af4b52068..8ee176e80c2f 100644
--- a/nixpkgs/pkgs/development/python-modules/pygtrie/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pygtrie/default.nix
@@ -1,10 +1,10 @@
 { lib, fetchPypi, buildPythonPackage, ... }:
 buildPythonPackage rec {
   pname = "pygtrie";
-  version = "2.4.1";
+  version = "2.4.2";
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4367b87d92eaf475107421dce0295a9d4d72156702908c96c430a426b654aee7";
+    sha256 = "43205559d28863358dbbf25045029f58e2ab357317a59b11f11ade278ac64692";
   };
   meta = {
     homepage = "https://github.com/mina86/pygtrie";
diff --git a/nixpkgs/pkgs/development/python-modules/pyhaversion/default.nix b/nixpkgs/pkgs/development/python-modules/pyhaversion/default.nix
index 22290695cc0a..ade4c01833c3 100644
--- a/nixpkgs/pkgs/development/python-modules/pyhaversion/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyhaversion/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "pyhaversion";
-  version = "20.12.1";
+  version = "21.3.0";
 
   # Only 3.8.0 and beyond are supported
   disabled = pythonOlder "3.8";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "ludeeus";
     repo = pname;
     rev = version;
-    sha256 = "17yl67dgw75dghljcfwzblm11kqnh6sxf47w62mxz86aq9zrvcxd";
+    sha256 = "sha256-2vW4BN5qwJZYQ8FU3bpSA2v1dX6TOhcHDbHRMDPoRAs=";
   };
 
   propagatedBuildInputs = [
@@ -32,7 +32,6 @@ buildPythonPackage rec {
 
   checkInputs = [
     aresponses
-    awesomeversion
     pytest-asyncio
     pytestCheckHook
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix b/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix
index 65d3f60da047..9bfa814894de 100644
--- a/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyhomematic/default.nix
@@ -1,19 +1,26 @@
-{ lib, buildPythonPackage, isPy3k, fetchPypi }:
+{ lib
+, buildPythonPackage
+, isPy3k
+, fetchPypi
+, python
+}:
 
 buildPythonPackage rec {
   pname = "pyhomematic";
-  version = "0.1.71";
+  version = "0.1.72";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0z09bw2mlhg7n9jyqmcyir306wpxr5nw1qsp5ps2iaw1qnyz5s9n";
+    sha256 = "a1d44103b90418d9c8cde4699a1c671d57d12469be23a45e93bfc00df28ef11b";
   };
 
-  # PyPI tarball does not include tests/ directory
-  # Unreliable timing: https://github.com/danielperna84/pyhomematic/issues/126
-  doCheck = false;
+  checkPhase = ''
+    ${python.interpreter} -m unittest
+  '';
+
+  pythonImportsCheck = [ "pyhomematic" ];
 
   meta = with lib; {
     description = "Python 3 Interface to interact with Homematic devices";
diff --git a/nixpkgs/pkgs/development/python-modules/pyicu/default.nix b/nixpkgs/pkgs/development/python-modules/pyicu/default.nix
index e152002cdd15..75bbcde09cd2 100644
--- a/nixpkgs/pkgs/development/python-modules/pyicu/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyicu/default.nix
@@ -1,36 +1,26 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, pytest
+, pytestCheckHook
 , six
-, fetchpatch
 , icu
 }:
 
 buildPythonPackage rec {
   pname = "PyICU";
-  version = "2.3.1";
+  version = "2.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ddb2b453853b4c25db382bc5e8c4cde09b3f4696ef1e1494f8294e174f459cf4";
+    sha256 = "0wb3v421i2fnnxdywam4ay8hqvnxlz0r2nrpx5lqy3rn6dlbz9d9";
   };
 
-  patches = [
-    (fetchpatch {
-      url = "https://salsa.debian.org/python-team/modules/pyicu/raw/debian/2.2-2/"
-            + "debian/patches/icu_test.patch";
-      sha256 = "1iavdkyqixm9i753svl17barla93b7jzgkw09dn3hnggamx7zwx9";
-    })
-  ];
-
   nativeBuildInputs = [ icu ]; # for icu-config
   buildInputs = [ icu ];
-  checkInputs = [ pytest ];
-  propagatedBuildInputs = [ six ];
+  checkInputs = [ pytestCheckHook six ];
 
   meta = with lib; {
-    homepage = "https://pypi.python.org/pypi/PyICU/";
+    homepage = "https://github.com/ovalhub/pyicu/";
     description = "Python extension wrapping the ICU C++ API";
     license = licenses.mit;
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/development/python-modules/pyinsteon/default.nix b/nixpkgs/pkgs/development/python-modules/pyinsteon/default.nix
index 8596883326ba..cfe5112ab221 100644
--- a/nixpkgs/pkgs/development/python-modules/pyinsteon/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyinsteon/default.nix
@@ -17,14 +17,14 @@
 
 buildPythonPackage rec {
   pname = "pyinsteon";
-  version = "1.0.8";
+  version = "1.0.10";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "0d028fcqmdzxp0vsz7digx794s9l65ydsnsyvyx275z6577x7h4h";
+    sha256 = "sha256-8b/PvMFHvYGVWw6ycLnL8n972cn+1QW/VTMiblMPam4=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pyiqvia/default.nix b/nixpkgs/pkgs/development/python-modules/pyiqvia/default.nix
index f231f98df85d..d2775d6e3b9e 100644
--- a/nixpkgs/pkgs/development/python-modules/pyiqvia/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyiqvia/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "pyiqvia";
-  version = "0.3.2";
+  version = "0.3.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "089lah23939m523jmjkaw2li0fikp2nswxznfvzwnr6wjpp3m9as";
+    sha256 = "sha256-XYWoHKa/yq7MtGVM6eVgLtR2E3VmqsjX3TNcQcd7dEQ=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/pykmtronic/default.nix b/nixpkgs/pkgs/development/python-modules/pykmtronic/default.nix
new file mode 100644
index 000000000000..50260afab10f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pykmtronic/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchPypi
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "pykmtronic";
+  version = "0.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-8bxn27DU1XUQUxQFJklEge29DHx1DMu7pJG4hVE1jDU=";
+  };
+
+  propagatedBuildInputs = [ aiohttp lxml ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pykmtronic" ];
+
+  meta = with lib; {
+    description = "Python client to interface with KM-Tronic web relays";
+    homepage = "https://github.com/dgomes/pykmtronic";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pykodi/default.nix b/nixpkgs/pkgs/development/python-modules/pykodi/default.nix
new file mode 100644
index 000000000000..24450270a836
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pykodi/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonPackage, fetchPypi, aiohttp, jsonrpc-async, jsonrpc-websocket }:
+
+buildPythonPackage rec {
+  pname = "pykodi";
+  version = "0.2.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "099xyn5aql5mdim6kh4hwx0fg1a3bx73qdvwr48nz23cljmmk1m8";
+  };
+
+  propagatedBuildInputs = [ aiohttp jsonrpc-async jsonrpc-websocket ];
+
+  pythonImportsCheck = [ "pykodi" ];
+
+  meta = with lib; {
+    description = "An async python interface for Kodi over JSON-RPC";
+    homepage = "https://github.com/OnFreund/PyKodi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sephalon ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pylast/default.nix b/nixpkgs/pkgs/development/python-modules/pylast/default.nix
index 26812ff9151a..b16ea62717a5 100644
--- a/nixpkgs/pkgs/development/python-modules/pylast/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pylast/default.nix
@@ -1,27 +1,41 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k, certifi, six
-, setuptools_scm
+{ lib
+, buildPythonPackage
+, certifi
+, fetchPypi
+, flaky
+, pytestCheckHook
+, pythonOlder
+, setuptools-scm
+, six
 }:
 
 buildPythonPackage rec {
   pname = "pylast";
-  version = "4.1.0";
-
-  disabled = !isPy3k;
+  version = "4.2.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ad084aec1bf7e307bc42d7cc1a003851f5bee1ad24fb697a9fdc300bbfe63932";
+    sha256 = "sha256-w/mkAUUgj7L7Xv+nz1pI1TYKfihH3S3MbxaNQ4VtoH0=";
   };
 
-  nativeBuildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ certifi six ];
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [
+    certifi
+    six
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    flaky
+  ];
 
-  # tests require last.fm credentials
-  doCheck = false;
+  pythonImportsCheck = [ "pylast" ];
 
   meta = with lib; {
+    description = "Python interface to last.fm (and compatibles)";
     homepage = "https://github.com/pylast/pylast";
-    description = "A python interface to last.fm (and compatibles)";
     license = licenses.asl20;
     maintainers = with maintainers; [ rvolosatovs ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/pylint/default.nix b/nixpkgs/pkgs/development/python-modules/pylint/default.nix
index 102619b2b31e..43183482eceb 100644
--- a/nixpkgs/pkgs/development/python-modules/pylint/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pylint/default.nix
@@ -1,50 +1,67 @@
-{ stdenv, lib, buildPythonPackage, fetchPypi, pythonOlder, astroid, installShellFiles,
-  isort, mccabe, pytestCheckHook, pytest-benchmark, pytestrunner, toml }:
+{ stdenv
+, lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, installShellFiles
+, astroid
+, isort
+, mccabe
+, toml
+, pytest-benchmark
+, pytest-xdist
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "pylint";
-  version = "2.6.0";
+  version = "2.7.1";
 
-  disabled = pythonOlder "3.5";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bb4a908c9dadbc3aac18860550e870f58e1a02c9f2c204fdf5693d73be061210";
+    sha256 = "10nrvzk1naf5ryawmi59wp99k31053sz37q3x9li2hj2cf7i1kl1";
   };
 
-  nativeBuildInputs = [ pytestrunner installShellFiles ];
+  nativeBuildInputs = [
+    installShellFiles
+  ];
 
-  checkInputs = [ pytestCheckHook pytest-benchmark ];
+  propagatedBuildInputs = [
+    astroid
+    isort
+    mccabe
+    toml
+  ];
 
-  propagatedBuildInputs = [ astroid isort mccabe toml ];
-
-  postPatch = lib.optionalString stdenv.isDarwin ''
-    # Remove broken darwin test
-    rm -vf pylint/test/test_functional.py
+  postInstall = ''
+    mkdir -p $out/share/emacs/site-lisp
+    cp -v "elisp/"*.el $out/share/emacs/site-lisp/
+    installManPage man/*.1
   '';
 
-  disabledTests = [
-    # https://github.com/PyCQA/pylint/issues/3198
-    "test_by_module_statement_value"
-    # has issues with local directories
-    "test_version"
-   ] ++ lib.optionals stdenv.isDarwin [
-      "test_parallel_execution"
-      "test_py3k_jobs_option"
-   ];
+  checkInputs = [
+    pytest-benchmark
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  dontUseSetuptoolsCheck = true;
 
   # calls executable in one of the tests
   preCheck = ''
     export PATH=$PATH:$out/bin
   '';
 
-  dontUseSetuptoolsCheck = true;
+  pytestFlagsArray = [
+    "-n auto"
+  ];
 
-  postInstall = ''
-    mkdir -p $out/share/emacs/site-lisp
-    cp "elisp/"*.el $out/share/emacs/site-lisp/
-    installManPage man/*.1
-  '';
+  disabledTests = lib.optionals stdenv.isDarwin [
+    "test_parallel_execution"
+    "test_py3k_jobs_option"
+  ];
 
   meta = with lib; {
     homepage = "https://pylint.pycqa.org/";
diff --git a/nixpkgs/pkgs/development/python-modules/pylitterbot/default.nix b/nixpkgs/pkgs/development/python-modules/pylitterbot/default.nix
new file mode 100644
index 000000000000..7aa5bebfaa0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pylitterbot/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, authlib
+, buildPythonPackage
+, fetchFromGitHub
+, httpx
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+, pytz
+}:
+
+buildPythonPackage rec {
+  pname = "pylitterbot";
+  version = "2021.3.1";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "natekspencer";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-w2iyzCYoma8zQsXGIQnpgijDHNqmlvCnbeyF7PmLz9c=";
+  };
+
+  propagatedBuildInputs = [
+    authlib
+    httpx
+    pytz
+  ];
+
+  checkInputs = [
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pylitterbot" ];
+
+  meta = with lib; {
+    description = "Python package for controlling a Litter-Robot";
+    homepage = "https://github.com/natekspencer/pylitterbot";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyls-mypy/default.nix b/nixpkgs/pkgs/development/python-modules/pyls-mypy/default.nix
index b9cf9738ed42..eaf069c8ccb4 100644
--- a/nixpkgs/pkgs/development/python-modules/pyls-mypy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyls-mypy/default.nix
@@ -1,6 +1,6 @@
 { lib, buildPythonPackage, fetchFromGitHub, isPy27
 , future, python-language-server, mypy, configparser
-, pytestCheckHook, mock, isPy3k, pytestcov, coverage
+, pytestCheckHook, mock, pytestcov, coverage
 , fetchpatch
 }:
 
diff --git a/nixpkgs/pkgs/development/python-modules/pyls-spyder/default.nix b/nixpkgs/pkgs/development/python-modules/pyls-spyder/default.nix
index 7e1fa0606191..aa83253ed2d3 100644
--- a/nixpkgs/pkgs/development/python-modules/pyls-spyder/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyls-spyder/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyls-spyder";
-  version = "0.3.0";
+  version = "0.3.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07apxh12b8ybkx5izr7pg8kbg5g5wgzw7vh5iy2n8dhiqarzp7s1";
+    sha256 = "f2be1b05f2c7a72565b28de7289d2c2b16052b88e46914279a2d631e074ed158";
   };
 
   propagatedBuildInputs = [ python-language-server ];
diff --git a/nixpkgs/pkgs/development/python-modules/pylutron/default.nix b/nixpkgs/pkgs/development/python-modules/pylutron/default.nix
index 90a45640812e..b9ed3cc20e26 100644
--- a/nixpkgs/pkgs/development/python-modules/pylutron/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pylutron/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "pylutron";
-  version = "0.2.6";
+  version = "0.2.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1q8qdy26s9hvfsh75pak7xiqjwrwsgq18p4d86dwf4dwmy5s4qj1";
+    sha256 = "sha256-wwVTDpoRT/TIJhoRap0T01a8gmYt+vfKc+ATRs6phB4=";
   };
 
   # Project has no tests
diff --git a/nixpkgs/pkgs/development/python-modules/pymatgen-lammps/default.nix b/nixpkgs/pkgs/development/python-modules/pymatgen-lammps/default.nix
index c80472a6730a..72f362f85c45 100644
--- a/nixpkgs/pkgs/development/python-modules/pymatgen-lammps/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymatgen-lammps/default.nix
@@ -3,14 +3,14 @@
 , buildPythonPackage
 , pymatgen
 , pytestrunner
-, pytest
+, pytestCheckHook
 , isPy3k
 }:
 
 buildPythonPackage rec {
   pname = "pymatgen-lammps";
   version = "0.4.5";
-  disabled = (!isPy3k);
+  disabled = !isPy3k;
 
   src = fetchurl {
      url = "https://gitlab.com/costrouc/${pname}/-/archive/v${version}/${pname}-v${version}.tar.gz";
@@ -18,13 +18,17 @@ buildPythonPackage rec {
   };
 
   buildInputs = [ pytestrunner ];
-  checkInputs = [ pytest ];
+  checkInputs = [ pytestCheckHook ];
   propagatedBuildInputs = [ pymatgen ];
 
+  pythonImportsCheck = [ "pmg_lammps" ];
+
   meta = {
     description = "A LAMMPS wrapper using pymatgen";
     homepage = "https://gitlab.com/costrouc/pymatgen-lammps";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ costrouc ];
+    # not compatible with recent versions of pymatgen
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pymatgen/default.nix b/nixpkgs/pkgs/development/python-modules/pymatgen/default.nix
index bae7a5613239..fdf6b089844b 100644
--- a/nixpkgs/pkgs/development/python-modules/pymatgen/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymatgen/default.nix
@@ -21,11 +21,11 @@
 
 buildPythonPackage rec {
   pname = "pymatgen";
-  version = "2020.12.3";
+  version = "2020.12.31";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a7ae7aba87e88965c3e1490f5b9742c95e06150f2fc73da69647a9366dd88018";
+    sha256 = "5002490facd47c55d2dae42c35712e061c1f5d881180485c0543a899589856d6";
   };
 
   nativeBuildInputs = [ glibcLocales ];
@@ -52,6 +52,7 @@ buildPythonPackage rec {
 
   # No tests in pypi tarball.
   doCheck = false;
+  pythonImportsCheck = [ "pymatgen" ];
 
   meta = with lib; {
     description = "A robust materials analysis code that defines core object representations for structures and molecules";
diff --git a/nixpkgs/pkgs/development/python-modules/pymazda/default.nix b/nixpkgs/pkgs/development/python-modules/pymazda/default.nix
new file mode 100644
index 000000000000..8b390ac12faf
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymazda/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchPypi
+, pycryptodome
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pymazda";
+  version = "0.0.10";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-sJj4RkVaELNitcz1H8YitNgIx4f35WeQf7M5miYD5yI=";
+  };
+
+  propagatedBuildInputs = [ aiohttp pycryptodome ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pymazda" ];
+
+  meta = with lib; {
+    description = "Python client for interacting with the MyMazda API";
+    homepage = "https://github.com/bdr99/pymazda";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymediaroom/default.nix b/nixpkgs/pkgs/development/python-modules/pymediaroom/default.nix
new file mode 100644
index 000000000000..e977cb23d752
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymediaroom/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, async-timeout
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, xmltodict
+}:
+
+buildPythonPackage rec {
+  pname = "pymediaroom";
+  version = "0.6.4.1";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "dgomes";
+    repo = pname;
+    rev = version;
+    sha256 = "1klf2dxd8rlq3n4b9m03lzwcsasn9vi6m3hzrjqhqnprhrnp0xmy";
+  };
+
+  propagatedBuildInputs = [
+    async-timeout
+    xmltodict
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pymediaroom" ];
+
+  meta = with lib; {
+    description = "Python Remote Control for Mediaroom STB";
+    homepage = "https://github.com/dgomes/pymediaroom";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymeeus/default.nix b/nixpkgs/pkgs/development/python-modules/pymeeus/default.nix
index 13e80a38e4b5..047b7d697c9e 100644
--- a/nixpkgs/pkgs/development/python-modules/pymeeus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymeeus/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "PyMeeus";
-  version = "0.3.7";
+  version = "0.3.13";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0qjnk9sc65i4by2x4zm6w941a4i31fmhgwbkpbqkk87rwq4h4hsn";
+    sha256 = "43b800a2571f3237e558d8d305e97f6ac4027977666e22af98448e0f1f86af86";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/pymemcache/default.nix b/nixpkgs/pkgs/development/python-modules/pymemcache/default.nix
new file mode 100644
index 000000000000..d0089e8edbe6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymemcache/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, future
+, mock
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "pymemcache";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "pinterest";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0xkw76y4059jg2a902wlpk6psyh2g4x6j6vlj9gzd5vqb7ihg2y7";
+  };
+
+  checkInputs = [
+    future
+    mock
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    sed -i "/--cov/d" setup.cfg
+  '';
+
+  disabledTests = [
+    # python-memcached is not available (last release in 2017)
+    "TestClientSocketConnect"
+  ];
+
+  pythonImportsCheck = [ "pymemcache" ];
+
+  meta = with lib; {
+    description = "Python memcached client";
+    homepage = "https://pymemcache.readthedocs.io/";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymfy/default.nix b/nixpkgs/pkgs/development/python-modules/pymfy/default.nix
new file mode 100644
index 000000000000..32483eea7b9a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymfy/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, httpretty
+, poetry-core
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests_oauthlib
+}:
+
+buildPythonPackage rec {
+  pname = "pymfy";
+  version = "0.9.4";
+  format = "pyproject";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "tetienne";
+    repo = "somfy-open-api";
+    rev = "v${version}";
+    sha256 = "1ml536dvva2xd52jfgrd557h2sr5w6567sxnyq0blhkgpyz4m2av";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    requests
+    requests_oauthlib
+  ];
+
+  checkInputs = [
+    httpretty
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pymfy" ];
+
+  meta = with lib; {
+    description = "Python client for the Somfy Open API";
+    homepage = "https://github.com/tetienne/somfy-open-api";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymitv/default.nix b/nixpkgs/pkgs/development/python-modules/pymitv/default.nix
new file mode 100644
index 000000000000..32f90d07dcb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymitv/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "pymitv";
+  version = "1.5.0";
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-0n4IS5W3nvYwKdl6FVf4upRrFDGdYHohsaXadFy8d8w=";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Projec thas no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pymitv" ];
+
+  meta = with lib; {
+    description = "Python client the Mi Tv 3";
+    homepage = "https://github.com/simse/pymitv";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymodbus/default.nix b/nixpkgs/pkgs/development/python-modules/pymodbus/default.nix
index 76f2e9a9338b..9d524bfe946f 100644
--- a/nixpkgs/pkgs/development/python-modules/pymodbus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymodbus/default.nix
@@ -1,12 +1,15 @@
 { lib
+, aiohttp
 , asynctest
 , buildPythonPackage
+, click
 , fetchFromGitHub
 , mock
+, prompt_toolkit
+, pygments
 , pyserial
 , pyserial-asyncio
 , pytestCheckHook
-, pythonOlder
 , redis
 , sqlalchemy
 , tornado
@@ -15,17 +18,21 @@
 
 buildPythonPackage rec {
   pname = "pymodbus";
-  version = "2.4.0";
+  version = "2.5.1";
 
   src = fetchFromGitHub {
     owner = "riptideio";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0x0dv02shcc2yxxm9kvcbhip111sna74dvcfssxdzzy967vnq76v";
+    sha256 = "sha256-b85jfBZfMZtqtmID+tGBgOe9o0BbmBH83UV71lYAI5c=";
   };
 
   # Twisted asynchronous version is not supported due to a missing dependency
   propagatedBuildInputs = [
+    aiohttp
+    click
+    prompt_toolkit
+    pygments
     pyserial
     pyserial-asyncio
     tornado
@@ -34,11 +41,9 @@ buildPythonPackage rec {
   checkInputs = [
     asynctest
     mock
-    pyserial-asyncio
     pytestCheckHook
     redis
     sqlalchemy
-    tornado
     twisted
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pymongo/default.nix b/nixpkgs/pkgs/development/python-modules/pymongo/default.nix
index 18c697fec445..c5cfa0049966 100644
--- a/nixpkgs/pkgs/development/python-modules/pymongo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymongo/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pymongo";
-  version = "3.11.1";
+  version = "3.11.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a9c1a2538cd120283e7137ac97ce27ebdfcb675730c5055d6332b0043f4e5a55";
+    sha256 = "db5098587f58fbf8582d9bda2462762b367207246d3e19623782fb449c3c5fcc";
   };
 
   # Tests call a running mongodb instance
diff --git a/nixpkgs/pkgs/development/python-modules/pymsteams/default.nix b/nixpkgs/pkgs/development/python-modules/pymsteams/default.nix
new file mode 100644
index 000000000000..a475d074efd6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymsteams/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "pymsteams";
+  version = "0.1.14";
+
+  src = fetchFromGitHub {
+    owner = "rveachkc";
+    repo = pname;
+    rev = version;
+    sha256 = "19gnsjzf3kwcwp2rwa30zpqjqgxb9plgcsx7fqbmxnrxgw99fyqx";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Tests require network access
+  doCheck = false;
+  pythonImportsCheck = [ "pymsteams" ];
+
+  meta = with lib; {
+    description = "Python module to interact with Microsoft Teams";
+    homepage = "https://github.com/rveachkc/pymsteams";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pymumble/default.nix b/nixpkgs/pkgs/development/python-modules/pymumble/default.nix
index 6e72309a58d3..45c193899fe0 100644
--- a/nixpkgs/pkgs/development/python-modules/pymumble/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymumble/default.nix
@@ -1,31 +1,50 @@
-{ buildPythonPackage,
-  fetchFromGitHub,
-  isPy27,
-  lib,
-  opuslib,
-  protobuf,
+{ buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, isPy27
+, lib
+, opuslib
+, protobuf
+, pytestCheckHook
+, pycrypto
 }:
 
 buildPythonPackage rec {
   pname = "pymumble";
-  version = "0.3.1";
+  version = "1.6";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "azlux";
     repo = "pymumble";
-    rev = "1dd6d6d4df2fdef33202f17e2acf3ba9678a5737";
-    sha256 = "1r1sch8xrpbzffsb72lhp5xjr3ac3xb599n44vsfmaam3xklz6vz";
+    rev = version;
+    sha256 = "04nc66d554a98mbmdgzgsg6ncaz0jsn4zdr3mr14w6wnhrxpjkrs";
   };
+  patches = [
+    # Compatibility with pycryptodome (which is what our pycrypto really is)
+    # See https://github.com/azlux/pymumble/pull/99
+    (fetchpatch {
+      url = "https://github.com/azlux/pymumble/pull/99/commits/b85548a0e1deaac820954b1c0b308af214311a14.patch";
+      sha256 = "0w9dpc87rny6vmhi634pih1p97b67jm26qajscpa9wp6nphdlxlj";
+    })
+  ];
+
+  postPatch = ''
+    # Changes all `library==x.y.z` statements to just `library`
+    # So that we aren't constrained to a specific version
+    sed -i 's/\(.*\)==.*/\1/' requirements.txt
+  '';
 
   propagatedBuildInputs = [ opuslib protobuf ];
 
+  checkInputs = [ pytestCheckHook pycrypto ];
+
   pythonImportsCheck = [ "pymumble_py3" ];
 
   meta = with lib; {
     description = "Python 3 version of pymumble, Mumble library used for multiple uses like making mumble bot.";
     homepage = "https://github.com/azlux/pymumble";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ thelegy ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ thelegy infinisil ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pymyq/default.nix b/nixpkgs/pkgs/development/python-modules/pymyq/default.nix
index e93d0b602b4d..71788db45c9a 100644
--- a/nixpkgs/pkgs/development/python-modules/pymyq/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pymyq/default.nix
@@ -4,17 +4,19 @@
 , buildPythonPackage
 , fetchFromGitHub
 , pkce
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "pymyq";
-  version = "3.0.3";
+  version = "3.0.4";
+  disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = "arraylabs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1wrfnbz87ns2ginyvljna0axl35s0xfaiqwzapxm8ira40ax5wrl";
+    sha256 = "sha256-jeoFlLBjD81Bt6E75rk4U1Ach53KGy23QGx+A6X2rpg=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pymysensors/default.nix b/nixpkgs/pkgs/development/python-modules/pymysensors/default.nix
new file mode 100644
index 000000000000..24d7d4c28266
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pymysensors/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildPythonPackage
+, click
+, crcmod
+, fetchFromGitHub
+, getmac
+, intelhex
+, paho-mqtt
+, pyserial
+, pyserial-asyncio
+, pytest-sugar
+, pytest-timeout
+, pytestCheckHook
+, pythonOlder
+, voluptuous
+}:
+
+buildPythonPackage rec {
+  pname = "pymysensors";
+  version = "0.21.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "theolind";
+    repo = pname;
+    rev = version;
+    sha256 = "1k75gwvyzslyjr3cdx8b74fb302k2i7bda4q92rb75rhgp4gch55";
+  };
+
+  propagatedBuildInputs = [
+    click
+    crcmod
+    getmac
+    intelhex
+    paho-mqtt
+    pyserial
+    pyserial-asyncio
+    voluptuous
+  ];
+
+  checkInputs = [
+    pytest-sugar
+    pytest-timeout
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "mysensors" ];
+
+  meta = with lib; {
+    description = "Python API for talking to a MySensors gateway";
+    homepage = "https://github.com/theolind/pymysensors";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pynanoleaf/default.nix b/nixpkgs/pkgs/development/python-modules/pynanoleaf/default.nix
index 40e2783aa577..9bdf4885dd4f 100644
--- a/nixpkgs/pkgs/development/python-modules/pynanoleaf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pynanoleaf/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pynanoleaf";
-  version = "0.0.5";
+  version = "0.1.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2ced000e3c37f4e2ce0ea177d924af71c97007de9e4fd0ef37dcd7b4a6d1b622";
+    sha256 = "sha256-BiLJgsey7kIIeN5+CKKnrTB2bSKMNEbeMLwGi2LRLcg=";
   };
 
   disabled = !isPy3k;
diff --git a/nixpkgs/pkgs/development/python-modules/pynetdicom/default.nix b/nixpkgs/pkgs/development/python-modules/pynetdicom/default.nix
new file mode 100644
index 000000000000..192827566df2
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pynetdicom/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, pydicom
+, pyfakefs
+, pytestCheckHook
+, sqlalchemy
+}:
+
+buildPythonPackage rec {
+  pname = "pynetdicom";
+  version = "1.5.6";
+
+  src = fetchFromGitHub {
+    owner = "pydicom";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xYwnv30I0+CAx4QODSeMNhdlM2NuM8v4J3rx99NdYCc=";
+  };
+
+  propagatedBuildInputs = [
+    pydicom
+  ];
+
+  checkInputs = [
+    pyfakefs
+    pytestCheckHook
+    sqlalchemy
+  ];
+
+  disabledTests = [
+    # Some tests needs network capabilities
+    "test_str_types_empty"
+    "test_associate_reject"
+    "TestEchoSCP"
+    "TestEchoSCPCLI"
+    "TestFindSCP"
+    "TestFindSCPCLI"
+    "TestGetSCP"
+    "TestGetSCPCLI"
+    "TestMoveSCP"
+    "TestMoveSCPCLI"
+    "TestQRGetServiceClass"
+    "TestQRMoveServiceClass"
+    "TestStoreSCP"
+    "TestStoreSCPCLI"
+    "TestStoreSCU"
+    "TestStoreSCUCLI"
+    "TestState"
+  ];
+
+  pythonImportsCheck = [ "pynetdicom" ];
+
+  meta = with lib; {
+    description = "Python implementation of the DICOM networking protocol";
+    homepage = "https://github.com/pydicom/pynetdicom";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    # Tests are not passing on Darwin/Aarch64, thus it's assumed that it doesn't work
+    broken = stdenv.isDarwin || stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pynmea2/default.nix b/nixpkgs/pkgs/development/python-modules/pynmea2/default.nix
index de208c7a9dbb..8bb82fa330a5 100644
--- a/nixpkgs/pkgs/development/python-modules/pynmea2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pynmea2/default.nix
@@ -1,16 +1,15 @@
-{ lib, buildPythonPackage, fetchPypi, pytest }:
+{ lib, buildPythonPackage, fetchPypi, pytestCheckHook }:
 
 buildPythonPackage rec {
   pname = "pynmea2";
-  version = "1.15.0";
+  version = "1.17.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8b83fa7e3e668af5e182ef1c2fd4a535433ecadf60d7b627280172d695a1646b";
+    sha256 = "0x5xrk51dpzsvky1ncikadm80a44a82j3mjjykmhmx7jddc5qh9d";
   };
 
-  checkInputs = [ pytest ];
-  checkPhase = "pytest";
+  checkInputs = [ pytestCheckHook ];
 
   meta = {
     homepage = "https://github.com/Knio/pynmea2";
diff --git a/nixpkgs/pkgs/development/python-modules/pynput/default.nix b/nixpkgs/pkgs/development/python-modules/pynput/default.nix
index 49da01f8e716..4b7f85482a41 100644
--- a/nixpkgs/pkgs/development/python-modules/pynput/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pynput/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pynput";
-  version = "1.7.1";
+  version = "1.7.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5a5598bfb14322eff980ac6ca820635fce9028faa4f64a8e1581243aaf6785ee";
+    sha256 = "4e50b1a0ab86847e87e58f6d1993688b9a44f9f4c88d4712315ea8eb552ef828";
   };
 
   nativeBuildInputs = [ sphinx ];
diff --git a/nixpkgs/pkgs/development/python-modules/pynws/default.nix b/nixpkgs/pkgs/development/python-modules/pynws/default.nix
new file mode 100644
index 000000000000..abe4c93b818f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pynws/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, freezegun
+, metar
+, pytest-aiohttp
+, pytest-asyncio
+, pytest-cov
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pynws";
+  version = "1.3.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "MatthewFlamm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "13ipmx60kicwh8qxjazap4vk94x8i3r0lnkdsap7gffaizwgp49d";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    metar
+  ];
+
+  checkInputs = [
+    freezegun
+    pytest-aiohttp
+    pytest-asyncio
+    pytest-cov
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pynws" ];
+
+  meta = with lib; {
+    description = "Python library to retrieve data from NWS/NOAA";
+    homepage = "https://github.com/MatthewFlamm/pynws";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyobjc/default.nix b/nixpkgs/pkgs/development/python-modules/pyobjc/default.nix
index 4b27bea10bc5..541a733b3f80 100644
--- a/nixpkgs/pkgs/development/python-modules/pyobjc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyobjc/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "pyobjc";
-  version = "7.0";
+  version = "7.0.1";
 
   # Gives "No matching distribution found for
   # pyobjc-framework-Collaboration==4.0b1 (from pyobjc==4.0b1)"
@@ -10,7 +10,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2b6c3e98f1408564ace1df36927154d7827c8e2f382386ab5d2db95c891e35a0";
+    sha256 = "f4fd120683b19a2abeac351784204e6b092cf1fb94f597b6eb22f30c117b2ef0";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/pyopenssl/default.nix b/nixpkgs/pkgs/development/python-modules/pyopenssl/default.nix
index c8b3bd4158c4..6bc8c04ec30c 100644
--- a/nixpkgs/pkgs/development/python-modules/pyopenssl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyopenssl/default.nix
@@ -64,12 +64,13 @@ let
 in
 
 buildPythonPackage rec {
-  pname = "pyOpenSSL";
-  version = "20.0.0";
+  pname = "pyopenssl";
+  version = "20.0.1";
 
   src = fetchPypi {
-    inherit pname version;
-    sha256 = "1i8ab5zn9i9iq2ksizp3rd42v157kacddzz88kviqw3kpp68xw4j";
+    pname = "pyOpenSSL";
+    inherit version;
+    sha256 = "4c231c759543ba02560fcd2480c48dcec4dae34c9da7d3747c508227e0624b51";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyopenuv/default.nix b/nixpkgs/pkgs/development/python-modules/pyopenuv/default.nix
index a5414021b259..130b44c09694 100644
--- a/nixpkgs/pkgs/development/python-modules/pyopenuv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyopenuv/default.nix
@@ -1,7 +1,6 @@
 { lib
 , aiohttp
 , aresponses
-, async-timeout
 , asynctest
 , buildPythonPackage
 , fetchFromGitHub
@@ -14,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "pyopenuv";
-  version = "2.0.1";
+  version = "2.0.2";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "1pzdcy65gndrlyhrwyc1rwsh8n4w79wla8n9fr13m00vac3cqkl0";
+    sha256 = "sha256-QVgNwu/NXSV9nbRN0POBCdKCv6xdp4uSEzFAiHkhVaQ=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyosmium/default.nix b/nixpkgs/pkgs/development/python-modules/pyosmium/default.nix
index 577f00fd1114..6bd360036000 100644
--- a/nixpkgs/pkgs/development/python-modules/pyosmium/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyosmium/default.nix
@@ -1,10 +1,10 @@
 { lib, buildPythonPackage, fetchFromGitHub, cmake, python
 , libosmium, protozero, boost, expat, bzip2, zlib, pybind11
-, nose, shapely, pythonOlder, isPyPy }:
+, nose, shapely, pythonOlder, isPyPy, lz4 }:
 
 buildPythonPackage rec {
   pname = "pyosmium";
-  version = "3.1.0";
+  version = "3.1.3";
 
   disabled = pythonOlder "3.4" || isPyPy;
 
@@ -12,11 +12,11 @@ buildPythonPackage rec {
     owner = "osmcode";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0m11hdgiysdhyi5yn6nj8a8ycjzx5hpjy7n1c4j6q5caifj7rf7h";
+    sha256 = "11ma8nr7k2ixwwb55fiqvrj5qbmpgkyfk0canz4l0m8b7rcw3qsc";
   };
 
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ libosmium protozero boost expat bzip2 zlib pybind11 ];
+  buildInputs = [ libosmium protozero boost expat bzip2 zlib pybind11 lz4 ];
 
   preBuild = "cd ..";
 
@@ -27,6 +27,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Python bindings for libosmium";
     homepage = "https://osmcode.org/pyosmium";
+    changelog = "https://github.com/osmcode/pyosmium/blob/v${version}/CHANGELOG.md";
     license = licenses.bsd2;
     maintainers = with maintainers; [ sikmir ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/pyowm/default.nix b/nixpkgs/pkgs/development/python-modules/pyowm/default.nix
index 423d38ab25d8..3cfb70e7b875 100644
--- a/nixpkgs/pkgs/development/python-modules/pyowm/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyowm/default.nix
@@ -1,30 +1,42 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder, requests, geojson }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, geojson
+, pysocks
+, pythonOlder
+, requests
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "pyowm";
-  version = "3.1.1";
+  version = "3.2.0";
+  disabled = pythonOlder "3.7";
 
-  disabled = pythonOlder "3.3";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "a7b18297a9189dbe5f6b454b12d61a407e35c7eb9ca75bcabfe5e1c83245290d";
+  src = fetchFromGitHub {
+    owner = "csparpa";
+    repo = pname;
+    rev = version;
+    sha256 = "0sq8rxcgdiayl5gy4qhkvvsdq1d93sbzn0nfg8f1vr8qxh8qkfq4";
   };
 
-  propagatedBuildInputs = [ requests geojson ];
+  propagatedBuildInputs = [
+    geojson
+    pysocks
+    requests
+  ];
+
+  checkInputs = [ pytestCheckHook ];
 
-  # This may actually break the package.
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "requests>=2.18.2,<2.19" "requests"
-  '';
+  # Run only tests which don't require network access
+  pytestFlagsArray = [ "tests/unit" ];
 
-  # No tests in archive
-  doCheck = false;
+  pythonImportsCheck = [ "pyowm" ];
 
   meta = with lib; {
-    description = "A Python wrapper around the OpenWeatherMap web API";
+    description = "Python wrapper around the OpenWeatherMap web API";
     homepage = "https://pyowm.readthedocs.io/";
     license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyparted/default.nix b/nixpkgs/pkgs/development/python-modules/pyparted/default.nix
index f46a5d2db827..16a894546e49 100644
--- a/nixpkgs/pkgs/development/python-modules/pyparted/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyparted/default.nix
@@ -38,7 +38,7 @@ buildPythonPackage rec {
     PATH="${pkgs.parted}/sbin:$PATH"
   '';
 
-  nativeBuildInputs = [ pkgs.pkgconfig ];
+  nativeBuildInputs = [ pkgs.pkg-config ];
   checkInputs = [ six ];
   propagatedBuildInputs = [ pkgs.parted ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pypcap/default.nix b/nixpkgs/pkgs/development/python-modules/pypcap/default.nix
index 08c90d828986..fbf6769ab4ca 100644
--- a/nixpkgs/pkgs/development/python-modules/pypcap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pypcap/default.nix
@@ -1,34 +1,50 @@
-{ lib, writeText, buildPythonPackage, fetchPypi, libpcap, dpkt }:
+{ lib
+, buildPythonPackage
+, dpkt
+, fetchFromGitHub
+, fetchpatch
+, libpcap
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "pypcap";
   version = "1.2.3";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1w5i79gh7cswvznr8rhilcmzhnh2y5c4jwh2qrfnpx05zqigm1xd";
+
+  src = fetchFromGitHub {
+    owner = "pynetwork";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1zscfk10jpqwxgc8d84y8bffiwr92qrg2b24afhjwiyr352l67cf";
   };
 
   patches = [
-    # The default setup.py searchs for pcap.h in a static list of default
-    # folders. So we have to add the path to libpcap in the nix-store.
-    (writeText "libpcap-path.patch"
-      ''
-      --- a/setup.py
-      +++ b/setup.py
-      @@ -28,6 +28,7 @@ def recursive_search(path, target_files):
-
-       def find_prefix_and_pcap_h():
-           prefixes = chain.from_iterable((
-      +        '${libpcap}',
-               ('/usr', sys.prefix),
-               glob.glob('/opt/libpcap*'),
-               glob.glob('../libpcap*'),
-      '')
+    # Support for Python 3.9, https://github.com/pynetwork/pypcap/pull/102
+    (fetchpatch {
+      name = "support-python-3.9.patch";
+      url = "https://github.com/pynetwork/pypcap/pull/102/commits/e22f5d25f0d581d19ef337493434e72cd3a6ae71.patch";
+      sha256 = "0n1syh1vcplgsf6njincpqphd2w030s3b2jyg86d7kbqv1w5wk0l";
+    })
   ];
 
+  postPatch = ''
+    # Add the path to libpcap in the nix-store
+    substituteInPlace setup.py --replace "('/usr', sys.prefix)" "'${libpcap}'"
+    # Remove coverage from test run
+    sed -i "/--cov/d" setup.cfg
+  '';
+
   buildInputs = [ libpcap ];
-  checkInputs = [ dpkt ];
+
+  checkInputs = [
+    dpkt
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [ "tests" ];
+
+  pythonImportsCheck = [ "pcap" ];
 
   meta = with lib; {
     homepage = "https://github.com/pynetwork/pypcap";
diff --git a/nixpkgs/pkgs/development/python-modules/pyplaato/default.nix b/nixpkgs/pkgs/development/python-modules/pyplaato/default.nix
new file mode 100644
index 000000000000..d4e91a985ef3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyplaato/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, aiohttp
+, python-dateutil
+}:
+
+buildPythonPackage rec {
+  pname = "pyplaato";
+  version = "0.0.15";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1nykbkv2fg1x5min07cbi44x6am48f5gw3mnyj7x2kpmj6sqfpqp";
+  };
+
+  propagatedBuildInputs = [ aiohttp python-dateutil ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pyplaato" ];
+
+  meta = with lib; {
+    description = "Python API client for fetching Plaato data";
+    homepage = "https://github.com/JohNan/pyplaato";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pypoppler/default.nix b/nixpkgs/pkgs/development/python-modules/pypoppler/default.nix
index 348f91715022..d325c170dc64 100644
--- a/nixpkgs/pkgs/development/python-modules/pypoppler/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pypoppler/default.nix
@@ -17,7 +17,7 @@ buildPythonPackage rec {
   };
 
   NIX_CFLAGS_COMPILE="-I${pkgs.poppler.dev}/include/poppler/";
-  nativeBuildInputs = [ pkgs.pkgconfig ];
+  nativeBuildInputs = [ pkgs.pkg-config ];
   buildInputs = [ pkgs.poppler.dev ];
   propagatedBuildInputs = [ pycairo pygobject2 ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pyppeteer/default.nix b/nixpkgs/pkgs/development/python-modules/pyppeteer/default.nix
index a15f7aadb88c..13f1794aebe0 100644
--- a/nixpkgs/pkgs/development/python-modules/pyppeteer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyppeteer/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyppeteer";
-  version = "0.2.4";
+  version = "0.2.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d1bcc61575ff788249d3bcaee696d856fa1153401a5428cb7376d826dd68dd9b";
+    sha256 = "c2974be1afa13b17f7ecd120d265d8b8cd324d536a231c3953ca872b68aba4af";
   };
 
   # tests want to write to /homeless-shelter
diff --git a/nixpkgs/pkgs/development/python-modules/pypugjs/default.nix b/nixpkgs/pkgs/development/python-modules/pypugjs/default.nix
index 22ac89cf6a90..77ca912db6c9 100644
--- a/nixpkgs/pkgs/development/python-modules/pypugjs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pypugjs/default.nix
@@ -1,13 +1,13 @@
-{ lib, buildPythonPackage, fetchPypi, fetchpatch, six, chardet, nose
+{ lib, buildPythonPackage, fetchPypi, six, chardet, nose
 , django, jinja2, tornado, pyramid, pyramid_mako, Mako }:
 
 buildPythonPackage rec {
   pname = "pypugjs";
-  version = "5.9.8";
+  version = "5.9.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1iy8k56rbslxcylhamdik2bd6gqqirrix55mrdn29zz9gl6vg1xi";
+    sha256 = "0s0a239940z6rsssa13yz6pfkjk4300j35hs7qysyz45f3ixq19j";
   };
 
   propagatedBuildInputs = [ six chardet ];
diff --git a/nixpkgs/pkgs/development/python-modules/pypykatz/default.nix b/nixpkgs/pkgs/development/python-modules/pypykatz/default.nix
index 2e5f19e1d12d..e98e2bc3dbc4 100644
--- a/nixpkgs/pkgs/development/python-modules/pypykatz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pypykatz/default.nix
@@ -1,7 +1,8 @@
 { lib
+, aiosmb
 , aiowinreg
 , buildPythonPackage
-, fetchFromGitHub
+, fetchPypi
 , minidump
 , minikerberos
 , msldap
@@ -10,16 +11,15 @@
 
 buildPythonPackage rec {
   pname = "pypykatz";
-  version = "0.3.15";
+  version = "0.4.7";
 
-  src = fetchFromGitHub {
-    owner = "skelsec";
-    repo = pname;
-    rev = version;
-    sha256 = "0bx2jdcfr1pdy3jgzg8fr5id9ffl2m1nc81dqhcplxdj8p214yri";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0il5sj47wyf9gn76alm8v1l63rqw2vsd27v6f7q1dpn0wq209syi";
   };
 
   propagatedBuildInputs = [
+    aiosmb
     aiowinreg
     minikerberos
     msldap
diff --git a/nixpkgs/pkgs/development/python-modules/pyqt/5.x.nix b/nixpkgs/pkgs/development/python-modules/pyqt/5.x.nix
index 26bf5dc1c4b8..6e4b4d37f289 100644
--- a/nixpkgs/pkgs/development/python-modules/pyqt/5.x.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyqt/5.x.nix
@@ -57,6 +57,8 @@ in buildPythonPackage rec {
 
   outputs = [ "out" "dev" ];
 
+  dontWrapQtApps = true;
+
   nativeBuildInputs = [
     pkg-config
     qmake
diff --git a/nixpkgs/pkgs/development/python-modules/pyqtgraph/default.nix b/nixpkgs/pkgs/development/python-modules/pyqtgraph/default.nix
index f43bfb9aaa6e..fbc4853ab610 100644
--- a/nixpkgs/pkgs/development/python-modules/pyqtgraph/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyqtgraph/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "pyqtgraph";
-  version = "0.11.0";
+  version = "0.11.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0p5k73wjfh0zzjvby8b5107cx7x0c2rdj66zh1nc8y95i0anf2na";
+    sha256 = "7d1417f36b5b92d1365671633a91711513e5afbcc82f32475d0690317607714e";
   };
 
   propagatedBuildInputs = [ numpy pyopengl pyqt5 scipy ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyqtwebengine/default.nix b/nixpkgs/pkgs/development/python-modules/pyqtwebengine/default.nix
index 42019e5a0022..ce25bc04a136 100644
--- a/nixpkgs/pkgs/development/python-modules/pyqtwebengine/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyqtwebengine/default.nix
@@ -14,12 +14,12 @@ let
 
 in buildPythonPackage rec {
   pname = "PyQtWebEngine";
-  version = "5.15.2";
+  version = "5.15.4";
   format = "other";
 
   src = pythonPackages.fetchPypi {
     inherit pname version;
-    sha256 = "0d56ak71r14w4f9r96vaj34qcn2rbln3s6ildvvyc707fjkzwwjd";
+    sha256 = "06fc35hzg346a9c86dk7vzm1fakkgzn5l52jfq3bix3587sjip6f";
   };
 
   inherit patches;
@@ -45,6 +45,8 @@ in buildPythonPackage rec {
   propagatedBuildInputs = [ pyqt5 ]
     ++ lib.optional (!isPy3k) enum34;
 
+  dontWrapQtApps = true;
+
   configurePhase = ''
     runHook preConfigure
 
diff --git a/nixpkgs/pkgs/development/python-modules/pyquery/default.nix b/nixpkgs/pkgs/development/python-modules/pyquery/default.nix
index 2bb2eb1c6fcc..40139c795677 100644
--- a/nixpkgs/pkgs/development/python-modules/pyquery/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyquery/default.nix
@@ -1,14 +1,15 @@
 { lib
 , buildPythonPackage
-, fetchPypi
 , cssselect
+, fetchPypi
 , lxml
-, webob
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "pyquery";
-  version = "1.2.9";
+  version = "1.4.3";
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
@@ -16,15 +17,19 @@ buildPythonPackage rec {
     sha256 = "00p6f1dfma65192hc72dxd506491lsq3g5wgxqafi1xpg2w1xia6";
   };
 
-  propagatedBuildInputs = [ cssselect lxml webob ];
+  propagatedBuildInputs = [
+    cssselect
+    lxml
+  ];
 
   # circular dependency on webtest
   doCheck = false;
+  pythonImportsCheck = [ "pyquery" ];
 
   meta = with lib; {
+    description = "A jquery-like library for Python";
     homepage = "https://github.com/gawel/pyquery";
-    description = "A jquery-like library for python";
+    changelog = "https://github.com/gawel/pyquery/blob/${version}/CHANGES.rst";
     license = licenses.bsd0;
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyradios/default.nix b/nixpkgs/pkgs/development/python-modules/pyradios/default.nix
new file mode 100644
index 000000000000..f95988063dd2
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyradios/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi, appdirs, requests }:
+buildPythonPackage rec {
+  pname = "pyradios";
+  version = "0.0.22";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1bgfb8vz7jybswss16pdzns0qpqfrwa9f2g8qrh1r4mig4xh2dmi";
+  };
+
+  propagatedBuildInputs = [
+    appdirs
+    requests
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python client for the https://api.radio-browser.info";
+    homepage = "https://github.com/andreztz/pyradios";
+    license = licenses.mit;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid/default.nix
index 44ac5a9221ad..a26eff37ef21 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid/default.nix
@@ -33,6 +33,8 @@ buildPythonPackage rec {
   # https://github.com/Pylons/pyramid/issues/1899
   doCheck = !isPy35;
 
+  pythonImportsCheck = [ "pyramid" ];
+
   meta = with lib; {
     description = "The Pyramid Web Framework, a Pylons project";
     homepage = "https://trypyramid.com/";
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_beaker/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_beaker/default.nix
index 5c4e7c104bf0..9a529214c2e8 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_beaker/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_beaker/default.nix
@@ -19,6 +19,10 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ beaker pyramid ];
 
   meta = with lib; {
+    description = "Beaker session factory backend for Pyramid";
+    homepage = "https://docs.pylonsproject.org/projects/pyramid_beaker/en/latest/";
+    # idk, see https://github.com/Pylons/pyramid_beaker/blob/master/LICENSE.txt
+    # license = licenses.mpl20;
     maintainers = with maintainers; [ domenkozar ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_chameleon/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_chameleon/default.nix
index d3388fdff359..377317049dc8 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_chameleon/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_chameleon/default.nix
@@ -23,11 +23,12 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ chameleon pyramid zope_interface setuptools ];
 
+  pythonImportsCheck = [ "pyramid_chameleon" ];
+
   meta = with lib; {
     description = "Chameleon template compiler for pyramid";
     homepage = "https://github.com/Pylons/pyramid_chameleon";
     license = licenses.bsd0;
     maintainers = with maintainers; [ domenkozar ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_exclog/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_exclog/default.nix
index 55da77f49644..96570fce884f 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_exclog/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_exclog/default.nix
@@ -15,6 +15,8 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ pyramid ];
 
+  pythonImportsCheck = [ "pyramid_exclog" ];
+
   meta = with lib; {
     description = "A package which logs to a Python logger when an exception is raised by a Pyramid application";
     homepage = "https://docs.pylonsproject.org/";
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_hawkauth/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_hawkauth/default.nix
index f2f156e98b67..c2e17f8addef 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_hawkauth/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_hawkauth/default.nix
@@ -21,10 +21,12 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ pyramid hawkauthlib tokenlib ];
   buildInputs = [ webtest ];
 
+  pythonImportsCheck = [ "pyramid_hawkauth" ];
+
   meta = with lib; {
     homepage = "https://github.com/mozilla-services/pyramid_hawkauth";
     description = "A Pyramid authentication plugin for HAWK";
     license = licenses.mpl20;
+    maintainers = with maintainers; [ ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_jinja2/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_jinja2/default.nix
index 464d8d209bfb..d1eaf49e6bc2 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_jinja2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_jinja2/default.nix
@@ -18,11 +18,12 @@ buildPythonPackage rec {
   buildInputs = [ webtest ];
   propagatedBuildInputs = [ jinja2 pyramid ];
 
+  pythonImportsCheck = [ "pyramid_jinja2" ];
+
   meta = with lib; {
     description = "Jinja2 template bindings for the Pyramid web framework";
     homepage = "https://github.com/Pylons/pyramid_jinja2";
     license = licenses.bsd0;
     maintainers = with maintainers; [ domenkozar ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_mako/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_mako/default.nix
index 2f8c5e1e0753..47aa1deb5e26 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_mako/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_mako/default.nix
@@ -22,6 +22,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/Pylons/pyramid_mako";
     description = "Mako template bindings for the Pyramid web framework";
     license = licenses.bsd0;
+    maintainers = with maintainers; [];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyramid_multiauth/default.nix b/nixpkgs/pkgs/development/python-modules/pyramid_multiauth/default.nix
index 545883a25c1a..859d4c3b4339 100644
--- a/nixpkgs/pkgs/development/python-modules/pyramid_multiauth/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyramid_multiauth/default.nix
@@ -19,6 +19,6 @@ buildPythonPackage rec {
     description = "Authentication policy for Pyramid that proxies to a stack of other authentication policies";
     homepage = "https://github.com/mozilla-services/pyramid_multiauth";
     license = licenses.mpl20;
+    maintainers = with maintainers; [];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyregion/default.nix b/nixpkgs/pkgs/development/python-modules/pyregion/default.nix
index 86a5ef6bfe0f..6d33e18e4f91 100644
--- a/nixpkgs/pkgs/development/python-modules/pyregion/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyregion/default.nix
@@ -1,13 +1,13 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , fetchpatch
 , pyparsing
 , numpy
 , cython
 , astropy
 , astropy-helpers
-, pytest
+, pytestCheckHook
 , pytest-astropy
 }:
 
@@ -15,15 +15,18 @@ buildPythonPackage rec {
   pname = "pyregion";
   version = "2.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "a8ac5f764b53ec332f6bc43f6f2193ca13e8b7d5a3fb2e20ced6b2ea42a9d094";
+  # pypi src contains cython-produced .c files which don't compile
+  # with python3.9
+  src = fetchFromGitHub {
+    owner = "astropy";
+    repo = pname;
+    rev = version;
+    sha256 = "1izar7z606czcyws9s8bjbpb1xhqshpv5009rlpc92hciw7jv4kg";
   };
 
   propagatedBuildInputs = [
     pyparsing
     numpy
-    cython
     astropy
   ];
 
@@ -36,9 +39,9 @@ buildPythonPackage rec {
     })
   ];
 
-  nativeBuildInputs = [ astropy-helpers ];
+  nativeBuildInputs = [ astropy-helpers cython ];
 
-  checkInputs = [ pytest pytest-astropy ];
+  checkInputs = [ pytestCheckHook pytest-astropy ];
 
   # Disable automatic update of the astropy-helper module
   postPatch = ''
@@ -46,9 +49,11 @@ buildPythonPackage rec {
   '';
 
   # Tests must be run in the build directory
-  checkPhase = ''
-    cd build/lib.*
-    pytest
+  preCheck = ''
+    pushd build/lib.*
+  '';
+  postCheck = ''
+    popd
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/pyrisco/default.nix b/nixpkgs/pkgs/development/python-modules/pyrisco/default.nix
new file mode 100644
index 000000000000..b9df9d36d41d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyrisco/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pyrisco";
+  version = "0.3.1";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "OnFreund";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1im29h4rxnp98aqzgzjj5i8jv2h5zw9c5yx8xxzl4cmr3yila9zw";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pyrisco" ];
+
+  meta = with lib; {
+    description = "Python interface to Risco alarm systems through Risco Cloud";
+    homepage = "https://github.com/OnFreund/pyrisco";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyrituals/default.nix b/nixpkgs/pkgs/development/python-modules/pyrituals/default.nix
new file mode 100644
index 000000000000..84bf62ff6d3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyrituals/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pyrituals";
+  version = "0.0.2";
+  format = "pyproject";
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "milanmeu";
+    repo = pname;
+    rev = version;
+    sha256 = "0hrwhk3kpvdg78fgnvhmnnh3wprdv10j8jqjm4ly64chr8cdi6f2";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pyrituals" ];
+
+  meta = with lib; {
+    description = "Python wrapper for the Rituals Perfume Genie API";
+    homepage = "https://github.com/milanmeu/pyrituals";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyro-ppl/default.nix b/nixpkgs/pkgs/development/python-modules/pyro-ppl/default.nix
index 54c2155a51b5..1d5608ec777a 100644
--- a/nixpkgs/pkgs/development/python-modules/pyro-ppl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyro-ppl/default.nix
@@ -2,12 +2,12 @@
 , graphviz, networkx, six, opt-einsum, tqdm, pyro-api }:
 
 buildPythonPackage rec {
-  version = "1.5.1";
+  version = "1.5.2";
   pname = "pyro-ppl";
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "00mprgf8pf9jq3kanxjldj00cg3nbfkb5yg0mdfbdi0b1rx3vnsa";
+    sha256 = "8a93af3a007ac507a8b50fd1165dbb355182d17df29d3b5bc498b02b479fdb27";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pyroma/default.nix b/nixpkgs/pkgs/development/python-modules/pyroma/default.nix
index bddf2413970c..9fee5ec56c0e 100644
--- a/nixpkgs/pkgs/development/python-modules/pyroma/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyroma/default.nix
@@ -4,13 +4,18 @@
 
 buildPythonPackage rec {
   pname = "pyroma";
-  version = "2.6";
+  version = "2.6.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "00j1j81kiipi5yppmk385cbfccf2ih0xyapl7pw6nqhrf8vh1764";
+    sha256 = "2527423e3a24ccd56951f3ce1b0ebbcc4fa0518c82fca882e696c78726ab9c2f";
   };
 
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "pygments < 2.6" "pygments"
+  '';
+
   propagatedBuildInputs = [ docutils pygments setuptools ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/pysam/default.nix b/nixpkgs/pkgs/development/python-modules/pysam/default.nix
index 2f40a2973332..31e01e83dbf6 100644
--- a/nixpkgs/pkgs/development/python-modules/pysam/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pysam/default.nix
@@ -7,7 +7,7 @@
 , cython
 , htslib
 , libdeflate
-, lzma
+, xz
 , pytest
 , samtools
 , zlib
@@ -33,7 +33,7 @@ buildPythonPackage rec {
     curl
     cython
     libdeflate
-    lzma
+    xz
     zlib
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pyscss/default.nix b/nixpkgs/pkgs/development/python-modules/pyscss/default.nix
index e4e7791fa79a..bbf4ee712c6a 100644
--- a/nixpkgs/pkgs/development/python-modules/pyscss/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyscss/default.nix
@@ -26,6 +26,9 @@ buildPythonPackage rec {
     ++ (lib.optionals (pythonOlder "3.4") [ enum34 pathlib ])
     ++ (lib.optionals (pythonOlder "2.7") [ ordereddict ]);
 
+  # Test suite is broken.
+  # See https://github.com/Kronuz/pyScss/issues/415
+  doCheck = false;
   checkPhase = ''
     py.test
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/pyserial/001-rfc2217-only-negotiate-on-value-change.patch b/nixpkgs/pkgs/development/python-modules/pyserial/001-rfc2217-only-negotiate-on-value-change.patch
new file mode 100644
index 000000000000..6bd40bd935d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyserial/001-rfc2217-only-negotiate-on-value-change.patch
@@ -0,0 +1,42 @@
+From c8b35f4b871d00e3020f525425517548bed9f6ad Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
+Date: Sun, 9 Sep 2018 20:13:27 +0200
+Subject: [PATCH] serial/rfc2217: only subnegotiate on value change
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This was suggested and is a direct copy of Uwe Kleine König's patch
+from [1].
+
+[1]: https://github.com/pyserial/pyserial/issues/376#issuecomment-418885211
+Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+---
+ serial/rfc2217.py | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/serial/rfc2217.py b/serial/rfc2217.py
+index d962c1e8..2148512d 100644
+--- a/serial/rfc2217.py
++++ b/serial/rfc2217.py
+@@ -330,11 +330,15 @@ def set(self, value):
+         the client needs to know if the change is performed he has to check the
+         state of this object.
+         """
+-        self.value = value
+-        self.state = REQUESTED
+-        self.connection.rfc2217_send_subnegotiation(self.option, self.value)
+-        if self.connection.logger:
+-            self.connection.logger.debug("SB Requesting {} -> {!r}".format(self.name, self.value))
++        if value != self.value:
++            self.value = value
++            self.state = REQUESTED
++            self.connection.rfc2217_send_subnegotiation(self.option, self.value)
++            if self.connection.logger:
++                self.connection.logger.debug("SB Requesting {} -> {!r}".format(self.name, self.value))
++        else:
++            if self.connection.logger:
++                self.connection.logger.debug("SB Requesting {} -> {!r} (skipped)".format(self.name, self.value))
+
+     def is_ready(self):
+         """\
diff --git a/nixpkgs/pkgs/development/python-modules/pyserial/002-rfc2217-timeout-setter-for-rfc2217.patch b/nixpkgs/pkgs/development/python-modules/pyserial/002-rfc2217-timeout-setter-for-rfc2217.patch
new file mode 100644
index 000000000000..39410dee1640
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyserial/002-rfc2217-timeout-setter-for-rfc2217.patch
@@ -0,0 +1,42 @@
+From a3698dc952fce0d07628133e987b7b43ed6e1157 Mon Sep 17 00:00:00 2001
+From: Rouven Czerwinski <rouven@czerwinskis.de>
+Date: Sun, 9 Sep 2018 20:08:40 +0200
+Subject: [PATCH] serial/rfc2217: add timeout.setter for rfc2217
+
+Add a new setter method for the timeout property which does not invoke
+the port reconfiguration.
+This is a direct copy of the SerialBase timeout property without the port
+reconfiguration.
+
+Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+---
+ serial/rfc2217.py | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/serial/rfc2217.py b/serial/rfc2217.py
+index d962c1e8..12615cf3 100644
+--- a/serial/rfc2217.py
++++ b/serial/rfc2217.py
+@@ -722,5 +722,22 @@ def cd(self):
+             raise portNotOpenError
+         return bool(self.get_modem_state() & MODEMSTATE_MASK_CD)
+
++    @property
++    def timeout(self):
++        """Get the current timeout setting."""
++        return self._timeout
++
++    @timeout.setter
++    def timeout(self, timeout):
++        """Change timeout setting."""
++        if timeout is not None:
++            try:
++                timeout + 1     # test if it's a number, will throw a TypeError if not...
++            except TypeError:
++                raise ValueError("Not a valid timeout: {!r}".format(timeout))
++            if timeout < 0:
++                raise ValueError("Not a valid timeout: {!r}".format(timeout))
++        self._timeout = timeout
++
+     # - - - platform specific - - -
+     # None so far
diff --git a/nixpkgs/pkgs/development/python-modules/pyserial/default.nix b/nixpkgs/pkgs/development/python-modules/pyserial/default.nix
index 239568f64b76..b45b031fb84a 100644
--- a/nixpkgs/pkgs/development/python-modules/pyserial/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyserial/default.nix
@@ -9,6 +9,11 @@ buildPythonPackage rec {
     sha256 = "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw";
   };
 
+  patches = [
+    ./001-rfc2217-only-negotiate-on-value-change.patch
+    ./002-rfc2217-timeout-setter-for-rfc2217.patch
+  ];
+
   checkPhase = "python -m unittest discover -s test";
   doCheck = !stdenv.hostPlatform.isDarwin; # broken on darwin
 
diff --git a/nixpkgs/pkgs/development/python-modules/pyshark/default.nix b/nixpkgs/pkgs/development/python-modules/pyshark/default.nix
index 206e3671f47f..1bb91953983f 100644
--- a/nixpkgs/pkgs/development/python-modules/pyshark/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyshark/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "pyshark";
-  version = "0.4.2.11";
+  version = "0.4.3";
 
   src = fetchFromGitHub {
     owner = "KimiNewt";
     repo = pname;
     rev = "v${version}";
-    sha256 = "07dkhkf85cplcj1h3k8mmqzsn4zdkxzr0zg3gvf8yc8p5g5azx9q";
+    sha256 = "sha256-cveiFkkSplfQPgUEVWyV40KKHCtKJZsfvdV8JmEUmE4=";
   };
 
   propagatedBuildInputs = [
@@ -29,6 +29,8 @@ buildPythonPackage rec {
     wireshark-cli
   ];
 
+  pythonImportsCheck = [ "pyshark" ];
+
   meta = with lib; {
     description = "Python wrapper for tshark, allowing python packet parsing using wireshark dissectors";
     homepage = "https://github.com/KimiNewt/pyshark/";
diff --git a/nixpkgs/pkgs/development/python-modules/pyshp/default.nix b/nixpkgs/pkgs/development/python-modules/pyshp/default.nix
index 7f494e98ad22..3cb56247b553 100644
--- a/nixpkgs/pkgs/development/python-modules/pyshp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyshp/default.nix
@@ -2,12 +2,12 @@
 , setuptools }:
 
 buildPythonPackage rec {
-  version = "2.1.2";
+  version = "2.1.3";
   pname = "pyshp";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a0aa668cd0fc09b873f10facfe96971c0496b7fe4f795684d96cc7306ac5841c";
+    sha256 = "e32b4a6832a3b97986df442df63b4c4a7dcc846b326c903189530a5cc6df0260";
   };
 
   buildInputs = [ setuptools ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyside/default.nix b/nixpkgs/pkgs/development/python-modules/pyside/default.nix
index 08fd8cbfa862..f880791eeec0 100644
--- a/nixpkgs/pkgs/development/python-modules/pyside/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyside/default.nix
@@ -23,6 +23,8 @@ buildPythonPackage rec {
 
   makeFlags = [ "QT_PLUGIN_PATH=${pysideShiboken}/lib/generatorrunner" ];
 
+  dontWrapQtApps = true;
+
   meta = {
     description = "LGPL-licensed Python bindings for the Qt cross-platform application and UI framework";
     license = lib.licenses.lgpl21;
diff --git a/nixpkgs/pkgs/development/python-modules/pyside/shiboken.nix b/nixpkgs/pkgs/development/python-modules/pyside/shiboken.nix
index 2690422932f2..21c79c6e9e1c 100644
--- a/nixpkgs/pkgs/development/python-modules/pyside/shiboken.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyside/shiboken.nix
@@ -18,7 +18,6 @@ buildPythonPackage rec {
   pname = "pyside-shiboken";
   version = "1.2.4";
   format = "other";
-  disabled = !isPy3k;
 
   src = fetchFromGitHub {
     owner = "PySide";
@@ -49,11 +48,11 @@ buildPythonPackage rec {
     "-DPYTHON3_LIBRARY=${lib.getLib python}/lib"
   ];
 
-  meta = {
+  meta = with lib; {
     description = "Plugin (front-end) for pyside-generatorrunner, that generates bindings for C++ libraries using CPython source code";
-    license = lib.licenses.gpl2;
-    homepage = "http://www.pyside.org/docs/shiboken/";
+    license = licenses.gpl2;
+    homepage = "http://www.pyside.org/";
     maintainers = [ ];
-    platforms = lib.platforms.all;
+    platforms = platforms.all;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyside2-tools/default.nix b/nixpkgs/pkgs/development/python-modules/pyside2-tools/default.nix
index 095a10c1047d..20f1a572f1b4 100644
--- a/nixpkgs/pkgs/development/python-modules/pyside2-tools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyside2-tools/default.nix
@@ -25,6 +25,8 @@ stdenv.mkDerivation {
     "-DBUILD_TESTS=OFF"
   ];
 
+  dontWrapQtApps = true;
+
   # The upstream build system consists of a `setup.py` whichs builds three
   # different python libraries and calls cmake as a subprocess.  We call cmake
   # directly because that's easier to get working.  However, the `setup.py`
diff --git a/nixpkgs/pkgs/development/python-modules/pyside2/default.nix b/nixpkgs/pkgs/development/python-modules/pyside2/default.nix
index 6986c8e5384b..c2786b647d62 100644
--- a/nixpkgs/pkgs/development/python-modules/pyside2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyside2/default.nix
@@ -30,6 +30,8 @@ stdenv.mkDerivation rec {
   ];
   propagatedBuildInputs = [ shiboken2 ];
 
+  dontWrapQtApps = true;
+
   meta = with lib; {
     description = "LGPL-licensed Python bindings for Qt";
     license = licenses.lgpl21;
diff --git a/nixpkgs/pkgs/development/python-modules/pysma/default.nix b/nixpkgs/pkgs/development/python-modules/pysma/default.nix
index f1005fe0b7a9..5cc86e909f00 100644
--- a/nixpkgs/pkgs/development/python-modules/pysma/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pysma/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "pysma";
-  version = "0.3.5";
+  version = "0.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1awcsbk14i2aw01f7b7hrmpn9q6vr9v6la0i9n7ldv1h8rzq6j16";
+    sha256 = "sha256-BOVALVFb/p2q3A4NkvgtwmL5fNvwMCk0hb1L5MRWzHY=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pysmappee/default.nix b/nixpkgs/pkgs/development/python-modules/pysmappee/default.nix
new file mode 100644
index 000000000000..a3517ea87ec0
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pysmappee/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, cachetools
+, paho-mqtt
+, pytz
+, requests
+, requests_oauthlib
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pysmappee";
+  version = "0.2.23";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "smappee";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-vxCZzkngYnc+hD3gT1x7qAQTFjpmmgRU5F6cusNDNgk=";
+  };
+
+  propagatedBuildInputs = [
+    cachetools
+    paho-mqtt
+    pytz
+    requests
+    requests_oauthlib
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pysmappee" ];
+
+  meta = with lib; {
+    description = "Python Library for the Smappee dev API";
+    homepage = "https://github.com/smappee/pysmappee";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pysmbc/default.nix b/nixpkgs/pkgs/development/python-modules/pysmbc/default.nix
index bea1438f6794..93aa6606c7d5 100644
--- a/nixpkgs/pkgs/development/python-modules/pysmbc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pysmbc/default.nix
@@ -1,23 +1,31 @@
-{ lib, buildPythonPackage, fetchPypi
-, samba, pkg-config
-, setuptools }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, samba
+, pkg-config
+}:
 
 buildPythonPackage rec {
-  version = "1.0.21";
   pname = "pysmbc";
+  version = "1.0.23";
 
   src = fetchPypi {
     inherit pname version;
-    extension = "tar.bz2";
-    sha256 = "14b75f358ical7zzqh3g1qkh2dxwxn2gz7sah5f5svndqkd3z8jy";
+    sha256 = "1y0n1n6jkzf4mr5lqfc73l2m0qp56gvxwfjnx2vj8c0hh5i1gnq8";
   };
 
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ setuptools samba ];
+
+  buildInputs = [ samba ];
+
+  # Tests would require a local SMB server
+  doCheck = false;
+  pythonImportsCheck = [ "smbc" ];
 
   meta = with lib; {
     description = "libsmbclient binding for Python";
     homepage = "https://github.com/hamano/pysmbc";
-    license = licenses.gpl2Plus;
+    license = with licenses; [ gpl2Plus ];
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pysonos/default.nix b/nixpkgs/pkgs/development/python-modules/pysonos/default.nix
index fdf350bd377c..704f3c44c4ed 100644
--- a/nixpkgs/pkgs/development/python-modules/pysonos/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pysonos/default.nix
@@ -3,12 +3,12 @@
 , fetchFromGitHub
 , isPy3k
 , xmltodict
-, requests
 , ifaddr
+, requests
 
-# Test dependencies
-, pytest, pylint, flake8, graphviz
-, mock, sphinx, sphinx_rtd_theme
+  # Test dependencies
+, pytestCheckHook
+, mock
 , requests-mock
 }:
 
@@ -26,17 +26,17 @@ buildPythonPackage rec {
     sha256 = "0a0c7jwv39nbvpdcx32sd8kjmj4nyrd7k0yxhpmxdnx4zr4vvzqg";
   };
 
-  propagatedBuildInputs = [ xmltodict requests ifaddr ];
+  propagatedBuildInputs = [ ifaddr requests xmltodict ];
 
   checkInputs = [
-    pytest pylint flake8 graphviz
-    mock sphinx sphinx_rtd_theme
+    pytestCheckHook
+    mock
     requests-mock
   ];
 
-  checkPhase = ''
-    pytest --deselect=tests/test_discovery.py::TestDiscover::test_discover
-  '';
+  disabledTests = [
+    "test_desc_from_uri" # test requires network access
+  ];
 
   meta = {
     homepage = "https://github.com/amelchio/pysonos";
diff --git a/nixpkgs/pkgs/development/python-modules/pyspark/default.nix b/nixpkgs/pkgs/development/python-modules/pyspark/default.nix
index f8a7c09b4071..2d09a0a0c3b0 100644
--- a/nixpkgs/pkgs/development/python-modules/pyspark/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyspark/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyspark";
-  version = "3.0.1";
+  version = "3.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "38b485d3634a86c9a2923c39c8f08f003fdd0e0a3d7f07114b2fb4392ce60479";
+    sha256 = "d4f2ced43394ad773f7b516a4bbcb5821a940462a17b1a25f175c83771b62ebc";
   };
 
   # pypandoc is broken with pandoc2, so we just lose docs.
diff --git a/nixpkgs/pkgs/development/python-modules/pystray/default.nix b/nixpkgs/pkgs/development/python-modules/pystray/default.nix
index 6b4bdb59f1ef..c0ae2be9e7b3 100644
--- a/nixpkgs/pkgs/development/python-modules/pystray/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pystray/default.nix
@@ -3,17 +3,17 @@
 
 buildPythonPackage rec {
   pname = "pystray";
-  version = "0.16.0";
+  version = "0.17.3";
 
   src = fetchFromGitHub {
     owner = "moses-palmer";
     repo = "pystray";
     rev = "v${version}";
-    sha256 = "0q5yqfm5mzffx9vnp9xcnclgjzgs0b7f50i9xmxn1m1iha1zawh1";
+    sha256 = "sha256-da2ZkehyXrxW5LdMR3K5AEQhiCpx8ygn6eswTC8fsRo=";
   };
 
-  propagatedBuildInputs = [ pillow xlib six ];
   nativeBuildInputs = [ sphinx ];
+  propagatedBuildInputs = [ pillow xlib six ];
   checkInputs = [ xvfb_run ];
 
   checkPhase = ''
@@ -25,7 +25,7 @@ buildPythonPackage rec {
   meta = with lib; {
     homepage = "https://github.com/moses-palmer/pystray";
     description = "This library allows you to create a system tray icon";
-    license = licenses.lgpl3;
+    license = with licenses; [ gpl3Only lgpl3Only ];
     platforms = platforms.linux;
     maintainers = with maintainers; [ jojosch ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/pysvn/default.nix b/nixpkgs/pkgs/development/python-modules/pysvn/default.nix
index 9e9948607093..37e3490a54c7 100644
--- a/nixpkgs/pkgs/development/python-modules/pysvn/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pysvn/default.nix
@@ -23,7 +23,7 @@ buildPythonPackage rec {
   format = "other";
 
   src = fetchurl {
-    url = "http://pysvn.barrys-emacs.org/source_kits/${pname}-${version}.tar.gz";
+    url = "https://pysvn.barrys-emacs.org/source_kits/${pname}-${version}.tar.gz";
     sha256 = "sRPa4wNyjDmGdF1gTOgLS0pnrdyZwkkH4/9UCdh/R9Q=";
   };
 
@@ -79,5 +79,7 @@ buildPythonPackage rec {
     description = "Python bindings for Subversion";
     homepage = "http://pysvn.tigris.org/";
     license = licenses.asl20;
+    # g++: command not found
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyswitchbot/default.nix b/nixpkgs/pkgs/development/python-modules/pyswitchbot/default.nix
new file mode 100644
index 000000000000..69bf01141824
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyswitchbot/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, bluepy
+, buildPythonPackage
+, fetchFromGitHub
+}:
+
+buildPythonPackage rec {
+  pname = "pyswitchbot";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "Danielhiversen";
+    repo = "pySwitchbot";
+    rev = version;
+    sha256 = "16p11fmyms4q93m3rna76nkp2la9m8lmfmaflbvga666vljwfw6v";
+  };
+
+  propagatedBuildInputs = [ bluepy ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "switchbot" ];
+
+  meta = with lib; {
+    description = "Python library to control Switchbot IoT devices";
+    homepage = "https://github.com/Danielhiversen/pySwitchbot";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytankerkoenig/default.nix b/nixpkgs/pkgs/development/python-modules/pytankerkoenig/default.nix
new file mode 100644
index 000000000000..0a6403107ab8
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytankerkoenig/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "pytankerkoenig";
+  version = "0.0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "021fg1a4n3527fz86zxfbsi0jrk0dnai1y92q6hwh5za68lrs710";
+  };
+
+  # Tests require an API key and network access
+  doCheck = false;
+  pythonImportsCheck = [ "pytankerkoenig" ];
+
+  meta = with lib; {
+    description = "Python module to get fuel data from tankerkoenig.de";
+    homepage = "https://github.com/ultrara1n/pytankerkoenig";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyte/default.nix b/nixpkgs/pkgs/development/python-modules/pyte/default.nix
index e930f1d5717f..b907db22386c 100644
--- a/nixpkgs/pkgs/development/python-modules/pyte/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyte/default.nix
@@ -1,21 +1,23 @@
-{ lib, buildPythonPackage, fetchPypi, pytest, pytestrunner, wcwidth }:
+{ lib, buildPythonPackage, fetchPypi, pytestCheckHook, pytest-runner, wcwidth }:
 
 buildPythonPackage rec {
   pname = "pyte";
   version = "0.8.0";
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "7e71d03e972d6f262cbe8704ff70039855f05ee6f7ad9d7129df9c977b5a88c5";
   };
 
+  nativeBuildInputs = [ pytest-runner ];
+
   propagatedBuildInputs = [ wcwidth ];
 
-  checkInputs = [ pytest pytestrunner ];
+  checkInputs = [ pytestCheckHook ];
 
-  # tries to write to os.path.dirname(__file__) in test_input_output
-  checkPhase = ''
-    py.test -k "not test_input_output"
-  '';
+  disabledTests = [
+    "test_input_output"
+  ];
 
   meta = with lib; {
     description = "Simple VTXXX-compatible linux terminal emulator";
diff --git a/nixpkgs/pkgs/development/python-modules/pytenable/default.nix b/nixpkgs/pkgs/development/python-modules/pytenable/default.nix
new file mode 100644
index 000000000000..39d1116f0bb3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytenable/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, buildPythonPackage
+, defusedxml
+, fetchFromGitHub
+, marshmallow
+, pytest-datafiles
+, pytest-vcr
+, pytestCheckHook
+, python-box
+, python-dateutil
+, requests
+, requests-pkcs12
+, responses
+, restfly
+, semver
+}:
+
+buildPythonPackage rec {
+  pname = "pytenable";
+  version = "1.2.8";
+
+  src = fetchFromGitHub {
+    owner = "tenable";
+    repo = "pyTenable";
+    rev = version;
+    sha256 = "12x0w1c4blm73ixv07w90jkydl7d8dx5l27ih9vc1yv9v2zzb53k";
+  };
+
+  propagatedBuildInputs = [
+    semver
+  ];
+
+  buildInputs = [
+    defusedxml
+    marshmallow
+    python-box
+    python-dateutil
+    requests
+    requests-pkcs12
+    restfly
+  ];
+
+  checkInputs = [
+    responses
+    pytest-datafiles
+    pytest-vcr
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Disable tests that requires a Docker container
+    "test_uploads_docker_push_name_typeerror"
+    "test_uploads_docker_push_tag_typeerror"
+    "test_uploads_docker_push_cs_name_typeerror"
+    "test_uploads_docker_push_cs_tag_typeerror"
+  ];
+
+  pythonImportsCheck = [ "tenable" ];
+
+  meta = with lib; {
+    description = "Python library for the Tenable.io and TenableSC API";
+    homepage = "https://github.com/tenable/pyTenable";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytesseract/default.nix b/nixpkgs/pkgs/development/python-modules/pytesseract/default.nix
index ac3bf6dbf5be..a7af2d1db032 100644
--- a/nixpkgs/pkgs/development/python-modules/pytesseract/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytesseract/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pytesseract";
-  version = "0.3.6";
+  version = "0.3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b79641b7915ff039da22d5591cb2f5ca6cb0ed7c65194c9c750360dc6a1cc87f";
+    sha256 = "4ecfc898d00a70fcc38d2bce729de1597c67e7bc5d2fa26094714c9f5b573645";
   };
 
   patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-aiohttp/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-aiohttp/default.nix
index fad9a70af0ff..4e45477c8caa 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-aiohttp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-aiohttp/default.nix
@@ -9,7 +9,9 @@ buildPythonPackage rec {
     sha256 = "0kx4mbs9bflycd8x9af0idcjhdgnzri3nw1qb0vpfyb3751qaaf9";
   };
 
-  propagatedBuildInputs = [ pytest aiohttp ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ aiohttp ];
 
   # There are no tests
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-ansible/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-ansible/default.nix
index 4ca6bdac6e96..25d5aa30543a 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-ansible/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-ansible/default.nix
@@ -21,10 +21,12 @@ buildPythonPackage rec {
     sed -i "s/'setuptools-markdown'//g" setup.py
   '';
 
+  buildInputs = [ pytest ];
+
   # requires pandoc < 2.0
   # buildInputs = [ setuptools-markdown ];
   checkInputs =  [ mock ];
-  propagatedBuildInputs = [ ansible pytest ];
+  propagatedBuildInputs = [ ansible ];
 
   # tests not included with release, even on github
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-arraydiff/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-arraydiff/default.nix
index 8b1de360f494..5c6f9cf2b852 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-arraydiff/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-arraydiff/default.nix
@@ -16,10 +16,11 @@ buildPythonPackage rec {
     sha256 = "de2d62f53ecc107ed754d70d562adfa7573677a263216a7f19aa332f20dc6c15";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     numpy
     six
-    pytest
   ];
 
   # The tests requires astropy, which itself requires
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-astropy-header/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-astropy-header/default.nix
index 4b40280ed700..963e621986cf 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-astropy-header/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-astropy-header/default.nix
@@ -31,8 +31,7 @@ buildPythonPackage rec {
     })
   ];
 
-
-  propagatedBuildInputs = [
+  buildInputs = [
     pytest
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-astropy/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-astropy/default.nix
index ae3bc04d0b4c..5d5a0de447d2 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-astropy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-astropy/default.nix
@@ -25,9 +25,10 @@ buildPythonPackage rec {
     setuptools_scm
   ];
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     hypothesis
-    pytest
     pytest-astropy-header
     pytest-doctestplus
     pytest-filter-subpackage
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-bdd/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-bdd/default.nix
index 83757c2e1665..e71b3e7350a7 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-bdd/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-bdd/default.nix
@@ -22,7 +22,9 @@ buildPythonPackage rec {
     sha256 = "1yqzz44as4pxffmg4hk9lijvnvlc2chg1maq1fbj5i4k4jpagvjz";
   };
 
-  propagatedBuildInputs = [ glob2 Mako parse parse-type py pytest six ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ glob2 Mako parse parse-type py six ];
 
   # Tests require extra dependencies
   checkInputs = [ execnet mock pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-benchmark/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-benchmark/default.nix
index eedbbc274f4f..b84b42e351db 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-benchmark/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-benchmark/default.nix
@@ -19,7 +19,9 @@ buildPythonPackage rec {
     sha256 = "1hslzzinpwc1zqhbpllqh3sllmiyk69pcycl7ahr0rz3micgwczj";
   };
 
-  propagatedBuildInputs = [ pytest py-cpuinfo ] ++ lib.optionals (pythonOlder "3.4") [ pathlib statistics ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ py-cpuinfo ] ++ lib.optionals (pythonOlder "3.4") [ pathlib statistics ];
 
   meta = {
     description = "Py.test fixture for benchmarking code";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-black/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-black/default.nix
index 6f23c00baf36..629b4292f86e 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-black/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-black/default.nix
@@ -16,7 +16,9 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ setuptools_scm ];
 
-  propagatedBuildInputs = [ black pytest toml ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ black toml ];
 
   # does not contain tests
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-catchlog/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-catchlog/default.nix
index 39c26a3e0f36..58b69c4ce560 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-catchlog/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-catchlog/default.nix
@@ -10,7 +10,8 @@ buildPythonPackage rec {
     extension = "zip";
   };
 
-  buildInputs = [ pytest unzip ];
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ pytest ];
   checkPhase = "make test";
 
   # Requires pytest < 3.1
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-check/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-check/default.nix
index 4c3e9dd96feb..a77295458733 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-check/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-check/default.nix
@@ -15,7 +15,7 @@ buildPythonPackage rec {
     sha256 = "1i01i5ab06ic11na13gcacrlcs2ab6rmaii0yz0x06z5ynnljn6s";
   };
 
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
   checkInputs = [ pytestCheckHook ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-cid/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-cid/default.nix
new file mode 100644
index 000000000000..c1c918c4d60c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytest-cid/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, pythonOlder
+, py-cid
+, pytestCheckHook
+, pytest-cov
+}:
+
+buildPythonPackage rec {
+  pname = "pytest-cid";
+  version = "1.1.1";
+  format = "flit";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "ntninja";
+    repo = pname;
+    rev = "1ff9ec43ac9eaf76352ea7e7a060cd081cb8b68a"; # Version has no git tag
+    sha256 = "sha256-H2RtMGYWukowTTfqZSx+hikxzkqw1v5bA4AfZfiVl8U=";
+  };
+
+  propagatedBuildInputs = [
+    py-cid
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-cov
+  ];
+
+  pythonImportsCheck = [ "pytest_cid" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ntninja/pytest-cid";
+    description = "A simple wrapper around py-cid for easily writing tests involving CIDs in datastructures";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-click/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-click/default.nix
index 0c23a907cbae..887fe7fe7b59 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-click/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-click/default.nix
@@ -19,8 +19,9 @@ buildPythonPackage rec {
     sha256 = "197nvlqlyfrqpy5lrkmfh1ywpr6j9zipxl9d7syg2a2n7jz3a8rj";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     click
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-dependency/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-dependency/default.nix
index 7108a8f4c176..fc6b716397dd 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-dependency/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-dependency/default.nix
@@ -9,7 +9,15 @@ buildPythonPackage rec {
     sha256 = "c2a892906192663f85030a6ab91304e508e546cddfe557d692d61ec57a1d946b";
   };
 
-  propagatedBuildInputs = [ pytest ];
+  patches = [
+    # Fix build with pytest ≥ 6.2.0, https://github.com/RKrahl/pytest-dependency/pull/51
+    (fetchpatch {
+      url = "https://github.com/RKrahl/pytest-dependency/commit/0930889a13e2b9baa7617f05dc9b55abede5209d.patch";
+      sha256 = "0ka892j0rrlnfvk900fcph0f6lsnr9dy06q5k2s2byzwijhdw6n5";
+    })
+  ];
+
+  buildInputs = [ pytest ];
 
   checkInputs = [ pytest ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-doctestplus/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-doctestplus/default.nix
index c9c373a27525..bf8dc9f8dfce 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-doctestplus/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-doctestplus/default.nix
@@ -17,10 +17,11 @@ buildPythonPackage rec {
     sha256 = "fb083925a17ce636f33997c275f61123e63372c1db11fefac1e991ed25a4ca37";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     six
     numpy
-    pytest
   ];
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-error-for-skips/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-error-for-skips/default.nix
new file mode 100644
index 000000000000..60d3f16a1c97
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytest-error-for-skips/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytest
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "pytest-error-for-skips";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "jankatins";
+    repo = pname;
+    rev = version;
+    sha256 = "04i4jd3bg4lgn2jfh0a0dzg3ml9b2bjv2ndia6b64w96r3r4p3qr";
+  };
+
+  buildInputs = [ pytest ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "pytest_error_for_skips" ];
+
+  meta = with lib; {
+    description = "Pytest plugin to treat skipped tests a test failures";
+    homepage = "https://github.com/jankatins/pytest-error-for-skips";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-factoryboy/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-factoryboy/default.nix
index e63b7329c965..39d6bc127e6b 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-factoryboy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-factoryboy/default.nix
@@ -21,10 +21,11 @@ buildPythonPackage rec {
     sha256 = "0v6b4ly0p8nknpnp3f4dbslfsifzzjx2vv27rfylx04kzdhg4m9p";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     factory_boy
     inflection
-    pytest
   ];
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-filter-subpackage/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-filter-subpackage/default.nix
index 6caf4d9c772e..67f759cb59f1 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-filter-subpackage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-filter-subpackage/default.nix
@@ -21,8 +21,9 @@ buildPythonPackage rec {
     setuptools_scm
   ];
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     pytest-doctestplus
     pytestcov
     pytestCheckHook
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-flake8/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-flake8/default.nix
index a5ed447aceac..9486875ff34a 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-flake8/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-flake8/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "pytest-flake8";
-  version = "1.0.6";
+  version = "1.0.7";
 
   # although pytest is a runtime dependency, do not add it as
   # propagatedBuildInputs in order to allow packages depend on another version
@@ -12,7 +12,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1b82bb58c88eb1db40524018d3fcfd0424575029703b4e2d8e3ee873f2b17027";
+    sha256 = "f0259761a903563f33d6f099914afef339c085085e643bee8343eb323b32dd6b";
   };
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-flakes/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-flakes/default.nix
index 805c19751ed1..e016b68837de 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-flakes/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-flakes/default.nix
@@ -15,8 +15,9 @@ buildPythonPackage rec {
     sha256 = "bf070c5485dad82d5b5f5d0eb08d269737e378492d9a68f5223b0a90924c7754";
   };
 
+  buildInputs = [ pytest ];
+  propagatedBuildInputs = [ pyflakes ];
   checkInputs = [ pytest ];
-  propagatedBuildInputs = [ pytest pyflakes ];
 
   # no longer passes
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-flask/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-flask/default.nix
index 7b459b4a294c..e55d98ce46be 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-flask/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-flask/default.nix
@@ -12,8 +12,9 @@ buildPythonPackage rec {
 
   doCheck = false;
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     flask
     werkzeug
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-forked/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-forked/default.nix
index 89200f519e76..0cfb8cd6afc8 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-forked/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-forked/default.nix
@@ -2,7 +2,9 @@
 , buildPythonPackage
 , fetchPypi
 , setuptools_scm
+, py
 , pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -14,19 +16,22 @@ buildPythonPackage rec {
     sha256 = "6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca";
   };
 
-  buildInputs = [ pytest setuptools_scm ];
+  nativeBuildInputs = [ setuptools_scm ];
 
-  # Do not function
-  doCheck = false;
+  buildInputs = [
+    pytest
+  ];
 
-  checkPhase = ''
-    py.test testing
-  '';
+  propagatedBuildInputs = [
+    py
+  ];
+
+  checkInputs = [ pytestCheckHook ];
 
   meta = {
     description = "Run tests in isolated forked subprocesses";
     homepage = "https://github.com/pytest-dev/pytest-forked";
     license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-freezegun/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-freezegun/default.nix
index 424d8fde2326..2fbc7a651c18 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-freezegun/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-freezegun/default.nix
@@ -1,23 +1,31 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, isPy27
+, fetchFromGitHub
 , freezegun
 , pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "pytest-freezegun";
   version = "0.4.2";
 
-  src = fetchPypi {
-    inherit pname version;
-    extension = "zip";
-    sha256 = "19c82d5633751bf3ec92caa481fb5cffaac1787bd485f0df6436fd6242176949";
+  src = fetchFromGitHub {
+    owner = "ktosiek";
+    repo = "pytest-freezegun";
+    rev = version;
+    sha256 = "10c4pbh03b4s1q8cjd75lr0fvyf9id0zmdk29566qqsmaz28npas";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     freezegun
-    pytest
+  ];
+
+  checkInputs = [
+    pytestCheckHook
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-html/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-html/default.nix
index 1b09d6863b97..4df30e3f1936 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-html/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-html/default.nix
@@ -12,7 +12,8 @@ buildPythonPackage rec {
   };
 
   nativeBuildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ pytest pytest-metadata ];
+  buildInputs = [ pytest ];
+  propagatedBuildInputs = [ pytest-metadata ];
 
   meta = with lib; {
     description = "Plugin for generating HTML reports";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-httpx/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-httpx/default.nix
new file mode 100644
index 000000000000..d6f30486f9b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytest-httpx/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, httpx
+, pytest
+, pytest-asyncio
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "pytest-httpx";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "Colin-b";
+    repo = "pytest_httpx";
+    rev = "v${version}";
+    sha256 = "08idd3y6khxjqkn46diqvkjvsl4w4pxhl6z1hspbkrj0pqwf9isi";
+  };
+
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [
+    httpx
+  ];
+
+  checkInputs = [
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pytest_httpx" ];
+
+  meta = with lib; {
+    description = "Send responses to httpx";
+    homepage = "https://github.com/Colin-b/pytest_httpx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-metadata/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-metadata/default.nix
index f7766003be10..1a03ec2f91d2 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-metadata/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-metadata/default.nix
@@ -11,7 +11,7 @@ buildPythonPackage rec {
   };
 
   nativeBuildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
 
   meta = with lib; {
     description = "Plugin for accessing test session metadata";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-mock/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-mock/default.nix
index ad82b389bee8..3e044b4fe596 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-mock/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-mock/default.nix
@@ -1,41 +1,33 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, fetchpatch
-, isPy3k
-, pytest
-, mock
+, pytest-asyncio
+, pytestCheckHook
 , setuptools_scm
 }:
 
 buildPythonPackage rec {
   pname = "pytest-mock";
-  version = "3.3.1";
+  version = "3.5.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a4d6d37329e4a893e77d9ffa89e838dd2b45d5dc099984cf03c703ac8411bb82";
+    sha256 = "1z6r3n78bilfzkbxj083p0ib04ia1bhfgnj2qq9x6q4mmykapqm1";
   };
 
-  propagatedBuildInputs = lib.optional (!isPy3k) mock;
-
-  nativeBuildInputs = [
-   setuptools_scm
-  ];
+  nativeBuildInputs = [ setuptools_scm ];
 
   checkInputs = [
-    pytest
+    pytest-asyncio
+    pytestCheckHook
   ];
 
-  # ignore test which only works with pytest5 output structure
-  checkPhase = ''
-    pytest -k 'not detailed_introspection_async'
-  '';
+  pythonImportsCheck = [ "pytest_mock" ];
 
   meta = with lib; {
-    description = "Thin-wrapper around the mock package for easier use with py.test.";
-    homepage    = "https://github.com/pytest-dev/pytest-mock";
-    license     = licenses.mit;
+    description = "Thin-wrapper around the mock package for easier use with pytest";
+    homepage = "https://github.com/pytest-dev/pytest-mock";
+    license = with licenses; [ mit ];
     maintainers = with maintainers; [ nand0p ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-mypy/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-mypy/default.nix
index 9062284d5dfd..370416c4aa82 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-mypy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-mypy/default.nix
@@ -18,7 +18,9 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ setuptools_scm ];
 
-  propagatedBuildInputs = [ pytest mypy filelock ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ mypy filelock ];
 
   # does not contain tests
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-openfiles/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-openfiles/default.nix
index bb7bdf03d00d..baa5438dfa88 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-openfiles/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-openfiles/default.nix
@@ -20,8 +20,9 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ setuptools_scm ];
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     psutil
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-order/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-order/default.nix
index b07be1178c63..8e10cd4f587a 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-order/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-order/default.nix
@@ -10,14 +10,14 @@
 
 buildPythonPackage rec {
   pname = "pytest-order";
-  version = "0.9.4";
+  version = "0.9.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0b7i8z6rywnkb3skyg8bnfqgkjrwvkn64b4q07wfl1q7x65ksd26";
+    sha256 = "9c9e4f1b060414c642e88ad98ca60f1fd37937debd704bd8f4a2ef8e08b9cb6d";
   };
 
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
 
   checkInputs = [
     pytestCheckHook
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-pylint/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-pylint/default.nix
index e35d2ebc73e9..16a1fb92dd6f 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-pylint/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-pylint/default.nix
@@ -21,8 +21,9 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ pytestrunner ];
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     pylint
     six
     toml
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-pythonpath/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-pythonpath/default.nix
index 4194b7bd0e94..117471aa8df1 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-pythonpath/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-pythonpath/default.nix
@@ -9,7 +9,7 @@ buildPythonPackage rec {
     sha256 = "0qhxh0z2b3p52v3i0za9mrmjnb1nlvvyi2g23rf88b3xrrm59z33";
   };
 
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
   checkInputs = [ pytest ];
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-qt/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-qt/default.nix
index 201da93b0187..c91c3eae4abe 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-qt/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-qt/default.nix
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     setuptools_scm
   ];
 
-  propagatedBuildInputs = [
+  buildInputs = [
     pytest
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-raises/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-raises/default.nix
new file mode 100644
index 000000000000..7891437909ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytest-raises/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "pytest-raises";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "Lemmons";
+    repo = pname;
+    rev = version;
+    sha256 = "0gbb4kml2qv7flp66i73mgb4qihdaybb6c96b5dw3mhydhymcsy2";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pytest_raises" ];
+
+  meta = with lib; {
+    description = "An implementation of pytest.raises as a pytest.mark fixture";
+    homepage = "https://github.com/Lemmons/pytest-raises";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-random-order/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-random-order/default.nix
index d84bb3c9acf9..d95af8651f34 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-random-order/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-random-order/default.nix
@@ -16,7 +16,7 @@ buildPythonPackage rec {
 
   disabled = pythonOlder "3.5";
 
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
 
   meta = with lib; {
     homepage = "https://github.com/jbasko/pytest-random-order";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-remotedata/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-remotedata/default.nix
index 94bc02159bf4..fb91f461329e 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-remotedata/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-remotedata/default.nix
@@ -14,9 +14,10 @@ buildPythonPackage rec {
     sha256 = "e20c58d4b7c359c4975dc3c3d3d67be0905180d2368be0be3ae09b15a136cfc0";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     six
-    pytest
   ];
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-rerunfailures/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-rerunfailures/default.nix
index 1bd91fe70f78..b0b0e2372f41 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-rerunfailures/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-rerunfailures/default.nix
@@ -11,9 +11,9 @@ buildPythonPackage rec {
     sha256 = "1cb11a17fc121b3918414eb5eaf314ee325f2e693ac7cb3f6abf7560790827f2";
   };
 
-  checkInputs = [ mock pytest ];
+  buildInputs = [ pytest ];
 
-  propagatedBuildInputs = [ pytest ];
+  checkInputs = [ mock pytest ];
 
   checkPhase = ''
     py.test test_pytest_rerunfailures.py
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-sanic/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-sanic/default.nix
index 0044a13d2c9a..84330cfd62e5 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-sanic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-sanic/default.nix
@@ -1,28 +1,45 @@
 { lib
-, buildPythonPackage
-, fetchPypi
-, pytest
 , aiohttp
 , async_generator
+, buildPythonPackage
+, doCheck ? true
+, fetchFromGitHub
+, httpx
+, pytest
+, pytestCheckHook
+, sanic
+, websockets
 }:
 
 buildPythonPackage rec {
   pname = "pytest-sanic";
-  version = "1.6.2";
+  version = "1.7.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "6428ed8cc2e6cfa05b92689a8589149aacdc1f0640fcf9673211aa733e6a5209";
+  src = fetchFromGitHub {
+    owner = "yunstanford";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1zpgnw1lqbll59chv4hgcn31mdql1nv4gw9crbihky3ly3d3ncqi";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     aiohttp
     async_generator
+    httpx
+    pytest
+    websockets
   ];
 
-  # circular dependency on sanic
-  doCheck = false;
+  checkInputs = [
+    sanic
+    pytestCheckHook
+  ];
+
+  inherit doCheck;
+
+  pythonImportsCheck = [ "pytest_sanic" ];
 
   meta = with lib; {
     description = "A pytest plugin for Sanic";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-services/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-services/default.nix
index 761fe1d5d54e..7ab175a893c8 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-services/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-services/default.nix
@@ -25,10 +25,11 @@ buildPythonPackage rec {
     toml
   ];
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     requests
     psutil
-    pytest
     zc_lockfile
   ] ++ lib.optional (!isPy3k) subprocess32;
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-shutil/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-shutil/default.nix
index 9d088e44f8d7..0483063c53bc 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-shutil/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-shutil/default.nix
@@ -11,9 +11,9 @@ buildPythonPackage rec {
     sha256 = "0q8j0ayzmnvlraml6i977ybdq4xi096djhf30n2m1rvnvrhm45nq";
   };
 
+  buildInputs = [ pytest ];
   checkInputs = [ cmdline pytest ];
   propagatedBuildInputs = [ pytestcov coverage setuptools-git mock pathpy execnet contextlib2 termcolor ];
-  nativeBuildInputs = [ pytest ];
 
   checkPhase = ''
     py.test ${lib.optionalString isPyPy "-k'not (test_run or test_run_integration)'"}
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-snapshot/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-snapshot/default.nix
index d57c7f66c244..f38f39543201 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-snapshot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-snapshot/default.nix
@@ -11,7 +11,9 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ setuptools-scm ];
 
-  propagatedBuildInputs = [ packaging pytest ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ packaging ];
 
   # pypi does not contain tests and GitHub archive is not supported because setuptools-scm can't detect the version
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-socket/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-socket/default.nix
index dcfa20360146..05f632d39ba3 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-socket/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-socket/default.nix
@@ -15,7 +15,7 @@ buildPythonPackage rec {
     sha256 = "1jbzkyp4xki81h01yl4vg3nrg9b6shsk1ryrmkaslffyhrqnj8zh";
   };
 
-  propagatedBuildInputs = [
+  buildInputs = [
     pytest
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-subtests/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-subtests/default.nix
index 3be2adc11a42..c07832c0b059 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-subtests/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-subtests/default.nix
@@ -1,22 +1,31 @@
-{ lib, buildPythonPackage, isPy27, fetchPypi, setuptools_scm, pytestCheckHook }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, pythonOlder
+, setuptools-scm
+}:
 
 buildPythonPackage rec {
   pname = "pytest-subtests";
-  version = "0.3.2";
-  disabled = isPy27;
+  version = "0.4.0";
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1mxg91mrn8672f8hwg0f31xkyarnq7q0hr4fvb9hcb09jshq2wk7";
+    sha256 = "sha256-jZ4sHR3OEfe30snQkgLr/HdXt/8MrJtyrTKO3+fuA3s=";
   };
 
-  nativeBuildInputs = [ setuptools_scm ];
+  nativeBuildInputs = [ setuptools-scm ];
 
   checkInputs = [ pytestCheckHook ];
 
+  pythonImportsCheck = [ "pytest_subtests" ];
+
   meta = with lib; {
     description = "pytest plugin for unittest subTest() support and subtests fixture";
     homepage = "https://github.com/pytest-dev/pytest-subtests";
     license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-sugar/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-sugar/default.nix
index d1f271ea2bcb..953e56ae0a44 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-sugar/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-sugar/default.nix
@@ -16,9 +16,10 @@ buildPythonPackage rec {
     sha256 = "b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     termcolor
-    pytest
     packaging
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-testmon/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-testmon/default.nix
index b86947f5f758..7d2e07db01fc 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-testmon/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-testmon/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "pytest-testmon";
-  version = "1.0.3";
+  version = "1.1.0";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "927a73dd510b90a2e4a48ea4d37e82c4490b56caa745663262024ea0cd278169";
+    sha256 = "sha256-+IpT0o+Jg2UJcy6d7mEdZsYfW4IXIBu4IqBFbywyPRk=";
   };
 
   propagatedBuildInputs = [ coverage ];
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-timeout/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-timeout/default.nix
index 6bf3483d40f9..8c59b6ee2c9c 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-timeout/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-timeout/default.nix
@@ -16,12 +16,14 @@ buildPythonPackage rec {
     sha256 = "0xnsigs0kmpq1za0d4i522sp3f71x5bgpdh3ski0rs74yqy13cr0";
   };
 
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
 
   checkInputs = [ pytestCheckHook pexpect pytestcov ];
 
   disabledTests = [
     "test_suppresses_timeout_when_pdb_is_entered"
+    # Remove until https://github.com/pytest-dev/pytest/pull/7207 or similar
+    "test_suppresses_timeout_when_debugger_is_entered"
   ];
   pytestFlagsArray = [
     "-ra"
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix
index 658ca7122f4b..bd1ce2a597b1 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-tornado/default.nix
@@ -17,7 +17,9 @@ buildPythonPackage rec {
   # package has no tests
   doCheck = false;
 
-  propagatedBuildInputs = [ pytest tornado ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ tornado ];
 
   meta = with lib; {
     description = "A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications.";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-tornasync/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-tornasync/default.nix
index be1e76d21e4f..f037ab86d5f6 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-tornasync/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-tornasync/default.nix
@@ -15,8 +15,9 @@ buildPythonPackage rec {
     sha256 = "04cg1cfrr55dbi8nljkpcsc103i5c6p0nr46vjr0bnxgkxx03x36";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     tornado
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-trio/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-trio/default.nix
index 7bf05013f214..a9327e2b2320 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-trio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-trio/default.nix
@@ -13,11 +13,12 @@ buildPythonPackage rec {
     sha256 = "0bhh2nknhp14jzsx4zzpqm4qnfaihyi65cjf6kf6qgdhc0ax6nf4";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
     trio
     async_generator
     outcome
-    pytest
   ];
 
   checkInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-twisted/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-twisted/default.nix
index 19e1091c8c76..789af6769415 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-twisted/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-twisted/default.nix
@@ -16,7 +16,9 @@ buildPythonPackage rec {
     sha256 = "cee2320becc5625050ab221b8f38533e636651a24644612f4726891fdf1f1847";
   };
 
-  propagatedBuildInputs = [ greenlet pytest decorator ];
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ greenlet decorator ];
 
   meta = with lib; {
     description = "A twisted plugin for py.test";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-vcr/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-vcr/default.nix
index 9373c597b367..3887261ba5b5 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-vcr/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-vcr/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, pytestCheckHook
 , pytest
 , vcrpy
 }:
@@ -17,8 +16,9 @@ buildPythonPackage rec {
     sha256 = "1i6fin91mklvbi8jzfiswvwf1m91f43smpj36a17xrzk4gisfs6i";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     vcrpy
    ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-warnings/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-warnings/default.nix
index 600ffbfdc7fc..d088bde8b0c9 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-warnings/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-warnings/default.nix
@@ -9,7 +9,7 @@ buildPythonPackage rec {
     sha256 = "5939f76fe04ad18297e53af0c9fb38aca1ec74db807bd40ad72733603adbbc7d";
   };
 
-  propagatedBuildInputs = [ pytest ];
+  buildInputs = [ pytest ];
 
   meta = {
     description = "Plugin to list Python warnings in pytest report";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-watch/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-watch/default.nix
index 12b06c2e1b63..077b3eca6bfa 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-watch/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-watch/default.nix
@@ -16,10 +16,13 @@ buildPythonPackage rec {
     sha256 = "06136f03d5b361718b8d0d234042f7b2f203910d8568f63df2f866b547b3d4b9";
   };
 
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ colorama docopt watchdog ];
+
   # No Tests
   doCheck = false;
-
-  propagatedBuildInputs = [ pytest colorama docopt watchdog ];
+  pythonImportsCheck = [ "pytest_watch" ];
 
   meta = with lib; {
     homepage = "https://github.com/joeyespo/pytest-watch";
@@ -28,4 +31,3 @@ buildPythonPackage rec {
     maintainers = with maintainers; [ dmvianna ];
   };
 }
-
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-xdist/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-xdist/default.nix
index 30e43c17c919..bbc08fb59df4 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-xdist/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-xdist/default.nix
@@ -1,28 +1,42 @@
-{ lib, fetchPypi, buildPythonPackage, execnet, pytest_6
-, setuptools_scm, pytest-forked, filelock, psutil, six, isPy3k }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy27
+, setuptools_scm
+, pytestCheckHook
+, filelock
+, execnet
+, pytest
+, pytest-forked
+, psutil
+}:
 
 buildPythonPackage rec {
   pname = "pytest-xdist";
-  version = "2.1.0";
-  disabled = !isPy3k;
+  version = "2.2.1";
+  disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0wh6pn66nncfs6ay0n863bgyriwsgppn8flx5l7551j1lbqkinc2";
+    sha256 = "718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2";
   };
 
-  nativeBuildInputs = [ setuptools_scm pytest_6 ];
-  checkInputs = [ pytest_6 filelock ];
-  propagatedBuildInputs = [ execnet pytest-forked psutil six ];
+  nativeBuildInputs = [ setuptools_scm ];
+  buildInputs = [
+    pytest
+  ];
+  checkInputs = [ pytestCheckHook filelock ];
+  propagatedBuildInputs = [ execnet pytest-forked psutil ];
 
-  # pytest6 doesn't allow for new lines
-  # capture_deprecated not compatible with latest pytest6
-  checkPhase = ''
-    # Excluded tests access file system
-    export HOME=$TMPDIR
-    pytest -n $NIX_BUILD_CORES \
-      -k "not (distribution_rsyncdirs_example or rsync or warning_captured_deprecated_in_pytest_6)"
-  '';
+  # access file system
+  disabledTests = [
+    "test_distribution_rsyncdirs_example"
+    "test_rsync_popen_with_path"
+    "test_popen_rsync_subdir"
+    "test_rsync_report"
+    "test_init_rsync_roots"
+    "test_rsyncignore"
+  ];
 
   meta = with lib; {
     description = "py.test xdist plugin for distributed testing and loop-on-failing modes";
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-xprocess/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-xprocess/default.nix
index 124adb8b2a53..6e557a7adceb 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-xprocess/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-xprocess/default.nix
@@ -14,7 +14,10 @@ buildPythonPackage rec {
   };
 
   nativeBuildInputs = [ setuptools_scm ];
-  propagatedBuildInputs = [ psutil pytest ];
+
+  buildInputs = [ pytest ];
+
+  propagatedBuildInputs = [ psutil ];
 
   # Remove test QoL package from install_requires
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/pytest-xvfb/default.nix b/nixpkgs/pkgs/development/python-modules/pytest-xvfb/default.nix
index 64078d68a8b8..c3dabe7f6e30 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest-xvfb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest-xvfb/default.nix
@@ -16,8 +16,9 @@ buildPythonPackage rec {
     sha256 = "1kyq5rg27dsnj7dc6x9y7r8vwf8rc88y2ppnnw6r96alw0nn9fn4";
   };
 
+  buildInputs = [ pytest ];
+
   propagatedBuildInputs = [
-    pytest
     virtual-display
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/pytest/default.nix b/nixpkgs/pkgs/development/python-modules/pytest/default.nix
index 798084d11117..579cfe1271f3 100644
--- a/nixpkgs/pkgs/development/python-modules/pytest/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytest/default.nix
@@ -1,19 +1,16 @@
 { lib, buildPythonPackage, pythonOlder, fetchPypi, isPy3k, isPyPy
 , atomicwrites
 , attrs
-, funcsigs
 , hypothesis
 , iniconfig
-, mock
 , more-itertools
 , packaging
 , pathlib2
 , pluggy
 , py
 , pygments
-, python
 , setuptools
-, setuptools_scm
+, setuptools-scm
 , six
 , toml
 , wcwidth
@@ -21,18 +18,17 @@
 }:
 
 buildPythonPackage rec {
-  version = "6.1.2";
   pname = "pytest";
-
+  version = "6.2.2";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c0a7e94a8cdbc5422a51ccdad8e6f1024795939cc89159a0ae7f0b316ad3823e";
+    sha256 = "sha256-nR7fnn0LhNcuo9vN/SKzX7VDpejypgCS3VeJNr9j1/k=";
   };
 
-  checkInputs = [ hypothesis pygments ];
-  nativeBuildInputs = [ setuptools_scm ];
+  nativeBuildInputs = [ setuptools-scm ];
+
   propagatedBuildInputs = [
     atomicwrites
     attrs
@@ -47,6 +43,11 @@ buildPythonPackage rec {
     wcwidth
   ] ++ lib.optionals (pythonOlder "3.6") [ pathlib2 ];
 
+  checkInputs = [
+    hypothesis
+    pygments
+  ];
+
   doCheck = !isPyPy; # https://github.com/pytest-dev/pytest/issues/3460
 
   preCheck = ''
@@ -80,8 +81,9 @@ buildPythonPackage rec {
   ];
 
   meta = with lib; {
-    homepage = "https://docs.pytest.org";
     description = "Framework for writing tests";
+    homepage = "https://docs.pytest.org";
+    changelog = "https://github.com/pytest-dev/pytest/releases/tag/${version}";
     maintainers = with maintainers; [ domenkozar lovek323 madjar lsix ];
     license = licenses.mit;
   };
diff --git a/nixpkgs/pkgs/development/python-modules/python-awair/default.nix b/nixpkgs/pkgs/development/python-modules/python-awair/default.nix
new file mode 100644
index 000000000000..b676a7a3de98
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-awair/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-aiohttp
+, pytestCheckHook
+, pythonOlder
+, voluptuous
+, vcrpy
+}:
+
+buildPythonPackage rec {
+  pname = "python-awair";
+  version = "0.2.2";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "ahayworth";
+    repo = "python_awair";
+    rev = version;
+    sha256 = "sha256-5+s1aSvt+rXyumvf/qZ58Uvmq0p45mu23Djbwgih3qI=";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    voluptuous
+  ];
+
+  checkInputs = [
+    pytest-aiohttp
+    pytestCheckHook
+    vcrpy
+  ];
+
+  pythonImportsCheck = [ "python_awair" ];
+
+  meta = with lib; {
+    description = "Python library for the Awair API";
+    homepage = "https://github.com/ahayworth/python_awair";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-binance/default.nix b/nixpkgs/pkgs/development/python-modules/python-binance/default.nix
index 1ad3a5128be6..aea47c7b9e72 100644
--- a/nixpkgs/pkgs/development/python-modules/python-binance/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-binance/default.nix
@@ -3,12 +3,12 @@
 , autobahn, certifi, chardet, cryptography, dateparser, pyopenssl, requests, service-identity, twisted }:
 
 buildPythonPackage rec {
-  version = "0.7.5";
+  version = "0.7.9";
   pname = "python-binance";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d6a96c0e55fc78d45279944515d385b3971300f35c2380ddb82689d676712053";
+    sha256 = "476459d91f6cfe0a37ccac38911643ea6cca632499ad8682e0957a075f73d239";
   };
 
   doCheck = false;  # Tries to test multiple interpreters with tox
diff --git a/nixpkgs/pkgs/development/python-modules/python-box/default.nix b/nixpkgs/pkgs/development/python-modules/python-box/default.nix
new file mode 100644
index 000000000000..cb176109fefb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-box/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, msgpack
+, pytestCheckHook
+, pythonOlder
+, pyyaml
+, ruamel_yaml
+, toml
+}:
+
+buildPythonPackage rec {
+  pname = "python-box";
+  version = "5.3.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "cdgriffith";
+    repo = "Box";
+    rev = version;
+    sha256 = "0fhmkjdcacpwyg7fajqfvnv3n9xd9rxjdpvi8z3j73a1gls36gf4";
+  };
+
+  propagatedBuildInputs = [
+    msgpack
+    pyyaml
+    ruamel_yaml
+    toml
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "box" ];
+
+  meta = with lib; {
+    description = "Python dictionaries with advanced dot notation access";
+    homepage = "https://github.com/cdgriffith/Box";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-didl-lite/default.nix b/nixpkgs/pkgs/development/python-modules/python-didl-lite/default.nix
index edde064a3335..64fcd189c749 100644
--- a/nixpkgs/pkgs/development/python-modules/python-didl-lite/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-didl-lite/default.nix
@@ -1,17 +1,21 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
 , defusedxml
-, pytest }:
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "python-didl-lite";
-  version = "1.2.5";
+  version = "1.2.6";
   disabled = pythonOlder "3.5.3";
 
   src = fetchFromGitHub {
     owner = "StevenLooman";
     repo = pname;
     rev = version;
-    sha256 = "0wm831g8k9xahw20y0461cvy6lp45sxppicxah1rg9isdc3vy3nh";
+    sha256 = "sha256-1rr26dnV5As15HeFLWEDBDYPiRDHkGfYOYFhSJi7iyU=";
   };
 
   propagatedBuildInputs = [
@@ -19,12 +23,10 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytest
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    py.test
-  '';
+  pythonImportsCheck = [ "didl_lite" ];
 
   meta = with lib; {
     description = "DIDL-Lite (Digital Item Declaration Language) tools for Python";
diff --git a/nixpkgs/pkgs/development/python-modules/python-dotenv/default.nix b/nixpkgs/pkgs/development/python-modules/python-dotenv/default.nix
index e654826e0bc2..1d8a9a85457b 100644
--- a/nixpkgs/pkgs/development/python-modules/python-dotenv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-dotenv/default.nix
@@ -1,29 +1,38 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27
+{ lib
+, buildPythonPackage
 , click
+, fetchPypi
 , ipython
-, pytest
-, sh
-, typing
 , mock
+, pytestCheckHook
+, pythonOlder
+, sh
 }:
 
 buildPythonPackage rec {
   pname = "python-dotenv";
   version = "0.15.0";
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "587825ed60b1711daea4832cf37524dfd404325b7db5e25ebe88c495c9f807a0";
   };
 
-  propagatedBuildInputs = [ click ] ++ lib.optionals isPy27 [ typing ];
+  propagatedBuildInputs = [ click ];
+
+  checkInputs = [
+    ipython
+    mock
+    pytestCheckHook
+    sh
+  ];
 
-  checkInputs = [ ipython mock pytest sh ];
+  disabledTests = [
+    "cli"
+  ];
 
-  # cli tests are impure
-  checkPhase = ''
-    pytest tests/ -k 'not cli'
-  '';
+  pythonImportsCheck = [ "dotenv" ];
 
   meta = with lib; {
     description = "Add .env support to your django/flask apps in development and deployments";
diff --git a/nixpkgs/pkgs/development/python-modules/python-engineio/3.nix b/nixpkgs/pkgs/development/python-modules/python-engineio/3.nix
new file mode 100644
index 000000000000..e4c71782f990
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-engineio/3.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, aiohttp
+, eventlet
+, iana-etc
+, libredirect
+, mock
+, requests
+, six
+, tornado
+, websocket_client
+, websockets
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "python-engineio";
+  version = "3.14.2";
+
+  src = fetchFromGitHub {
+    owner = "miguelgrinberg";
+    repo = "python-engineio";
+    rev = "v${version}";
+    sha256 = "1r3gvizrknbv036pvxid1l726wkb0l43bdaz5y879s7j3ipyb464";
+  };
+
+  propagatedBuildInputs = [
+    six
+  ];
+
+  checkInputs = [
+    aiohttp
+    eventlet
+    mock
+    requests
+    tornado
+    websocket_client
+    websockets
+    pytestCheckHook
+  ];
+
+  preCheck = lib.optionalString stdenv.isLinux ''
+    echo "nameserver 127.0.0.1" > resolv.conf
+    export NIX_REDIRECTS=/etc/protocols=${iana-etc}/etc/protocols:/etc/resolv.conf=$(realpath resolv.conf) \
+      LD_PRELOAD=${libredirect}/lib/libredirect.so
+  '';
+  postCheck = ''
+    unset NIX_REDIRECTS LD_PRELOAD
+  '';
+
+  # somehow effective log level does not change?
+  disabledTests = [ "test_logger" ];
+  pythonImportsCheck = [ "engineio" ];
+
+  meta = with lib; {
+    description = "Python based Engine.IO client and server v3.x";
+    longDescription = ''
+      Engine.IO is a lightweight transport protocol that enables real-time
+      bidirectional event-based communication between clients and a server.
+    '';
+    homepage = "https://github.com/miguelgrinberg/python-engineio/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ graham33 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-gammu/default.nix b/nixpkgs/pkgs/development/python-modules/python-gammu/default.nix
new file mode 100644
index 000000000000..1548a1389474
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-gammu/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+  #, pytestCheckHook
+, pythonOlder
+, pkg-config
+, gammu
+}:
+
+buildPythonPackage rec {
+  pname = "python-gammu";
+  version = "3.1";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "gammu";
+    repo = pname;
+    rev = version;
+    sha256 = "1hw2mfrps6wqfyi40p5mp9r59n1ick6pj4hw5njz0k822pbb33p0";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gammu ];
+
+  # Check with the next release if tests could be run with pytest
+  # checkInputs = [ pytestCheckHook ];
+  # Don't run tests for now
+  doCheck = false;
+  pythonImportsCheck = [ "gammu" ];
+
+  meta = with lib; {
+    description = "Python bindings for Gammu";
+    homepage = "https://github.com/gammu/python-gammu/";
+    license = with licenses; [ gpl2Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-igraph/default.nix b/nixpkgs/pkgs/development/python-modules/python-igraph/default.nix
index 728d47b1f967..8e90ce5190f6 100644
--- a/nixpkgs/pkgs/development/python-modules/python-igraph/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-igraph/default.nix
@@ -1,32 +1,54 @@
-{ buildPythonPackage, fetchPypi, lib, isPy3k
-, pkg-config, igraph
-, texttable }:
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, pkg-config
+, igraph
+, texttable
+, python
+}:
 
 buildPythonPackage rec {
   pname = "python-igraph";
-  version = "0.8.3";
-  disabled = !isPy3k; # fails to build
+  version = "0.9.1";
 
-  nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ igraph ];
-  propagatedBuildInputs = [ texttable ];
+  disabled = pythonOlder "3.6";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "e1f27622eddeb2bd5fdcbadb41ef048e884790bb050f9627c086dc609d0f1236";
+  src = fetchFromGitHub {
+    owner = "igraph";
+    repo = "python-igraph";
+    rev = version;
+    sha256 = "1ldyzza25zvwh144lw8x856z76s8gfvnbdm56fcmwkvm7aj81npw";
   };
 
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    igraph
+    igraph.dev
+  ];
+
+  propagatedBuildInputs = [
+    texttable
+  ];
+
   # NB: We want to use our igraph, not vendored igraph, but even with
   # pkg-config on the PATH, their custom setup.py still needs to be explicitly
   # told to do it. ~ C.
   setupPyGlobalFlags = [ "--use-pkg-config" ];
 
-  doCheck = !isPy3k;
+  checkPhase = ''
+    ${python.interpreter} -m unittest
+  '';
+
+  pythonImportsCheck = [ "igraph" ];
 
-  meta = {
+  meta = with lib; {
     description = "High performance graph data structures and algorithms";
     homepage = "https://igraph.org/python/";
-    license = lib.licenses.gpl2;
-    maintainers = [ lib.maintainers.MostAwesomeDude ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ MostAwesomeDude dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/python-levenshtein/default.nix b/nixpkgs/pkgs/development/python-modules/python-levenshtein/default.nix
index b4760cef6295..d208f2c6bdd1 100644
--- a/nixpkgs/pkgs/development/python-modules/python-levenshtein/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-levenshtein/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "python-Levenshtein";
-  version = "0.12.1";
+  version = "0.12.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0489zzjlfgzpc7vggs7s7db13pld2nlnw7iwgdz1f386i0x2fkjm";
+    sha256 = "dc2395fbd148a1ab31090dd113c366695934b9e85fe5a4b2a032745efd0346f6";
   };
 
   # No tests included in archive
diff --git a/nixpkgs/pkgs/development/python-modules/python-ly/default.nix b/nixpkgs/pkgs/development/python-modules/python-ly/default.nix
index cc38553a8176..3b4a7ecc1194 100644
--- a/nixpkgs/pkgs/development/python-modules/python-ly/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-ly/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "python-ly";
-  version = "0.9.6";
+  version = "0.9.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0s5hvsf17f4w1xszrf4pg29wfv9znkj195klq1v2qhlpxfp6772d";
+    sha256 = "d4d2b68eb0ef8073200154247cc9bd91ed7fb2671ac966ef3d2853281c15d7a8";
   };
 
   # tests not shipped on `pypi` and
diff --git a/nixpkgs/pkgs/development/python-modules/python-magic/default.nix b/nixpkgs/pkgs/development/python-modules/python-magic/default.nix
index 61a7dd315dfc..6737f1260733 100644
--- a/nixpkgs/pkgs/development/python-modules/python-magic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-magic/default.nix
@@ -1,24 +1,36 @@
-{ buildPythonPackage, lib, fetchPypi, file, stdenv }:
+{ lib
+, stdenv
+, python
+, buildPythonPackage
+, fetchFromGitHub
+, substituteAll
+, file
+, glibcLocales
+}:
 
 buildPythonPackage rec {
   pname = "python-magic";
-  version = "0.4.18";
+  version = "0.4.22";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "b757db2a5289ea3f1ced9e60f072965243ea43a2221430048fd8cacab17be0ce";
+  src = fetchFromGitHub {
+    owner = "ahupp";
+    repo = "python-magic";
+    rev = version;
+    sha256 = "0zbdjr5shijs0jayz7gycpx0kn6v2bh83dpanyajk2vmy47jvbd6";
   };
 
-  postPatch = ''
-    substituteInPlace magic.py --replace "ctypes.util.find_library('magic')" "'${file}/lib/libmagic${stdenv.hostPlatform.extensions.sharedLibrary}'"
-  '';
+  patches = [
+    (substituteAll {
+      src = ./libmagic-path.patch;
+      libmagic = "${file}/lib/libmagic${stdenv.hostPlatform.extensions.sharedLibrary}";
+    })
+  ];
 
-  doCheck = false;
+  checkInputs = [ glibcLocales ];
 
-  # TODO: tests are failing
-  #checkPhase = ''
-  #  ${python}/bin/${python.executable} ./test.py
-  #'';
+  checkPhase = ''
+    LC_ALL="en_US.UTF-8" ${python.interpreter} test/test.py
+  '';
 
   meta = {
     description = "A python interface to the libmagic file type identification library";
diff --git a/nixpkgs/pkgs/development/python-modules/python-magic/libmagic-path.patch b/nixpkgs/pkgs/development/python-modules/python-magic/libmagic-path.patch
new file mode 100644
index 000000000000..5a1dbec7d51b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-magic/libmagic-path.patch
@@ -0,0 +1,17 @@
+diff --git a/magic/loader.py b/magic/loader.py
+index 6b2bfcb..69778af 100644
+--- a/magic/loader.py
++++ b/magic/loader.py
+@@ -5,11 +5,7 @@ import glob
+ def load_lib():
+   libmagic = None
+   # Let's try to find magic or magic1
+-  dll = ctypes.util.find_library('magic') \
+-        or ctypes.util.find_library('magic1') \
+-        or ctypes.util.find_library('cygmagic-1') \
+-        or ctypes.util.find_library('libmagic-1') \
+-        or ctypes.util.find_library('msys-magic-1')  # for MSYS2
++  dll = '@libmagic@'
+ 
+   # necessary because find_library returns None if it doesn't find the library
+   if dll:
diff --git a/nixpkgs/pkgs/development/python-modules/python-miio/default.nix b/nixpkgs/pkgs/development/python-modules/python-miio/default.nix
index 78c89408ac2d..1d9025a035f2 100644
--- a/nixpkgs/pkgs/development/python-modules/python-miio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-miio/default.nix
@@ -1,51 +1,76 @@
 { lib
 , buildPythonPackage
+, pythonOlder
 , fetchPypi
-, appdirs
+, poetry
 , click
-, construct
-, croniter
 , cryptography
-, importlib-metadata
-, pytest
-, pytest-mock
+, construct
 , zeroconf
 , attrs
 , pytz
+, appdirs
 , tqdm
 , netifaces
+, android-backup
+, importlib-metadata
+, croniter
+, defusedxml
+, pytestCheckHook
+, pytest-mock
+, pyyaml
 }:
 
 
 buildPythonPackage rec {
   pname = "python-miio";
-  version = "0.5.4";
+  version = "0.5.5.2";
+  disabled = pythonOlder "3.6";
+  format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5a6fd3bb2cc2f75cdfe5673f36a5a418144d08add6e53b384cb146e99f27bd39";
+    sha256 = "sha256-lk7egCyj+vSsaXmxuWxlQuom8n3JEs/RIWwCuwTOXeI=";
   };
 
   postPatch = ''
-    substituteInPlace setup.py \
-      --replace  "zeroconf>=0.25.1,<0.26.0" "zeroconf"
-    substituteInPlace setup.py \
-      --replace  "pytz>=2019.3,<2020.0" "pytz"
-    substituteInPlace setup.py \
-      --replace  "cryptography>=2.9,<3.0" "cryptography"
-    '';
-
-  checkInputs = [ pytest pytest-mock];
-  propagatedBuildInputs = [ appdirs click construct croniter cryptography importlib-metadata zeroconf attrs pytz tqdm netifaces ];
-
-  checkPhase = ''
-    pytest
+    substituteInPlace pyproject.toml \
+      --replace 'croniter = "^0"' 'croniter = "*"' \
+      --replace 'defusedxml = "^0.6"' 'defusedxml = "*"' \
+      --replace 'zeroconf = "^0.28"' 'zeroconf = "*"'
   '';
 
+  nativeBuildInputs = [
+    poetry
+  ];
+
+  propagatedBuildInputs = [
+    click
+    cryptography
+    construct
+    zeroconf
+    attrs
+    pytz
+    appdirs
+    tqdm
+    netifaces
+    android-backup
+    croniter
+    defusedxml
+  ] ++ lib.optional (pythonOlder "3.8") importlib-metadata;
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-mock
+    pyyaml
+  ];
+
+  pythonImportsCheck = [ "miio" ];
+
   meta = with lib; {
     description = "Python library for interfacing with Xiaomi smart appliances";
     homepage = "https://github.com/rytilahti/python-miio";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ flyfloh ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/python-nmap/default.nix b/nixpkgs/pkgs/development/python-modules/python-nmap/default.nix
new file mode 100644
index 000000000000..745d6c67eac7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-nmap/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, nmap
+}:
+
+buildPythonPackage rec {
+  pname = "python-nmap";
+  version = "0.6.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "013q2797d9sf6mrj7x1hqfcql5gqgg50zgiifp2yypfa4k8cwjsx";
+  };
+
+  propagatedBuildInputs = [ nmap ];
+
+  postPatch = ''
+    substituteInPlace setup.cfg --replace "universal=3" "universal=1"
+  '';
+
+  # Tests requires sudo and performs scans
+  doCheck = false;
+  pythonImportsCheck = [ "nmap" ];
+
+  meta = with lib; {
+    description = "Python library which helps in using nmap";
+    longDescription = ''
+      python-nmap is a Python library which helps in using nmap port scanner. It
+      allows to easily manipulate nmap scan results and will be a perfect tool
+      for systems administrators who want to automatize scanning task and reports.
+      It also supports nmap script outputs.
+    '';
+    homepage = "http://xael.org/pages/python-nmap-en.html";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-olm/default.nix b/nixpkgs/pkgs/development/python-modules/python-olm/default.nix
index b1e01f7f4abf..2a8295a65bf7 100644
--- a/nixpkgs/pkgs/development/python-modules/python-olm/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-olm/default.nix
@@ -1,11 +1,11 @@
-{ lib, buildPythonPackage, olm,
-  cffi, future, isPy3k, typing }:
+{ lib, buildPythonPackage, isPy3k, olm
+, cffi, future, typing }:
 
 buildPythonPackage {
   pname = "python-olm";
   inherit (olm) src version;
 
-  sourceRoot = "${olm.name}/python";
+  sourceRoot = "source/python";
   buildInputs = [ olm ];
 
   preBuild = ''
@@ -17,12 +17,13 @@ buildPythonPackage {
     future
   ] ++ lib.optionals (!isPy3k) [ typing ];
 
+  # Some required libraries for testing are not packaged yet.
   doCheck = false;
+  pythonImportsCheck = [ "olm" ];
 
-  meta = with lib; {
+  meta = {
+    inherit (olm.meta) license maintainers;
     description = "Python bindings for Olm";
     homepage = "https://gitlab.matrix.org/matrix-org/olm/tree/master/python";
-    license = olm.meta.license;
-    maintainers = [ maintainers.tilpner ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/python-opendata-transport/default.nix b/nixpkgs/pkgs/development/python-modules/python-opendata-transport/default.nix
index 634ccea371e0..906f08439808 100644
--- a/nixpkgs/pkgs/development/python-modules/python-opendata-transport/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-opendata-transport/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "python-opendata-transport";
-  version = "0.2.1";
+  version = "0.2.2";
 
   src = fetchPypi {
     pname = "python_opendata_transport";
     inherit version;
-    sha256 = "0pxs9zqk00vn1s74cx1416mqmixrr74wb0jb0j6b1c3xpvzlfbks";
+    sha256 = "sha256-Z0VHkKYHpwbBwwFrMtA5JRy0m7f0566IjCmGizoKEoo=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/python-prctl/default.nix b/nixpkgs/pkgs/development/python-modules/python-prctl/default.nix
index 2fd88858de75..dc967b54305c 100644
--- a/nixpkgs/pkgs/development/python-modules/python-prctl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-prctl/default.nix
@@ -2,6 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , libcap
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -13,9 +14,25 @@ buildPythonPackage rec {
     sha256 = "b4ca9a25a7d4f1ace4fffd1f3a2e64ef5208fe05f929f3edd5e27081ca7e67ce";
   };
 
-  patches = [ ./skip_bad_tests.patch ];
   buildInputs = [ libcap ];
 
+  checkInputs = [ pytestCheckHook ];
+
+  disabledTests = [
+    # Intel MPX support was removed in GCC 9.1 & Linux kernel 5.6
+    "test_mpx"
+
+    # The Nix build sandbox has no_new_privs already enabled
+    "test_no_new_privs"
+
+    # The Nix build sandbox has seccomp already enabled
+    "test_seccomp"
+
+    # This will fail if prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_FORCE_DISABLE)
+    # has been set system-wide, even outside the sandbox
+    "test_speculation_ctrl"
+  ];
+
   meta = {
     description = "Python(ic) interface to the linux prctl syscall";
     homepage = "https://github.com/seveas/python-prctl";
diff --git a/nixpkgs/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch b/nixpkgs/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch
deleted file mode 100644
index 19d70f234a99..000000000000
--- a/nixpkgs/pkgs/development/python-modules/python-prctl/skip_bad_tests.patch
+++ /dev/null
@@ -1,34 +0,0 @@
---- ./test_prctl.py	2018-01-26 16:02:52.000000000 -0500
-+++ ./test_prctl.py	2018-06-21 18:26:43.370065009 -0400
-@@ -154,6 +154,7 @@
-         prctl.set_keepcaps(False)
-         self.assertEqual(prctl.get_keepcaps(), False)
- 
-+    @unittest.skip("No access to /proc in the Nix build sandbox")
-     @require('set_mce_kill')
-     def test_mce_kill(self):
-         """Test the MCE_KILL setting"""
-@@ -173,6 +174,7 @@
-         prctl.set_name(name)
-         self.assertEqual(prctl.get_name(), name[:15])
- 
-+    @unittest.skip("The Nix build sandbox has no_new_privs already enabled")
-     @require('get_no_new_privs')
-     def test_no_new_privs(self):
-         """Test the no_new_privs function"""
-@@ -189,6 +191,7 @@
-                 self.assertNotEqual(sp.returncode, 0)
-             os._exit(0)
- 
-+    @unittest.skip("No access to /proc in the Nix build sandbox")
-     def test_proctitle(self):
-         """Test setting the process title, including too long titles"""
-         title = "This is a test!"
-@@ -225,6 +228,7 @@
-             os._exit(0)
-         self.assertRaises(OSError, prctl.set_ptracer, new_pid)
- 
-+    @unittest.skip("The Nix build sandbox has seccomp already enabled")
-     @require('get_seccomp')
-     def test_seccomp(self):
-         """Test manipulation of the seccomp setting"""
diff --git a/nixpkgs/pkgs/development/python-modules/python-rtmidi/default.nix b/nixpkgs/pkgs/development/python-modules/python-rtmidi/default.nix
index 2b65a658f982..aadf75d59f7f 100644
--- a/nixpkgs/pkgs/development/python-modules/python-rtmidi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-rtmidi/default.nix
@@ -4,12 +4,12 @@
 
 buildPythonPackage rec {
   pname = "python-rtmidi";
-  version = "1.4.6";
+  version = "1.4.7";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1aqhsl9w3h0rwf3mhr8parjbxm2sb6sn5mac6725cvm535pqqyhz";
+    sha256 = "d7dbc2b174b09015dfbee449a672a072aa72b367be40b13e04ee35a2e2e399e3";
   };
 
   nativeBuildInputs = [ pkg-config ];
diff --git a/nixpkgs/pkgs/development/python-modules/python-simple-hipchat/default.nix b/nixpkgs/pkgs/development/python-modules/python-simple-hipchat/default.nix
index 3162a0326288..904437bdcf66 100644
--- a/nixpkgs/pkgs/development/python-modules/python-simple-hipchat/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-simple-hipchat/default.nix
@@ -10,7 +10,7 @@ buildPythonPackage rec {
     sha256 = "0zy6prrj85jjc4xmxgfg8h94j81k6zhfxfffcbvq9b10jis1rgav";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   meta = with lib; {
     description = "Easy peasy wrapper for HipChat's v1 API";
diff --git a/nixpkgs/pkgs/development/python-modules/python-smarttub/default.nix b/nixpkgs/pkgs/development/python-modules/python-smarttub/default.nix
new file mode 100644
index 000000000000..372c12c3599d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-smarttub/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, aiohttp
+, aresponses
+, buildPythonPackage
+, fetchFromGitHub
+, inflection
+, pyjwt
+, pytest-asyncio
+, pytestCheckHook
+, python-dateutil
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "python-smarttub";
+  version = "0.0.21";
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "mdz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7phx6CI6sqUCZIUxL6ea25UWAcI3NAz66hIleUfN4bk=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    inflection
+    pyjwt
+    python-dateutil
+  ];
+
+  checkInputs = [
+    aresponses
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "smarttub" ];
+
+  meta = with lib; {
+    description = "Python API for SmartTub enabled hot tubs";
+    homepage = "https://github.com/mdz/python-smarttub";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-socketio/4.nix b/nixpkgs/pkgs/development/python-modules/python-socketio/4.nix
new file mode 100644
index 000000000000..3a6f5d87fdd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-socketio/4.nix
@@ -0,0 +1,47 @@
+{ lib
+, bidict
+, buildPythonPackage
+, fetchFromGitHub
+, mock
+, pytestCheckHook
+, python-engineio_3
+}:
+
+buildPythonPackage rec {
+  pname = "python-socketio";
+  version = "4.6.1";
+
+  src = fetchFromGitHub {
+    owner = "miguelgrinberg";
+    repo = "python-socketio";
+    rev = "v${version}";
+    sha256 = "14dijag17v84v0pp9qi89h5awb4h4i9rj0ppkixqv6is9z9lflw5";
+  };
+
+  propagatedBuildInputs = [
+    bidict
+    python-engineio_3
+  ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "socketio" ];
+
+  # pytestCheckHook seems to change the default log level to WARNING, but the
+  # tests assert it is ERROR
+  disabledTests = [ "test_logger" ];
+
+  meta = with lib; {
+    description = "Python Socket.IO server and client 4.x";
+    longDescription = ''
+      Socket.IO is a lightweight transport protocol that enables real-time
+      bidirectional event-based communication between clients and a server.
+    '';
+    homepage = "https://github.com/miguelgrinberg/python-socketio/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ graham33 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-socketio/default.nix b/nixpkgs/pkgs/development/python-modules/python-socketio/default.nix
index e9c2ae146b09..8eb58b244e14 100644
--- a/nixpkgs/pkgs/development/python-modules/python-socketio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-socketio/default.nix
@@ -36,7 +36,7 @@ buildPythonPackage rec {
       Socket.IO is a lightweight transport protocol that enables real-time
       bidirectional event-based communication between clients and a server.
     '';
-    homepage = "https://github.com/miguelgrinberg/python-engineio/";
+    homepage = "https://github.com/miguelgrinberg/python-socketio/";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ mic92 ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/python-telegram-bot/default.nix b/nixpkgs/pkgs/development/python-modules/python-telegram-bot/default.nix
index b681fcf85a93..27276e0619cd 100644
--- a/nixpkgs/pkgs/development/python-modules/python-telegram-bot/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/python-telegram-bot/default.nix
@@ -7,25 +7,29 @@
 , urllib3
 , tornado
 , pytest
+, APScheduler
 , isPy3k
 }:
 
 buildPythonPackage rec {
   pname = "python-telegram-bot";
-  version = "13.0";
+  version = "13.3";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ca78a41626d728a8f51affa792270e210fa503ed298d395bed2bd1281842dca3";
+    hash = "sha256-dw1sGfdeUw3n9qh4TsBpRdqEvNI0SnKTK4wqBaeM1CE=";
   };
 
   checkInputs = [ pytest ];
-  propagatedBuildInputs = [ certifi future urllib3 tornado decorator ];
+  propagatedBuildInputs = [ certifi future urllib3 tornado decorator APScheduler ];
 
   # --with-upstream-urllib3 is not working properly
   postPatch = ''
-    rm -rf telegram/vendor
+    rm -r telegram/vendor
+
+    substituteInPlace requirements.txt \
+      --replace 'APScheduler==3.6.3' 'APScheduler'
   '';
   setupPyGlobalFlags = "--with-upstream-urllib3";
 
@@ -36,7 +40,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "This library provides a pure Python interface for the Telegram Bot API.";
     homepage = "https://python-telegram-bot.org";
-    license = licenses.lgpl3;
+    license = licenses.lgpl3Only;
     maintainers = with maintainers; [ veprbl pingiun ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/python-twitch-client/default.nix b/nixpkgs/pkgs/development/python-modules/python-twitch-client/default.nix
new file mode 100644
index 000000000000..30f6ab9a0a71
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-twitch-client/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+, requests
+, responses
+}:
+
+buildPythonPackage rec {
+  pname = "python-twitch-client";
+  version = "0.7.1";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "tsifrer";
+    repo = pname;
+    rev = version;
+    sha256 = "10wwkam3dw0nqr3v9xzigx1zjlrnrhzr7jvihddvzi84vjb6j443";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  checkInputs = [
+    pytestCheckHook
+    responses
+  ];
+
+  pythonImportsCheck = [ "twitch" ];
+
+  meta = with lib; {
+    description = "Python wrapper for the Twitch API";
+    homepage = "https://github.com/tsifrer/python-twitch-client";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python-velbus/default.nix b/nixpkgs/pkgs/development/python-modules/python-velbus/default.nix
new file mode 100644
index 000000000000..a02edfdc1f6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python-velbus/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pyserial
+}:
+
+buildPythonPackage rec {
+  pname = "python-velbus";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "thomasdelaet";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dv7dsjp5li87ispdphaz7jd0a9xc328rxwawf2f58b1ii904xr4";
+  };
+
+  propagatedBuildInputs = [ pyserial ];
+
+  # Project has not tests
+  doCheck = false;
+  pythonImportsCheck = [ "velbus" ];
+
+  meta = with lib; {
+    description = "Python library to control the Velbus home automation system";
+    homepage = "https://github.com/thomasdelaet/python-velbus";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/python3-saml/default.nix b/nixpkgs/pkgs/development/python-modules/python3-saml/default.nix
new file mode 100644
index 000000000000..00774cc40f88
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/python3-saml/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, fetchFromGitHub, buildPythonPackage, isPy3k,
+isodate, lxml, xmlsec, freezegun }:
+
+buildPythonPackage rec {
+  pname = "python3-saml";
+  version = "1.10.1";
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "onelogin";
+    repo = "python3-saml";
+    rev = "v${version}";
+    sha256 = "1yk02xq90bm7p6k091av6gapb5h2ccxzgrbm03sj2x8h0wff9s8k";
+  };
+
+  patches = [
+    # Remove the dependency on defusedxml
+    #
+    # This patch is already merged upstream and does not introduce any
+    # functionality changes.
+    (fetchurl {
+      url = "https://github.com/onelogin/python3-saml/commit/4b6c4b1f2ed3f6eab70ff4391e595b808ace168c.patch";
+      sha256 = "11gqn7ib2hmlx5wp4xhi375v5ajapwmj4lpw0y44bh5ww8cypvqy";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    isodate lxml xmlsec
+  ];
+
+  checkInputs = [ freezegun ];
+  pythonImportsCheck = [ "onelogin.saml2" ];
+
+  meta = with lib; {
+    description = "OneLogin's SAML Python Toolkit for Python 3";
+    homepage = "https://github.com/onelogin/python3-saml";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pythran/default.nix b/nixpkgs/pkgs/development/python-modules/pythran/default.nix
new file mode 100644
index 000000000000..864234a37e27
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pythran/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestrunner
+, ply
+, networkx
+, decorator
+, gast
+, six
+, numpy
+, beniget
+, pytestCheckHook
+, scipy
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "pythran";
+  version = "0.9.8post3";
+
+  src = fetchFromGitHub {
+    owner = "serge-sans-paille";
+    repo = "pythran";
+    rev = version;
+    sha256 = "sha256-GCWjJlf7zpFzELR6wTF8FoJzJ3F/WdT1hHjY5A5h/+4=";
+  };
+
+  nativeBuildInputs = [
+    pytestrunner
+  ];
+
+  propagatedBuildInputs = [
+    ply
+    networkx
+    decorator
+    gast
+    six
+    numpy
+    beniget
+  ];
+
+  pythonImportsCheck = [
+    "pythran"
+    "pythran.backend"
+    "pythran.middlend"
+    "pythran.passmanager"
+    "pythran.toolchain"
+    "pythran.spec"
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    numpy
+    scipy
+  ];
+
+  # Test suite is huge.
+  # Also, in the future scipy will rely on it resulting in a circular test dependency
+  doCheck = false;
+
+  disabled = !isPy3k;
+
+  meta = {
+    description = "Ahead of Time compiler for numeric kernels";
+    homepage = https://github.com/serge-sans-paille/pythran;
+    license = lib.licenses.bsd3;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytile/default.nix b/nixpkgs/pkgs/development/python-modules/pytile/default.nix
index 771ae4d13281..c1901a750864 100644
--- a/nixpkgs/pkgs/development/python-modules/pytile/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytile/default.nix
@@ -1,6 +1,5 @@
 { lib
 , aiohttp
-, async-timeout
 , aresponses
 , buildPythonPackage
 , fetchFromGitHub
@@ -14,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "pytile";
-  version = "5.1.1";
+  version = "5.2.1";
   disabled = pythonAtLeast "3.9";
 
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "sha256-bVoFTaK/Alemtc5I+Z/M9y/FWczvJ+P86R0DMD89/BM=";
+    sha256 = "0d63xga4gjlfl9fzv3i4j605rrx2qgbzam6cl609ny96s8q8h1px";
   };
 
   format = "pyproject";
diff --git a/nixpkgs/pkgs/development/python-modules/pytools/default.nix b/nixpkgs/pkgs/development/python-modules/pytools/default.nix
index 4add5ac5e857..5c7faf50cea6 100644
--- a/nixpkgs/pkgs/development/python-modules/pytools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytools/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "pytools";
-  version = "2020.4.3";
+  version = "2020.4.4";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "21aa1fd942bc3bc54c8ae3b5e60c1f771e6db0817b7402fd802aa5964f20e629";
+    sha256 = "3645ed839cf4d79cb4bf030f37ddaeecd7fe5e2d6698438cc36c24a1d5168809";
   };
 
   checkInputs = [ pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/pytorch/bin.nix b/nixpkgs/pkgs/development/python-modules/pytorch/bin.nix
index 1ffda5c86b0e..1880a0e2bf93 100644
--- a/nixpkgs/pkgs/development/python-modules/pytorch/bin.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytorch/bin.nix
@@ -5,7 +5,6 @@
 , isPy38
 , isPy39
 , python
-, nvidia_x11
 , addOpenGLRunpath
 , future
 , numpy
@@ -17,10 +16,9 @@
 
 let
   pyVerNoDot = builtins.replaceStrings [ "." ] [ "" ] python.pythonVersion;
-  platform = if stdenv.isDarwin then "darwin" else "linux";
   srcs = import ./binary-hashes.nix version;
   unsupported = throw "Unsupported system";
-  version = "1.7.1";
+  version = "1.8.0";
 in buildPythonPackage {
   inherit version;
 
@@ -52,7 +50,7 @@ in buildPythonPackage {
   '';
 
   postFixup = let
-    rpath = lib.makeLibraryPath [ stdenv.cc.cc.lib nvidia_x11 ];
+    rpath = lib.makeLibraryPath [ stdenv.cc.cc.lib ];
   in ''
     find $out/${python.sitePackages}/torch/lib -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do
       echo "setting rpath for $lib..."
diff --git a/nixpkgs/pkgs/development/python-modules/pytorch/binary-hashes.nix b/nixpkgs/pkgs/development/python-modules/pytorch/binary-hashes.nix
index a542233e15e8..bc838597038d 100644
--- a/nixpkgs/pkgs/development/python-modules/pytorch/binary-hashes.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytorch/binary-hashes.nix
@@ -1,14 +1,14 @@
 version: {
   x86_64-linux-37 = {
     url = "https://download.pytorch.org/whl/cu102/torch-${version}-cp37-cp37m-linux_x86_64.whl";
-    hash = "sha256-XXbCVaQUhMHUGp/1cLnJ82y4XflCiqFaWK4WrHz8LqY=";
+    hash = "sha256-bs29RJS0vy0xok3fvf8yvZlTibyGYqRUvUDT6M4gKQc=";
   };
   x86_64-linux-38 = {
     url = "https://download.pytorch.org/whl/cu102/torch-${version}-cp38-cp38-linux_x86_64.whl";
-    hash = "sha256-3S/GiAyV6DaWDYbvu8f2PTKH8uGJPFHTH5bb/gLw1z4=";
+    hash = "sha256-+h45HMo5N9Xeox8xoagKAb1KgGLAOUSMJUu/WljrB4c=";
   };
   x86_64-linux-39 = {
     url = "https://download.pytorch.org/whl/cu102/torch-${version}-cp39-cp39-linux_x86_64.whl";
-    hash = "sha256-o3k9zOsSseIoEpDMoSd8XOht39W/BE9lQoWk1pBXrqc=";
+    hash = "sha256-Ixj6yGCuc9xkhsDeIiNnTZ72E5/HXxV68r+Nzk/KVSQ=";
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pytorch/default.nix b/nixpkgs/pkgs/development/python-modules/pytorch/default.nix
index db1914f4ee7b..145c9a240750 100644
--- a/nixpkgs/pkgs/development/python-modules/pytorch/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytorch/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchFromGitHub, fetchpatch, buildPythonPackage, python,
-  cudaSupport ? false, cudatoolkit ? null, cudnn ? null, nccl ? null, magma ? null,
+  cudaSupport ? false, cudatoolkit, cudnn, nccl, magma,
   mklDnnSupport ? true, useSystemNccl ? true,
   MPISupport ? false, mpi,
   buildDocs ? false,
@@ -30,8 +30,6 @@
   isPy3k, pythonOlder }:
 
 # assert that everything needed for cuda is present and that the correct cuda versions are used
-assert !cudaSupport || cudatoolkit != null;
-assert cudnn == null || cudatoolkit != null;
 assert !cudaSupport || (let majorIs = lib.versions.major cudatoolkit.version;
                         in majorIs == "9" || majorIs == "10" || majorIs == "11");
 
@@ -74,27 +72,35 @@ let
   # (allowing FBGEMM to be built in pytorch-1.1), and may future proof this
   # derivation.
   brokenArchs = [ "3.0" ]; # this variable is only used as documentation.
-  cuda9ArchList = [
-    "3.5"
-    "5.0"
-    "5.2"
-    "6.0"
-    "6.1"
-    "7.0"
-    "7.0+PTX"  # I am getting a "undefined architecture compute_75" on cuda 9
-               # which leads me to believe this is the final cuda-9-compatible architecture.
-  ];
-  cuda10ArchList = cuda9ArchList ++ [
-    "7.5"
-    "7.5+PTX"  # < most recent architecture as of cudatoolkit_10_0 and pytorch-1.2.0
-  ];
+
+  cudaCapabilities = rec {
+    cuda9 = [
+      "3.5"
+      "5.0"
+      "5.2"
+      "6.0"
+      "6.1"
+      "7.0"
+      "7.0+PTX"  # I am getting a "undefined architecture compute_75" on cuda 9
+                 # which leads me to believe this is the final cuda-9-compatible architecture.
+    ];
+
+    cuda10 = cuda9 ++ [
+      "7.5"
+      "7.5+PTX"  # < most recent architecture as of cudatoolkit_10_0 and pytorch-1.2.0
+    ];
+
+    cuda11 = cuda10 ++ [
+      "8.0"
+      "8.0+PTX"  # < CUDA toolkit 11.0
+      "8.6"
+      "8.6+PTX"  # < CUDA toolkit 11.1
+    ];
+  };
   final_cudaArchList =
     if !cudaSupport || cudaArchList != null
     then cudaArchList
-    else
-      if lib.versions.major cudatoolkit.version == "9"
-      then cuda9ArchList
-      else cuda10ArchList; # the assert above removes any ambiguity here.
+    else cudaCapabilities."cuda${lib.versions.major cudatoolkit.version}";
 
   # Normally libcuda.so.1 is provided at runtime by nvidia-x11 via
   # LD_LIBRARY_PATH=/run/opengl-driver/lib.  We only use the stub
@@ -110,7 +116,7 @@ let
 in buildPythonPackage rec {
   pname = "pytorch";
   # Don't forget to update pytorch-bin to the same version.
-  version = "1.7.1";
+  version = "1.8.1";
 
   disabled = !isPy3k;
 
@@ -125,7 +131,7 @@ in buildPythonPackage rec {
     repo   = "pytorch";
     rev    = "v${version}";
     fetchSubmodules = true;
-    sha256 = "sha256-udpbSL8xnzf20A1pYYNlYjdp8ME8AVaAkMMiw53K6CU=";
+    sha256 = "sha256-HERbvmrfhWwH164GFHU/M0KbhVAuhI5sBZSxCZy8mRk=";
   };
 
   patches = lib.optionals stdenv.isDarwin [
@@ -289,12 +295,13 @@ in buildPythonPackage rec {
     install_name_tool -change @rpath/libc10.dylib $lib/lib/libc10.dylib $lib/lib/libshm.dylib
   '';
 
-
-  meta = {
+  meta = with lib; {
     description = "Open source, prototype-to-production deep learning platform";
     homepage    = "https://pytorch.org/";
-    license     = lib.licenses.bsd3;
-    platforms   = with lib.platforms; linux ++ lib.optionals (!cudaSupport) darwin;
-    maintainers = with lib.maintainers; [ danieldk teh thoughtpolice tscholak ]; # tscholak esp. for darwin-related builds
+    license     = licenses.bsd3;
+    platforms   = with platforms; linux ++ lib.optionals (!cudaSupport) darwin;
+    maintainers = with maintainers; [ danieldk teh thoughtpolice tscholak ]; # tscholak esp. for darwin-related builds
+    # error: use of undeclared identifier 'noU'; did you mean 'no'?
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pytrafikverket/default.nix b/nixpkgs/pkgs/development/python-modules/pytrafikverket/default.nix
new file mode 100644
index 000000000000..0a65a960fb79
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytrafikverket/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, aiohttp
+, async-timeout
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "pytrafikverket";
+  version = "0.1.6.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0hrjsw53ixgmhsiszdrzzh0wma705nrhq8npzacsyaf43r29zvqy";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    async-timeout
+    lxml
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pytrafikverket" ];
+
+  meta = with lib; {
+    description = "Python library to manage Etekcity Devices and Levoit Air Purifier";
+    homepage = "https://github.com/endor-force/pytrafikverket";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pytrends/default.nix b/nixpkgs/pkgs/development/python-modules/pytrends/default.nix
index 3ce1e70e8239..20dbe0ba31c9 100644
--- a/nixpkgs/pkgs/development/python-modules/pytrends/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytrends/default.nix
@@ -17,10 +17,11 @@ buildPythonPackage rec {
     sha256 = "8ccb06c57c31fa157b978a0d810de7718ee46583d28cf818250d45f36abd2faa";
   };
 
-  doCheck = false;
-
   propagatedBuildInputs = [ requests lxml pandas ];
 
+  doCheck = false;
+  pythonImportsCheck = [ "pytrends" ];
+
   meta = with lib; {
     description = "Pseudo API for Google Trends";
     homepage = "https://github.com/GeneralMills/pytrends";
diff --git a/nixpkgs/pkgs/development/python-modules/pytube/default.nix b/nixpkgs/pkgs/development/python-modules/pytube/default.nix
new file mode 100644
index 000000000000..9f32da55ff1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pytube/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "pytube";
+  version = "10.7.1";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "pytube";
+    repo = "pytube";
+    rev = "v${version}";
+    sha256 = "sha256-a9MYEQFJXfPXYkWiuZkjt/PGs73Dm5614/Xvv6Nn8RA=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pytube" ];
+
+  meta = with lib; {
+    description = "Python 3 library for downloading YouTube Videos";
+    homepage = "https://github.com/nficano/pytube";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyturbojpeg/default.nix b/nixpkgs/pkgs/development/python-modules/pyturbojpeg/default.nix
new file mode 100644
index 000000000000..1eebc05d89e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyturbojpeg/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, python
+, buildPythonPackage
+, fetchPypi
+, substituteAll
+, libjpeg_turbo
+, numpy
+}:
+
+buildPythonPackage rec {
+  pname = "pyturbojpeg";
+  version = "1.4.1";
+
+  src = fetchPypi {
+    pname = "PyTurboJPEG";
+    inherit version;
+    sha256 = "09688a93331281e566569b4d313e1d1a058ca32ccae1a2473847a10e4ca2f2a7";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./lib-path.patch;
+      libturbojpeg = "${libjpeg_turbo.out}/lib/libturbojpeg${stdenv.hostPlatform.extensions.sharedLibrary}";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    numpy
+  ];
+
+  # upstream has no tests, but we want to test whether the library is found
+  checkPhase = ''
+    ${python.interpreter} -c 'from turbojpeg import TurboJPEG; TurboJPEG()'
+  '';
+
+  pythonImportsCheck = [ "turbojpeg" ];
+
+  meta = with lib; {
+    description = "A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image";
+    homepage = "https://github.com/lilohuang/PyTurboJPEG";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyturbojpeg/lib-path.patch b/nixpkgs/pkgs/development/python-modules/pyturbojpeg/lib-path.patch
new file mode 100644
index 000000000000..30e6ed58bac7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyturbojpeg/lib-path.patch
@@ -0,0 +1,28 @@
+diff --git a/turbojpeg.py b/turbojpeg.py
+index 73edb38..bfa8c67 100644
+--- a/turbojpeg.py
++++ b/turbojpeg.py
+@@ -408,22 +408,7 @@ class TurboJPEG(object):
+ 
+     def __find_turbojpeg(self):
+         """returns default turbojpeg library path if possible"""
+-        lib_path = find_library('turbojpeg')
+-        if lib_path is not None:
+-            return lib_path
+-        for lib_path in DEFAULT_LIB_PATHS[platform.system()]:
+-            if os.path.exists(lib_path):
+-                return lib_path
+-        if platform.system() == 'Linux' and 'LD_LIBRARY_PATH' in os.environ:
+-            ld_library_path = os.environ['LD_LIBRARY_PATH']
+-            for path in ld_library_path.split(':'):
+-                lib_path = os.path.join(path, 'libturbojpeg.so.0')
+-                if os.path.exists(lib_path):
+-                    return lib_path
+-        raise RuntimeError(
+-            'Unable to locate turbojpeg library automatically. '
+-            'You may specify the turbojpeg library path manually.\n'
+-            'e.g. jpeg = TurboJPEG(lib_path)')
++        return '@libturbojpeg@'
+ 
+     def __getaddr(self, nda):
+         """returns the memory address for a given ndarray"""
diff --git a/nixpkgs/pkgs/development/python-modules/pytz/default.nix b/nixpkgs/pkgs/development/python-modules/pytz/default.nix
index 0351840b3e0b..1a1e1585d289 100644
--- a/nixpkgs/pkgs/development/python-modules/pytz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pytz/default.nix
@@ -2,17 +2,19 @@
 
 buildPythonPackage rec {
   pname = "pytz";
-  version = "2020.4";
+  version = "2021.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268";
+    sha256 = "sha256-g6SpCJS/OOJDzwUsi1jzgb/pp6SD9qnKsUC8f3AqxNo=";
   };
 
   checkPhase = ''
     ${python.interpreter} -m unittest discover -s pytz/tests
   '';
 
+  pythonImportsCheck = [ "pytz" ];
+
   meta = with lib; {
     description = "World timezone definitions, modern and historical";
     homepage = "https://pythonhosted.org/pytz";
diff --git a/nixpkgs/pkgs/development/python-modules/pyu2f/default.nix b/nixpkgs/pkgs/development/python-modules/pyu2f/default.nix
index c703a8fe30c4..281511192fe5 100644
--- a/nixpkgs/pkgs/development/python-modules/pyu2f/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyu2f/default.nix
@@ -20,7 +20,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ six ];
 
-  checkInputs = [ pytest six mock pyfakefs unittest2 ];
+  checkInputs = [ pytest mock pyfakefs unittest2 ];
 
   checkPhase = ''
     pytest pyu2f/tests
diff --git a/nixpkgs/pkgs/development/python-modules/pyupgrade/default.nix b/nixpkgs/pkgs/development/python-modules/pyupgrade/default.nix
new file mode 100644
index 000000000000..95aa57491ca8
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyupgrade/default.nix
@@ -0,0 +1,31 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, isPy27
+, lib
+, pytestCheckHook
+, tokenize-rt
+}:
+
+buildPythonPackage rec {
+  pname = "pyupgrade";
+  version = "2.10.0";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "asottile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XYeqyyfwtS7dHLxeVvmcifW6UCOlnSMxqF1vxezBjT8=";
+  };
+
+  checkInputs =  [ pytestCheckHook ];
+
+  propagatedBuildInputs = [ tokenize-rt ];
+
+  meta = with lib; {
+    description = "A tool to automatically upgrade syntax for newer versions of the language";
+    homepage    = "https://github.com/asottile/pyupgrade";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyusb/default.nix b/nixpkgs/pkgs/development/python-modules/pyusb/default.nix
index 41207984e0ca..1ad312dd5d6a 100644
--- a/nixpkgs/pkgs/development/python-modules/pyusb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyusb/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyusb";
-  version = "1.1.0";
+  version = "1.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d69ed64bff0e2102da11b3f49567256867853b861178689671a163d30865c298";
+    sha256 = "7d449ad916ce58aff60b89aae0b65ac130f289c24d6a5b7b317742eccffafc38";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pyuv/default.nix b/nixpkgs/pkgs/development/python-modules/pyuv/default.nix
index 0be0d61ed0db..2d276c6dccab 100644
--- a/nixpkgs/pkgs/development/python-modules/pyuv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyuv/default.nix
@@ -1,28 +1,32 @@
 { lib
 , buildPythonPackage
-, isPyPy
-, pkgs
+, fetchFromGitHub
+, libuv
 }:
 
 buildPythonPackage rec {
   pname = "pyuv";
-  version = "1.2.0";
-  disabled = isPyPy;  # see https://github.com/saghul/pyuv/issues/49
+  version = "1.4.0";
 
-  src = pkgs.fetchurl {
-    url = "https://github.com/saghul/pyuv/archive/${pname}-${version}.tar.gz";
-    sha256 = "19yl1l5l6dq1xr8xcv6dhx1avm350nr4v2358iggcx4ma631rycx";
+  src = fetchFromGitHub {
+    owner = "saghul";
+    repo = "pyuv";
+    rev = "pyuv-${version}";
+    sha256 = "1wiwwdylz66lfsjh6p4iv7pfhzvnhwjk332625njizfhz3gq9fwr";
   };
 
-  patches = [ ./pyuv-external-libuv.patch ];
+  setupPyBuildFlags = [ "--use-system-libuv" ];
 
-  buildInputs = [ pkgs.libuv ];
+  buildInputs = [ libuv ];
+
+  doCheck = false; # doesn't work in sandbox
+
+  pythonImportsCheck = [ "pyuv" ];
 
   meta = with lib; {
     description = "Python interface for libuv";
     homepage = "https://github.com/saghul/pyuv";
-    repositories.git = "git://github.com/saghul/pyuv.git";
     license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyuv/pyuv-external-libuv.patch b/nixpkgs/pkgs/development/python-modules/pyuv/pyuv-external-libuv.patch
deleted file mode 100644
index 41e169acd5f5..000000000000
--- a/nixpkgs/pkgs/development/python-modules/pyuv/pyuv-external-libuv.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/setup.py b/setup.py
-index 5071c3b..4b4a176 100644
---- a/setup.py
-+++ b/setup.py
-@@ -7,7 +7,6 @@ try:
-     from setuptools import setup, Extension
- except ImportError:
-     from distutils.core import setup, Extension
--from setup_libuv import libuv_build_ext, libuv_sdist
-
-
- def get_version():
-@@ -35,11 +34,10 @@ setup(name             = "pyuv",
-           "Programming Language :: Python :: 3.3",
-           "Programming Language :: Python :: 3.4"
-       ],
--      cmdclass     = {'build_ext': libuv_build_ext,
--                      'sdist'    : libuv_sdist},
-       packages     = ['pyuv'],
-       ext_modules  = [Extension('pyuv._cpyuv',
-                                 sources = ['src/pyuv.c'],
-+                                libraries = ['uv']
-                      )]
-      )
-
diff --git a/nixpkgs/pkgs/development/python-modules/pyvera/default.nix b/nixpkgs/pkgs/development/python-modules/pyvera/default.nix
index 4415ca7c376d..2439bd468568 100644
--- a/nixpkgs/pkgs/development/python-modules/pyvera/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyvera/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, fetchpatch
 , poetry-core
 , pytest-cov
 , pytest-asyncio
@@ -13,24 +12,16 @@
 
 buildPythonPackage rec {
   pname = "pyvera";
-  version = "0.3.11";
+  version = "0.3.13";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "pavoni";
     repo = pname;
     rev = version;
-    sha256 = "0yi2cjd3jag95xa0k24f7d7agi26ywb3219a0j0k8l2nsx2sdi87";
+    sha256 = "0vh82bwgbq93jrwi9q4da534paknpak8hxi4wwlxh3qcvnpy1njv";
   };
 
-  patches = [
-    (fetchpatch {
-      # build-system section is missing https://github.com/pavoni/pyvera/pull/142
-      url = "https://github.com/pavoni/pyvera/pull/142/commits/e90995a8d55107118d324e8cf189ddf1d9e3aa6c.patch";
-      sha256 = "1psq3fiwg20kcwyybzh5g17dzn5fh29lhm238npyg846innbzgs7";
-    })
-  ];
-
   nativeBuildInputs = [ poetry-core ];
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyvex/default.nix b/nixpkgs/pkgs/development/python-modules/pyvex/default.nix
index ddec4f0f2397..13c54f6a41e6 100644
--- a/nixpkgs/pkgs/development/python-modules/pyvex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyvex/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , archinfo
 , bitstring
 , fetchPypi
@@ -10,11 +11,11 @@
 
 buildPythonPackage rec {
   pname = "pyvex";
-  version = "9.0.5739";
+  version = "9.0.5903";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1jwxxw2kw7wkz7kh8m8vbavzw6m5k6xph7mazfn3k2qbsshh3lk3";
+    sha256 = "sha256-qhLlRlmb48zhjX2u9w6TVVv2gb0E9kSapabiv+u4J2s=";
   };
 
   propagatedBuildInputs = [
@@ -35,5 +36,7 @@ buildPythonPackage rec {
     homepage = "https://github.com/angr/pyvex";
     license = with licenses; [ bsd2 gpl3Plus lgpl3Plus ];
     maintainers = with maintainers; [ fab ];
+    # ERROR: pyvex-X-py3-none-manylinux1_aarch64.whl is not a supported wheel on this platform.
+    broken = stdenv.isAarch64;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/pyvicare/default.nix b/nixpkgs/pkgs/development/python-modules/pyvicare/default.nix
new file mode 100644
index 000000000000..7c87431d80b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyvicare/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, requests_oauthlib
+, simplejson
+}:
+
+buildPythonPackage rec {
+  pname = "pyvicare";
+  version = "0.2.5";
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    pname = "PyViCare";
+    inherit version;
+    sha256 = "16wqqjs238ad6znlz2gjadqj8891226bd02a1106xyz6vbbk2gdk";
+  };
+
+  propagatedBuildInputs = [
+    requests_oauthlib
+    simplejson
+  ];
+
+  # The published tarball on PyPI is incomplete and there are GitHub releases
+  doCheck = false;
+  pythonImportsCheck = [ "PyViCare" ];
+
+  meta = with lib; {
+    description = "Python Library to access Viessmann ViCare API";
+    homepage = "https://github.com/somm15/PyViCare";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyvizio/default.nix b/nixpkgs/pkgs/development/python-modules/pyvizio/default.nix
new file mode 100644
index 000000000000..807278d967d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyvizio/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, click
+, fetchPypi
+, jsonpickle
+, requests
+, tabulate
+, xmltodict
+, zeroconf
+}:
+
+buildPythonPackage rec {
+  pname = "pyvizio";
+  version = "0.1.59";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1j2zbziklx4az55m3997y7yp4xflk7i0gsbdfh7fp9k0qngb2053";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    click
+    jsonpickle
+    requests
+    tabulate
+    xmltodict
+    zeroconf
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pyvizio" ];
+
+  meta = with lib; {
+    description = "Python client for Vizio SmartCast";
+    homepage = "https://github.com/vkorn/pyvizio";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyvolumio/default.nix b/nixpkgs/pkgs/development/python-modules/pyvolumio/default.nix
new file mode 100644
index 000000000000..da3ac35c4622
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyvolumio/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pyvolumio";
+  version = "0.1.3";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "OnFreund";
+    repo = "PyVolumio";
+    rev = "v${version}";
+    sha256 = "0x2dzmd9lwnak2iy6v54y24qjq37y3nlfhsvx7hddgv8jj1klvap";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "pyvolumio" ];
+
+  meta = with lib; {
+    description = "Python module to control Volumio";
+    homepage = "https://github.com/OnFreund/PyVolumio";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pywbem/default.nix b/nixpkgs/pkgs/development/python-modules/pywbem/default.nix
index 698e4ef94ca3..d6c389c22aed 100644
--- a/nixpkgs/pkgs/development/python-modules/pywbem/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pywbem/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "pywbem";
-  version = "1.1.2";
+  version = "1.1.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9GpxbgNsXZJj2M5MvosNnEe+9pY+Qz64RD/7ZIDqmII=";
+    sha256 = "2abb6443f4debae56af7abefadb9fa5b8af9b53fc9bcf67f6c01a78db1064300";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/pywebview/default.nix b/nixpkgs/pkgs/development/python-modules/pywebview/default.nix
index 545fb2367322..a020517dcce2 100644
--- a/nixpkgs/pkgs/development/python-modules/pywebview/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pywebview/default.nix
@@ -1,25 +1,53 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder
-, importlib-resources, pytest, xvfb_run }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, importlib-resources
+, pyqtwebengine
+, pytest
+, pythonOlder
+, qt5
+, xvfb_run
+}:
 
 buildPythonPackage rec {
   pname = "pywebview";
-  version = "3.3.1";
+  version = "3.4";
   disabled = pythonOlder "3.5";
 
   src = fetchFromGitHub {
     owner = "r0x0r";
     repo = "pywebview";
     rev = version;
-    sha256 = "015z7n0hdgkzn0p7aw1xsv6lwc260p8q67jx0zyd1zghnwyj8k79";
+    sha256 = "sha256-3JHwtw8oReolEl4k8cdt7GCVGNkfWWJN6EnZYHxzDO8=";
   };
 
-  propagatedBuildInputs = lib.optionals (pythonOlder "3.7") [ importlib-resources ];
+  nativeBuildInputs = [
+    qt5.wrapQtAppsHook
+  ];
 
-  checkInputs = [ pytest xvfb_run ];
+  propagatedBuildInputs = [
+    pyqtwebengine
+  ] ++ lib.optionals (pythonOlder "3.7") [ importlib-resources ];
+
+  checkInputs = [
+    pytest
+    xvfb_run
+  ];
 
   checkPhase = ''
+    # Cannot create directory /homeless-shelter/.... Error: FILE_ERROR_ACCESS_DENIED
+    export HOME=$TMPDIR
+    # QStandardPaths: XDG_RUNTIME_DIR not set
+    export XDG_RUNTIME_DIR=$HOME/xdg-runtime-dir
+
     pushd tests
+    substituteInPlace run.sh \
+      --replace "PYTHONPATH=.." "PYTHONPATH=$PYTHONPATH" \
+      --replace "pywebviewtest test_js_api.py::test_concurrent ''${PYTEST_OPTIONS}" "# skip flaky test_js_api.py::test_concurrent"
+
     patchShebangs run.sh
+    wrapQtApp run.sh
+
     xvfb-run -s '-screen 0 800x600x24' ./run.sh
     popd
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/pyxattr/default.nix b/nixpkgs/pkgs/development/python-modules/pyxattr/default.nix
index cba29c5cc9ed..35bfaecda977 100644
--- a/nixpkgs/pkgs/development/python-modules/pyxattr/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyxattr/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
     pname = "pyxattr";
-    version = "0.7.1";
+    version = "0.7.2";
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "965388dd629334e850aa989a67d2360ec8257cfe8f67d07c29f980d3152f2882";
+      sha256 = "68477027e6d3310669f98aaef15393bfcd9b2823d7a7f00a6f1d91a3c971ae64";
     };
 
     # IOError: [Errno 95] Operation not supported (expected)
diff --git a/nixpkgs/pkgs/development/python-modules/pyxeoma/default.nix b/nixpkgs/pkgs/development/python-modules/pyxeoma/default.nix
index 9b8b6eeac8ff..2fa840078df8 100644
--- a/nixpkgs/pkgs/development/python-modules/pyxeoma/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyxeoma/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "pyxeoma";
-  version = "1.4.1";
+  version = "1.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0c9q6xdh2ciisv0crlz069haz01gfkhd5kasyr14jng4vjpzinc7";
+    sha256 = "c6a3ed855025662df9b35ae2d1cac3fa41775a7612655804bde7276a8cab8d1c";
   };
 
   propagatedBuildInputs = [ aiohttp ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyxiaomigateway/default.nix b/nixpkgs/pkgs/development/python-modules/pyxiaomigateway/default.nix
new file mode 100644
index 000000000000..1d3a83177edb
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/pyxiaomigateway/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, cryptography
+}:
+
+buildPythonPackage rec {
+  pname = "pyxiaomigateway";
+  version = "0.13.4";
+
+  src = fetchFromGitHub {
+    owner = "Danielhiversen";
+    repo = "PyXiaomiGateway";
+    rev = version;
+    sha256 = "1xg89sdds04wgil88ihs84cjr3df6lajjbkyb1aymj638ibdyqns";
+  };
+
+  propagatedBuildInputs = [ cryptography ];
+
+  # Tests are not mocking the gateway completely
+  doCheck = false;
+  pythonImportsCheck = [ "xiaomi_gateway" ];
+
+  meta = with lib; {
+    description = "Python library to communicate with the Xiaomi Gateway";
+    homepage = "https://github.com/Danielhiversen/PyXiaomiGateway/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/pyxml/default.nix b/nixpkgs/pkgs/development/python-modules/pyxml/default.nix
index a528de8e0ca2..49796054b564 100644
--- a/nixpkgs/pkgs/development/python-modules/pyxml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyxml/default.nix
@@ -10,7 +10,7 @@ buildPythonPackage rec {
     sha256 = "04wc8i7cdkibhrldy6j65qp5l75zjxf5lx6qxdxfdf2gb3wndawz";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
   buildPhase = "${python.interpreter} ./setup.py build";
   installPhase = ''
     ${python.interpreter} ./setup.py install --prefix="$out" || exit 1
diff --git a/nixpkgs/pkgs/development/python-modules/pyxnat/default.nix b/nixpkgs/pkgs/development/python-modules/pyxnat/default.nix
index 700188f15dd1..87f6b9756ed3 100644
--- a/nixpkgs/pkgs/development/python-modules/pyxnat/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyxnat/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, isPy27
+, pythonOlder
 , nose
 , lxml
 , requests
@@ -10,7 +10,7 @@
 buildPythonPackage rec {
   pname = "pyxnat";
   version = "1.4";
-  disabled = isPy27;
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
@@ -19,6 +19,14 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ lxml requests ];
 
+  # future is not used, and pathlib is installed part of python38+
+  # w/o an external package
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace "pathlib>=1.0" "" \
+      --replace "future>=0.16" ""
+  '';
+
   checkInputs = [ nose ];
   checkPhase = "nosetests pyxnat/tests";
   doCheck = false;  # requires a docker container running an XNAT server
diff --git a/nixpkgs/pkgs/development/python-modules/pyyaml/default.nix b/nixpkgs/pkgs/development/python-modules/pyyaml/default.nix
index 95ceeab3a04b..93cfad78d50e 100644
--- a/nixpkgs/pkgs/development/python-modules/pyyaml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyyaml/default.nix
@@ -2,18 +2,13 @@
 
 buildPythonPackage rec {
   pname = "PyYAML";
-  version = "5.3.1";
+  version = "5.4.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq";
+    sha256 = "607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e";
   };
 
-  # force regeneration using Cython
-  postPatch = ''
-    rm ext/_yaml.c
-  '';
-
   nativeBuildInputs = [ cython buildPackages.stdenv.cc ];
 
   buildInputs = [ libyaml ];
diff --git a/nixpkgs/pkgs/development/python-modules/pyzerproc/default.nix b/nixpkgs/pkgs/development/python-modules/pyzerproc/default.nix
index 8040458bf766..99f1ac7fd099 100644
--- a/nixpkgs/pkgs/development/python-modules/pyzerproc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/pyzerproc/default.nix
@@ -5,7 +5,6 @@
 , buildPythonPackage
 , fetchFromGitHub
 , pytest-asyncio
-, pytest-cov
 , pytest-mock
 , pytestCheckHook
 , pythonOlder
@@ -13,19 +12,18 @@
 
 buildPythonPackage rec {
   pname = "pyzerproc";
-  version = "0.4.6";
+  version = "0.4.9";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "emlove";
     repo = pname;
     rev = version;
-    sha256 = "1qlxvvy9fyff56dvc46nsd5ngkxqhdi7s4gwfndj7dn76j81srpq";
+    sha256 = "11bsvmvazx9gpj0w80b6wgdp41z8y2sk6bhkj3ps7grsgr59n7rz";
   };
 
-  # Remove pytest-runner, https://github.com/emlove/pyzerproc/pull/1
-  patchPhase = ''
-    substituteInPlace setup.py --replace "'pytest-runner'," ""
+  postPatch = ''
+    sed -i "/--cov/d" setup.cfg
   '';
 
   propagatedBuildInputs = [
@@ -34,11 +32,11 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    asynctest
     pytest-asyncio
-    pytest-cov
     pytest-mock
     pytestCheckHook
+  ] ++ lib.optionals (pythonOlder "3.8") [
+    asynctest
   ];
 
   pythonImportsCheck = [ "pyzerproc" ];
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit-aer/default.nix b/nixpkgs/pkgs/development/python-modules/qiskit-aer/default.nix
index e5eb877b6b2b..10a3b4482fce 100644
--- a/nixpkgs/pkgs/development/python-modules/qiskit-aer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qiskit-aer/default.nix
@@ -2,7 +2,6 @@
 , pythonOlder
 , buildPythonPackage
 , fetchFromGitHub
-, fetchpatch
   # C Inputs
 , blas
 , catch2
@@ -28,7 +27,8 @@
 
 buildPythonPackage rec {
   pname = "qiskit-aer";
-  version = "0.7.1";
+  version = "0.7.6";
+  format = "pyproject";
 
   disabled = pythonOlder "3.6";
 
@@ -36,7 +36,7 @@ buildPythonPackage rec {
     owner = "Qiskit";
     repo = "qiskit-aer";
     rev = version;
-    sha256 = "07l0wavdknx0y4vy0hwgw24365sg4nb6ygl3lpa098np85qgyn4y";
+    sha256 = "0595as4rxjrd5dqx54ywz3rjsjk0z7r41bq0z9r8y1h7zgvvlrmn";
   };
 
   nativeBuildInputs = [
@@ -61,10 +61,14 @@ buildPythonPackage rec {
     pybind11
   ];
 
-  patches = [
-    # TODO: remove in favor of qiskit-aer PR #877 patch once accepted/stable
-    ./remove-conan-install.patch
-  ];
+  postPatch = ''
+    substituteInPlace setup.py --replace "'cmake!=3.17,!=3.17.0'," ""
+  '';
+
+  # Disable using conan for build
+  preBuild = ''
+    export DISABLE_CONAN=1
+  '';
 
   dontUseCmakeConfigure = true;
 
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit-aer/remove-conan-install.patch b/nixpkgs/pkgs/development/python-modules/qiskit-aer/remove-conan-install.patch
deleted file mode 100644
index 1c5ae87b082f..000000000000
--- a/nixpkgs/pkgs/development/python-modules/qiskit-aer/remove-conan-install.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index efeacfc..77bd6bd 100755
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -121,7 +121,11 @@ endif()
- # Looking for external libraries
- #
- 
--setup_conan()
-+find_package(muparserx REQUIRED)
-+find_package(nlohmann_json REQUIRED)
-+find_package(spdlog REQUIRED)
-+# for tests only
-+find_package(catch2)
- 
- # If we do not set them with a space CMake fails afterwards if nothing is set for this vars!
- set(AER_LINKER_FLAGS " ")
-@@ -269,16 +273,16 @@ endif()
- set(AER_LIBRARIES
- 	${AER_LIBRARIES}
- 	${BLAS_LIBRARIES}
--	CONAN_PKG::nlohmann_json
-+	nlohmann_json
- 	Threads::Threads
--	CONAN_PKG::spdlog
-+	spdlog
- 	${DL_LIB}
- 	${THRUST_DEPENDANT_LIBS})
- 
- set(AER_COMPILER_DEFINITIONS ${AER_COMPILER_DEFINITIONS} ${CONAN_DEFINES})
- # Cython build is only enabled if building through scikit-build.
- if(SKBUILD) # Terra Addon build
--	set(AER_LIBRARIES ${AER_LIBRARIES} CONAN_PKG::muparserx)
-+	set(AER_LIBRARIES ${AER_LIBRARIES} muparserx)
- 	add_subdirectory(qiskit/providers/aer/pulse/qutip_extra_lite/cy)
- 	add_subdirectory(qiskit/providers/aer/backends/wrappers)
- 	add_subdirectory(src/open_pulse)
-diff --git a/setup.py b/setup.py
-index fd71e9f..1561cc4 100644
---- a/setup.py
-+++ b/setup.py
-@@ -11,12 +11,6 @@ import inspect
- 
- PACKAGE_NAME = os.getenv('QISKIT_AER_PACKAGE_NAME', 'qiskit-aer')
- 
--try:
--    from conans import client
--except ImportError:
--    subprocess.call([sys.executable, '-m', 'pip', 'install', 'conan'])
--    from conans import client
--
- try:
-     from skbuild import setup
- except ImportError:
-@@ -46,8 +40,6 @@ common_requirements = [
- 
- setup_requirements = common_requirements + [
-     'scikit-build',
--    'cmake!=3.17,!=3.17.0',
--    'conan>=1.22.2'
- ]
- 
- requirements = common_requirements + ['qiskit-terra>=0.12.0']
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit-aqua/default.nix b/nixpkgs/pkgs/development/python-modules/qiskit-aqua/default.nix
index 11274c525f09..0e6e8e25b538 100644
--- a/nixpkgs/pkgs/development/python-modules/qiskit-aqua/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qiskit-aqua/default.nix
@@ -34,7 +34,7 @@
 
 buildPythonPackage rec {
   pname = "qiskit-aqua";
-  version = "0.8.1";
+  version = "0.8.2";
 
   disabled = pythonOlder "3.6";
 
@@ -43,7 +43,7 @@ buildPythonPackage rec {
     owner = "Qiskit";
     repo = "qiskit-aqua";
     rev = version;
-    sha256 = "11qyya3vyq50wpzrzzl8v46yx5p72rhpqhybwn47qgazxgg82r1b";
+    sha256 = "sha256-ybf8bXqsVk6quYi0vrfo/Mplk7Nr7tQS7cevXxI9khw=";
   };
 
   # Optional packages: pyscf (see below NOTE) & pytorch. Can install via pip/nix if needed.
@@ -73,13 +73,8 @@ buildPythonPackage rec {
   # It can also be installed at runtime from the pip wheel.
   # We disable appropriate tests below to allow building without pyscf installed
 
-  # NOTE: we remove cplex b/c we can't build pythonPackages.cplex.
-  # cplex is only distributed in manylinux1 wheel (no source), and Nix python is not manylinux1 compatible
-
   postPatch = ''
-    substituteInPlace setup.py \
-      --replace "pyscf; sys_platform != 'win32'" "" \
-      --replace "cplex; python_version >= '3.6' and python_version < '3.8'" ""
+    substituteInPlace setup.py --replace "docplex==2.15.194" "docplex"
 
     # Add ImportWarning when running qiskit.chemistry (pyscf is a chemistry package) that pyscf is not included
     echo -e "\nimport warnings\ntry: import pyscf;\nexcept ImportError:\n    " \
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit-ibmq-provider/default.nix b/nixpkgs/pkgs/development/python-modules/qiskit-ibmq-provider/default.nix
index 7374d7ce017d..80f060c66815 100644
--- a/nixpkgs/pkgs/development/python-modules/qiskit-ibmq-provider/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qiskit-ibmq-provider/default.nix
@@ -22,6 +22,7 @@
 , nbconvert
 , nbformat
 , pproxy
+, qiskit-aer
 , vcrpy
 }:
 
@@ -38,7 +39,7 @@ let
 in
 buildPythonPackage rec {
   pname = "qiskit-ibmq-provider";
-  version = "0.11.1";
+  version = "0.12.2";
 
   disabled = pythonOlder "3.6";
 
@@ -46,7 +47,7 @@ buildPythonPackage rec {
     owner = "Qiskit";
     repo = pname;
     rev = version;
-    sha256 = "0b5mnq8f5844idnsmp84lpkvlpszfwwi998yvggcgaayw1dbk53h";
+    sha256 = "0yil363mqssq0453nrwxgkjivzk3a4jgbnaf21bp7lwfcl2jdhqm";
   };
 
   propagatedBuildInputs = [
@@ -64,6 +65,7 @@ buildPythonPackage rec {
     nbconvert
     nbformat
     pproxy
+    qiskit-aer
     vcrpy
   ] ++ lib.optionals (!withVisualization) visualizationPackages;
 
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit-ignis/default.nix b/nixpkgs/pkgs/development/python-modules/qiskit-ignis/default.nix
index b5295dbd0411..f73b46a520a3 100644
--- a/nixpkgs/pkgs/development/python-modules/qiskit-ignis/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qiskit-ignis/default.nix
@@ -2,7 +2,6 @@
 , pythonOlder
 , buildPythonPackage
 , fetchFromGitHub
-, fetchpatch
 , python
 , numpy
 , qiskit-terra
@@ -24,7 +23,7 @@
 
 buildPythonPackage rec {
   pname = "qiskit-ignis";
-  version = "0.5.1";
+  version = "0.5.2";
 
   disabled = pythonOlder "3.6";
 
@@ -33,11 +32,11 @@ buildPythonPackage rec {
     owner = "Qiskit";
     repo = "qiskit-ignis";
     rev = version;
-    sha256 = "17kplmi17axcbbgw35dzfr3d5bzfymxfni9sf6v14223c5674p4y";
+    sha256 = "sha256-Kl3tnoamZrCxwoDdu8betG6Lf3CC3D8R2TYiq8Zl3Aw=";
   };
 
   # hacky, fix https://github.com/Qiskit/qiskit-ignis/issues/532.
-  # TODO: remove on qiskit-ignis v0.5.1
+  # TODO: remove on qiskit-ignis v0.5.2
   postPatch = ''
     substituteInPlace qiskit/ignis/mitigation/expval/base_meas_mitigator.py --replace "plt.axes" "'plt.axes'"
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit-terra/default.nix b/nixpkgs/pkgs/development/python-modules/qiskit-terra/default.nix
index 89d39b718cdf..ff51e82e351e 100644
--- a/nixpkgs/pkgs/development/python-modules/qiskit-terra/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qiskit-terra/default.nix
@@ -56,7 +56,7 @@ in
 
 buildPythonPackage rec {
   pname = "qiskit-terra";
-  version = "0.16.1";
+  version = "0.16.4";
 
   disabled = pythonOlder "3.6";
 
@@ -64,7 +64,7 @@ buildPythonPackage rec {
     owner = "Qiskit";
     repo = pname;
     rev = version;
-    sha256 = "0007glsbrvq9swamvz8r76z9nzh46b388y0ds1dypczxpwlp9xcq";
+    sha256 = "sha256-/rWlPfpAHoMedKG42jfUYt0Ezq7i+9dkyPllavkg4cc=";
   };
 
   nativeBuildInputs = [ cython ];
diff --git a/nixpkgs/pkgs/development/python-modules/qiskit/default.nix b/nixpkgs/pkgs/development/python-modules/qiskit/default.nix
index 7c79d517ce5d..97603dc3cde9 100644
--- a/nixpkgs/pkgs/development/python-modules/qiskit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qiskit/default.nix
@@ -15,7 +15,7 @@
 buildPythonPackage rec {
   pname = "qiskit";
   # NOTE: This version denotes a specific set of subpackages. See https://qiskit.org/documentation/release_notes.html#version-history
-  version = "0.23.1";
+  version = "0.24.1";
 
   disabled = pythonOlder "3.6";
 
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "qiskit";
     repo = "qiskit";
     rev = version;
-    sha256 = "0x4cqx1wqqj7h5g3vdag694qjzsmvhpw25yrlcs70mh5ywdp28x1";
+    sha256 = "0qfz69n8sl7sk4hzygni9qars9q1cyz0n3bv1lca00ia5qsc72d2";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/qscintilla-qt5/default.nix b/nixpkgs/pkgs/development/python-modules/qscintilla-qt5/default.nix
index 2ee9c82f08db..dcbe213966f9 100644
--- a/nixpkgs/pkgs/development/python-modules/qscintilla-qt5/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qscintilla-qt5/default.nix
@@ -14,6 +14,8 @@ buildPythonPackage {
   buildInputs = [ qscintilla ];
   propagatedBuildInputs = [ pyqt5 ];
 
+  dontWrapQtApps = true;
+
   postPatch = ''
     substituteInPlace Python/configure.py \
       --replace \
diff --git a/nixpkgs/pkgs/development/python-modules/qtawesome/default.nix b/nixpkgs/pkgs/development/python-modules/qtawesome/default.nix
index 4945bead42d4..af9e724a9e00 100644
--- a/nixpkgs/pkgs/development/python-modules/qtawesome/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qtawesome/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "QtAwesome";
-  version = "1.0.1";
+  version = "1.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d612a313e531966d17f5a8fb7604faba961cf7ce3c77a9168c6f60e60140b767";
+    sha256 = "771dd95ac4f50d647d18b4e892fd310a580b56d258476554c7b3498593dfd887";
   };
 
   propagatedBuildInputs = [ qtpy six ];
diff --git a/nixpkgs/pkgs/development/python-modules/qtconsole/default.nix b/nixpkgs/pkgs/development/python-modules/qtconsole/default.nix
index f29d33d25ae3..da45b37bee95 100644
--- a/nixpkgs/pkgs/development/python-modules/qtconsole/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/qtconsole/default.nix
@@ -15,11 +15,11 @@
 
 buildPythonPackage rec {
   pname = "qtconsole";
-  version = "5.0.1";
+  version = "5.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4d7dd4eae8a90d0b2b19b31794b30f137238463998989734a3acb8a53b506bab";
+    sha256 = "404994edfe33c201d6bd0c4bd501b00c16125071573c938533224992bea0b30f";
   };
 
   checkInputs = [ nose ] ++ lib.optionals isPy27 [mock];
diff --git a/nixpkgs/pkgs/development/python-modules/quandl/default.nix b/nixpkgs/pkgs/development/python-modules/quandl/default.nix
index 56b80a4676b8..0247d20ec7d6 100644
--- a/nixpkgs/pkgs/development/python-modules/quandl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/quandl/default.nix
@@ -46,6 +46,8 @@ buildPythonPackage rec {
     importlib-metadata
   ];
 
+  pythonImportsCheck = [ "quandl" ];
+
   meta = with lib; {
     description = "Quandl Python client library";
     homepage = "https://github.com/quandl/quandl-python";
diff --git a/nixpkgs/pkgs/development/python-modules/questionary/default.nix b/nixpkgs/pkgs/development/python-modules/questionary/default.nix
new file mode 100644
index 000000000000..ecb33f6adb15
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/questionary/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, poetry
+, prompt_toolkit
+, pytest-cov
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "questionary";
+  version = "1.9.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tmbo";
+    repo = pname;
+    rev = version;
+    sha256 = "1x748bz7l2r48031dj6vr6jvvac28pv6vx1bina4lz60h1qac1kf";
+  };
+
+  nativeBuildInputs = [ poetry ];
+
+  propagatedBuildInputs = [ prompt_toolkit ];
+
+  checkInputs = [
+    pytest-cov
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "questionary" ];
+
+  meta = with lib; {
+    description = "Python library to build command line user prompts";
+    homepage = "https://github.com/bachya/regenmaschine";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/rabbitpy/default.nix b/nixpkgs/pkgs/development/python-modules/rabbitpy/default.nix
index 0de5d6de3bba..57c52ff49ba9 100644
--- a/nixpkgs/pkgs/development/python-modules/rabbitpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rabbitpy/default.nix
@@ -38,6 +38,10 @@ buildPythonPackage rec {
     description = "A pure python, thread-safe, minimalistic and pythonic RabbitMQ client library";
     homepage = "https://pypi.python.org/pypi/rabbitpy";
     license = licenses.bsd3;
+
+    # broken by pamqp==3, tracked in
+    # https://github.com/gmr/rabbitpy/issues/125
+    broken = true;
   };
 
 }
diff --git a/nixpkgs/pkgs/development/python-modules/radiotherm/default.nix b/nixpkgs/pkgs/development/python-modules/radiotherm/default.nix
new file mode 100644
index 000000000000..9cefe8839c1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/radiotherm/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, mock
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "radiotherm";
+  version = "2.1.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "mhrivnak";
+    repo = pname;
+    rev = version;
+    sha256 = "0p37pc7l2malmjfkdlh4q2cfa6dqpsk1rah2j2xil0pj57ai6bks";
+  };
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "radiotherm" ];
+
+  meta = with lib; {
+    description = "Python library for Wifi Radiothermostat";
+    homepage = "https://github.com/mhrivnak/radiotherm";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/rapidfuzz/default.nix b/nixpkgs/pkgs/development/python-modules/rapidfuzz/default.nix
new file mode 100644
index 000000000000..8743e5014e04
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/rapidfuzz/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, pytestCheckHook
+, hypothesis
+, pandas
+}:
+
+buildPythonPackage rec {
+  pname = "rapidfuzz";
+  version = "1.4.1";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "maxbachmann";
+    repo = "RapidFuzz";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-uZdD25ATJgRrDAHYSQNp7NvEmW7p3LD9vNmxAbf5Mwk=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+    hypothesis
+    pandas
+  ];
+
+  disabledTests = [
+    "test_levenshtein_block" # hypothesis data generation too slow
+  ];
+
+  pythonImportsCheck = [
+    "rapidfuzz.fuzz"
+    "rapidfuzz.string_metric"
+    "rapidfuzz.process"
+    "rapidfuzz.utils"
+  ];
+
+  meta = with lib; {
+    description = "Rapid fuzzy string matching";
+    homepage = "https://github.com/maxbachmann/rapidfuzz";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/ratelimit/default.nix b/nixpkgs/pkgs/development/python-modules/ratelimit/default.nix
new file mode 100644
index 000000000000..f706d043bf86
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ratelimit/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "ratelimit";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "tomasbasham";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04hy3hhh5xdqcsz0lx8j18zbj88kh5ik4wyi5d3a5sfy2hx70in2";
+  };
+
+  postPatch = ''
+    sed -i "/--cov/d" pytest.ini
+  '';
+
+  checkInputs = [ pytestCheckHook ];
+
+  pytestFlagsArray = [ "tests" ];
+
+  pythonImportsCheck = [ "ratelimit" ];
+
+  meta = with lib; {
+    description = "Python API Rate Limit Decorator";
+    homepage = "https://github.com/tomasbasham/ratelimit";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/rdkit/default.nix b/nixpkgs/pkgs/development/python-modules/rdkit/default.nix
index b747304446b7..97f2e5a6afc2 100644
--- a/nixpkgs/pkgs/development/python-modules/rdkit/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rdkit/default.nix
@@ -40,8 +40,8 @@ let
   };
 in
 buildPythonPackage rec {
-  version = "2020.09.3";
   pname = "rdkit";
+  version = "2020.09.5";
 
   src =
     let
@@ -51,7 +51,7 @@ buildPythonPackage rec {
       owner = pname;
       repo = pname;
       rev = "Release_${versionTag}";
-      sha256 = "1k1wvzcd1yfx4nhz3iq2aaadzdk5w6sfcb4imhvm7pkbzij0nicx";
+      sha256 = "1ycbjia223d0w9xiwk36x2vkdidsx198rzkfyxz48cbax9vvklzq";
     };
 
   unpackPhase = ''
@@ -89,7 +89,7 @@ buildPythonPackage rec {
   ];
 
   hardeningDisable = [ "format" ]; # required by yaehmop
-  # doCheck = false;
+
   dontUseSetuptoolsBuild = true;
   dontUsePipInstall = true;
   dontUseSetuptoolsCheck = true;
diff --git a/nixpkgs/pkgs/development/python-modules/readme_renderer/default.nix b/nixpkgs/pkgs/development/python-modules/readme_renderer/default.nix
index 57a84e69d205..0d22a0c56c9f 100644
--- a/nixpkgs/pkgs/development/python-modules/readme_renderer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/readme_renderer/default.nix
@@ -1,40 +1,45 @@
 { lib
+, bleach
 , buildPythonPackage
-, fetchPypi
-, pytest
-, mock
 , cmarkgfm
-, bleach
 , docutils
+, fetchPypi
 , future
+, mock
 , pygments
-, six
+, pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "readme_renderer";
-  version = "28.0";
+  version = "29.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6b7e5aa59210a40de72eb79931491eaf46fefca2952b9181268bd7c7c65c260a";
+    sha256 = "sha256-kv1awr+Gd/MQ8zA6pLzludX58glKuYwp8TeR17gFo9s=";
   };
 
-  checkInputs = [ pytest mock ];
-
   propagatedBuildInputs = [
-    bleach cmarkgfm docutils future pygments six
+    bleach
+    cmarkgfm
+    docutils
+    future
+    pygments
+  ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    # disable one failing test case
-    # fixtures test is failing for incorrect class name
-    py.test -k "not test_invalid_link and not fixtures"
-  '';
+  pythonImportsCheck = [ "readme_renderer" ];
 
-  meta = {
-    description = "readme_renderer is a library for rendering readme descriptions for Warehouse";
+  meta = with lib; {
+    description = "Python library for rendering readme descriptions";
     homepage = "https://github.com/pypa/readme_renderer";
-    license = lib.licenses.asl20;
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/readthedocs-sphinx-ext/default.nix b/nixpkgs/pkgs/development/python-modules/readthedocs-sphinx-ext/default.nix
index 1a97320dc36a..ef6975b29df7 100644
--- a/nixpkgs/pkgs/development/python-modules/readthedocs-sphinx-ext/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/readthedocs-sphinx-ext/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "readthedocs-sphinx-ext";
-  version = "2.1.1";
+  version = "2.1.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1d8343982cae238da82c809dcbd82d53f9560b50e17b1dd727123f576385139d";
+    sha256 = "209c4b5ecf233b8bb44fcb8b4548460b0806e347ce50fd8172adcb7d23969a4a";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/regenmaschine/default.nix b/nixpkgs/pkgs/development/python-modules/regenmaschine/default.nix
index 3380ef99f180..02ac2da96726 100644
--- a/nixpkgs/pkgs/development/python-modules/regenmaschine/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/regenmaschine/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname = "regenmaschine";
-  version = "3.1.1";
+  version = "3.1.2";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
     rev = version;
-    sha256 = "0m6i7vspp8ssdk2k32kznql1j8gkp300kzb7pk67hzvpijdy3mca";
+    sha256 = "sha256-lARti3Sb/jh7h8x+lFLqkM/BlL6XmELm46owsL041Cw=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/nixpkgs/pkgs/development/python-modules/reportlab/default.nix b/nixpkgs/pkgs/development/python-modules/reportlab/default.nix
index 3a668077a383..ace36423c191 100644
--- a/nixpkgs/pkgs/development/python-modules/reportlab/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/reportlab/default.nix
@@ -11,11 +11,11 @@ let
   ft = freetype.overrideAttrs (oldArgs: { dontDisableStatic = true; });
 in buildPythonPackage rec {
   pname = "reportlab";
-  version = "3.5.55";
+  version = "3.5.59";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4f307accda32c9f17015ed77c7424f904514e349dff063f78d2462d715963e53";
+    sha256 = "a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536";
   };
 
   checkInputs = [ glibcLocales ];
diff --git a/nixpkgs/pkgs/development/python-modules/requests-aws4auth/default.nix b/nixpkgs/pkgs/development/python-modules/requests-aws4auth/default.nix
index a2e92283dc72..3267b0a78652 100644
--- a/nixpkgs/pkgs/development/python-modules/requests-aws4auth/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/requests-aws4auth/default.nix
@@ -1,4 +1,5 @@
-{ lib, buildPythonPackage, fetchPypi, python, requests }:
+{ lib, buildPythonPackage, fetchPypi, python, requests, six }:
+
 with lib;
 buildPythonPackage rec {
   pname = "requests-aws4auth";
@@ -9,7 +10,7 @@ buildPythonPackage rec {
     sha256 = "9a4a5f4a61c49f098f5f669410308ac5b0ea2682fd511ee3a4f9ff73b5bb275a";
   };
 
-  propagatedBuildInputs = [ requests ];
+  propagatedBuildInputs = [ requests six ];
 
   # pypi package no longer contains tests
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/requests-kerberos/default.nix b/nixpkgs/pkgs/development/python-modules/requests-kerberos/default.nix
index 73272990e0f2..0a023dab8714 100644
--- a/nixpkgs/pkgs/development/python-modules/requests-kerberos/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/requests-kerberos/default.nix
@@ -1,4 +1,12 @@
-{ lib, fetchFromGitHub, buildPythonPackage, requests, pykerberos, mock }:
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, cryptography
+, requests
+, pykerberos
+, pytestCheckHook
+, mock
+}:
 
 buildPythonPackage rec {
   pname = "requests-kerberos";
@@ -12,16 +20,26 @@ buildPythonPackage rec {
     sha256 = "1qw96aw84nljh9cip372mfv50p1yyirfgigavvavgpc3c5g278s6";
   };
 
-  checkInputs = [ mock ];
-  propagatedBuildInputs = [ requests pykerberos ];
+  propagatedBuildInputs = [
+    cryptography
+    requests
+    pykerberos
+  ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
 
   # they have a setup.py which mentions a test suite that doesn't exist...
   patches = [ ./fix_setup.patch ];
 
+  pythonImportsCheck = [ "requests_kerberos" ];
+
   meta = with lib; {
-    description = "An authentication handler for using Kerberos with Python Requests.";
-    homepage    = "https://github.com/requests/requests-kerberos";
-    license     = licenses.isc;
+    description = "An authentication handler for using Kerberos with Python Requests";
+    homepage = "https://github.com/requests/requests-kerberos";
+    license = licenses.isc;
     maintainers = with maintainers; [ catern ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/requests-pkcs12/default.nix b/nixpkgs/pkgs/development/python-modules/requests-pkcs12/default.nix
new file mode 100644
index 000000000000..c58e8a926c82
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/requests-pkcs12/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pyopenssl
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "requests-pkcs12";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "m-click";
+    repo = "requests_pkcs12";
+    rev = version;
+    sha256 = "09nm3c6v911d1vwwi0f7mzapbkq7rnsl7026pb13j6ma8pkxznms";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    pyopenssl
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "requests_pkcs12" ];
+
+  meta = with lib; {
+    description = "PKCS#12 support for the Python requests library";
+    homepage = "https://github.com/m-click/requests_pkcs12";
+    license = with licenses; [ isc ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/requests/default.nix b/nixpkgs/pkgs/development/python-modules/requests/default.nix
index e0dfb9a24a64..5589ec683af4 100644
--- a/nixpkgs/pkgs/development/python-modules/requests/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/requests/default.nix
@@ -1,24 +1,63 @@
-{ lib, fetchPypi, buildPythonPackage
-, urllib3, idna, chardet, certifi
-, pytest }:
+{ lib
+, buildPythonPackage
+, certifi
+, chardet
+, fetchPypi
+, idna
+, pytest-mock
+, pytest-xdist
+, pytestCheckHook
+, urllib3
+, isPy27
+}:
 
 buildPythonPackage rec {
   pname = "requests";
-  version = "2.25.0";
+  version = "2.25.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1y6mb8c0ipd64d5axq2p368yxndp3f966hmabjka2q2a5y9hn6kz";
+    sha256 = "sha256-J5c91KkEpPE7JjoZyGbBO5KjntHJZGVfAl8/jT11uAQ=";
   };
 
-  nativeBuildInputs = [ pytest ];
-  propagatedBuildInputs = [ urllib3 idna chardet certifi ];
-  # sadly, tests require networking
-  doCheck = false;
+  propagatedBuildInputs = [
+    certifi
+    chardet
+    idna
+    urllib3
+  ];
+
+  checkInputs = [
+    pytest-mock
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  # AttributeError: 'KeywordMapping' object has no attribute 'get'
+  doCheck = !isPy27;
+
+  disabledTests = [
+    # Disable tests that require network access and use httpbin
+    "requests.api.request"
+    "requests.models.PreparedRequest"
+    "requests.sessions.Session"
+    "requests"
+    "test_redirecting_to_bad_url"
+    "test_requests_are_updated_each_time"
+    "test_should_bypass_proxies_pass_only_hostname"
+    "test_urllib3_pool_connection_closed"
+    "test_urllib3_retries"
+    "test_use_proxy_from_environment"
+    "TestRequests"
+    "TestTimeout"
+  ];
+
+  pythonImportsCheck = [ "requests" ];
 
   meta = with lib; {
-    description = "An Apache2 licensed HTTP library, written in Python, for human beings";
+    description = "Simple HTTP library for Python";
     homepage = "http://docs.python-requests.org/en/latest/";
     license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/respx/default.nix b/nixpkgs/pkgs/development/python-modules/respx/default.nix
index 61e2016a4975..68da058194bf 100644
--- a/nixpkgs/pkgs/development/python-modules/respx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/respx/default.nix
@@ -1,5 +1,4 @@
 { lib
-, attrs
 , buildPythonPackage
 , fetchFromGitHub
 , httpcore
@@ -8,7 +7,6 @@
 , pytest-cov
 , pytestCheckHook
 , trio
-, xmltodict
 }:
 
 buildPythonPackage rec {
diff --git a/nixpkgs/pkgs/development/python-modules/restfly/default.nix b/nixpkgs/pkgs/development/python-modules/restfly/default.nix
new file mode 100644
index 000000000000..b572b0a385d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/restfly/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, arrow
+, buildPythonPackage
+, fetchFromGitHub
+, pytest-datafiles
+, pytest-vcr
+, pytestCheckHook
+, python-box
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "restfly";
+  version = "1.3.5";
+
+  src = fetchFromGitHub {
+    owner = "stevemcgrath";
+    repo = pname;
+    rev = version;
+    sha256 = "0cq07wj6g3kg7i4qyjp3n3pv13k9p4p43rd6kn139wsn1mh8fr56";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    arrow
+    python-box
+  ];
+
+  checkInputs = [
+    pytest-datafiles
+    pytest-vcr
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "restfly" ];
+
+  meta = with lib; {
+    description = "Python RESTfly API Library Framework";
+    homepage = "https://github.com/stevemcgrath/restfly";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/restview/default.nix b/nixpkgs/pkgs/development/python-modules/restview/default.nix
index acce48c45d04..b2fc2d9beae7 100644
--- a/nixpkgs/pkgs/development/python-modules/restview/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/restview/default.nix
@@ -7,38 +7,32 @@
 , packaging
 , pygments
 , mock
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "restview";
-  version = "2.9.1";
+  version = "2.9.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "de87c84f19526bd4a76505f6d40b51b7bb03ca43b6067c93f82f1c7237ac9e84";
+    sha256 = "1p1jgdvc04ws8kga3r0vrq3m0b52qw3clwyydl96a13wb3mrf03r";
   };
 
-  propagatedBuildInputs = [ docutils readme_renderer packaging pygments ];
-  checkInputs = [ mock ];
-
   patches = [
-    # fix tests after readme_renderer update
-    # TODO remove on next update
     (fetchpatch {
-      url = "https://github.com/mgedmin/restview/commit/541743ded13ae55dea4c437046984a5f13d06e8b.patch";
-      sha256 = "031b1dlqx346bz7afpc011lslnq771lnxb6iy1l2285pph534bci";
+      url = "https://github.com/mgedmin/restview/commit/a1ded30a87c65f3ce59a18497a7fc5099317c2be.patch";
+      sha256 = "1ax7pih456a3nbj8qrrq7hqigbyag4ihzpn6bm0z4y74d0r3v8a5";
     })
   ];
 
-  postPatch = ''
-    # dict order breaking tests
-    sed -i 's@<a href="http://www.example.com" rel="nofollow">@...@' src/restview/tests.py
-  '';
+  propagatedBuildInputs = [ docutils readme_renderer packaging pygments ];
+  checkInputs = [ mock pytestCheckHook ];
 
   meta = {
     description = "ReStructuredText viewer";
     homepage = "https://mg.pov.lt/restview/";
-    license = lib.licenses.gpl2;
+    license = lib.licenses.gpl3Only;
     maintainers = with lib.maintainers; [ koral ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/rethinkdb/default.nix b/nixpkgs/pkgs/development/python-modules/rethinkdb/default.nix
index 947aa505f706..2c6123df5f26 100644
--- a/nixpkgs/pkgs/development/python-modules/rethinkdb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rethinkdb/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "rethinkdb";
-  version = "2.4.7";
+  version = "2.4.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "945b5efdc10f468fc056bd53a4e4224ec4c2fe1a7e83ae47443bbb6e7c7a1f7d";
+    sha256 = "9f75a72bcd899ab0f6b0677873b89fba99c512bc7895eb5fbc1dc9a228b8aaee";
   };
 
   propagatedBuildInputs = [ six setuptools ];
diff --git a/nixpkgs/pkgs/development/python-modules/retworkx/default.nix b/nixpkgs/pkgs/development/python-modules/retworkx/default.nix
index 02a3ef64c573..c4b7a6323e4d 100644
--- a/nixpkgs/pkgs/development/python-modules/retworkx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/retworkx/default.nix
@@ -1,48 +1,41 @@
 { lib
+, buildPythonPackage
+, pythonOlder
 , rustPlatform
-, python
 , fetchFromGitHub
-, pipInstallHook
-, maturin
-, pip
+
   # Check inputs
 , pytestCheckHook
+, networkx
 , numpy
 }:
 
-rustPlatform.buildRustPackage rec {
+buildPythonPackage rec {
   pname = "retworkx";
-  version = "0.6.0";
+  version = "0.8.0";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "Qiskit";
     repo = "retworkx";
     rev = version;
-    sha256 = "11n30ldg3y3y6qxg3hbj837pnbwjkqw3nxq6frds647mmmprrd20";
+    sha256 = "0plpri6a3d6f1000kmcah9066vq2i37d14bdf8sm96493fhpqhrd";
   };
 
-  cargoSha256 = "1vg4yf0k6yypqf9z46zz818mz7fdrgxj7zl6zjf7pnm2r8mq3qw5";
-
-  propagatedBuildInputs = [ python ];
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-+k779gmge8wDdoZrWn9ND47kUqt7pqe75Zuj2Byfefo=";
+  };
 
-  nativeBuildInputs = [ pipInstallHook maturin pip ];
+  nativeBuildInputs = with rustPlatform; [ cargoSetupHook maturinBuildHook ];
 
   # Needed b/c need to check AFTER python wheel is installed (using Rust Build, not buildPythonPackage)
   doCheck = false;
   doInstallCheck = true;
 
-  installCheckInputs = [ pytestCheckHook numpy ];
-
-  buildPhase = ''
-    runHook preBuild
-    maturin build --release --manylinux off --strip
-    runHook postBuild
-  '';
-
-  installPhase = ''
-    install -Dm644 -t dist target/wheels/*.whl
-    pipInstallPhase
-  '';
+  installCheckInputs = [ pytestCheckHook networkx numpy ];
 
   preCheck = ''
     export TESTDIR=$(mktemp -d)
diff --git a/nixpkgs/pkgs/development/python-modules/rfcat/default.nix b/nixpkgs/pkgs/development/python-modules/rfcat/default.nix
new file mode 100644
index 000000000000..7bb390e79a22
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/rfcat/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, future
+, ipython
+, numpy
+, pyserial
+, pyusb
+, hostPlatform
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "rfcat";
+  version = "1.9.5";
+
+  src = fetchFromGitHub {
+    owner = "atlas0fd00m";
+    repo = "rfcat";
+    rev = "v${version}";
+    sha256 = "1mmr7g7ma70sk6vl851430nqnd7zxsk7yb0xngwrdx9z7fbz2ck0";
+  };
+
+  propagatedBuildInputs = [
+    future
+    ipython
+    numpy
+    pyserial
+    pyusb
+  ];
+
+  postInstall = lib.optionalString hostPlatform.isLinux ''
+    mkdir -p $out/etc/udev/rules.d
+    cp etc/udev/rules.d/20-rfcat.rules $out/etc/udev/rules.d
+  '';
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "rflib" ];
+
+  meta = with lib; {
+    description = "Swiss Army knife of sub-GHz ISM band radio";
+    homepage = "https://github.com/atlas0fd00m/rfcat";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ trepetti ];
+    changelog = "https://github.com/atlas0fd00m/rfcat/releases/tag/v${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/ring-doorbell/default.nix b/nixpkgs/pkgs/development/python-modules/ring-doorbell/default.nix
new file mode 100644
index 000000000000..f70e4921b9e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ring-doorbell/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, oauthlib
+, pytestCheckHook
+, pytz
+, requests
+, requests-mock
+, requests_oauthlib
+}:
+
+buildPythonPackage rec {
+  pname = "ring-doorbell";
+  version = "0.7.0";
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    pname = "ring_doorbell";
+    inherit version;
+    sha256 = "1qnx9q9rzxhh0pygl3f9bg21b5zv7csv9h1w4zngdvsphbs0yiwg";
+  };
+
+  propagatedBuildInputs = [
+    oauthlib
+    pytz
+    requests
+    requests_oauthlib
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  pythonImportsCheck = [ "ring_doorbell" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tchellomello/python-ring-doorbell";
+    description = "A Python library to communicate with Ring Door Bell (https://ring.com/)";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ graham33 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/riprova/default.nix b/nixpkgs/pkgs/development/python-modules/riprova/default.nix
new file mode 100644
index 000000000000..adf327208955
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/riprova/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, six
+}:
+
+buildPythonPackage rec{
+  pname = "riprova";
+  version = "0.2.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04drdvjjbh370csv2vb5zamg2aanxqkfm6w361qkybnra4g4g0dz";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  # PyPI archive doesn't have tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "riprova" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/h2non/riprova";
+    description = "Small and versatile library to retry failed operations using different backoff strategies";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mmilata ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/rnc2rng/default.nix b/nixpkgs/pkgs/development/python-modules/rnc2rng/default.nix
index 8e42baf8ff74..62cdb5bbf32e 100644
--- a/nixpkgs/pkgs/development/python-modules/rnc2rng/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rnc2rng/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "rnc2rng";
-  version = "2.6.4";
+  version = "2.6.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8";
+    sha256 = "d354afcf0bf8e3b1e8f8d37d71a8fe5b1c0cf75cbd4b71364a9d90b5108a16e5";
   };
 
   propagatedBuildInputs = [ rply ];
diff --git a/nixpkgs/pkgs/development/python-modules/roboschool/default.nix b/nixpkgs/pkgs/development/python-modules/roboschool/default.nix
index 3e15f18a3dd1..97eee2155a5e 100644
--- a/nixpkgs/pkgs/development/python-modules/roboschool/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/roboschool/default.nix
@@ -44,6 +44,8 @@ buildPythonPackage rec {
     boost
   ];
 
+  dontWrapQtApps = true;
+
   NIX_CFLAGS_COMPILE="-I ${python}/include/${python.libPrefix}";
 
   patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/robotframework-tools/default.nix b/nixpkgs/pkgs/development/python-modules/robotframework-tools/default.nix
index 9b90b25bfb72..77a7fe13df99 100644
--- a/nixpkgs/pkgs/development/python-modules/robotframework-tools/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/robotframework-tools/default.nix
@@ -1,14 +1,13 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, isPy3k
 , robotframework
 , moretools
 , pathpy
 , six
 , zetup
 , modeled
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -20,9 +19,7 @@ buildPythonPackage rec {
     sha256 = "0377ikajf6c3zcy3lc0kh4w9zmlqyplk2c2hb0yyc7h3jnfnya96";
   };
 
-  nativeBuildInputs = [
-    zetup
-  ];
+  nativeBuildInputs = [ zetup ];
 
   propagatedBuildInputs = [
     robotframework
@@ -32,19 +29,21 @@ buildPythonPackage rec {
     modeled
   ];
 
-  checkInputs = [
-    pytest
-  ];
-
-  checkPhase = ''
-    # tests require network
-    pytest test --ignore test/remote/test_remote.py
+  postPatch = ''
+    # Remove upstream's selfmade approach to collect the dependencies
+    # https://github.com/userzimmermann/robotframework-tools/issues/1
+    substituteInPlace setup.py --replace \
+      "setup_requires=SETUP_REQUIRES + (zfg.SETUP_REQUIRES or [])," ""
   '';
 
+  checkInputs = [ pytestCheckHook ];
+  pytestFlagsArray = [ "test" ];
+  pythonImportsCheck = [ "robottools" ];
+
   meta = with lib; {
     description = "Python Tools for Robot Framework and Test Libraries";
-    homepage = "https://bitbucket.org/userzimmermann/robotframework-tools";
-    license = licenses.gpl3;
+    homepage = "https://github.com/userzimmermann/robotframework-tools";
+    license = licenses.gpl3Plus;
     maintainers = [ maintainers.costrouc ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ronin/default.nix b/nixpkgs/pkgs/development/python-modules/ronin/default.nix
new file mode 100644
index 000000000000..c9b0a0d25617
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ronin/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, blessings
+, colorama
+, glob2
+}:
+
+buildPythonPackage rec {
+  pname = "ronin";
+  version = "1.1.1";
+
+  src = fetchPypi {
+    inherit version pname;
+    hash = "sha256-5gZ8S0NR4JzKBIdi/xYtVmFg9ObbCSkT7sz+OKWnK/U=";
+  };
+
+  propagatedBuildInputs = [
+    blessings
+    colorama
+    glob2
+  ];
+
+  pythonImportsCheck = [
+    "ronin"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tliron/ronin/";
+    description = "A straightforward but powerful build system based on Ninja and Python";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/rope/default.nix b/nixpkgs/pkgs/development/python-modules/rope/default.nix
index c4e451aade5e..21d5886efe21 100644
--- a/nixpkgs/pkgs/development/python-modules/rope/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rope/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, pythonAtLeast, nose }:
+{ lib, buildPythonPackage, fetchPypi, fetchpatch, nose }:
 
 buildPythonPackage rec {
   pname = "rope";
@@ -9,6 +9,15 @@ buildPythonPackage rec {
     sha256 = "786b5c38c530d4846aa68a42604f61b4e69a493390e3ca11b88df0fbfdc3ed04";
   };
 
+  patches = [
+    # Python 3.9 ast changes
+    (fetchpatch {
+      url = "https://github.com/python-rope/rope/pull/333.patch";
+      excludes = [ ".github/workflows/main.yml" ];
+      sha256 = "1gq7n1zs18ndmv0p8jg1h5pawabi1m9m9z2w5hgidvqmpmcziky0";
+    })
+  ];
+
   checkInputs = [ nose ];
   checkPhase = ''
     # tracked upstream here https://github.com/python-rope/rope/issues/247
@@ -19,6 +28,6 @@ buildPythonPackage rec {
     description = "Python refactoring library";
     homepage = "https://github.com/python-rope/rope";
     maintainers = with maintainers; [ goibhniu ];
-    license = licenses.gpl2;
+    license = licenses.gpl3Plus;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ropper/default.nix b/nixpkgs/pkgs/development/python-modules/ropper/default.nix
index 5a472ceb1801..1237fd09ea41 100644
--- a/nixpkgs/pkgs/development/python-modules/ropper/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ropper/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonApplication rec {
   pname = "ropper";
-  version = "1.13.3";
+  version = "1.13.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dfc87477c0f53d3d2836a384c106373d761cc435eafc477f299523e5404dda43";
+    sha256 = "6e4226f5ef01951c7df87029535e051c6deb3f156f7511613fb69e8a7f4801fb";
   };
   # XXX tests rely on user-writeable /dev/shm to obtain process locks and return PermissionError otherwise
   # workaround: sudo chmod 777 /dev/shm
diff --git a/nixpkgs/pkgs/development/python-modules/rpy2/2.nix b/nixpkgs/pkgs/development/python-modules/rpy2/2.nix
index e178d3c82116..3108861e9ce2 100644
--- a/nixpkgs/pkgs/development/python-modules/rpy2/2.nix
+++ b/nixpkgs/pkgs/development/python-modules/rpy2/2.nix
@@ -9,7 +9,7 @@
 , rWrapper
 , rPackages
 , pcre
-, lzma
+, xz
 , bzip2
 , zlib
 , icu
@@ -35,7 +35,7 @@ buildPythonPackage rec {
       readline
       R
       pcre
-      lzma
+      xz
       bzip2
       zlib
       icu
diff --git a/nixpkgs/pkgs/development/python-modules/rpy2/default.nix b/nixpkgs/pkgs/development/python-modules/rpy2/default.nix
index 0b042288fb75..c5443a373829 100644
--- a/nixpkgs/pkgs/development/python-modules/rpy2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/rpy2/default.nix
@@ -1,15 +1,13 @@
 { stdenv
 , lib
-, python
 , buildPythonPackage
-, fetchpatch
 , fetchPypi
 , isPyPy
 , R
 , rWrapper
 , rPackages
 , pcre
-, lzma
+, xz
 , bzip2
 , zlib
 , icu
@@ -26,13 +24,13 @@
 }:
 
 buildPythonPackage rec {
-    version = "3.4.1";
+    version = "3.4.2";
     pname = "rpy2";
 
     disabled = isPyPy;
     src = fetchPypi {
       inherit version pname;
-      sha256 = "1qnjjlgh6i31z45jykwd29n1336gq678fn9zw7gh0rv5d6sn0hv4";
+      sha256 = "8f7d1348b77bc45425b846a0d625f24a51a1c4f32ef2cd1c07a24222aa64e2e0";
     };
 
     patches = [
@@ -48,7 +46,7 @@ buildPythonPackage rec {
 
     buildInputs = [
       pcre
-      lzma
+      xz
       bzip2
       zlib
       icu
diff --git a/nixpkgs/pkgs/development/python-modules/s3fs/default.nix b/nixpkgs/pkgs/development/python-modules/s3fs/default.nix
index 9bb2a513174c..86701865861f 100644
--- a/nixpkgs/pkgs/development/python-modules/s3fs/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/s3fs/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "s3fs";
-  version = "0.5.1";
+  version = "0.5.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7396943cbc1cf92eb6f7aa93be5f64a3bfa59d76908262e89bae06e3c87fa59d";
+    sha256 = "87e5210415db17b9de18c77bcfc4a301570cc9030ee112b77dc47ab82426bae1";
   };
 
   buildInputs = [ docutils ];
diff --git a/nixpkgs/pkgs/development/python-modules/s3transfer/default.nix b/nixpkgs/pkgs/development/python-modules/s3transfer/default.nix
index 6f816fc9bb89..51d3f3ab14ac 100644
--- a/nixpkgs/pkgs/development/python-modules/s3transfer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/s3transfer/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "s3transfer";
-  version = "0.3.3";
+  version = "0.3.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "921a37e2aefc64145e7b73d50c71bb4f26f46e4c9f414dc648c6245ff92cf7db";
+    sha256 = "7fdddb4f22275cf1d32129e21f056337fd2a80b6ccef1664528145b72c49e6d2";
   };
 
   propagatedBuildInputs =
diff --git a/nixpkgs/pkgs/development/python-modules/safety/default.nix b/nixpkgs/pkgs/development/python-modules/safety/default.nix
index c268f2699595..dd840c3389ca 100644
--- a/nixpkgs/pkgs/development/python-modules/safety/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/safety/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "safety";
-  version = "1.9.0";
+  version = "1.10.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "23bf20690d4400edc795836b0c983c2b4cbbb922233108ff925b7dd7750f00c9";
+    sha256 = "sha256-MOOU0CogrEm39lKS0Z04+pJ6j5WCzf060a27xmxkGtU=";
   };
 
   propagatedBuildInputs = [ requests dparse click setuptools ];
diff --git a/nixpkgs/pkgs/development/python-modules/sagemaker/default.nix b/nixpkgs/pkgs/development/python-modules/sagemaker/default.nix
new file mode 100644
index 000000000000..fc675279a40a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/sagemaker/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, attrs
+, boto3
+, google-pasta
+, importlib-metadata
+, numpy
+, protobuf
+, protobuf3-to-dict
+, smdebug-rulesconfig
+, pandas
+, packaging
+}:
+
+buildPythonPackage rec {
+  pname = "sagemaker";
+  version = "2.33.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-0l8xwZ10zQb+LnV/hjYoSSgN/TGpVdzdXeSfnEyf0J0=";
+  };
+
+  pythonImportsCheck = [
+    "sagemaker"
+    "sagemaker.lineage.visualizer"
+  ];
+
+  propagatedBuildInputs = [
+    attrs
+    boto3
+    google-pasta
+    importlib-metadata
+    numpy
+    packaging
+    protobuf
+    protobuf3-to-dict
+    smdebug-rulesconfig
+    pandas
+  ];
+
+  doCheck = false;
+
+  postFixup = ''
+    [ "$($out/bin/sagemaker-upgrade-v2 --help 2>&1 | grep -cim1 'pandas failed to import')" -eq "0" ]
+  '';
+
+  meta = with lib; {
+    description = "Library for training and deploying machine learning models on Amazon SageMaker";
+    homepage = "https://github.com/aws/sagemaker-python-sdk/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix b/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix
index 0b8edf8bdd90..52aa8a98e1e4 100644
--- a/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/salmon-mail/default.nix
@@ -28,7 +28,7 @@ buildPythonPackage rec {
   meta = with lib; {
     homepage = "https://salmon-mail.readthedocs.org/";
     description = "Pythonic mail application server";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ jluttine ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/sane/default.nix b/nixpkgs/pkgs/development/python-modules/sane/default.nix
index d45c736d8d03..b02feb9e2192 100644
--- a/nixpkgs/pkgs/development/python-modules/sane/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sane/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, saneBackends
+, sane-backends
 }:
 
 buildPythonPackage rec {
@@ -15,7 +15,7 @@ buildPythonPackage rec {
   };
 
   buildInputs = [
-    saneBackends
+    sane-backends
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/sanic/default.nix b/nixpkgs/pkgs/development/python-modules/sanic/default.nix
index f503b0b85561..e5faa440ad8d 100644
--- a/nixpkgs/pkgs/development/python-modules/sanic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sanic/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi
+{ lib, buildPythonPackage, fetchPypi, doCheck ? true
 , aiofiles, httptools, httpx, multidict, ujson, uvloop, websockets
 , pytestCheckHook, beautifulsoup4, gunicorn, httpcore, uvicorn
 , pytest-asyncio, pytest-benchmark, pytest-dependency, pytest-sanic, pytest-sugar, pytestcov
@@ -13,7 +13,7 @@ buildPythonPackage rec {
     sha256 = "06p0lsxqbfbka2yaqlpp0bg5pf7ma44zi6kq7qbb6hhry48dp1w6";
   };
 
-  patchPhase = ''
+  postPatch = ''
     substituteInPlace setup.py \
       --replace '"multidict==5.0.0"' '"multidict"' \
       --replace '"httpx==0.15.4"' '"httpx"' \
@@ -30,14 +30,19 @@ buildPythonPackage rec {
     pytest-asyncio pytest-benchmark pytest-dependency pytest-sanic pytest-sugar pytestcov
   ];
 
+  inherit doCheck;
+
   disabledTests = [
     "test_gunicorn" # No "examples" directory in pypi distribution.
     "test_logo" # Fails to filter out "DEBUG asyncio:selector_events.py:59 Using selector: EpollSelector"
     "test_zero_downtime" # No "examples.delayed_response.app" module in pypi distribution.
+    "test_reloader_live" # OSError: [Errno 98] error while attempting to bind on address ('127.0.0.1', 42104)
   ];
 
   __darwinAllowLocalNetworking = true;
 
+  pythonImportsCheck = [ "sanic" ];
+
   meta = with lib; {
     description = "A microframework based on uvloop, httptools, and learnings of flask";
     homepage = "http://github.com/channelcat/sanic/";
diff --git a/nixpkgs/pkgs/development/python-modules/sasmodels/default.nix b/nixpkgs/pkgs/development/python-modules/sasmodels/default.nix
index 06d2d40d1802..08c9e7ce3ebe 100644
--- a/nixpkgs/pkgs/development/python-modules/sasmodels/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sasmodels/default.nix
@@ -1,20 +1,30 @@
-{ lib, fetchFromGitHub, buildPythonPackage, pytest, numpy, scipy, matplotlib, docutils
-, pyopencl, opencl-headers
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, pytest_5
+, numpy
+, scipy
+, matplotlib
+, docutils
+, pyopencl
+, opencl-headers
 }:
 
 buildPythonPackage rec {
   pname = "sasmodels";
-  version = "1.0.2";
+  version = "1.0.4";
 
   src = fetchFromGitHub {
     owner = "SasView";
     repo = "sasmodels";
     rev = "v${version}";
-    sha256 = "1qvh7q0fkls5r8r9mrph6igcvv8x3qsslqsc5jf1n20alcs5zjrl";
+    sha256 = "0h2k81dm92sm0z086qy3ipw6y6cfgpb7ppl7lhjmx6816s3k50sa";
   };
 
   buildInputs = [ opencl-headers ];
-  checkInputs = [ pytest ];
+  # Note: the 1.0.5 release should be compatible with pytest6, so this can
+  # be set back to 'pytest' at that point
+  checkInputs = [ pytest_5 ];
   propagatedBuildInputs = [ docutils matplotlib numpy scipy pyopencl ];
 
   checkPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/schema/default.nix b/nixpkgs/pkgs/development/python-modules/schema/default.nix
index 483a891f9332..a29ae2da853c 100644
--- a/nixpkgs/pkgs/development/python-modules/schema/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/schema/default.nix
@@ -3,11 +3,11 @@
 buildPythonPackage rec {
 
   pname = "schema";
-  version = "0.7.3";
+  version = "0.7.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4cf529318cfd1e844ecbe02f41f7e5aa027463e7403666a52746f31f04f47a5e";
+    sha256 = "fbb6a52eb2d9facf292f233adcc6008cffd94343c63ccac9a1cb1f3e6de1db17";
   };
 
   preConfigure = ''
diff --git a/nixpkgs/pkgs/development/python-modules/scikit-bio/default.nix b/nixpkgs/pkgs/development/python-modules/scikit-bio/default.nix
index f14c4d82f428..f13fecc08551 100644
--- a/nixpkgs/pkgs/development/python-modules/scikit-bio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/scikit-bio/default.nix
@@ -32,12 +32,6 @@ buildPythonPackage rec {
   checkInputs = [ coverage ];
   propagatedBuildInputs = [ lockfile cachecontrol decorator ipython matplotlib natsort numpy pandas scipy hdmedians scikitlearn ];
 
-  # remove on when version > 0.5.4
-  postPatch = ''
-    sed -i "s/numpy >= 1.9.2, < 1.14.0/numpy/" setup.py
-    sed -i "s/pandas >= 0.19.2, < 0.23.0/pandas/" setup.py
-  '';
-
   # cython package not included for tests
   doCheck = false;
 
@@ -45,6 +39,8 @@ buildPythonPackage rec {
     ${python.interpreter} -m skbio.test
   '';
 
+  pythonImportsCheck = [ "skbio" ];
+
   meta = with lib; {
     homepage = "http://scikit-bio.org/";
     description = "Data structures, algorithms and educational resources for bioinformatics";
diff --git a/nixpkgs/pkgs/development/python-modules/scikitlearn/default.nix b/nixpkgs/pkgs/development/python-modules/scikitlearn/default.nix
index e7307c926320..7e9e37831e0d 100644
--- a/nixpkgs/pkgs/development/python-modules/scikitlearn/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/scikitlearn/default.nix
@@ -3,25 +3,38 @@
 , buildPythonPackage
 , fetchPypi
 , fetchpatch
-, gfortran, glibcLocales
-, numpy, scipy, pytest, pillow
+, gfortran
+, glibcLocales
+, numpy
+, scipy
+, pytest
+, pillow
 , cython
 , joblib
 , llvmPackages
 , threadpoolctl
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "scikit-learn";
   version = "0.24.1";
-  # UnboundLocalError: local variable 'message' referenced before assignment
-  disabled = stdenv.isi686;  # https://github.com/scikit-learn/scikit-learn/issues/5534
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "oDNKGALmTWVgIsO/q1anP71r9LEpg0PzaIryFRgQu98=";
   };
 
+  patches = [
+    # This patch fixes compatibility with numpy 1.20. It was merged before 0.24.1 was released,
+    # but for some reason was not included in the 0.24.1 release tarball.
+    (fetchpatch {
+      url = "https://github.com/scikit-learn/scikit-learn/commit/e7ef22c3ba2334cb3b476e95d7c083cf6b48ce56.patch";
+      sha256 = "174554k1pbf92bj7wgq0xjj16bkib32ailyhwavdxaknh4bd9nmv";
+    })
+  ];
+
   buildInputs = [
     pillow
     gfortran
diff --git a/nixpkgs/pkgs/development/python-modules/scipy/default.nix b/nixpkgs/pkgs/development/python-modules/scipy/default.nix
index 8d08e43bc713..0bc8499a373b 100644
--- a/nixpkgs/pkgs/development/python-modules/scipy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/scipy/default.nix
@@ -9,11 +9,11 @@ let
   });
 in buildPythonPackage rec {
   pname = "scipy";
-  version = "1.6.0";
+  version = "1.6.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0rh5b1rwdcvvagld8vpxnpaibszy1skpx39a0fwzd5gx5pwcjvfb";
+    sha256 = "048vd4c843xaq45yk3kn491gvqnvhp2i9rxhg671ddlh923fpz64";
   };
 
   checkInputs = [ nose pytest ];
@@ -53,9 +53,10 @@ in buildPythonPackage rec {
 
   SCIPY_USE_G77_ABI_WRAPPER = 1;
 
-  meta = {
-    description = "SciPy (pronounced 'Sigh Pie') is open-source software for mathematics, science, and engineering. ";
+  meta = with lib; {
+    description = "SciPy (pronounced 'Sigh Pie') is open-source software for mathematics, science, and engineering";
     homepage = "https://www.scipy.org/";
-    maintainers = with lib.maintainers; [ fridh ];
+    license = licenses.bsd3;
+    maintainers = [ maintainers.fridh ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/scramp/default.nix b/nixpkgs/pkgs/development/python-modules/scramp/default.nix
index 7beefa4e8999..68e4b9821b1e 100644
--- a/nixpkgs/pkgs/development/python-modules/scramp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/scramp/default.nix
@@ -1,16 +1,23 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pytestCheckHook }:
+{ lib
+, asn1crypto
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "scramp";
-  version = "1.2.0";
+  version = "1.4.0";
 
   src = fetchFromGitHub {
     owner = "tlocke";
     repo = "scramp";
     rev = version;
-    sha256 = "15jb7z5l2lijxr60fb9v55i3f81h6d83c0b7fv5q0fv5q259nv0a";
+    sha256 = "sha256-aXuRIW/3qBzan8z3EzSSxqaZfa3WnPhlviNa2ugIjik=";
   };
 
+  propagatedBuildInputs = [ asn1crypto ];
+
   checkInputs = [ pytestCheckHook ];
 
   pythonImportsCheck = [ "scramp" ];
diff --git a/nixpkgs/pkgs/development/python-modules/screeninfo/default.nix b/nixpkgs/pkgs/development/python-modules/screeninfo/default.nix
index 5f238a7e05fa..80933043b3b9 100644
--- a/nixpkgs/pkgs/development/python-modules/screeninfo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/screeninfo/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonApplication rec {
   pname = "screeninfo";
-  version = "0.6.6";
+  version = "0.6.7";
   disabled = isPy27; # dataclasses isn't available for python2
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c93fcc3c9421cc2046e57468241c4c08c0c6cffd0e05a85cb0b18de8fe8b026f";
+    sha256 = "1c4bac1ca329da3f68cbc4d2fbc92256aa9bb8ff8583ee3e14f91f0a7baa69cb";
   };
 
   # dataclasses is a compatibility shim for python 3.6 ONLY
diff --git a/nixpkgs/pkgs/development/python-modules/screenlogicpy/default.nix b/nixpkgs/pkgs/development/python-modules/screenlogicpy/default.nix
new file mode 100644
index 000000000000..100c487acee6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/screenlogicpy/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "screenlogicpy";
+  version = "0.3.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gn2mf2n2g1ffdbijrydgb7dgd60lkvckblx6s86kxlkrp1wqgrq";
+  };
+
+  # Project doesn't publish tests
+  # https://github.com/dieselrabbit/screenlogicpy/issues/8
+  doCheck = false;
+  pythonImportsCheck = [ "screenlogicpy" ];
+
+  meta = with lib; {
+    description = "Python interface for Pentair Screenlogic devices";
+    homepage = "https://github.com/dieselrabbit/screenlogicpy";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/seaborn/default.nix b/nixpkgs/pkgs/development/python-modules/seaborn/default.nix
index b3bf8fce0fca..8c771ea286cb 100644
--- a/nixpkgs/pkgs/development/python-modules/seaborn/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/seaborn/default.nix
@@ -26,6 +26,7 @@ buildPythonPackage rec {
 
   # Computationally very demanding tests
   doCheck = false;
+  pythonImportsCheck= [ "seaborn" ];
 
   meta = {
     description = "Statisitical data visualization";
diff --git a/nixpkgs/pkgs/development/python-modules/secretstorage/default.nix b/nixpkgs/pkgs/development/python-modules/secretstorage/default.nix
index 157876476761..5b7b7ea27972 100644
--- a/nixpkgs/pkgs/development/python-modules/secretstorage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/secretstorage/default.nix
@@ -2,14 +2,14 @@
 
 buildPythonPackage rec {
   pname = "secretstorage";
-  version = "3.3.0";
+  version = "3.3.1";
 
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     pname = "SecretStorage";
     inherit version;
-    sha256 = "1aj669d5s8pmr6y2d286fxd13apnxzw0ivd1dr6xdni9i3rdxkrh";
+    sha256 = "15ginv4gzxrx77n7517xnvf2jcpqc6ran12s951hc85zlr8nqrpx";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/semver/default.nix b/nixpkgs/pkgs/development/python-modules/semver/default.nix
index c281a6d6b0da..cb4578671b98 100644
--- a/nixpkgs/pkgs/development/python-modules/semver/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/semver/default.nix
@@ -1,27 +1,34 @@
 { lib
-, fetchFromGitHub
 , buildPythonPackage
+, fetchFromGitHub
+, pytest-cov
 , pytestCheckHook
-, pytestcov
 }:
 
 buildPythonPackage rec {
   pname = "semver";
-  version = "2.10.2";
+  version = "2.13.0";
 
   src = fetchFromGitHub {
     owner = "python-semver";
     repo = "python-semver";
     rev = version;
-    sha256 = "0yxjmcgk5iwp53l9z1cg0ajrj18i09ircs11ifpdrggzm8n1blf3";
+    sha256 = "sha256-IWTo/P9JRxBQlhtcH3JMJZZrwAA8EALF4dtHajWUc4w=";
   };
 
-  preCheck = "rm -rf dist"; # confuses source vs dist imports in pytest
-  checkInputs = [ pytestCheckHook pytestcov ];
+  checkInputs = [
+    pytest-cov
+    pytestCheckHook
+  ];
+
+  # Confuses source vs dist imports in pytest
+  preCheck = "rm -r dist";
+
+  pythonImportsCheck = [ "semver" ];
 
   meta = with lib; {
     description = "Python package to work with Semantic Versioning (http://semver.org/)";
-    homepage = "https://python-semver.readthedocs.io/en/latest/";
+    homepage = "https://python-semver.readthedocs.io/";
     license = licenses.bsd3;
     maintainers = with maintainers; [ np ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/sendgrid/default.nix b/nixpkgs/pkgs/development/python-modules/sendgrid/default.nix
index 77cd35938635..704549e987d7 100644
--- a/nixpkgs/pkgs/development/python-modules/sendgrid/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sendgrid/default.nix
@@ -11,13 +11,13 @@
 
 buildPythonPackage rec {
   pname = "sendgrid";
-  version = "6.5.0";
+  version = "6.6.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = "sendgrid-python";
     rev = version;
-    sha256 = "14kqjdv49486ksc1s0m0hc4k5nf9vn1v1g489mpib01hiiqxjp1b";
+    sha256 = "sha256-R9ASHDIGuPRh4yf0FAlpjUZ6QAakYs35EFSqAPc02Q8=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix b/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix
index 6b49d6db499d..ba5b37c8d9c7 100644
--- a/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sentry-sdk/default.nix
@@ -29,11 +29,11 @@
 
 buildPythonPackage rec {
   pname = "sentry-sdk";
-  version = "0.19.5";
+  version = "1.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0grba3rpgg20sqhrh8mxcjwmwgbwrybrxymavh7xsad59570jykk";
+    sha256 = "71de00c9711926816f750bc0f57ef2abbcb1bfbdf5378c601df7ec978f44857a";
   };
 
   checkInputs = [ blinker botocore chalice django flask tornado bottle rq falcon sqlalchemy werkzeug trytond
diff --git a/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix b/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix
index 1e6f8307fbca..2a8267710a09 100644
--- a/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/serverlessrepo/default.nix
@@ -29,10 +29,6 @@ buildPythonPackage rec {
     pytest tests/unit
   '';
 
-  postPatch = ''
-    substituteInPlace setup.py --replace "pyyaml~=3.12" "pyyaml~=5.1"
-  '';
-
   meta = with lib; {
     homepage = "https://github.com/awslabs/aws-serverlessrepo-python";
     description = "Helpers for working with the AWS Serverless Application Repository";
diff --git a/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix b/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix
index fb7913ce25c9..80fb7ab77f5c 100644
--- a/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/setproctitle/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonPackage rec {
   pname = "setproctitle";
-  version = "1.2";
+  version = "1.2.2";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9b4e48722dd96cbd66d5bf2eab930fff8546cd551dd8d774c8a319448bd381a6";
+    sha256 = "7dfb472c8852403d34007e01d6e3c68c57eb66433fb8a5c77b13b89a160d97df";
   };
 
   checkInputs = [ pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/setuptools-rust/default.nix b/nixpkgs/pkgs/development/python-modules/setuptools-rust/default.nix
index ee4a3b551649..e3d8a35186a9 100644
--- a/nixpkgs/pkgs/development/python-modules/setuptools-rust/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/setuptools-rust/default.nix
@@ -1,17 +1,17 @@
-{ lib
+{ callPackage
+, lib
 , buildPythonPackage
 , fetchPypi
 , isPy27
 , semantic-version
 , setuptools
-, setuptools_scm
+, setuptools-scm
 , toml
 }:
 
 buildPythonPackage rec {
   pname = "setuptools-rust";
   version = "0.11.6";
-
   disabled = isPy27;
 
   src = fetchPypi {
@@ -19,10 +19,16 @@ buildPythonPackage rec {
     sha256 = "a5b5954909cbc5d66b914ee6763f81fa2610916041c7266105a469f504a7c4ca";
   };
 
-  nativeBuildInputs = [ setuptools_scm ];
+  nativeBuildInputs = [ setuptools-scm ];
 
   propagatedBuildInputs = [ semantic-version setuptools toml ];
 
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "setuptools_rust" ];
+
+  passthru.tests.pyo3 = callPackage ./pyo3-test {};
+
   meta = with lib; {
     description = "Setuptools plugin for Rust support";
     homepage = "https://github.com/PyO3/setuptools-rust";
diff --git a/nixpkgs/pkgs/development/python-modules/setuptools-rust/pyo3-test/default.nix b/nixpkgs/pkgs/development/python-modules/setuptools-rust/pyo3-test/default.nix
new file mode 100644
index 000000000000..9af17aa5159c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/setuptools-rust/pyo3-test/default.nix
@@ -0,0 +1,21 @@
+{ callPackage
+, rustPlatform
+, setuptools-rust
+}:
+
+callPackage ../../../tools/rust/maturin/pyo3-test/generic.nix {
+  # Isolated builds break for this package, because PyO3 is not
+  # in the build root of the Python Package:
+  #
+  # https://github.com/pypa/pip/issues/6276
+  #
+  format = "setuptools";
+
+  nativeBuildInputs = [ setuptools-rust ] ++ (with rustPlatform; [
+    cargoSetupHook
+    rust.cargo
+    rust.rustc
+  ]);
+
+  sourceRoot = "source/examples/word-count";
+}
diff --git a/nixpkgs/pkgs/development/python-modules/setuptools_scm/default.nix b/nixpkgs/pkgs/development/python-modules/setuptools_scm/default.nix
index ba716c313fd5..fa3a3de85328 100644
--- a/nixpkgs/pkgs/development/python-modules/setuptools_scm/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/setuptools_scm/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, pip, pytest }:
+{ lib, buildPythonPackage, fetchPypi, toml }:
 
 buildPythonPackage rec {
   pname = "setuptools_scm";
@@ -9,13 +9,16 @@ buildPythonPackage rec {
     sha256 = "a8994582e716ec690f33fec70cca0f85bd23ec974e3f783233e4879090a7faa8";
   };
 
+  propagatedBuildInputs = [ toml ];
+
   # Requires pytest, circular dependency
   doCheck = false;
+  pythonImportsCheck = [ "setuptools_scm" ];
 
   meta = with lib; {
-    homepage = "https://bitbucket.org/pypa/setuptools_scm/";
+    homepage = "https://github.com/pypa/setuptools_scm/";
     description = "Handles managing your python package versions in scm metadata";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/sfepy/default.nix b/nixpkgs/pkgs/development/python-modules/sfepy/default.nix
index 8a37f41086ea..dacd589b1212 100644
--- a/nixpkgs/pkgs/development/python-modules/sfepy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sfepy/default.nix
@@ -9,15 +9,21 @@
 , cython
 , python
 , sympy
+, meshio
+, mpi4py
+, psutil
+, openssh
+, pythonOlder
 }:
 
 buildPythonPackage rec {
-  name = "sfepy_${version}";
-  version = "2019.4";
+  name = "sfepy";
+  version = "2020.4";
+  disabled = pythonOlder "3.8";
 
   src = fetchurl {
     url="https://github.com/sfepy/sfepy/archive/release_${version}.tar.gz";
-    sha256 = "1l9vgcw09l6bwhgfzlbn68fzpvns25r6nkd1pcp7hz5165hs6zzn";
+    sha256 = "1wb0ik6kjg3mksxin0abr88bhsly67fpg36qjdzabhj0xn7j1yaz";
   };
 
   propagatedBuildInputs = [
@@ -28,12 +34,15 @@ buildPythonPackage rec {
     pyparsing
     tables
     sympy
+    meshio
+    mpi4py
+    psutil
+    openssh
   ];
 
   postPatch = ''
-    # broken test
-    rm tests/test_homogenization_perfusion.py
-    rm tests/test_splinebox.py
+    # broken tests
+    rm tests/test_meshio.py
 
     # slow tests
     rm tests/test_input_*.py
@@ -47,6 +56,7 @@ buildPythonPackage rec {
   '';
 
   checkPhase = ''
+    export OMPI_MCA_plm_rsh_agent=${openssh}/bin/ssh
     export HOME=$TMPDIR
     mv sfepy sfepy.hidden
     mkdir -p $HOME/.matplotlib
diff --git a/nixpkgs/pkgs/development/python-modules/shap/default.nix b/nixpkgs/pkgs/development/python-modules/shap/default.nix
index cfbd6f92b04c..abc68709caa4 100644
--- a/nixpkgs/pkgs/development/python-modules/shap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/shap/default.nix
@@ -66,5 +66,7 @@ buildPythonPackage rec {
     license = licenses.mit;
     maintainers = with maintainers; [ evax ];
     platforms = platforms.unix;
+    # ModuleNotFoundError: No module named 'sklearn.ensemble.iforest'
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/shapely/default.nix b/nixpkgs/pkgs/development/python-modules/shapely/default.nix
index b5dd0be5445c..e8ea874e5ca5 100644
--- a/nixpkgs/pkgs/development/python-modules/shapely/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/shapely/default.nix
@@ -1,47 +1,75 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, substituteAll, pythonOlder
-, geos, pytest, cython
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, substituteAll
+, pythonOlder
+, geos
+, pytestCheckHook
+, cython
 , numpy
+, fetchpatch
 }:
 
 buildPythonPackage rec {
   pname = "Shapely";
   version = "1.7.1";
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "0adiz4jwmwxk7k1awqifb1a9bj5x4nx4gglb5dz9liam21674h8n";
   };
-  disabled = pythonOlder "3.5";
 
   nativeBuildInputs = [
     geos # for geos-config
     cython
   ];
 
-  checkInputs = [ pytest ];
+  propagatedBuildInputs = [
+    numpy
+  ];
 
-  propagatedBuildInputs = [ numpy ];
+  checkInputs = [
+    pytestCheckHook
+  ];
 
-  # environment variable used in shapely/_buildcfg.py
+  # Environment variable used in shapely/_buildcfg.py
   GEOS_LIBRARY_PATH = "${geos}/lib/libgeos_c${stdenv.hostPlatform.extensions.sharedLibrary}";
 
   patches = [
+    # Fix with geos 3.9. This patch will be part of the next release after 1.7.1
+    (fetchpatch {
+      url = "https://github.com/Toblerity/Shapely/commit/77879a954d24d1596f986d16ba3eff5e13861164.patch";
+      sha256 = "1w7ngjqbpf9vnvrfg4nyv34kckim9a60gvx20h6skc79xwihd4m5";
+      excludes = [
+        "tests/test_create_inconsistent_dimensionality.py"
+        "appveyor.yml"
+        ".travis.yml"
+      ];
+    })
+    # Patch to search form GOES .so/.dylib files in a Nix-aware way
     (substituteAll {
       src = ./library-paths.patch;
       libgeos_c = GEOS_LIBRARY_PATH;
       libc = lib.optionalString (!stdenv.isDarwin) "${stdenv.cc.libc}/lib/libc${stdenv.hostPlatform.extensions.sharedLibrary}.6";
     })
-  ];
+ ];
 
-  # Disable the tests that improperly try to use the built extensions
-  checkPhase = ''
+  preCheck = ''
     rm -r shapely # prevent import of local shapely
-    py.test tests
   '';
 
+  disabledTests = [
+    "test_collection"
+  ];
+
+  pythonImportsCheck = [ "shapely" ];
+
   meta = with lib; {
     description = "Geometric objects, predicates, and operations";
-    maintainers = with maintainers; [ knedlsepp ];
     homepage = "https://pypi.python.org/pypi/Shapely/";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ knedlsepp ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/sharkiqpy/default.nix b/nixpkgs/pkgs/development/python-modules/sharkiqpy/default.nix
new file mode 100644
index 000000000000..9d696bf0a21a
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/sharkiqpy/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "sharkiqpy";
+  version = "0.1.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0nk1nbplyk28qadxc7rydjvdgbz3za0xjg6c95l95mhiz453q5sw";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    requests
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "sharkiqpy" ];
+
+  meta = with lib; {
+    description = "Python API for Shark IQ robot";
+    homepage = "https://github.com/ajmarks/sharkiq";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/shiboken2/default.nix b/nixpkgs/pkgs/development/python-modules/shiboken2/default.nix
index b7508a8f6447..23836addd0ca 100644
--- a/nixpkgs/pkgs/development/python-modules/shiboken2/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/shiboken2/default.nix
@@ -23,6 +23,8 @@ stdenv.mkDerivation {
     "-DBUILD_TESTS=OFF"
   ];
 
+  dontWrapQtApps = true;
+
   postInstall = ''
     rm $out/bin/shiboken_tool.py
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/signify/certificate-expiration-date.patch b/nixpkgs/pkgs/development/python-modules/signify/certificate-expiration-date.patch
new file mode 100644
index 000000000000..6554211a4bc7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/signify/certificate-expiration-date.patch
@@ -0,0 +1,18 @@
+diff --git a/tests/test_authenticode.py b/tests/test_authenticode.py
+index 7e2c709..2f27e09 100644
+--- a/tests/test_authenticode.py
++++ b/tests/test_authenticode.py
+@@ -153,10 +153,12 @@ class AuthenticodeParserTestCase(unittest.TestCase):
+         """this certificate is revoked"""
+         with open(str(root_dir / "test_data" / "jameslth"), "rb") as f:
+             pefile = SignedPEFile(f)
+-            pefile.verify()
++            pefile.verify(verification_context_kwargs=
++                          {'timestamp': datetime.datetime(2021, 1, 1, tzinfo=datetime.timezone.utc)})
+
+     def test_jameslth_revoked(self):
+         """this certificate is revoked"""
++        # TODO: this certificate is now expired, so it will not show up as valid anyway
+         with open(str(root_dir / "test_data" / "jameslth"), "rb") as f:
+             pefile = SignedPEFile(f)
+             with self.assertRaises(VerificationError):
diff --git a/nixpkgs/pkgs/development/python-modules/signify/default.nix b/nixpkgs/pkgs/development/python-modules/signify/default.nix
new file mode 100644
index 000000000000..be0623b1b73b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/signify/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder, pytestCheckHook
+, certvalidator, pyasn1, pyasn1-modules
+}:
+
+buildPythonPackage rec {
+  pname = "signify";
+  version = "0.3.0";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "ralphje";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JxQECpwHhPm8TCVW/bCnEpu5I/WETyZVBx29SQE4NmE=";
+  };
+  patches = [
+    # Upstream patch is available here:
+    #  https://github.com/ralphje/signify/commit/8c345be954e898a317825bb450bed5ba0304b2b5.patch
+    # But update a couple other things and dont apply cleanly. This is an extract of the part
+    # we care about and breaks the tests after 2021-03-01
+    ./certificate-expiration-date.patch
+  ];
+
+  propagatedBuildInputs = [ certvalidator pyasn1 pyasn1-modules ];
+
+  checkInputs = [ pytestCheckHook ];
+  pytestFlagsArray = [ "-v" ];
+  pythonImportsCheck = [ "signify" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ralphje/signify";
+    description = "library that verifies PE Authenticode-signed binaries";
+    license = licenses.mit;
+    maintainers = with maintainers; [ baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/simplehound/default.nix b/nixpkgs/pkgs/development/python-modules/simplehound/default.nix
new file mode 100644
index 000000000000..1ecd446c5b48
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/simplehound/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, requests
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+, requests-mock
+}:
+
+buildPythonPackage rec {
+  pname = "simplehound";
+  version = "0.6";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "robmarkcole";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1b5m3xjmk0l6ynf0yvarplsfsslgklalfcib7sikxg3v5hiv9qwh";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  checkInputs = [
+    requests-mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "simplehound" ];
+
+  meta = with lib; {
+    description = "Python API for Sighthound";
+    homepage = "https://github.com/robmarkcole/simplehound";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/simplejson/default.nix b/nixpkgs/pkgs/development/python-modules/simplejson/default.nix
index fe08f5bbe2e5..dd27c02dc874 100644
--- a/nixpkgs/pkgs/development/python-modules/simplejson/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/simplejson/default.nix
@@ -2,39 +2,35 @@
 , buildPythonPackage
 , fetchFromGitHub
 , stdenv
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "simplejson";
-  version = "3.17.0";
+  version = "3.17.2";
   doCheck = !stdenv.isDarwin;
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "1b1hhh1dia673vhq3jl2br1iqwb9yjii6iak56w96s9972vjbz3z";
+    sha256 = "sha256-2ZC7aKyUUcth43Ce0j6JdjrJ4gb4QfJDlY2M5TLMQ+o=";
   };
 
-  # Package does not need pytest, but its a bit easier debugging.
-  checkInputs = [ pytest ];
-  # Ignore warnings because test does not expect them in stderr
-  # See https://github.com/simplejson/simplejson/issues/241
-  checkPhase = ''
-    PYTHONWARNINGS="ignore" pytest simplejson/tests
-  '';
+  checkInputs = [ pytestCheckHook ];
 
-  meta = {
-    description = "A simple, fast, extensible JSON encoder/decoder for Python";
+  pythonImportsCheck = [ "simplejson" ];
+
+  meta = with lib; {
+    description = "Extensible JSON encoder/decoder for Python";
     longDescription = ''
-      simplejson is compatible with Python 2.4 and later with no
-      external dependencies.  It covers the full JSON specification
-      for both encoding and decoding, with unicode support.  By
-      default, encoding is done in an encoding neutral fashion (plain
-      ASCII with \uXXXX escapes for unicode characters).
+      simplejson covers the full JSON specification for both encoding
+      and decoding, with unicode support. By default, encoding is done
+      in an encoding neutral fashion (plain ASCII with \uXXXX escapes
+      for unicode characters).
     '';
     homepage = "https://github.com/simplejson/simplejson";
-    license = with lib.licenses; [ mit afl21 ];
+    license = with licenses; [ mit afl21 ];
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/simplekml/default.nix b/nixpkgs/pkgs/development/python-modules/simplekml/default.nix
index 6b8bac25b87b..42e93d63faee 100644
--- a/nixpkgs/pkgs/development/python-modules/simplekml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/simplekml/default.nix
@@ -1,4 +1,7 @@
-{ lib , buildPythonPackage , fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
 
 buildPythonPackage rec {
   pname = "simplekml";
@@ -9,11 +12,13 @@ buildPythonPackage rec {
     sha256 = "17h48r1dsfz4g9xcxh1xq85h20hiz7qzzymc1gla96bj2wh4wyv5";
   };
 
-  doCheck = false; # no tests are defined in 1.3.5
+  # no tests are defined in 1.3.5
+  doCheck = false;
+  pythonImportsCheck = [ "simplekml" ];
 
   meta = with lib; {
-    description = "Generate KML with as little effort as possible";
-    homepage =  "https://readthedocs.org/projects/simplekml/";
+    description = "Python package to generate KML";
+    homepage =  "https://simplekml.readthedocs.io/";
     license = licenses.lgpl3Plus;
     maintainers = with maintainers; [ rvolosatovs ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/simplisafe-python/default.nix b/nixpkgs/pkgs/development/python-modules/simplisafe-python/default.nix
new file mode 100644
index 000000000000..5b8925b0a4c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/simplisafe-python/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, aiohttp
+, aresponses
+, asynctest
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-asyncio
+, pytest-cov
+, pytestCheckHook
+, python-engineio
+, python-socketio
+, pythonOlder
+, pytz
+, voluptuous
+, websockets
+}:
+
+buildPythonPackage rec {
+  pname = "simplisafe-python";
+  version = "9.6.9";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "bachya";
+    repo = pname;
+    rev = version;
+    sha256 = "1q5w5pvrgj94bzd5wig79l4hipkfrcdah54rvwyi7b8q46gw77sg";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    python-engineio
+    python-socketio
+    pytz
+    voluptuous
+    websockets
+  ];
+
+  checkInputs = [
+    aresponses
+    asynctest
+    pytest-asyncio
+    pytest-cov
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [ "examples/" ];
+
+  pythonImportsCheck = [ "simplipy" ];
+
+  meta = with lib; {
+    description = "Python library the SimpliSafe API";
+    homepage = "https://simplisafe-python.readthedocs.io/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/sklearn-deap/default.nix b/nixpkgs/pkgs/development/python-modules/sklearn-deap/default.nix
index 958fc613f6f3..d973bc70bcdb 100644
--- a/nixpkgs/pkgs/development/python-modules/sklearn-deap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sklearn-deap/default.nix
@@ -13,7 +13,7 @@ buildPythonPackage rec {
   };
 
   patches = [
-    # Fix for newer versions of scikit-learn. See: https://github.com/rsteca/sklearn-deap/pull/62
+    # Fix for scikit-learn v0.21.1. See: https://github.com/rsteca/sklearn-deap/pull/62
     (fetchpatch {
       url = "https://github.com/rsteca/sklearn-deap/commit/3ae62990fc87f36b59382e7c4db3c74cf99ec3bf.patch";
       sha256 = "1na6wf4v0dcmyz3pz8aiqkmv76d1iz3hi4iyfq9kfnycgzpv1kxk";
@@ -31,6 +31,8 @@ buildPythonPackage rec {
     homepage = "https://github.com/rsteca/sklearn-deap";
     license = licenses.lgpl3;
     maintainers = with maintainers; [ psyanticy ];
+    # broken by scikit-learn 0.24.1
+    broken = true;
   };
 }
 
diff --git a/nixpkgs/pkgs/development/python-modules/skorch/default.nix b/nixpkgs/pkgs/development/python-modules/skorch/default.nix
index bb41f61517fc..fd161ecd7531 100644
--- a/nixpkgs/pkgs/development/python-modules/skorch/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/skorch/default.nix
@@ -26,10 +26,13 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ numpy pytorch scikitlearn scipy tabulate tqdm ];
   checkInputs = [ pytest pytestcov flaky pandas pytestCheckHook ];
 
-  # on CPU, these expect artifacts from previous GPU run
   disabledTests = [
+    # on CPU, these expect artifacts from previous GPU run
     "test_load_cuda_params_to_cpu"
+    # failing tests
     "test_pickle_load"
+    "test_grid_search_with_slds_"
+    "test_grid_search_with_dict_works"
   ];
 
   meta = with lib; {
@@ -38,5 +41,7 @@ buildPythonPackage rec {
     changelog = "https://github.com/skorch-dev/skorch/blob/master/CHANGES.md";
     license = licenses.bsd3;
     maintainers = with maintainers; [ bcdarwin ];
+    # TypeError: __init__() got an unexpected keyword argument 'iid'
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/skybellpy/default.nix b/nixpkgs/pkgs/development/python-modules/skybellpy/default.nix
new file mode 100644
index 000000000000..c94b03bcc667
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/skybellpy/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, colorlog
+, fetchFromGitHub
+, pytest-sugar
+, pytest-timeout
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests-mock
+}:
+
+buildPythonPackage rec {
+  pname = "skybellpy";
+  version = "0.6.3";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "MisterWil";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ghvm0pcdyhq6xfjc2dkldd701x77w07077sx09xsk6q2milmvzz";
+  };
+
+  propagatedBuildInputs = [
+    colorlog
+    requests
+  ];
+
+  checkInputs = [
+    pytest-sugar
+    pytest-timeout
+    pytestCheckHook
+    requests-mock
+  ];
+
+  pythonImportsCheck = [ "skybellpy" ];
+
+  meta = with lib; {
+    description = "Python wrapper for the Skybell alarm API";
+    homepage = "https://github.com/MisterWil/skybellpy";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/slack-sdk/default.nix b/nixpkgs/pkgs/development/python-modules/slack-sdk/default.nix
new file mode 100644
index 000000000000..195bd720615c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/slack-sdk/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, aiodns
+, aiohttp
+, boto3
+, buildPythonPackage
+, codecov
+, databases
+, fetchFromGitHub
+, flake8
+, flask-sockets
+, isPy3k
+, psutil
+, pytest-asyncio
+, pytest-cov
+, pytestCheckHook
+, pytestrunner
+, sqlalchemy
+, websocket_client
+, websockets
+}:
+
+buildPythonPackage rec {
+  pname = "slack-sdk";
+  version = "3.4.2";
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "slackapi";
+    repo = "python-slack-sdk";
+    rev = "v${version}";
+    sha256 = "sha256-AbQqe6hCy6Ke5lwKHFWLJlXv7HdDApYYK++SPNQ2Nxg=";
+  };
+
+  propagatedBuildInputs = [
+    aiodns
+    aiohttp
+    boto3
+    sqlalchemy
+    websocket_client
+    websockets
+  ];
+
+  checkInputs = [
+    codecov
+    databases
+    flake8
+    flask-sockets
+    psutil
+    pytest-asyncio
+    pytest-cov
+    pytestCheckHook
+    pytestrunner
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  # Exclude tests that requires network features
+  pytestFlagsArray = [ "--ignore=integration_tests" ];
+  disabledTests = [
+    "test_start_raises_an_error_if_rtm_ws_url_is_not_returned"
+    "test_org_installation"
+  ];
+
+  pythonImportsCheck = [ "slack_sdk" ];
+
+  meta = with lib; {
+    description = "Slack Developer Kit for Python";
+    homepage = "https://slack.dev/python-slack-sdk/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/slackclient/default.nix b/nixpkgs/pkgs/development/python-modules/slackclient/default.nix
index d990295bff61..4a3c29272186 100644
--- a/nixpkgs/pkgs/development/python-modules/slackclient/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/slackclient/default.nix
@@ -1,15 +1,15 @@
 { lib
-, buildPythonPackage
-, fetchFromGitHub
 , aiohttp
-, black
+, buildPythonPackage
 , codecov
+, fetchFromGitHub
 , flake8
 , isPy3k
 , mock
+, psutil
+, pytest-cov
 , pytest-mock
 , pytestCheckHook
-, pytestcov
 , pytestrunner
 , requests
 , responses
@@ -19,15 +19,15 @@
 
 buildPythonPackage rec {
   pname = "python-slackclient";
-  version = "2.5.0";
+  version = "2.9.3";
 
   disabled = !isPy3k;
 
   src = fetchFromGitHub {
-    owner  = "slackapi";
-    repo   = pname;
-    rev    = version;
-    sha256 = "1ngj1mivbln19546195k400w9yaw69g0w6is7c75rqwyxr8wgzsk";
+    owner = "slackapi";
+    repo = "python-slack-sdk";
+    rev = "v${version}";
+    sha256 = "1rfb7izgddv28ag37gdnv3sd8z2zysrxs7ad8x20x690zshpaq16";
   };
 
   propagatedBuildInputs = [
@@ -38,17 +38,21 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    black
     codecov
     flake8
     mock
+    psutil
+    pytest-cov
     pytest-mock
     pytestCheckHook
-    pytestcov
     pytestrunner
     responses
   ];
 
+  # Exclude tests that requires network features
+  pytestFlagsArray = [ "--ignore=integration_tests" ];
+  disabledTests = [ "test_start_raises_an_error_if_rtm_ws_url_is_not_returned" ];
+
   pythonImportsCheck = [ "slack" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/slicedimage/default.nix b/nixpkgs/pkgs/development/python-modules/slicedimage/default.nix
index 08bdc183186c..506fad5db48d 100644
--- a/nixpkgs/pkgs/development/python-modules/slicedimage/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/slicedimage/default.nix
@@ -1,6 +1,6 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchFromGitHub
 , boto3
 , diskcache
 , enum34
@@ -10,7 +10,7 @@
 , requests
 , scikitimage
 , six
-, pytest
+, pytestCheckHook
 , isPy27
 , tifffile
 }:
@@ -19,9 +19,11 @@ buildPythonPackage rec {
   pname = "slicedimage";
   version = "4.1.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "7369f1d7fa09f6c9969625c4b76a8a63d2507a94c6fc257183da1c10261703e9";
+  src = fetchFromGitHub {
+    owner = "spacetx";
+    repo = pname;
+    rev = version;
+    sha256 = "1vpg8varvfx0nj6xscdfm7m118hzsfz7qfzn28r9rsfvrhr0dlcw";
   };
 
   propagatedBuildInputs = [
@@ -36,13 +38,13 @@ buildPythonPackage rec {
   ] ++ lib.optionals isPy27 [ pathlib enum34 ];
 
   checkInputs = [
-    pytest
+    pytestCheckHook
   ];
 
-  # ignore tests which require setup
-  checkPhase = ''
-    pytest --ignore tests/io_
-  '';
+  # Ignore tests which require setup, check again if disabledTestFiles can be used
+  pytestFlagsArray = [ "--ignore tests/io_" ];
+
+  pythonImportsCheck = [ "slicedimage" ];
 
   meta = with lib; {
     description = "Library to access sliced imaging data";
diff --git a/nixpkgs/pkgs/development/python-modules/slicer/default.nix b/nixpkgs/pkgs/development/python-modules/slicer/default.nix
index 83f3e412ddcf..f8329dbab479 100644
--- a/nixpkgs/pkgs/development/python-modules/slicer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/slicer/default.nix
@@ -9,12 +9,12 @@
 
 buildPythonPackage rec {
   pname = "slicer";
-  version = "0.0.5";
+  version = "0.0.7";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8c0fe9845056207d7344d5850e93551f9be20656178d443332aa02da9c71ba44";
+    sha256 = "f5d5f7b45f98d155b9c0ba6554fa9770c6b26d5793a3e77a1030fb56910ebeec";
   };
 
   checkInputs = [ pytestCheckHook pandas pytorch ];
diff --git a/nixpkgs/pkgs/development/python-modules/slixmpp/default.nix b/nixpkgs/pkgs/development/python-modules/slixmpp/default.nix
index 341f53cfe0b5..f648905251e2 100644
--- a/nixpkgs/pkgs/development/python-modules/slixmpp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/slixmpp/default.nix
@@ -39,7 +39,7 @@ buildPythonPackage rec {
   checkInputs = [ pytestCheckHook ];
 
   # Exclude live tests
-  disabledTestFiles = [ "tests/live_test.py" ];
+  disabledTestPaths = [ "tests/live_test.py" ];
 
   pythonImportsCheck = [ "slixmpp" ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/smart_open/default.nix b/nixpkgs/pkgs/development/python-modules/smart_open/default.nix
index 3a1c890f0481..99c9c28a16a8 100644
--- a/nixpkgs/pkgs/development/python-modules/smart_open/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/smart_open/default.nix
@@ -13,19 +13,14 @@
 
 buildPythonPackage rec {
   pname = "smart_open";
-  version = "4.1.0";
+  version = "4.1.2";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "26af5c1a3f2b76aab8c3200310f0fc783790ec5a231ffeec102e620acdd6262e";
+    sha256 = "4bbb6233364fc1173cc0af6b7a56ed76fce32509514f1978a995a5835f3177f1";
   };
 
-  # nixpkgs version of moto is >=1.2.0, remove version pin to fix build
-  postPatch = ''
-    substituteInPlace ./setup.py --replace "moto==0.4.31" "moto"
-  '';
-
   # moto>=1.0.0 is backwards-incompatible and some tests fail with it,
   # so disable tests for now
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/smartypants/default.nix b/nixpkgs/pkgs/development/python-modules/smartypants/default.nix
index d1e11e30d619..ec41c8a32aa1 100644
--- a/nixpkgs/pkgs/development/python-modules/smartypants/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/smartypants/default.nix
@@ -1,6 +1,6 @@
 { lib
 , buildPythonPackage
-, fetchhg
+, fetchFromGitHub
 , isPyPy
 }:
 
@@ -9,15 +9,21 @@ buildPythonPackage rec {
   pname = "smartypants";
   disabled = isPyPy;
 
-  src = fetchhg {
-    url = "https://bitbucket.org/livibetter/smartypants.py";
+  src = fetchFromGitHub {
+    owner = "leohemsted";
+    repo = "smartypants.py";
     rev = "v${version}";
     sha256 = "1cmzz44d2hm6y8jj2xcq1wfr26760gi7iq92ha8xbhb1axzd7nq6";
+    # remove this file and the name on the next version update
+    extraPostFetch = ''
+      cp ${./hgtags} "$out"/.hgtags
+    '';
+    name = "hg-archive";
   };
 
   meta = with lib; {
     description = "Python with the SmartyPants";
-    homepage = "https://bitbucket.org/livibetter/smartypants.py";
+    homepage = "https://github.com/leohemsted/smartypants.py";
     license = licenses.bsd3;
     maintainers = with maintainers; [ ];
   };
diff --git a/nixpkgs/pkgs/development/python-modules/smartypants/hgtags b/nixpkgs/pkgs/development/python-modules/smartypants/hgtags
new file mode 100644
index 000000000000..522ca8d2c017
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/smartypants/hgtags
@@ -0,0 +1,17 @@
+47e996532eff9d3bb2c7048aca37d5fd1028e706 v1.5_1.2
+4ff48eba1d3d37d708005e465cf701b63eb68fd3 v1.5_1.1
+6ba7f3a14ff77e4e9bf9918413b1710c33deae4d v1.5_1.3.1
+71006a014216defb21e4db6e03434d289564ea60 v1.5_1.6
+90950ff693122f80710974abc0f2be64d4105e84 v1.5_1.3
+a6ecae6541d64f5b12c7b788c65362b0c012278d v1.5_1.0
+eed4a8a16f116f98e8280dc79128845020bbe766 v1.5_1.5
+f9a62f541f19ead9be4c3be896b64d1caa0b524c v1.5_1.4
+fc0bee49a07daf05f034560cfef81a8a8d034d1f v1.5_1.7
+096ed5f806b6dbc473fae1848643cf45005b9bf1 v1.7.0
+aaeb8099a24ad7db3f36ebe71ef326d6377730aa v1.7.1
+fd8ccc937af7280db4e581b2eb1354245f4672ab v1.8.0
+7839b0eab3e9daf5b346edfa5c54f3cc46fc202a v1.8.1
+6140b78317beabb6e49cd91b35a779ccb0af7327 v1.8.2
+c3b1c83c5ddada685b421b8f82f7e92c794bf2f6 v1.8.3
+460c1add9b9f89831e1ab965f1e1c31325f6e72d v1.8.4
+78165f4976299c37d6e3dd5463adcd61f9cb2b75 v1.8.5
diff --git a/nixpkgs/pkgs/development/python-modules/smdebug-rulesconfig/default.nix b/nixpkgs/pkgs/development/python-modules/smdebug-rulesconfig/default.nix
new file mode 100644
index 000000000000..864a395cc88c
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/smdebug-rulesconfig/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonPackage, fetchPypi }:
+
+buildPythonPackage rec {
+  pname = "smdebug-rulesconfig";
+  version = "1.0.1";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "smdebug_rulesconfig";
+    sha256 = "1mpwjfvpmryqqwlbyf500584jclgm3vnxa740yyfzkvb5vmyc6bs";
+  };
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "smdebug_rulesconfig" ];
+
+  meta = with lib; {
+    description = "These builtin rules are available in Amazon SageMaker";
+    homepage = "https://github.com/awslabs/sagemaker-debugger-rulesconfig";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/smmap/default.nix b/nixpkgs/pkgs/development/python-modules/smmap/default.nix
index 04b86ad5f6f7..1b0f310f4251 100644
--- a/nixpkgs/pkgs/development/python-modules/smmap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/smmap/default.nix
@@ -2,10 +2,10 @@
 
 buildPythonPackage rec {
   pname = "smmap";
-  version = "3.0.4";
+  version = "3.0.5";
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9c98bbd1f9786d22f14b3d4126894d56befb835ec90cef151af566c7e19b5d24";
+    sha256 = "84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50";
   };
 
   checkInputs = [ nosexcover ];
diff --git a/nixpkgs/pkgs/development/python-modules/snapcast/default.nix b/nixpkgs/pkgs/development/python-modules/snapcast/default.nix
index c5df9f7d991d..702b0e3e365e 100644
--- a/nixpkgs/pkgs/development/python-modules/snapcast/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/snapcast/default.nix
@@ -1,23 +1,25 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k, pytest
-, construct }:
+{ lib
+, buildPythonPackage
+, construct
+, fetchPypi
+, isPy3k
+}:
 
 buildPythonPackage rec {
   pname = "snapcast";
-  version = "2.1.1";
-
+  version = "2.1.2";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c3ecd63d997fbcf6e5322dc47c1f02615f1d9611cba01ec18e9c9f8c14ed824b";
+    sha256 = "sha256-ILBleqxEO7wTxAw/fvDW+4O4H4XWV5m5WWtaNeRBr4g=";
   };
 
-  checkInputs = [ pytest ];
-
   propagatedBuildInputs = [ construct ];
 
   # no checks from Pypi - https://github.com/happyleavesaoc/python-snapcast/issues/23
   doCheck = false;
+  pythonImportsCheck = [ "snapcast" ];
 
   meta = with lib; {
     description = "Control Snapcast, a multi-room synchronous audio solution";
diff --git a/nixpkgs/pkgs/development/python-modules/snowflake-connector-python/default.nix b/nixpkgs/pkgs/development/python-modules/snowflake-connector-python/default.nix
index 96f489ec6ed9..0679b25ad417 100644
--- a/nixpkgs/pkgs/development/python-modules/snowflake-connector-python/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/snowflake-connector-python/default.nix
@@ -25,14 +25,20 @@
 
 buildPythonPackage rec {
   pname = "snowflake-connector-python";
-  version = "2.3.8";
+  version = "2.3.10";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-zsS5+0UGDwZM65MILfgAvZ67AbXGcLsVmGacgoxX530=";
+    sha256 = "ad62bfd31e677d39984449d9c68e233da2776b80894a988a2421aad412e4c44f";
   };
 
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "'pyOpenSSL>=16.2.0,<20.0.0'," "'pyOpenSSL'," \
+      --replace 'pytz<2021.0' 'pytz'
+  '';
+
   propagatedBuildInputs = [
     azure-storage-blob
     asn1crypto
@@ -55,15 +61,6 @@ buildPythonPackage rec {
     urllib3
   ];
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "'boto3>=1.4.4,<1.16'," "'boto3~=1.16'," \
-      --replace "'cryptography>=2.5.0,<3.0.0'," "'cryptography'," \
-      --replace "'pyOpenSSL>=16.2.0,<20.0.0'," "'pyOpenSSL'," \
-      --replace "'idna<2.10'," "'idna'," \
-      --replace "'requests<2.24.0'," "'requests',"
-  '';
-
   # tests require encrypted secrets, see
   # https://github.com/snowflakedb/snowflake-connector-python/tree/master/.github/workflows/parameters
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/snowflake-sqlalchemy/default.nix b/nixpkgs/pkgs/development/python-modules/snowflake-sqlalchemy/default.nix
index bccca3ee6b67..9ec17443dd81 100644
--- a/nixpkgs/pkgs/development/python-modules/snowflake-sqlalchemy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/snowflake-sqlalchemy/default.nix
@@ -27,5 +27,6 @@ buildPythonPackage rec {
     description = "Snowflake SQLAlchemy Dialect";
     homepage = "https://www.snowflake.net/";
     license = licenses.asl20;
+    maintainers = [ ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/soco/default.nix b/nixpkgs/pkgs/development/python-modules/soco/default.nix
index e203dc1c7aa5..a72c413c1860 100644
--- a/nixpkgs/pkgs/development/python-modules/soco/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/soco/default.nix
@@ -1,12 +1,15 @@
 { buildPythonPackage
-, coveralls
 , fetchFromGitHub
-, flake8
+, fetchpatch
 , graphviz
+, ifaddr
+, isPy27
 , lib
 , mock
+, nix-update-script
 , pytestCheckHook
 , requests
+, requests-mock
 , sphinx
 , sphinx_rtd_theme
 , toml
@@ -15,7 +18,8 @@
 
 buildPythonPackage rec {
   pname = "soco";
-  version = "0.20";
+  version = "0.21.2";
+  disabled = isPy27;
 
   # N.B. We fetch from GitHub because the PyPI tarball doesn't contain the
   # required files to run the tests.
@@ -23,34 +27,48 @@ buildPythonPackage rec {
     owner = "SoCo";
     repo = "SoCo";
     rev = "v${version}";
-    sha256 = "0p87aw7wxgdjz0m0nqqcfvbn24hlbq1hh1zxdq2c0k2jcbmaj8zc";
+    sha256 = "sha256-CCgkzUkt9YqTJt9tPBLmYXW6ZuRoMDd7xahYmNXgfM0=";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/SoCo/SoCo/pull/811.patch";
+      sha256 = "sha256-GBd74c8zc25ROO411SZ9TTa+bi8yXJaaOQqY9FM1qj4=";
+    })
+  ];
+
   # N.B. These exist because:
   # 1. Upstream's pinning isn't well maintained, leaving dependency versions no
   #    longer in nixpkgs.
   # 2. There is no benefit for us to be running linting and coverage tests.
   postPatch = ''
     sed -i "/black/d" ./requirements-dev.txt
+    sed -i "/coveralls/d" ./requirements-dev.txt
+    sed -i "/flake8/d" ./requirements-dev.txt
     sed -i "/pylint/d" ./requirements-dev.txt
     sed -i "/pytest-cov/d" ./requirements-dev.txt
   '';
 
   propagatedBuildInputs = [
+    ifaddr
     requests
     toml
     xmltodict
   ];
+
   checkInputs = [
     pytestCheckHook
-    coveralls
-    flake8
     graphviz
     mock
+    requests-mock
     sphinx
     sphinx_rtd_theme
   ];
 
+  passthru.updateScript = nix-update-script {
+    attrPath = "python3Packages.${pname}";
+  };
+
   meta = with lib; {
     homepage = "http://python-soco.com/";
     description = "A CLI and library to control Sonos speakers";
diff --git a/nixpkgs/pkgs/development/python-modules/solaredge/default.nix b/nixpkgs/pkgs/development/python-modules/solaredge/default.nix
new file mode 100644
index 000000000000..f593ff501620
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/solaredge/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, python-dateutil
+, pythonOlder
+, pytz
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "solaredge";
+  version = "0.0.4";
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0q4gib0l3qnlpncg84ki027vr1apjlr47vd6845rpk7zkm8lqgfz";
+  };
+
+  propagatedBuildInputs = [
+    python-dateutil
+    pytz
+    requests
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "solaredge" ];
+
+  meta = with lib; {
+    description = "Python wrapper for Solaredge monitoring service";
+    homepage = "https://github.com/bertouttier/solaredge";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/solax/default.nix b/nixpkgs/pkgs/development/python-modules/solax/default.nix
index bce0bc74f912..a5ca45627164 100644
--- a/nixpkgs/pkgs/development/python-modules/solax/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/solax/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "solax";
-  version = "0.2.5";
+  version = "0.2.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0h7q6y2cdkj9dqxw0k7pgz7a7vbpq1qw50pmy9rajphhv2600cbc";
+    sha256 = "sha256-3WhJBBnIl6C0AdEsmSX3ZEVDThzCBguS4UUri80ifGg=";
   };
 
   nativeBuildInputs = [ setuptools-scm ];
diff --git a/nixpkgs/pkgs/development/python-modules/solo-python/default.nix b/nixpkgs/pkgs/development/python-modules/solo-python/default.nix
index 0ce6e338e61f..8d84ce34eb95 100644
--- a/nixpkgs/pkgs/development/python-modules/solo-python/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/solo-python/default.nix
@@ -1,9 +1,20 @@
-{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder
-, click, ecdsa, fido2, intelhex, pyserial, pyusb, requests}:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, click
+, cryptography
+, ecdsa
+, fido2
+, intelhex
+, pyserial
+, pyusb
+, requests
+}:
 
  buildPythonPackage rec {
   pname = "solo-python";
-  version = "0.0.26";
+  version = "0.0.27";
   format = "flit";
   disabled = pythonOlder "3.6"; # only python>=3.6 is supported
 
@@ -11,7 +22,7 @@
     owner = "solokeys";
     repo = pname;
     rev = version;
-    sha256 = "05rwqrhr1as6zqhg63d6wga7l42jm2azbav5w6ih8mx5zbxf61yz";
+    sha256 = "sha256-OCiKa6mnqJGoNCC4KqI+hMw22tzhdN63x9/KujNJqcE=";
   };
 
   # replaced pinned fido, with unrestricted fido version
@@ -21,6 +32,7 @@
 
   propagatedBuildInputs = [
     click
+    cryptography
     ecdsa
     fido2
     intelhex
@@ -48,5 +60,8 @@
     homepage = "https://github.com/solokeys/solo-python";
     maintainers = with maintainers; [ wucke13 ];
     license = with licenses; [ asl20 mit ];
+    # solo-python v0.0.27 does not support fido2 >= v0.9
+    # https://github.com/solokeys/solo-python/issues/110
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/somajo/default.nix b/nixpkgs/pkgs/development/python-modules/somajo/default.nix
index 54cd9beede3d..1f639d4f2b17 100644
--- a/nixpkgs/pkgs/development/python-modules/somajo/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/somajo/default.nix
@@ -2,14 +2,14 @@
 
 buildPythonPackage rec {
   pname = "SoMaJo";
-  version = "2.1.2";
+  version = "2.1.3";
   disabled = !isPy3k;
 
   src = fetchFromGitHub {
     owner = "tsproisl";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1c4g8nhlcc348w0axdswv69q8k3qxwbnvim1yf7vagd0adv83gsj";
+    sha256 = "07jkkg5ph5m47xf8w5asy5930qcpy6p11j0admll2y6yjynd2b47";
   };
 
   propagatedBuildInputs = [ regex ];
diff --git a/nixpkgs/pkgs/development/python-modules/sopel/default.nix b/nixpkgs/pkgs/development/python-modules/sopel/default.nix
index 7b549933588b..b7569efadf5d 100644
--- a/nixpkgs/pkgs/development/python-modules/sopel/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sopel/default.nix
@@ -6,7 +6,6 @@
 , pyenchant
 , pygeoip
 , pytestCheckHook
-, python
 , pytz
 , sqlalchemy
 , xmltodict
@@ -52,6 +51,8 @@ buildPythonPackage rec {
     popd
   '';
 
+  pythonImportsCheck = [ "sopel" ];
+
   meta = with lib; {
     description = "Simple and extensible IRC bot";
     homepage = "http://sopel.chat";
diff --git a/nixpkgs/pkgs/development/python-modules/spglib/default.nix b/nixpkgs/pkgs/development/python-modules/spglib/default.nix
index 88da35a0f972..a050aadb4b20 100644
--- a/nixpkgs/pkgs/development/python-modules/spglib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/spglib/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "spglib";
-  version = "1.16.0";
+  version = "1.16.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "94d056e48e7e6fe2e6fe4161471e774ac03221a6225fd83d551d3184220c1edf";
+    sha256 = "9fd2fefbd83993b135877a69c498d8ddcf20a9980562b65b800cfb4cdadad003";
   };
 
   propagatedBuildInputs = [ numpy ];
diff --git a/nixpkgs/pkgs/development/python-modules/sphinx-autobuild/default.nix b/nixpkgs/pkgs/development/python-modules/sphinx-autobuild/default.nix
index 958c1a6b19c5..94047b359aa9 100644
--- a/nixpkgs/pkgs/development/python-modules/sphinx-autobuild/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sphinx-autobuild/default.nix
@@ -1,5 +1,4 @@
 { lib
-, stdenv
 , buildPythonPackage
 , fetchPypi
 , sphinx
@@ -25,6 +24,6 @@ buildPythonPackage rec {
     description = "Rebuild Sphinx documentation on changes, with live-reload in the browser";
     homepage = "https://github.com/executablebooks/sphinx-autobuild";
     license = with licenses; [ mit ];
-    maintainer = with maintainers; [holgerpeters];
+    maintainers = with maintainers; [holgerpeters];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/sphinx-navtree/default.nix b/nixpkgs/pkgs/development/python-modules/sphinx-navtree/default.nix
index 02e5711e888f..ae56a9fdce11 100644
--- a/nixpkgs/pkgs/development/python-modules/sphinx-navtree/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sphinx-navtree/default.nix
@@ -14,5 +14,7 @@ buildPythonPackage rec {
     description = "Navigation tree customization for Sphinx";
     homepage = "https://github.com/bintoro/sphinx-navtree";
     license = lib.licenses.mit;
+    # not compatible with sphinx 3.3, not updated since 2016
+    broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/sphinx/default.nix b/nixpkgs/pkgs/development/python-modules/sphinx/default.nix
index e4a3c94711fa..9ce0015cdf86 100644
--- a/nixpkgs/pkgs/development/python-modules/sphinx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sphinx/default.nix
@@ -28,6 +28,7 @@
 , sphinxcontrib-websupport
 , typing
 , setuptools
+, packaging
 }:
 
 buildPythonPackage rec {
@@ -52,6 +53,7 @@ buildPythonPackage rec {
     pygments
     alabaster
     Babel
+    packaging
     setuptools
     snowballstemmer
     six
diff --git a/nixpkgs/pkgs/development/python-modules/sphinxcontrib-bibtex/default.nix b/nixpkgs/pkgs/development/python-modules/sphinxcontrib-bibtex/default.nix
index 931af4b4dde2..51d9824f639c 100644
--- a/nixpkgs/pkgs/development/python-modules/sphinxcontrib-bibtex/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sphinxcontrib-bibtex/default.nix
@@ -9,14 +9,14 @@
 }:
 
 buildPythonPackage rec {
-  version = "2.1.4";
+  version = "2.2.0";
   pname = "sphinxcontrib-bibtex";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f53ec0cd534d2c8f0a51b4b3473ced46e9cb0dd99a7c5019249fe0ef9cbef18e";
+    sha256 = "sha256-dQCEPhVNdpg8I7ylynOAll4HJcRrj0hMEyLQtYps47I=";
   };
 
   propagatedBuildInputs = [ oset pybtex pybtex-docutils sphinx ];
diff --git a/nixpkgs/pkgs/development/python-modules/sphinxcontrib-tikz/default.nix b/nixpkgs/pkgs/development/python-modules/sphinxcontrib-tikz/default.nix
index 6b03c245ebb7..facd37e9c325 100644
--- a/nixpkgs/pkgs/development/python-modules/sphinxcontrib-tikz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sphinxcontrib-tikz/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "sphinxcontrib-tikz";
-  version = "0.4.9";
+  version = "0.4.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "054429a04ed253256a676ecc29f0bae2c644d5bd1150cd95d658990a07ebc8fe";
+    sha256 = "5c5194055d3219e2ed8d02b52b664d399674154f3db9724ae09e881d091b3d10";
   };
 
   patches = [
diff --git a/nixpkgs/pkgs/development/python-modules/spotipy/default.nix b/nixpkgs/pkgs/development/python-modules/spotipy/default.nix
index 63ec4abcac42..6f29db2581b6 100644
--- a/nixpkgs/pkgs/development/python-modules/spotipy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/spotipy/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "spotipy";
-  version = "2.16.1";
+  version = "2.17.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1f50xczv8kgly6wz6zrvqzwdj6nvhdlgx8wnrhmbipjrb6qacr25";
+    sha256 = "sha256-KcYMi5naHEufDXIhabwx5iS4wH1xhrjq3ZwC6NLULL8=";
   };
 
   propagatedBuildInputs = [ requests six ];
diff --git a/nixpkgs/pkgs/development/python-modules/spyder-kernels/0.x.nix b/nixpkgs/pkgs/development/python-modules/spyder-kernels/0.x.nix
index a760033c915a..43a2f5b460f6 100644
--- a/nixpkgs/pkgs/development/python-modules/spyder-kernels/0.x.nix
+++ b/nixpkgs/pkgs/development/python-modules/spyder-kernels/0.x.nix
@@ -60,6 +60,7 @@ buildPythonPackage rec {
     "test_turtle_launc"
     "test_umr_skip_cython"
     "test_umr_pathlist"
+    "test_user_sitepackages_in_pathlist"
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix b/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix
index 9533db6e4a73..614f64a0fbe1 100644
--- a/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/spyder-kernels/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "spyder-kernels";
-  version = "1.10.0";
+  version = "1.10.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "588602b9f44961f4011a9ec83fe85f5d621126eee64835e407a7d41c54dccc74";
+    sha256 = "416534d7504c0f337e6e6e2cbd893d1866ad20d3bec99a94ad617d2fd60699ae";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/spyder/3.nix b/nixpkgs/pkgs/development/python-modules/spyder/3.nix
index 0fb98fa38e3d..2618ccfcd8c5 100644
--- a/nixpkgs/pkgs/development/python-modules/spyder/3.nix
+++ b/nixpkgs/pkgs/development/python-modules/spyder/3.nix
@@ -31,6 +31,8 @@ buildPythonPackage rec {
     substituteInPlace setup.py --replace "pyqt5<5.13" "pyqt5"
   '';
 
+  pythonImportsCheck = [ "spyder" ];
+
   meta = with lib; {
     description = "Library providing a scientific python development environment";
     longDescription = ''
diff --git a/nixpkgs/pkgs/development/python-modules/spyder/default.nix b/nixpkgs/pkgs/development/python-modules/spyder/default.nix
index c41ef74c5b16..dd65079e6a13 100644
--- a/nixpkgs/pkgs/development/python-modules/spyder/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/spyder/default.nix
@@ -8,13 +8,13 @@
 
 buildPythonPackage rec {
   pname = "spyder";
-  version = "4.2.0";
+  version = "4.2.1";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "44f51473b81c1bfde76097bfb957ec14f580a262b229ae8e90d18f5b82104c95";
+    sha256 = "7f93bc5b8b119cc1e195ce3efcc1598386e082c4096334c1fa2b018938ac79b9";
   };
 
   nativeBuildInputs = [ pyqtwebengine.wrapQtAppsHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/sqlalchemy/default.nix b/nixpkgs/pkgs/development/python-modules/sqlalchemy/default.nix
index 83fd3e7b10b3..6f5fb5578665 100644
--- a/nixpkgs/pkgs/development/python-modules/sqlalchemy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sqlalchemy/default.nix
@@ -1,23 +1,35 @@
-{ stdenv, lib, fetchPypi, buildPythonPackage, isPy3k, isPy35
+{ stdenv, lib, fetchPypi, buildPythonPackage, isPy3k, isPy35, fetchpatch
 , mock
 , pysqlite
 , pytestCheckHook
+, pytest_xdist
 }:
 
 buildPythonPackage rec {
   pname = "SQLAlchemy";
-  version = "1.3.20";
+  version = "1.3.23";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d2f25c7f410338d31666d7ddedfa67570900e248b940d186b48461bd4e5569a1";
+    sha256 = "6fca33672578666f657c131552c4ef8979c1606e494f78cd5199742dfb26918b";
   };
 
+  patches = [
+    # fix test_pyodbc_extra_connect_azure test failure
+    (fetchpatch {
+      url = "https://github.com/sqlalchemy/sqlalchemy/commit/7293b3dc0e9eb3dae84ffd831494b85355df8e73.patch";
+      sha256 = "1z61lzxamz74771ddlqmbxba1dcr77f016vqfcmb44dxb228w2db";
+    })
+  ];
+
   checkInputs = [
     pytestCheckHook
+    pytest_xdist
     mock
   ] ++ lib.optional (!isPy3k) pysqlite;
 
+  pytestFlagsArray = [ "-n auto" ];
+
   postInstall = ''
     sed -e 's:--max-worker-restart=5::g' -i setup.cfg
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/sqlite-utils/default.nix b/nixpkgs/pkgs/development/python-modules/sqlite-utils/default.nix
index 1c49e1f4a026..a6dd6e41dc57 100644
--- a/nixpkgs/pkgs/development/python-modules/sqlite-utils/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sqlite-utils/default.nix
@@ -15,12 +15,12 @@
 
 buildPythonPackage rec {
   pname = "sqlite-utils";
-  version = "3.4.1";
+  version = "3.6";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-LJuvUTbsL2anQENEuW1oaSUsMEiXnSgLEAhZ6EP5bNs=";
+    sha256 = "sha256-WCqbz0tssy7i76Sg2PeexjDollypPGnOqqfUJOHAFWA=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/sqlmap/default.nix b/nixpkgs/pkgs/development/python-modules/sqlmap/default.nix
index 940dbdab9894..065228eca218 100644
--- a/nixpkgs/pkgs/development/python-modules/sqlmap/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sqlmap/default.nix
@@ -1,17 +1,17 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, stdenv
 , file
+, stdenv
 }:
 
 buildPythonPackage rec {
   pname = "sqlmap";
-  version = "1.4.12";
+  version = "1.5.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "166adazdrv92azx4p0qng0cm3va6i301vfsr4yyf0azj3sdg0waj";
+    sha256 = "sha256-b2Q5Zelz0AWbNQotOLWdwN5+20Q5jATH3nzLEJQRwno=";
   };
 
   postPatch = ''
@@ -29,9 +29,9 @@ buildPythonPackage rec {
   pythonImportsCheck = [ "sqlmap" ];
 
   meta = with lib; {
-    homepage = "http://sqlmap.org";
-    license = licenses.gpl2;
     description = "Automatic SQL injection and database takeover tool";
+    homepage = "http://sqlmap.org";
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ bennofs ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/srp/default.nix b/nixpkgs/pkgs/development/python-modules/srp/default.nix
index c0d3a0a4aedc..31f77b0ee080 100644
--- a/nixpkgs/pkgs/development/python-modules/srp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/srp/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "srp";
-  version = "1.0.16";
+  version = "1.0.17";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c943b7181322a2bdd50d20e1244536c404916e546131dc1fae10a7cb99a013e9";
+    sha256 = "f2e3fed4e5cbfd6b481edc9cdd51a8c39a609eae117210218556004bdc9016b2";
   };
 
   propagatedBuildInputs = [ six ];
diff --git a/nixpkgs/pkgs/development/python-modules/starlette/default.nix b/nixpkgs/pkgs/development/python-modules/starlette/default.nix
index 94513e5d620c..694b678930b2 100644
--- a/nixpkgs/pkgs/development/python-modules/starlette/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/starlette/default.nix
@@ -10,7 +10,6 @@
 , python-multipart
 , pyyaml
 , requests
-, ujson
 , aiosqlite
 , databases
 , pytestCheckHook
@@ -21,16 +20,21 @@
 
 buildPythonPackage rec {
   pname = "starlette";
-  version = "0.13.8";
+  version = "0.14.2";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "encode";
     repo = pname;
     rev = version;
-    sha256 = "11i0yd8cqwscixajl734g11vf8pghki11c81chzfh8ifmj6mf9jk";
+    sha256 = "0fz28czvwiww693ig9vwdja59xxs7m0yp1df32ms1hzr99666bia";
   };
 
+  postPatch = ''
+    # remove coverage arguments to pytest
+    sed -i '/--cov/d' setup.cfg
+  '';
+
   propagatedBuildInputs = [
     aiofiles
     graphene
@@ -39,7 +43,6 @@ buildPythonPackage rec {
     python-multipart
     pyyaml
     requests
-    ujson
   ] ++ lib.optional stdenv.isDarwin [ ApplicationServices ];
 
   checkInputs = [
@@ -50,9 +53,10 @@ buildPythonPackage rec {
     typing-extensions
   ];
 
-  disabledTestFiles = [ "tests/test_graphql.py" ];
-  # https://github.com/encode/starlette/issues/1131
-  disabledTests = [ "test_debug_html" ];
+  # fails to import graphql, but integrated graphql support is about to
+  # be removed in 0.15, see https://github.com/encode/starlette/pull/1135.
+  disabledTestPaths = [ "tests/test_graphql.py" ];
+
   pythonImportsCheck = [ "starlette" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/statsmodels/default.nix b/nixpkgs/pkgs/development/python-modules/statsmodels/default.nix
index f538cdf0c04b..9aebe88b7923 100644
--- a/nixpkgs/pkgs/development/python-modules/statsmodels/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/statsmodels/default.nix
@@ -13,12 +13,12 @@
 
 buildPythonPackage rec {
   pname = "statsmodels";
-  version = "0.12.1";
+  version = "0.12.2";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a271b4ccec190148dccda25f0cbdcbf871f408fc1394a10a7dc1af4a62b91c8e";
+    sha256 = "8ad7a7ae7cdd929095684118e3b05836c0ccb08b6a01fe984159475d174a1b10";
   };
 
   nativeBuildInputs = [ cython ];
diff --git a/nixpkgs/pkgs/development/python-modules/streamz/default.nix b/nixpkgs/pkgs/development/python-modules/streamz/default.nix
index d17aed6ae43a..62e71bd2fd1c 100644
--- a/nixpkgs/pkgs/development/python-modules/streamz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/streamz/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, fetchpatch
+{ lib, buildPythonPackage, fetchPypi
 , confluent-kafka
 , distributed
 , flaky
@@ -15,11 +15,11 @@
 
 buildPythonPackage rec {
   pname = "streamz";
-  version = "0.6.1";
+  version = "0.6.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "215703456479d24f524cdcd0365006250d4502d242f57e2f5db18e8638bc8694";
+    sha256 = "04446ece273c041506b1642bd3d8380367a8372196be4d6d6d03faafadc590b2";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/strictyaml/default.nix b/nixpkgs/pkgs/development/python-modules/strictyaml/default.nix
index 8f383b60b175..ddc497a64ab6 100644
--- a/nixpkgs/pkgs/development/python-modules/strictyaml/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/strictyaml/default.nix
@@ -7,13 +7,13 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.3.0";
+  version = "1.3.2";
   pname = "strictyaml";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f640ae4e6fe761c3ae7138092c3dcb9b5050ec56e9cbac45d8a6b549d7ec973c";
+    sha256 = "637399fd80dccc95f5287b2606b74098b23c08031b7ec33c5afb314ccbf10948";
   };
 
   propagatedBuildInputs = [ ruamel_yaml python-dateutil ];
diff --git a/nixpkgs/pkgs/development/python-modules/stripe/default.nix b/nixpkgs/pkgs/development/python-modules/stripe/default.nix
index b205f48cb6f9..96ac2d208b3d 100644
--- a/nixpkgs/pkgs/development/python-modules/stripe/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/stripe/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "stripe";
-  version = "2.55.0";
+  version = "2.55.2";
 
   # Tests require network connectivity and there's no easy way to disable
   # them. ~ C.
@@ -10,7 +10,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2eebf023595e8aa9d65d8b46ccc3c716185bb9625d0e39d3956282fd7525848d";
+    sha256 = "e32c68194a47522a10945eb893218e5cb5ee65e3a3c2c4df7efca117a6bf1902";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/stytra/default.nix b/nixpkgs/pkgs/development/python-modules/stytra/default.nix
index 88adbe4f7d94..80eefc0a639e 100644
--- a/nixpkgs/pkgs/development/python-modules/stytra/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/stytra/default.nix
@@ -1,4 +1,4 @@
-{ lib, pkgs, buildPythonPackage, fetchPypi, isPy3k, callPackage
+{ lib, buildPythonPackage, fetchPypi, isPy3k
 , opencv3
 , pyqt5
 , pyqtgraph
@@ -19,7 +19,7 @@
 , imageio-ffmpeg
 , av
 , nose
-, pytest
+, pytestCheckHook
 , pyserial
 , arrayqueues
 , colorspacious
@@ -37,14 +37,18 @@ buildPythonPackage rec {
     inherit pname version;
     sha256 = "aab9d07575ef599a9c0ae505656e3c03ec753462df3c15742f1f768f2b578f0a";
   };
-  doCheck = false;
+
+  # crashes python
+  preCheck = ''
+    rm stytra/tests/test_z_experiments.py
+  '';
+
   checkInputs = [
     nose
-    pytest
+    pytestCheckHook
     pyserial
   ];
 
-
   propagatedBuildInputs = [
     opencv3
     pyqt5
diff --git a/nixpkgs/pkgs/development/python-modules/subarulink/default.nix b/nixpkgs/pkgs/development/python-modules/subarulink/default.nix
index 5b6362b76a14..6ed265f65615 100644
--- a/nixpkgs/pkgs/development/python-modules/subarulink/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/subarulink/default.nix
@@ -1,38 +1,49 @@
 { lib
-, buildPythonPackage
-, fetchFromGitHub
 , aiohttp
 , asynctest
-, stdiomask
+, buildPythonPackage
 , cryptography
-, pytestcov
+, fetchFromGitHub
 , pytest-asyncio
 , pytestCheckHook
+, pythonOlder
+, stdiomask
 }:
 
 buildPythonPackage rec {
   pname = "subarulink";
-  version = "0.3.11";
+  version = "0.3.13";
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "G-Two";
     repo = pname;
     rev = "subaru-v${version}";
-    sha256 = "1ink9bhph6blidnfsqwq01grhp7ghacmkd4vzgb9hnhl9l52s1jq";
+    sha256 = "0dqbb1iiil1vn97zxnpphn63bl8z0ibgyca90ynx958cy78kys0g";
   };
 
-  propagatedBuildInputs = [ aiohttp stdiomask ];
+  propagatedBuildInputs = [
+    aiohttp
+    stdiomask
+  ];
 
   checkInputs = [
     asynctest
     cryptography
     pytest-asyncio
-    pytestcov
     pytestCheckHook
   ];
 
+  postPatch = ''
+    substituteInPlace setup.cfg --replace "--cov=subarulink" ""
+  '';
+
   __darwinAllowLocalNetworking = true;
 
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
   pythonImportsCheck = [ "subarulink" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/sunpy/default.nix b/nixpkgs/pkgs/development/python-modules/sunpy/default.nix
index 6a455ce49ebe..48eb36d6e87d 100644
--- a/nixpkgs/pkgs/development/python-modules/sunpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sunpy/default.nix
@@ -5,6 +5,7 @@
 , pythonOlder
 , asdf
 , astropy
+, setuptools-scm
 , astropy-helpers
 , astropy-extension-helpers
 , beautifulsoup4
@@ -29,15 +30,16 @@
 
 buildPythonPackage rec {
   pname = "sunpy";
-  version = "2.0.6";
+  version = "2.0.7";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "109flghca42yhsm2w5xicqhyx1mc8c3vlwvadbn65fz3lhysqj67";
+    sha256 = "d13ac67c14ea825652dc3e12c4c627e782e8e843e96a1d54440d39dd2ceb6a5c";
   };
 
   nativeBuildInputs = [
+    setuptools-scm
     astropy-extension-helpers
   ];
 
diff --git a/nixpkgs/pkgs/development/python-modules/supervisor/default.nix b/nixpkgs/pkgs/development/python-modules/supervisor/default.nix
index 10c8f28e4463..93569fe3da73 100644
--- a/nixpkgs/pkgs/development/python-modules/supervisor/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/supervisor/default.nix
@@ -1,6 +1,5 @@
 { stdenv, lib, buildPythonPackage, isPy3k, fetchPypi
 , mock
-, meld3
 , pytest
 , setuptools
 }:
@@ -22,7 +21,7 @@ buildPythonPackage rec {
     pytest
   '';
 
-  propagatedBuildInputs = [ meld3 setuptools ];
+  propagatedBuildInputs = [ setuptools ];
 
   meta = with lib; {
     description = "A system for controlling process state under UNIX";
diff --git a/nixpkgs/pkgs/development/python-modules/surepy/default.nix b/nixpkgs/pkgs/development/python-modules/surepy/default.nix
new file mode 100644
index 000000000000..dd071b5cf08f
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/surepy/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, aiodns
+, aiohttp
+, async-timeout
+, brotlipy
+, buildPythonPackage
+, cchardet
+, click
+, colorama
+, fetchFromGitHub
+, halo
+, poetry-core
+, pythonOlder
+, requests
+, rich
+}:
+
+buildPythonPackage rec {
+  pname = "surepy";
+  version = "0.5.0";
+  format = "pyproject";
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "benleb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1adsnjya142bxdhfxqsi2qa35ylvdcibigs1wafjlxazlxs3mg0j";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [
+    aiodns
+    aiohttp
+    async-timeout
+    brotlipy
+    cchardet
+    click
+    colorama
+    halo
+    requests
+    rich
+  ];
+
+  postPatch = ''
+    # halo is out-dated, https://github.com/benleb/surepy/pull/7
+    substituteInPlace pyproject.toml --replace "^0.0.30" "^0.0.31"
+  '';
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "surepy" ];
+
+  meta = with lib; {
+    description = "Python library to interact with the Sure Petcare API";
+    homepage = "https://github.com/benleb/surepy";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/survey/default.nix b/nixpkgs/pkgs/development/python-modules/survey/default.nix
index 436127fae9c4..99a2d85aaa2b 100644
--- a/nixpkgs/pkgs/development/python-modules/survey/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/survey/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "survey";
-  version = "3.1.1";
+  version = "3.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-R/PfXW/CnqYiOWbCxPAYwneg6j6CLvdIpITZ2eIXn+M=";
+    sha256 = "sha256-aF7ZS5oxeIOb7mJsrusdc3HefcPE+3OTXcJB/pjJxFY=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/swspotify/default.nix b/nixpkgs/pkgs/development/python-modules/swspotify/default.nix
index e213e9e265ef..020e4fe1472f 100644
--- a/nixpkgs/pkgs/development/python-modules/swspotify/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/swspotify/default.nix
@@ -35,6 +35,6 @@ buildPythonPackage rec {
     description = "Library to get the currently playing song and artist from Spotify";
     license = licenses.mit;
     maintainers = with maintainers; [ siraben ];
-    platforms = lib.platforms.linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/sybil/default.nix b/nixpkgs/pkgs/development/python-modules/sybil/default.nix
index 3bf6ed95ced1..d46fc14cdf67 100644
--- a/nixpkgs/pkgs/development/python-modules/sybil/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sybil/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonApplication rec {
   pname = "sybil";
-  version = "2.0.0";
+  version = "2.0.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3e098ae96c4d3668cd5fb04c160334a4bc3ade9d29177e0206846b75f5ff3e91";
+    sha256 = "597d71e246690b9223c132f0ed7dcac470dcbe9ad022004a801e108a00dc3524";
   };
 
   checkInputs = [ pytest nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/tabulate/default.nix b/nixpkgs/pkgs/development/python-modules/tabulate/default.nix
index 4686d02486fc..2d841918f110 100644
--- a/nixpkgs/pkgs/development/python-modules/tabulate/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tabulate/default.nix
@@ -5,12 +5,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.8.7";
+  version = "0.8.8";
   pname = "tabulate";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "db2723a20d04bcda8522165c73eea7c300eda74e0ce852d9022e0159d7895007";
+    sha256 = "26f2589d80d332fefd2371d396863dedeb806f51b54bdb4b264579270b621e92";
   };
 
   checkInputs = [ nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/tahoma-api/default.nix b/nixpkgs/pkgs/development/python-modules/tahoma-api/default.nix
new file mode 100644
index 000000000000..440218223117
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tahoma-api/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "tahoma-api";
+  version = "0.0.17";
+
+  src = fetchFromGitHub {
+    owner = "philklei";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YwOKSBlN4lNyS+hfdbQDUq1gc14FBof463ofxtUVLC4=";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "tahoma_api" ];
+
+  meta = with lib; {
+    description = "Python module to interface with Tahoma REST API";
+    homepage = "https://github.com/philklei/tahoma-api/";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/tatsu/default.nix b/nixpkgs/pkgs/development/python-modules/tatsu/default.nix
index 540c315c8ff6..d5dfda53c08c 100644
--- a/nixpkgs/pkgs/development/python-modules/tatsu/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tatsu/default.nix
@@ -1,37 +1,26 @@
 { lib, buildPythonPackage, fetchFromGitHub, pythonOlder
-, colorama, mypy, pyyaml, regex
-, dataclasses, typing
-, pytestrunner, pytest-mypy
+, colorama, regex
+, pytestrunner, pytestCheckHook, pytest-mypy
 }:
 
 buildPythonPackage rec {
-  pname = "TatSu";
-  version = "5.0.0";
+  pname = "tatsu";
+  version = "5.6.1";
 
   src = fetchFromGitHub {
     owner = "neogeny";
-    repo = pname;
+    repo = "TatSu";
     rev = "v${version}";
-    sha256 = "1c16fcxf0xjkh5py9bnj6ljb9krhrj57mkwayl1w1dvzwl5lkgj3";
+    sha256 = "149ra1lwax5m1svlv4dwjfqw00lc5vwyfj6zw2v0ammmfm1b94x9";
   };
 
-  # Since version 5.0.0 only >=3.8 is officially supported, but ics is not
-  # compatible with Python 3.8 due to aiohttp:
-  disabled = pythonOlder "3.7";
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "python_requires='>=3.8'," "python_requires='>=3.7',"
-  '';
+  disabled = pythonOlder "3.8";
 
   nativeBuildInputs = [ pytestrunner ];
-  propagatedBuildInputs = [ colorama mypy pyyaml regex ]
-    ++ lib.optionals (pythonOlder "3.7") [ dataclasses ]
-    ++ lib.optionals (pythonOlder "3.5") [ typing ];
-  checkInputs = [ pytest-mypy ];
+  propagatedBuildInputs = [ colorama regex ];
+  checkInputs = [ pytestCheckHook pytest-mypy ];
 
-  checkPhase = ''
-    pytest test/
-  '';
+  pythonImportsCheck = [ "tatsu" ];
 
   meta = with lib; {
     description = "Generates Python parsers from grammars in a variation of EBNF";
diff --git a/nixpkgs/pkgs/development/python-modules/tellduslive/default.nix b/nixpkgs/pkgs/development/python-modules/tellduslive/default.nix
new file mode 100644
index 000000000000..5a6a84af8392
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tellduslive/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, docopt
+, fetchFromGitHub
+, requests
+, requests_oauthlib
+}:
+
+buildPythonPackage rec {
+  pname = "tellduslive";
+  version = "0.10.11";
+
+  src = fetchFromGitHub {
+    owner = "molobrakos";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0aqhj6fq2z2qb4jyk23ygjicf5nlj8lkya7blkyqb7jra5k1gyg0";
+  };
+
+  propagatedBuildInputs = [
+    docopt
+    requests
+    requests_oauthlib
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "tellduslive" ];
+
+  meta = with lib; {
+    description = "Python module to communicate with Telldus Live";
+    homepage = "https://github.com/molobrakos/tellduslive";
+    license = with licenses; [ unlicense ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/terminado/default.nix b/nixpkgs/pkgs/development/python-modules/terminado/default.nix
index 400751529ab6..0f02da4866f2 100644
--- a/nixpkgs/pkgs/development/python-modules/terminado/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/terminado/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "terminado";
-  version = "0.9.1";
+  version = "0.9.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3da72a155b807b01c9e8a5babd214e052a0a45a975751da3521a1c3381ce6d76";
+    sha256 = "89e6d94b19e4bc9dce0ffd908dfaf55cc78a9bf735934e915a4a96f65ac9704c";
   };
 
   propagatedBuildInputs = [ ptyprocess tornado ];
diff --git a/nixpkgs/pkgs/development/python-modules/termplotlib/default.nix b/nixpkgs/pkgs/development/python-modules/termplotlib/default.nix
new file mode 100644
index 000000000000..adccc99ac2fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/termplotlib/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, exdown
+, numpy
+, gnuplot
+}:
+
+buildPythonPackage rec {
+  pname = "termplotlib";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "nschloe";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17d2727bz6kqhxczixx6nxzz4hzyi2cssylzazjimk07syvycd6n";
+  };
+
+  format = "pyproject";
+  checkInputs = [ pytestCheckHook numpy exdown gnuplot ];
+  pythonImportsCheck = [ "termplotlib" ];
+
+  # there seems to be a newline in the very front of the output
+  # which causes the test to fail, since it apparently doesn't
+  # strip whitespace. might be a gnuplot choice? sigh...
+  disabledTests = [ "test_plot_lim" ];
+
+  meta = with lib; {
+    description = "matplotlib for your terminal";
+    homepage = "https://github.com/nschloe/termplotlib";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/teslajsonpy/default.nix b/nixpkgs/pkgs/development/python-modules/teslajsonpy/default.nix
index 46c8a2853b54..59af2b33d2b9 100644
--- a/nixpkgs/pkgs/development/python-modules/teslajsonpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/teslajsonpy/default.nix
@@ -5,6 +5,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , fetchpatch
+, pytest-asyncio
 , pytestCheckHook
 , wrapt
 }:
@@ -35,15 +36,11 @@ buildPythonPackage rec {
     wrapt
   ];
 
-  checkInputs = [ pytestCheckHook ];
-
-  # Not all Home Assistant related check pass
-  # https://github.com/zabuldon/teslajsonpy/issues/121
-  # https://github.com/zabuldon/teslajsonpy/pull/124
-  disabledTests = [
-    "test_values_on_init"
-    "test_get_value_on_init"
+  checkInputs = [
+    pytest-asyncio
+    pytestCheckHook
   ];
+
   pythonImportsCheck = [ "teslajsonpy" ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/development/python-modules/textacy/default.nix b/nixpkgs/pkgs/development/python-modules/textacy/default.nix
index 616db71a94f4..31b02e3f2641 100644
--- a/nixpkgs/pkgs/development/python-modules/textacy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/textacy/default.nix
@@ -51,6 +51,9 @@ buildPythonPackage rec {
   '';
 
   meta = with lib; {
+    # scikit-learn in pythonPackages is too new for textacy
+    # remove as soon as textacy support scikit-learn >= 0.24
+    broken = true;
     description = "Higher-level text processing, built on spaCy";
     homepage = "https://textacy.readthedocs.io/";
     license = licenses.asl20;
diff --git a/nixpkgs/pkgs/development/python-modules/thespian/default.nix b/nixpkgs/pkgs/development/python-modules/thespian/default.nix
index 74f94aaf2558..589ff573ca54 100644
--- a/nixpkgs/pkgs/development/python-modules/thespian/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/thespian/default.nix
@@ -1,13 +1,13 @@
 { fetchPypi, buildPythonPackage, lib }:
 
 buildPythonPackage rec {
-  version = "3.10.1";
+  version = "3.10.3";
   pname = "thespian";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "e00bba5b0b91f9d7ec3df0ac671136df7a7be0a14dfea38ca3850488bca73d8c";
+    sha256 = "d9152089f239c80339eb0431b9561966a841fb3ab0d043b36fa47934fc7956f2";
   };
 
   # Do not run the test suite: it takes a long time and uses
diff --git a/nixpkgs/pkgs/development/python-modules/tiledb/default.nix b/nixpkgs/pkgs/development/python-modules/tiledb/default.nix
index d5379b849ade..ddfa83e30f58 100644
--- a/nixpkgs/pkgs/development/python-modules/tiledb/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tiledb/default.nix
@@ -81,6 +81,7 @@ buildPythonPackage rec {
     homepage = "https://github.com/TileDB-Inc/TileDB-Py";
     license = licenses.mit;
     maintainers = with maintainers; [ fridh ];
+    # tiledb/core.cc:556:30: error: ‘struct std::array<long unsigned int, 2>’ has no member named ‘second’
+    broken = true;
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/tiros/default.nix b/nixpkgs/pkgs/development/python-modules/tiros/default.nix
deleted file mode 100644
index edc4bbdebb13..000000000000
--- a/nixpkgs/pkgs/development/python-modules/tiros/default.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ fetchPypi, buildPythonPackage
-, semantic-version, boto3, flask, docutils, requests
-}:
-
-buildPythonPackage rec {
-  pname = "tiros";
-  version = "1.0.44";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "d6bf7410967554ec283f9d4eabc0ce6821d6e6d36001afbdb7fe0826423d4f37";
-  };
-
-  patchPhase = ''
-    sed -E -i "s/'([[:alnum:].-_]+)[=><]{2}[[:digit:].]*'/'\\1'/g" setup.py
-    sed -i "s/'datetime',//" setup.py
-  '';
-
-  propagatedBuildInputs = [ semantic-version boto3 flask docutils requests ];
-}
diff --git a/nixpkgs/pkgs/development/python-modules/tldextract/default.nix b/nixpkgs/pkgs/development/python-modules/tldextract/default.nix
index b91289e50614..d5b257abedf5 100644
--- a/nixpkgs/pkgs/development/python-modules/tldextract/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tldextract/default.nix
@@ -1,28 +1,56 @@
-{ lib, fetchPypi, buildPythonPackage, setuptools_scm
-, requests, requests-file, idna, filelock, pytest
+{ lib
+, buildPythonPackage
+, fetchPypi
+, filelock
+, idna
+, pytest-mock
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests-file
 , responses
+, setuptools-scm
 }:
 
 buildPythonPackage rec {
   pname   = "tldextract";
   version = "3.1.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "cfae9bc8bda37c3e8c7c8639711ad20e95dc85b207a256b60b0b23d7ff5540ea";
   };
 
-  propagatedBuildInputs = [ requests requests-file idna filelock ];
-  checkInputs = [ pytest responses ];
-  nativeBuildInputs = [ setuptools_scm ];
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [
+    filelock
+    idna
+    requests
+    requests-file
+  ];
+
+  checkInputs = [
+    pytest-mock
+    pytestCheckHook
+    responses
+  ];
+
+  postPatch = ''
+    substituteInPlace pytest.ini --replace " --pylint" ""
+  '';
 
-  # No tests included
-  doCheck = false;
   pythonImportsCheck = [ "tldextract" ];
 
-  meta = {
+  meta = with lib; {
+    description = "Python module to accurately separate the TLD from the domain of an URL";
+    longDescription = ''
+      tldextract accurately separates the gTLD or ccTLD (generic or country code top-level domain)
+      from the registered domain and subdomains of a URL.
+    '';
     homepage = "https://github.com/john-kurkowski/tldextract";
-    description = "Accurately separate the TLD from the registered domain and subdomains of a URL, using the Public Suffix List";
-    license = lib.licenses.bsd3;
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/tlsh/default.nix b/nixpkgs/pkgs/development/python-modules/tlsh/default.nix
index 7be95b970888..fbe474166c11 100644
--- a/nixpkgs/pkgs/development/python-modules/tlsh/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tlsh/default.nix
@@ -6,13 +6,13 @@
 
 buildPythonPackage {
   pname = "tlsh";
-  version = "3.4.5";
+  version = "4.5.0";
 
   src = fetchFromGitHub {
     owner = "trendmicro";
     repo = "tlsh";
-    rev = "22fa9a62068b92c63f2b5a87004a7a7ceaac1930";
-    sha256 = "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll";
+    rev = "f2bb7a97cfb0f9418a750ba92c182d1091e6c159";
+    sha256 = "1kxfhdwqjd4pjdlr1gjh2am8mxpaqmfq7rrxkjfi0mbisl1krkwb";
   };
 
   nativeBuildInputs = [ cmake ];
@@ -26,7 +26,7 @@ buildPythonPackage {
 
   meta = with lib; {
     description = "Trend Micro Locality Sensitive Hash";
-    homepage = "https://github.com/trendmicro/tlsh";
+    homepage = "http://tlsh.org/";
     license = licenses.asl20;
     platforms = platforms.unix;
   };
diff --git a/nixpkgs/pkgs/development/python-modules/tokenize-rt/default.nix b/nixpkgs/pkgs/development/python-modules/tokenize-rt/default.nix
new file mode 100644
index 000000000000..7aee895c6cb6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tokenize-rt/default.nix
@@ -0,0 +1,28 @@
+{ buildPythonPackage
+, lib
+, fetchFromGitHub
+, isPy27
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "tokenize-rt";
+  version = "4.1.0";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "asottile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9qamHk2IZRmgGNFlYkSRks6mRVNlYfetpK/7rsfK9tc=";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  meta = with lib; {
+    description = "A wrapper around the stdlib `tokenize` which roundtrips";
+    homepage = "https://github.com/asottile/tokenize-rt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/tokenizers/default.nix b/nixpkgs/pkgs/development/python-modules/tokenizers/default.nix
index cf122613f633..348302a59c55 100644
--- a/nixpkgs/pkgs/development/python-modules/tokenizers/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tokenizers/default.nix
@@ -1,12 +1,10 @@
 { lib
-, rustPlatform
 , fetchFromGitHub
 , fetchurl
-, pipInstallHook
+, buildPythonPackage
+, rustPlatform
 , setuptools-rust
-, wheel
 , numpy
-, python
 , datasets
 , pytestCheckHook
 , requests
@@ -49,30 +47,33 @@ let
     url = "https://s3.amazonaws.com/models.huggingface.co/bert/openai-gpt-merges.txt";
     sha256 = "09a754pm4djjglv3x5pkgwd6f79i2rq8ydg0f7c3q1wmwqdbba8f";
   };
-in rustPlatform.buildRustPackage rec {
+in buildPythonPackage rec {
   pname = "tokenizers";
-  version = "0.10.0";
+  version = "0.10.1";
 
   src = fetchFromGitHub {
     owner = "huggingface";
     repo = pname;
     rev = "python-v${version}";
-    hash = "sha256-rQ2hRV52naEf6PvRsWVCTN7B1oXAQGmnpJw4iIdhamw=";
+    hash = "sha256-N/dKjQwHKmJnB76q8ISQ3cjuW0Z4GqGavnFFx/w9JRQ=";
   };
 
-  cargoSha256 = "sha256-BoHIN/519Top1NUBjpB/oEMqi86Omt3zTQcXFWqrek0=";
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src sourceRoot;
+    name = "${pname}-${version}";
+    hash = "sha256-3ICSjtiRfLOj+PXu6mcuDoAtod5uXAcabYWTLxEgI18=";
+  };
 
   sourceRoot = "source/bindings/python";
 
-  nativeBuildInputs = [
-    pipInstallHook
-    setuptools-rust
-    wheel
-  ];
+  nativeBuildInputs = [ setuptools-rust ] ++ (with rustPlatform; [
+    cargoSetupHook
+    rust.cargo
+    rust.rustc
+  ]);
 
   propagatedBuildInputs = [
     numpy
-    python
   ];
 
   installCheckInputs = [
@@ -99,14 +100,6 @@ in rustPlatform.buildRustPackage rec {
       ln -s ${openaiMerges} openai-gpt-merges.txt )
   '';
 
-  buildPhase = ''
-    ${python.interpreter} setup.py bdist_wheel
-  '';
-
-  installPhase = ''
-    pipInstallPhase
-  '';
-
   preCheck = ''
     HOME=$TMPDIR
   '';
diff --git a/nixpkgs/pkgs/development/python-modules/torchgpipe/default.nix b/nixpkgs/pkgs/development/python-modules/torchgpipe/default.nix
index 6e621ee8b688..dbfad336d0f3 100644
--- a/nixpkgs/pkgs/development/python-modules/torchgpipe/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/torchgpipe/default.nix
@@ -2,7 +2,6 @@
 , buildPythonPackage
 , fetchFromGitHub
 , isPy27
-, pytest
 , pytestrunner
 , pytestCheckHook
 , pytorch
@@ -23,12 +22,11 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ pytorch ];
 
-  checkInputs = [ pytest pytestrunner pytestCheckHook ];
-  disabledTests = [ "test_inplace_on_requires_grad" ];
-  # seems like a harmless failure:
-  ## AssertionError:
-  ## Pattern 'a leaf Variable that requires grad has been used in an in-place operation.'
-  ## does not match 'a leaf Variable that requires grad is being used in an in-place operation.'
+  checkInputs = [ pytestrunner pytestCheckHook ];
+  disabledTests = [
+    "test_inplace_on_requires_grad"
+    "test_input_requiring_grad"
+  ];
 
   meta = with lib; {
     description = "GPipe implemented in Pytorch and optimized for CUDA rather than TPU";
diff --git a/nixpkgs/pkgs/development/python-modules/torchvision/default.nix b/nixpkgs/pkgs/development/python-modules/torchvision/default.nix
index 79f6a19ffcb5..357592151820 100644
--- a/nixpkgs/pkgs/development/python-modules/torchvision/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/torchvision/default.nix
@@ -45,6 +45,6 @@ buildPythonPackage rec {
     description = "PyTorch vision library";
     homepage = "https://pytorch.org/";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ ericsagnes SuperSandro2000 ];
+    maintainers = with maintainers; [ ericsagnes ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/tpm2-pytss/default.nix b/nixpkgs/pkgs/development/python-modules/tpm2-pytss/default.nix
new file mode 100644
index 000000000000..544c1a3084a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tpm2-pytss/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildPythonPackage, fetchPypi, pythonOlder
+, pkg-config, swig
+, tpm2-tss
+, cryptography, ibm-sw-tpm2
+}:
+
+buildPythonPackage rec {
+  pname = "tpm2-pytss";
+
+  # Last version on github is 0.2.4, but it looks
+  # like a mistake (it's missing commits from 0.1.9)
+  version = "0.1.9";
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-v5Xth0A3tFnLFg54nvWYL2TD201e/GWv+2y5Qc60CmU=";
+  };
+  postPatch = ''
+    substituteInPlace tpm2_pytss/config.py --replace \
+      'SYSCONFDIR = CONFIG.get("sysconfdir", "/etc")' \
+      'SYSCONFDIR = "${tpm2-tss}/etc"'
+  '';
+
+  nativeBuildInputs = [ pkg-config swig ];
+  # The TCTI is dynamically loaded from tpm2-tss, we have to provide the library to the end-user
+  propagatedBuildInputs = [ tpm2-tss ];
+
+  checkInputs = [
+    cryptography
+    # provide tpm_server used as simulator for the tests
+    ibm-sw-tpm2
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tpm2-software/tpm2-pytss";
+    description = "TPM2 TSS Python bindings for Enhanced System API (ESYS)";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/tqdm/default.nix b/nixpkgs/pkgs/development/python-modules/tqdm/default.nix
index ba40723e7ddd..950a618a5275 100644
--- a/nixpkgs/pkgs/development/python-modules/tqdm/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tqdm/default.nix
@@ -1,28 +1,39 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, nose
-, coverage
-, glibcLocales
-, flake8
 , setuptools_scm
 , pytestCheckHook
+, pytest-asyncio
+, pytest-timeout
+, numpy
+, pandas
+, rich
+, tkinter
 }:
 
 buildPythonPackage rec {
   pname = "tqdm";
-  version = "4.54.1";
+  version = "4.58.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1x9chlh3msikddmq8p8p5s5kgqqs48bclxgzz3vb9ygcwjimidiq";
+    sha256 = "1fjvaag1wy70gglxjkfnn0acrya7fbhzi4adbs1bpap8x03wffn2";
   };
 
   nativeBuildInputs = [
     setuptools_scm
   ];
 
-  checkInputs = [ nose coverage glibcLocales flake8 pytestCheckHook ];
+  checkInputs = [
+    pytestCheckHook
+    pytest-asyncio
+    pytest-timeout
+    # tests of optional features
+    numpy
+    pandas
+    rich
+    tkinter
+  ];
 
   # Remove performance testing.
   # Too sensitive for on Hydra.
diff --git a/nixpkgs/pkgs/development/python-modules/traitsui/default.nix b/nixpkgs/pkgs/development/python-modules/traitsui/default.nix
index e76a36bcf4f9..5748ff91db13 100644
--- a/nixpkgs/pkgs/development/python-modules/traitsui/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/traitsui/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "traitsui";
-  version = "7.1.0";
+  version = "7.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b699aeea588b55723860ddc6b2bd9b5013c4a72e18d1bbf51c6689cc7c6a562a";
+    sha256 = "77d9dc5830c4e7ab94f9225bc2f082430399d95c943f1616db41e83a94df38e5";
   };
 
   propagatedBuildInputs = [ traits pyface six ];
diff --git a/nixpkgs/pkgs/development/python-modules/traittypes/default.nix b/nixpkgs/pkgs/development/python-modules/traittypes/default.nix
index 2c8f6dd80312..290892672e59 100644
--- a/nixpkgs/pkgs/development/python-modules/traittypes/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/traittypes/default.nix
@@ -3,10 +3,9 @@
 , fetchFromGitHub
 , fetchpatch
 , isPy27
-, pytest
+, pytestCheckHook
 , nose
 , numpy
-, scipy
 , pandas
 , xarray
 , traitlets
@@ -35,7 +34,8 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ traitlets ];
 
-  checkInputs = [ numpy pandas xarray nose pytest ];
+  checkInputs = [ numpy pandas xarray nose pytestCheckHook ];
+  pythonImportsCheck = [ "traittypes" ];
 
   meta = with lib; {
     description = "Trait types for NumPy, SciPy, XArray, and Pandas";
diff --git a/nixpkgs/pkgs/development/python-modules/transaction/default.nix b/nixpkgs/pkgs/development/python-modules/transaction/default.nix
index 6bb5987ba484..78022cdba5ba 100644
--- a/nixpkgs/pkgs/development/python-modules/transaction/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/transaction/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "transaction";
-  version = "3.0.0";
+  version = "3.0.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3b0ad400cb7fa25f95d1516756c4c4557bb78890510f69393ad0bd15869eaa2d";
+    sha256 = "0c15ef0b7ff3518357ceea75722a30d974c3f85e11aa5cec5d5a2b6a40cfcf68";
   };
 
   propagatedBuildInputs = [ zope_interface mock ];
diff --git a/nixpkgs/pkgs/development/python-modules/transformers/default.nix b/nixpkgs/pkgs/development/python-modules/transformers/default.nix
index 6c04bacbd7cb..19dcc708651d 100644
--- a/nixpkgs/pkgs/development/python-modules/transformers/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/transformers/default.nix
@@ -16,13 +16,13 @@
 
 buildPythonPackage rec {
   pname = "transformers";
-  version = "4.3.2";
+  version = "4.4.2";
 
   src = fetchFromGitHub {
     owner = "huggingface";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-vv4wKf1PcuVR63ZQJd3oixdNvS7VcTmAaKkmL8I4COg=";
+    hash = "sha256-kl1Z2FBo+yqVXUqLaUtet6IycmdcAtfydNTI4MNNrkc=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/transitions/default.nix b/nixpkgs/pkgs/development/python-modules/transitions/default.nix
index 2dda33fd9682..c469875728cd 100644
--- a/nixpkgs/pkgs/development/python-modules/transitions/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/transitions/default.nix
@@ -1,21 +1,39 @@
-{ lib, buildPythonPackage, fetchFromGitHub
-, six, pytestCheckHook, mock, dill, pycodestyle }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, six
+, pygraphviz
+, pytestCheckHook
+, mock
+, graphviz
+, pycodestyle
+, fontconfig
+}:
 
 buildPythonPackage rec {
   pname = "transitions";
-  version = "0.8.6";
+  version = "0.8.8";
 
-  # test_codestyle.py fails in PyPI sdist
-  src = fetchFromGitHub {
-    owner = "pytransitions";
-    repo = "transitions";
-    rev = version;
-    sha256 = "1d913hzzyqhdhhbkbvjw65dqkajrw50a4sxhyxk0jlg8pcs7bs7v";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-56hrMaFhp2Ez8Ymzrp2tJ1WoDqTB4O7hgFZI0CH7Z30=";
   };
 
-  propagatedBuildInputs = [ six ];
+  propagatedBuildInputs = [
+    six
+    pygraphviz # optional
+  ];
 
-  checkInputs = [ pytestCheckHook mock dill pycodestyle ];
+  checkInputs = [
+    pytestCheckHook
+    mock
+    graphviz
+    pycodestyle
+  ];
+
+  preCheck = ''
+    export FONTCONFIG_FILE=${fontconfig.out}/etc/fonts/fonts.conf
+  '';
 
   meta = with lib; {
     homepage = "https://github.com/pytransitions/transitions";
diff --git a/nixpkgs/pkgs/development/python-modules/transmission-rpc/default.nix b/nixpkgs/pkgs/development/python-modules/transmission-rpc/default.nix
new file mode 100644
index 000000000000..235540209e37
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/transmission-rpc/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, six
+, typing-extensions
+, requests
+, yarl
+}:
+
+buildPythonPackage rec {
+  pname = "transmission-rpc";
+  version = "3.2.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1y5048109j6z4smzwysvdjfn6cj9698dsxfim9i4nqam4nmw2wi7";
+  };
+
+  propagatedBuildInputs = [
+    six
+    typing-extensions
+    requests
+    yarl
+  ];
+
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "transmission_rpc" ];
+
+  meta = with lib; {
+    description = "Python module that implements the Transmission bittorent client RPC protocol";
+    homepage = "https://pypi.python.org/project/transmission-rpc/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eyjhb ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/transmissionrpc/default.nix b/nixpkgs/pkgs/development/python-modules/transmissionrpc/default.nix
index a9f3042fb397..3a484692d1a2 100644
--- a/nixpkgs/pkgs/development/python-modules/transmissionrpc/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/transmissionrpc/default.nix
@@ -17,10 +17,12 @@ buildPythonPackage rec {
 
   # no tests
   doCheck = false;
+  pythonImportsCheck = [ "transmissionrpc" ];
 
   meta = with lib; {
     description = "Python implementation of the Transmission bittorent client RPC protocol";
     homepage = "https://pypi.python.org/pypi/transmissionrpc/";
-    license = licenses.mit;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/trimesh/default.nix b/nixpkgs/pkgs/development/python-modules/trimesh/default.nix
index b157e32ed876..d4a021a0e311 100644
--- a/nixpkgs/pkgs/development/python-modules/trimesh/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/trimesh/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "trimesh";
-  version = "3.9.1";
+  version = "3.9.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d19cbdb830a17297aa218ba6ce4955fc11b4b553414289cfd71f58f8144cc91f";
+    sha256 = "63dd76531a4c6ddd53e00209b971e83d3fbfd9b012f4033a1c4b0f04f1f551e3";
   };
 
   propagatedBuildInputs = [ numpy ];
diff --git a/nixpkgs/pkgs/development/python-modules/trio/default.nix b/nixpkgs/pkgs/development/python-modules/trio/default.nix
index 94da63cd3ec6..baaff068dbc3 100644
--- a/nixpkgs/pkgs/development/python-modules/trio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/trio/default.nix
@@ -18,12 +18,12 @@
 
 buildPythonPackage rec {
   pname = "trio";
-  version = "0.17.0";
+  version = "0.18.0";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0zcxirpdvvl54pbfkgw7vz984879xwvdygqfpggnam24is2zjp78";
+    sha256 = "0xm0bd1rrlb4l9q0nf2n1wg7xh42ljdnm4i4j0651zi73zk6m9l7";
   };
 
   checkInputs = [ astor pytestCheckHook pyopenssl trustme jedi pylint yapf ];
@@ -34,6 +34,8 @@ buildPythonPackage rec {
     "getprotobyname"
     "waitpid"
     "static_tool_sees_all_symbols"
+    # tests pytest more than python
+    "fallback_when_no_hook_claims_it"
   ];
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/trytond/default.nix b/nixpkgs/pkgs/development/python-modules/trytond/default.nix
index 68254d8601ec..20394fb2de65 100644
--- a/nixpkgs/pkgs/development/python-modules/trytond/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/trytond/default.nix
@@ -23,12 +23,12 @@
 
 buildPythonApplication rec {
   pname = "trytond";
-  version = "5.8.2";
+  version = "5.8.4";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dea7d11ec0b4584a438fab7a1acb56864b32cc9e7d6ffa166572f75a2b033dc0";
+    sha256 = "28e467b51f6dc67b8b4ca60afec82614bba8cf78852c1941cc9071d615ba7972";
   };
 
   # Tells the tests which database to use
diff --git a/nixpkgs/pkgs/development/python-modules/tubeup/default.nix b/nixpkgs/pkgs/development/python-modules/tubeup/default.nix
index 7a4b4454b3b6..9d63e466e29b 100644
--- a/nixpkgs/pkgs/development/python-modules/tubeup/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tubeup/default.nix
@@ -9,13 +9,13 @@
 
 buildPythonPackage rec {
   pname = "tubeup";
-  version = "0.0.21";
+  version = "0.0.25";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "326a499be032bee7f7ed921d85abff4b3b4dcd2c3d6ad694f08ef98dbcef19b6";
+    sha256 = "c1869363eddb85f39c05971d159bb2bf8cafa596acff3b9117635ebebfd1d342";
   };
 
   postPatch = ''
@@ -32,7 +32,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Youtube (and other video site) to Internet Archive Uploader";
     homepage = "https://github.com/bibanon/tubeup";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = [ maintainers.marsam ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/tuyaha/default.nix b/nixpkgs/pkgs/development/python-modules/tuyaha/default.nix
new file mode 100644
index 000000000000..a53124783d18
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tuyaha/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "tuyaha";
+  version = "0.0.10";
+
+  src = fetchFromGitHub {
+    owner = "PaulAnnekov";
+    repo = pname;
+    rev = version;
+    sha256 = "0n08mqrz76zv1cyqky6ibs6im1fqcywkiyvfmfabml0vzvr43awf";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "tuyaha" ];
+
+  meta = with lib; {
+    description = "Python module with the Tuya API";
+    homepage = "https://github.com/PaulAnnekov/tuyaha";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/twentemilieu/default.nix b/nixpkgs/pkgs/development/python-modules/twentemilieu/default.nix
new file mode 100644
index 000000000000..fb5617321747
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/twentemilieu/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, aiohttp
+, yarl
+, aresponses
+, pytest-asyncio
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "twentemilieu";
+  version = "0.3.0";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "frenck";
+    repo = "python-twentemilieu";
+    rev = "v${version}";
+    sha256 = "1ff35sh73m2s7fh4d8p2pjwdbfljswr8b8lpcjybz8nsh0286xph";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    yarl
+  ];
+
+  checkInputs = [
+    aresponses
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "twentemilieu" ];
+
+  meta = with lib; {
+    description = "Python client for Twente Milieu";
+    homepage = "https://github.com/frenck/python-twentemilieu";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/twill/default.nix b/nixpkgs/pkgs/development/python-modules/twill/default.nix
index a717ab2bc9d2..e234084d31de 100644
--- a/nixpkgs/pkgs/development/python-modules/twill/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/twill/default.nix
@@ -5,11 +5,11 @@
 }:
 buildPythonPackage rec {
   pname = "twill";
-  version = "2.0.1";
+  version = "2.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "85bc45bc34e3d4116123e3021c07d3a86b5e67be1ee01bc8062288eb83ae7799";
+    sha256 = "fc694ac1cb0616cfba2f9db4720e9d354bf656c318e21ef604a7e3caaef83d10";
   };
 
   checkInputs = [ nose ];
diff --git a/nixpkgs/pkgs/development/python-modules/twinkly-client/default.nix b/nixpkgs/pkgs/development/python-modules/twinkly-client/default.nix
new file mode 100644
index 000000000000..fc856430da95
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/twinkly-client/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "twinkly-client";
+  version = "0.0.2";
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "16jbm4ya4yk2nfswza1kpgks70rmy5lpsv9dv3hdjdnr1j44hr3i";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "twinkly_client" ];
+
+  meta = with lib; {
+    description = "Python module to communicate with Twinkly LED strings";
+    homepage = "https://github.com/dr1rrb/py-twinkly-client";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/twitterapi/default.nix b/nixpkgs/pkgs/development/python-modules/twitterapi/default.nix
new file mode 100644
index 000000000000..b244167f88ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/twitterapi/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+, requests_oauthlib
+}:
+
+buildPythonPackage rec {
+  pname = "twitterapi";
+  version = "2.6.8";
+
+  src = fetchFromGitHub {
+    owner = "geduldig";
+    repo = "TwitterAPI";
+    rev = "v${version}";
+    sha256 = "sha256-X/j+3bWLQ9b4q0k/JTE984o1VZS0KTQnC0AdZpNsksY=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    requests_oauthlib
+  ];
+
+  # Tests are interacting with the Twitter API
+  doCheck = false;
+  pythonImportsCheck = [ "TwitterAPI" ];
+
+  meta = with lib; {
+    description = "Python wrapper for Twitter's REST and Streaming APIs";
+    homepage = "https://github.com/geduldig/TwitterAPI";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/typesystem/default.nix b/nixpkgs/pkgs/development/python-modules/typesystem/default.nix
index e93fd83656f8..c278680404ba 100644
--- a/nixpkgs/pkgs/development/python-modules/typesystem/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/typesystem/default.nix
@@ -35,7 +35,7 @@ buildPythonPackage rec {
     # the default string formatting of regular expression flags which breaks test assertion
     "test_to_json_schema_complex_regular_expression"
   ];
-  disabledTestFiles = [
+  disabledTestPaths = [
     # for some reason jinja2 not picking up forms directory (1% of tests)
     "tests/test_forms.py"
   ];
diff --git a/nixpkgs/pkgs/development/python-modules/tzdata/default.nix b/nixpkgs/pkgs/development/python-modules/tzdata/default.nix
new file mode 100644
index 000000000000..7f1803d12c62
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/tzdata/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, pytestCheckHook
+, pytest-subtests
+, importlib-resources
+}:
+
+buildPythonPackage rec {
+  pname = "tzdata";
+  version = "2021.1";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-4ZxzUfiHUioaxznSEEHlkt3ebdG3ZP3vqPeys1UdPTg=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-subtests
+  ] ++ lib.optional (pythonOlder "3.7") importlib-resources;
+
+  pythonImportsCheck = [ "tzdata" ];
+
+  meta = with lib; {
+    description = "Provider of IANA time zone data";
+    homepage = "https://github.com/python/tzdata";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/tzlocal/default.nix b/nixpkgs/pkgs/development/python-modules/tzlocal/default.nix
index a7cd91d6845b..c5514cfa53a4 100644
--- a/nixpkgs/pkgs/development/python-modules/tzlocal/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/tzlocal/default.nix
@@ -15,9 +15,12 @@ buildPythonPackage rec {
   # test fail (timezone test fail)
   doCheck = false;
 
+  pythonImportsCheck = [ "tzlocal" ];
+
   meta = with lib; {
     description = "Tzinfo object for the local timezone";
     homepage = "https://github.com/regebro/tzlocal";
     license = licenses.cddl;
+    maintainers = with maintainers; [ dotlambda ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/ueberzug/default.nix b/nixpkgs/pkgs/development/python-modules/ueberzug/default.nix
index cb46666f21e0..69cc04ee2d9c 100644
--- a/nixpkgs/pkgs/development/python-modules/ueberzug/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ueberzug/default.nix
@@ -4,13 +4,13 @@
 
 buildPythonPackage rec {
   pname = "ueberzug";
-  version = "18.1.8";
+  version = "18.1.9";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3718db8f824ef5f6a69dc25b3f08e0a45388dd46843c61721476bad2b64345ee";
+    sha256 = "7ce49f351132c7d1b0f8097f6e4c5635376151ca59318540da3e296e5b21adc3";
   };
 
   buildInputs = [ libX11 libXext ];
diff --git a/nixpkgs/pkgs/development/python-modules/ujson/default.nix b/nixpkgs/pkgs/development/python-modules/ujson/default.nix
index 9c759bd41b36..d93ee9f5af70 100644
--- a/nixpkgs/pkgs/development/python-modules/ujson/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/ujson/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "ujson";
-  version = "4.0.1";
+  version = "4.0.2";
   disabled = isPyPy || (!isPy3k);
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "26cf6241b36ff5ce4539ae687b6b02673109c5e3efc96148806a7873eaa229d3";
+    sha256 = "c615a9e9e378a7383b756b7e7a73c38b22aeb8967a8bfbffd4741f7ffd043c4d";
   };
 
   nativeBuildInputs = [ setuptools_scm ];
diff --git a/nixpkgs/pkgs/development/python-modules/unidecode/default.nix b/nixpkgs/pkgs/development/python-modules/unidecode/default.nix
index 70724bb71b51..65cb0882380f 100644
--- a/nixpkgs/pkgs/development/python-modules/unidecode/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/unidecode/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "Unidecode";
-  version = "1.1.1";
+  version = "1.1.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2b6aab710c2a1647e928e36d69c21e76b453cd455f4e2621000e54b2a9b8cce8";
+    sha256 = "a039f89014245e0cad8858976293e23501accc9ff5a7bdbc739a14a2b7b85cdc";
   };
 
   LC_ALL="en_US.UTF-8";
diff --git a/nixpkgs/pkgs/development/python-modules/update-dotdee/default.nix b/nixpkgs/pkgs/development/python-modules/update-dotdee/default.nix
index ec9dbd947c08..1532fca78c4c 100644
--- a/nixpkgs/pkgs/development/python-modules/update-dotdee/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/update-dotdee/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "update-dotdee";
-  version = "5.0";
+  version = "6.0";
 
   src = fetchFromGitHub {
     owner = "xolox";
     repo = "python-update-dotdee";
     rev = version;
-    sha256 = "1h3m593nwzx6vwa24k0wizb7la49yhqxwn73ipclxgxxi4dfdj01";
+    sha256 = "sha256-2k7FdgWM0ESHQb2za87yhXGaR/rbMYLVcv10QexUH1A=";
   };
 
   propagatedBuildInputs = [ executor naturalsort ];
diff --git a/nixpkgs/pkgs/development/python-modules/uproot3-methods/default.nix b/nixpkgs/pkgs/development/python-modules/uproot3-methods/default.nix
index 21fe31630de6..9fb9807d3994 100644
--- a/nixpkgs/pkgs/development/python-modules/uproot3-methods/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/uproot3-methods/default.nix
@@ -6,12 +6,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.10.0";
+  version = "0.10.1";
   pname = "uproot3-methods";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1rk9i1ra3panli96ghz80ddpqk77xb1kpxs3wf8rw0jy5d88pc26";
+    sha256 = "sha256-3Wj5C+HqJ2NguWNpg2hJ3ykEX3/k5TT5rCHqAHmO41g=";
   };
 
   nativeBuildInputs = [ awkward0 ];
@@ -20,6 +20,7 @@ buildPythonPackage rec {
 
   # No tests on PyPi
   doCheck = false;
+  pythonImportsCheck = [ "uproot3_methods" ];
 
   meta = with lib; {
     homepage = "https://github.com/scikit-hep/uproot3-methods";
diff --git a/nixpkgs/pkgs/development/python-modules/uproot3/default.nix b/nixpkgs/pkgs/development/python-modules/uproot3/default.nix
index 1150c76d2b48..c69237734277 100644
--- a/nixpkgs/pkgs/development/python-modules/uproot3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/uproot3/default.nix
@@ -1,21 +1,24 @@
 { lib, fetchFromGitHub, buildPythonPackage, isPy27
 , awkward0, backports_lzma, cachetools, lz4, pandas
-, pytestCheckHook, pytestrunner, pkgconfig, mock
+, pytestCheckHook, pkgconfig, mock
 , numpy, requests, uproot3-methods, xxhash, zstandard
 }:
 
 buildPythonPackage rec {
   pname = "uproot3";
-  version = "3.14.2";
+  version = "3.14.4";
 
   src = fetchFromGitHub {
     owner = "scikit-hep";
     repo = "uproot3";
     rev = version;
-    sha256 = "sha256-6/e+qMgwyFUo8MRRTAaGp9WLPxE2fqMEK4paq26Epzc=";
+    sha256 = "sha256-hVJpKdYvyoCPyqgZzKYp30SvkYm+HWSNBdd9bYCYACE=";
   };
 
-  nativeBuildInputs = [ pytestrunner ];
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"pytest-runner"' ""
+  '';
 
   propagatedBuildInputs = [
     awkward0
diff --git a/nixpkgs/pkgs/development/python-modules/uranium/default.nix b/nixpkgs/pkgs/development/python-modules/uranium/default.nix
index ff262d6b0a32..0c068428f6cc 100644
--- a/nixpkgs/pkgs/development/python-modules/uranium/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/uranium/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonPackage, fetchFromGitHub, python, cmake
-, pyqt5, numpy, scipy, shapely, libarcus, doxygen, gettext, pythonOlder }:
+, pyqt5, numpy, scipy, shapely, libarcus, cryptography, doxygen, gettext, pythonOlder }:
 
 buildPythonPackage rec {
   version = "4.7.1";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
   disabled = pythonOlder "3.5.0";
 
   buildInputs = [ python gettext ];
-  propagatedBuildInputs = [ pyqt5 numpy scipy shapely libarcus ];
+  propagatedBuildInputs = [ pyqt5 numpy scipy shapely libarcus cryptography ];
   nativeBuildInputs = [ cmake doxygen ];
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/development/python-modules/urllib3/2.nix b/nixpkgs/pkgs/development/python-modules/urllib3/2.nix
new file mode 100644
index 000000000000..a67ebd62f7e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/urllib3/2.nix
@@ -0,0 +1,73 @@
+{ lib
+, brotli
+, buildPythonPackage
+, certifi
+, cryptography
+, dateutil
+, fetchPypi
+, idna
+, mock
+, pyopenssl
+, pysocks
+, pytest-freezegun
+, pytest-timeout
+, pytestCheckHook
+, pythonOlder
+, tornado
+, trustme
+}:
+
+buildPythonPackage rec {
+  pname = "urllib3";
+  version = "1.26.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08";
+  };
+
+  propagatedBuildInputs = [
+    brotli
+    certifi
+    cryptography
+    idna
+    pyopenssl
+    pysocks
+  ];
+
+  checkInputs = [
+    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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/urllib3/default.nix b/nixpkgs/pkgs/development/python-modules/urllib3/default.nix
index 6cf7ce34d388..b7a3f81c723f 100644
--- a/nixpkgs/pkgs/development/python-modules/urllib3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/urllib3/default.nix
@@ -1,33 +1,73 @@
-{ lib, buildPythonPackage, fetchPypi
-, pytest, mock, tornado, pyopenssl, cryptography
-, idna, certifi, ipaddress, pysocks }:
+{ lib
+, brotli
+, buildPythonPackage
+, cryptography
+, dateutil
+, fetchPypi
+, idna
+, isPy27
+, mock
+, pyopenssl
+, pysocks
+, pytest-freezegun
+, pytest-timeout
+, pytestCheckHook
+, pythonOlder
+, tornado
+, trustme
+}:
 
 buildPythonPackage rec {
   pname = "urllib3";
-  version = "1.26.2";
+  version = "1.26.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08";
+    sha256 = "de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73";
   };
 
-  NOSE_EXCLUDE = lib.concatStringsSep "," [
-    "test_headers" "test_headerdict" "test_can_validate_ip_san" "test_delayed_body_read_timeout"
-    "test_timeout_errors_cause_retries" "test_select_multiple_interrupts_with_event"
+  propagatedBuildInputs = [
+    brotli
+    pysocks
+  ] ++ lib.optionals isPy27 [
+    cryptography
+    idna
+    pyopenssl
   ];
 
-  checkPhase = ''
-    nosetests -v --cover-min-percentage 1
-  '';
+  checkInputs = [
+    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;
 
-  checkInputs = [ pytest mock tornado ];
-  propagatedBuildInputs = [ pyopenssl cryptography idna certifi ipaddress pysocks ];
+  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 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/uvloop/default.nix b/nixpkgs/pkgs/development/python-modules/uvloop/default.nix
index 27f7b68fe89c..3ba9dcb5f144 100644
--- a/nixpkgs/pkgs/development/python-modules/uvloop/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/uvloop/default.nix
@@ -15,12 +15,12 @@
 
 buildPythonPackage rec {
   pname = "uvloop";
-  version = "0.15.0";
+  version = "0.15.2";
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0rfhr84km8k5gj0036b2pznwmc8macx56vkxc3aksvns95dksl0s";
+    sha256 = "2bb0624a8a70834e54dde8feed62ed63b50bad7a1265c40d6403a2ac447bce01";
   };
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/validators/default.nix b/nixpkgs/pkgs/development/python-modules/validators/default.nix
index 1bc9b1777ff6..37f00b734800 100644
--- a/nixpkgs/pkgs/development/python-modules/validators/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/validators/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "validators";
-  version = "0.18.1";
+  version = "0.18.2";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1a653b33c0ab091790f65f42b61aa191e354ed5fdedfeb17d24a86d0789966d7";
+    sha256 = "37cd9a9213278538ad09b5b9f9134266e7c226ab1fede1d500e29e0a8fbb9ea6";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/vcrpy/3.nix b/nixpkgs/pkgs/development/python-modules/vcrpy/3.nix
new file mode 100644
index 000000000000..ddd4015aad1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/vcrpy/3.nix
@@ -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;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/python-modules/vcrpy/default.nix b/nixpkgs/pkgs/development/python-modules/vcrpy/default.nix
index e67bbc59e932..7766e75ba05e 100644
--- a/nixpkgs/pkgs/development/python-modules/vcrpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/vcrpy/default.nix
@@ -1,5 +1,6 @@
 { buildPythonPackage
 , lib
+, isPy27
 , six
 , fetchPypi
 , pyyaml
@@ -17,6 +18,8 @@ buildPythonPackage rec {
   pname = "vcrpy";
   version = "4.1.1";
 
+  disabled = isPy27;
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599";
diff --git a/nixpkgs/pkgs/development/python-modules/vega/default.nix b/nixpkgs/pkgs/development/python-modules/vega/default.nix
index 083aa6302098..04c38838a433 100644
--- a/nixpkgs/pkgs/development/python-modules/vega/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/vega/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonPackage , fetchPypi, pythonOlder
-, pytest, jupyter_core, pandas, ipywidgets, jupyter, altair }:
+, jupyter_core, pandas, ipywidgets, jupyter }:
 
 buildPythonPackage rec {
   pname = "vega";
@@ -11,12 +11,11 @@ buildPythonPackage rec {
     sha256 = "f343ceb11add58d24cd320d69e410b111a56c98c9069ebb4ef89c608c4c1950d";
   };
 
-  buildInputs = [ pytest ];
   propagatedBuildInputs = [ jupyter jupyter_core pandas ipywidgets ];
 
   # currently, recommonmark is broken on python3
   doCheck = false;
-  checkInputs = [ altair ];
+  pythonImportsCheck = [ "vega" ];
 
   meta = with lib; {
     description = "An IPython/Jupyter widget for Vega and Vega-Lite";
diff --git a/nixpkgs/pkgs/development/python-modules/venstarcolortouch/default.nix b/nixpkgs/pkgs/development/python-modules/venstarcolortouch/default.nix
new file mode 100644
index 000000000000..713059ad9083
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/venstarcolortouch/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "venstarcolortouch";
+  version = "0.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04y9gmxb0vsmc5c930x9ziis5v83b29kfzsgjlww3pssj69lmw1s";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "venstarcolortouch" ];
+
+  meta = with lib; {
+    description = "Python interface for Venstar ColorTouch thermostats Resources";
+    homepage = "https://github.com/hpeyerl/venstar_colortouch";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/vidstab/default.nix b/nixpkgs/pkgs/development/python-modules/vidstab/default.nix
index 4119b26259d7..7137205b3508 100644
--- a/nixpkgs/pkgs/development/python-modules/vidstab/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/vidstab/default.nix
@@ -6,7 +6,6 @@
 , imutils
 , progress
 , matplotlib
-, pytest
 }:
 
 buildPythonPackage rec {
@@ -18,11 +17,11 @@ buildPythonPackage rec {
     sha256 = "649a77a0c1b670d13a1bf411451945d7da439364dc0c33ee3636a23f1d82b456";
   };
 
-  checkInputs = [ pytest ];
   propagatedBuildInputs = [ numpy pandas imutils progress matplotlib ];
 
   # tests not packaged with pypi
   doCheck = false;
+  pythonImportsCheck = [ "vidstab" ];
 
   meta = with lib; {
     homepage = "https://github.com/AdamSpannbauer/python_video_stab";
diff --git a/nixpkgs/pkgs/development/python-modules/virtualenv/default.nix b/nixpkgs/pkgs/development/python-modules/virtualenv/default.nix
index 233101728f85..ec22660830bd 100644
--- a/nixpkgs/pkgs/development/python-modules/virtualenv/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/virtualenv/default.nix
@@ -1,27 +1,33 @@
 { buildPythonPackage
-, fetchPypi
-, lib
-, stdenv
-, pythonOlder
-, isPy27
 , appdirs
 , contextlib2
+, cython
 , distlib
+, fetchPypi
 , filelock
+, flaky
 , importlib-metadata
 , importlib-resources
+, isPy27
+, lib
 , pathlib2
+, pytest-freezegun
+, pytest-mock
+, pytest-timeout
+, pytestCheckHook
+, pythonOlder
 , setuptools_scm
 , six
+, stdenv
 }:
 
 buildPythonPackage rec {
   pname = "virtualenv";
-  version = "20.2.1";
+  version = "20.2.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e0aac7525e880a429764cefd3aaaff54afb5d9f25c82627563603f5d7de5a6e5";
+    sha256 = "b7a8ec323ee02fb2312f098b6b4c9de99559b462775bc8fe3627a73706603c1b";
   };
 
   nativeBuildInputs = [
@@ -47,10 +53,39 @@ buildPythonPackage rec {
     ./0001-Check-base_prefix-and-base_exec_prefix-for-Python-2.patch
   ];
 
-  meta = {
+  checkInputs = [
+    cython
+    flaky
+    pytest-freezegun
+    pytest-mock
+    pytest-timeout
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  # Ignore tests which require network access
+  disabledTestPaths = [
+    "tests/unit/create/test_creator.py"
+    "tests/unit/seed/embed/test_bootstrap_link_via_app_data.py"
+  ];
+
+  disabledTests = [
+    "test_can_build_c_extensions"
+    "test_xonsh" # imports xonsh, which is not in pythonPackages
+    # tests search `python3`, fail on python2, pypy
+    "test_python_via_env_var"
+    "test_python_multi_value_prefer_newline_via_env_var"
+  ];
+
+  pythonImportsCheck = [ "virtualenv" ];
+
+  meta = with lib; {
     description = "A tool to create isolated Python environments";
     homepage = "http://www.virtualenv.org";
-    license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ goibhniu ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/volkszaehler/default.nix b/nixpkgs/pkgs/development/python-modules/volkszaehler/default.nix
index b86394bc2b62..6bd509d7cd40 100644
--- a/nixpkgs/pkgs/development/python-modules/volkszaehler/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/volkszaehler/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "volkszaehler";
-  version = "0.2.1";
+  version = "0.2.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "13zhxq08wn5y9yn6xbazfl0gxxysmirwpc26wcnr6jk2va1kpc4l";
+    sha256 = "sha256-1oqzhC3Yq2V30F3ilr80vKFnTmI/CdIVLuzMlIr40xI=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/vsure/default.nix b/nixpkgs/pkgs/development/python-modules/vsure/default.nix
index 40b1b328f16f..4928c2adc40c 100644
--- a/nixpkgs/pkgs/development/python-modules/vsure/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/vsure/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "vsure";
-  version = "1.7.2";
+  version = "1.8.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-EFat1sewh0Y9PHs08Grlk2RparA47GqkUv/WJ3J2494=";
+    sha256 = "sha256-Zh83t7yjZU2NjOgCkqPUHbqvEyEWXGITRgr5d2fLtRI=";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/development/python-modules/w3lib/default.nix b/nixpkgs/pkgs/development/python-modules/w3lib/default.nix
index 0c80423e36a2..a626bdd6ec02 100644
--- a/nixpkgs/pkgs/development/python-modules/w3lib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/w3lib/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , six
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -14,7 +14,14 @@ buildPythonPackage rec {
     sha256 = "1pv02lvvmgz2qb61vz1jkjc04fgm4hpfvaj5zm4i3mjp64hd1mha";
   };
 
-  buildInputs = [ six pytest ];
+  propagatedBuildInputs = [ six ];
+
+  checkInputs = [ pytestCheckHook ];
+  pythonImportsCheck = [ "w3lib" ];
+
+  disabledTests = [
+    "test_add_or_replace_parameter"
+  ];
 
   meta = with lib; {
     description = "A library of web-related functions";
@@ -22,5 +29,4 @@ buildPythonPackage rec {
     license = licenses.bsd3;
     maintainers = with maintainers; [ drewkett ];
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/wadllib/default.nix b/nixpkgs/pkgs/development/python-modules/wadllib/default.nix
index 45b5a4734569..fcddf538d88d 100644
--- a/nixpkgs/pkgs/development/python-modules/wadllib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/wadllib/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "wadllib";
-  version = "1.3.4";
+  version = "1.3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e995691713d3c795d2b36278de8e212241870f46bec6ecba91794ea3cc5bd67d";
+    sha256 = "84fecbaec2fef5ae2d7717a8115d271f18c6b5441eac861c58be8ca57f63c1d3";
   };
 
   propagatedBuildInputs = [ setuptools lazr-uri ];
diff --git a/nixpkgs/pkgs/development/python-modules/wakeonlan/default.nix b/nixpkgs/pkgs/development/python-modules/wakeonlan/default.nix
index 86d405a33ef9..340a407ab3fb 100644
--- a/nixpkgs/pkgs/development/python-modules/wakeonlan/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/wakeonlan/default.nix
@@ -1,26 +1,45 @@
-{ lib, fetchPypi, buildPythonPackage, setuptools_scm, pytest, mock }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, poetry-core
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "wakeonlan";
-  version = "1.1.6";
+  version = "2.0.0";
+  disabled = pythonOlder "3.6";
+  format = "pyproject";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "5e6013a17004809e676c150689abd94bcc0f12a37ad3fbce1f6270968f95ffa9";
+  src = fetchFromGitHub {
+    owner = "remcohaszing";
+    repo = "pywakeonlan";
+    rev = version;
+    sha256 = "0p9jyiv0adcymbnmbay72g9phlbhsr4kmrwxscbdjq81gcmxsi0y";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "setuptools-scm ~= 1.15.7" "setuptools-scm"
-  '';
+  nativeBuildInputs = [
+    poetry-core
+  ];
 
-  checkInputs = [ pytest mock ];
+  checkInputs = [
+    pytestCheckHook
+  ];
 
-  nativeBuildInputs = [ setuptools_scm ];
+  patches = [
+    # Switch to poetry-core, https://github.com/remcohaszing/pywakeonlan/pull/19
+    (fetchpatch {
+      name = "switch-to-poetry-core.patch";
+      url = "https://github.com/remcohaszing/pywakeonlan/commit/6aa5050ed94ef718dfcd0b946546b6a738f47ee3.patch";
+      sha256 = "1xzj2464ziwm7bp05bzbjwjp9whmgp1py3isr41d92qvnil86vm6";
+    })
+  ];
 
-  checkPhase = ''
-    py.test
-  '';
+  pytestFlagsArray = [ "test_wakeonlan.py" ];
+
+  pythonImportsCheck = [ "wakeonlan" ];
 
   meta = with lib; {
     description = "A small python module for wake on lan";
diff --git a/nixpkgs/pkgs/development/python-modules/wasabi/default.nix b/nixpkgs/pkgs/development/python-modules/wasabi/default.nix
index 3e674ae266f1..f58574014ed2 100644
--- a/nixpkgs/pkgs/development/python-modules/wasabi/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/wasabi/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "wasabi";
-  version = "0.8.1";
+  version = "0.8.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6e5228a51f5550844ef5080e74759e7ecb6e344241989d018686ba968f0b4f5a";
+    sha256 = "b4a36aaa9ca3a151f0c558f269d442afbb3526f0160fd541acd8a0d5e5712054";
   };
 
   checkInputs = [ pytestCheckHook ];
diff --git a/nixpkgs/pkgs/development/python-modules/wasmer/default.nix b/nixpkgs/pkgs/development/python-modules/wasmer/default.nix
index 62c8a2a06b71..373e7a0a2203 100644
--- a/nixpkgs/pkgs/development/python-modules/wasmer/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/wasmer/default.nix
@@ -1,63 +1,34 @@
 { lib
 , rustPlatform
 , fetchFromGitHub
-, maturin
 , buildPythonPackage
-, isPy38
-, python
 }:
 let
   pname = "wasmer";
   version = "1.0.0";
+in buildPythonPackage rec {
+  inherit pname version;
 
-  wheel = rustPlatform.buildRustPackage rec {
-    inherit pname version;
-
-    src = fetchFromGitHub {
-      owner = "wasmerio";
-      repo = "wasmer-python";
-      rev = version;
-      hash = "sha256-I1GfjLaPYMIHKh2m/5IQepUsJNiVUEJg49wyuuzUYtY=";
-    };
-
-    cargoHash = "sha256-txOOia1C4W+nsXuXp4EytEn82CFfSmiOYwRLC4WPImc=";
-
-    nativeBuildInputs = [ maturin python ];
-
-    preBuild = ''
-      cd packages/api
-    '';
-
-    buildPhase = ''
-      runHook preBuild
-      maturin build --release --manylinux off --strip
-      runHook postBuild
-    '';
-
-    postBuild = ''
-      cd ../..
-    '';
-
-    doCheck = false;
+  src = fetchFromGitHub {
+    owner = "wasmerio";
+    repo = "wasmer-python";
+    rev = version;
+    hash = "sha256-I1GfjLaPYMIHKh2m/5IQepUsJNiVUEJg49wyuuzUYtY=";
+  };
 
-    installPhase = ''
-      runHook preInstall
-      install -Dm644 -t $out target/wheels/*.whl
-      runHook postInstall
-    '';
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-txOOia1C4W+nsXuXp4EytEn82CFfSmiOYwRLC4WPImc=";
   };
 
-in
-buildPythonPackage rec {
-  inherit pname version;
+  format = "pyproject";
+
+  nativeBuildInputs = with rustPlatform; [ cargoSetupHook maturinBuildHook ];
 
-  format = "wheel";
-  src = wheel;
+  buildAndTestSubdir = "packages/api";
 
-  unpackPhase = ''
-    mkdir -p dist
-    cp $src/*.whl dist
-  '';
+  doCheck = false;
 
   pythonImportsCheck = [ "wasmer" ];
 
@@ -65,7 +36,7 @@ buildPythonPackage rec {
     description = "Python extension to run WebAssembly binaries";
     homepage = "https://github.com/wasmerio/wasmer-python";
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/watchdog/default.nix b/nixpkgs/pkgs/development/python-modules/watchdog/default.nix
index 693cfcce9260..ef80dedeb98d 100644
--- a/nixpkgs/pkgs/development/python-modules/watchdog/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/watchdog/default.nix
@@ -1,25 +1,34 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
+, fetchpatch
 , argh
 , pathtools
 , pyyaml
-, pkgs
 , pytest-cov
 , pytestCheckHook
+, CoreServices
 }:
 
 buildPythonPackage rec {
   pname = "watchdog";
-  version = "1.0.2";
+  version = "2.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-N2y8KjXAOSsP5/8W+8GzA/2Z1N2ZEatVge6daa3IiYI=";
+    sha256 = "sha256-Uy/t2ZPnVVRnH6o2zQTFgM7T+uCEJUp3mvu9iq8AVms=";
   };
 
-  buildInputs = lib.optionals stdenv.isDarwin
-    [ pkgs.darwin.apple_sdk.frameworks.CoreServices ];
+  patches = [
+    (fetchpatch {
+      # Fix test flakiness on Apple Silicon, remove after upgrade to 2.0.6.
+      url = "https://github.com/gorakhargosh/watchdog/commit/331fd7c2c819663be39bc146e78ce67553f265fa.patch";
+      sha256 = "sha256-pLkZmbPN3qRNHs53OP0HIyDxqYCPPo6yOcBLD3aO2YE=";
+    })
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   propagatedBuildInputs = [
     argh
@@ -39,6 +48,7 @@ buildPythonPackage rec {
     homepage = "https://github.com/gorakhargosh/watchdog";
     license = licenses.asl20;
     maintainers = with maintainers; [ goibhniu ];
+    # error: use of undeclared identifier 'kFSEventStreamEventFlagItemCloned'
+    broken = stdenv.isDarwin;
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/wcmatch/default.nix b/nixpkgs/pkgs/development/python-modules/wcmatch/default.nix
new file mode 100644
index 000000000000..ade529e56274
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/wcmatch/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildPythonPackage, fetchPypi, pytestCheckHook, bracex }:
+
+buildPythonPackage rec {
+  pname = "wcmatch";
+  version = "8.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-e6CRkflYLoLYZIKb37qwLfRuJqRqME5Xx/5WUvB/KXo=";
+  };
+
+  propagatedBuildInputs = [ bracex ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  disabledTests = [
+    "TestTilde"
+  ];
+
+  pythonImportsCheck = [ "wcmatch" ];
+
+  meta = with lib; {
+    description = "Wilcard File Name matching library";
+    homepage = "https://github.com/facelessuser/wcmatch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/web-cache/default.nix b/nixpkgs/pkgs/development/python-modules/web-cache/default.nix
new file mode 100644
index 000000000000..9246b2b571e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/web-cache/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonPackage, fetchPypi, isPy3k }:
+
+buildPythonPackage rec {
+  pname = "web-cache";
+  version = "1.1.0";
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    inherit version;
+    pname = "web_cache";
+    sha256 = "1d8f1s3i0s3h1jqvjq6cp639hhbbpxvyq7cf9dwzrvvvr0s0m8fm";
+  };
+
+  # No tests in downloaded archive
+  doCheck = false;
+
+  pythonImportsCheck = [ "web_cache" ];
+
+  meta = with lib; {
+    description = "Simple Python key-value storage backed up by sqlite3 database";
+    homepage = "https://github.com/desbma/web_cache";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/webob/default.nix b/nixpkgs/pkgs/development/python-modules/webob/default.nix
index 124b45a2eb39..201893c2536b 100644
--- a/nixpkgs/pkgs/development/python-modules/webob/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/webob/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "WebOb";
-  version = "1.8.6";
+  version = "1.8.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "aa3a917ed752ba3e0b242234b2a373f9c4e2a75d35291dcbe977649bd21fd108";
+    sha256 = "b64ef5141be559cfade448f044fa45c2260351edcb6a8ef6b7e00c7dcef0c323";
   };
 
   propagatedBuildInputs = [ nose pytest ];
diff --git a/nixpkgs/pkgs/development/python-modules/weboob/default.nix b/nixpkgs/pkgs/development/python-modules/weboob/default.nix
index 7c3d25068e30..861cb38389a8 100644
--- a/nixpkgs/pkgs/development/python-modules/weboob/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/weboob/default.nix
@@ -6,7 +6,7 @@
 , futures
 , gdata
 , gnupg
-, google_api_python_client
+, google-api-python-client
 , html2text
 , libyaml
 , lxml
@@ -56,7 +56,7 @@ buildPythonPackage rec {
     feedparser
     gdata
     gnupg
-    google_api_python_client
+    google-api-python-client
     html2text
     libyaml
     lxml
diff --git a/nixpkgs/pkgs/development/python-modules/websocket_client/default.nix b/nixpkgs/pkgs/development/python-modules/websocket_client/default.nix
index dacae3e81e1f..6ad0634631de 100644
--- a/nixpkgs/pkgs/development/python-modules/websocket_client/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/websocket_client/default.nix
@@ -1,25 +1,33 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27
-, six
+{ lib
 , backports_ssl_match_hostname
+, buildPythonPackage
+, fetchPypi
+, isPy27
+, pytestCheckHook
+, six
 }:
 
 buildPythonPackage rec {
-  version = "0.57.0";
   pname = "websocket_client";
+  version = "0.58.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d735b91d6d1692a6a181f2a8c9e0238e5f6373356f561bb9dc4c7af36f452010";
+    sha256 = "sha256-Y1CbQdFYrlt/Z+tK0g/su07umUNOc+FANU3D/44JcW8=";
   };
 
   propagatedBuildInputs = [
     six
   ] ++ lib.optional isPy27 backports_ssl_match_hostname;
 
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "websocket" ];
+
   meta = with lib; {
-    description = "Websocket client for python";
+    description = "Websocket client for Python";
     homepage = "https://github.com/websocket-client/websocket-client";
-    license = licenses.bsd3;
-    maintainers = with maintainers; [ ];
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ fab ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/werkzeug/default.nix b/nixpkgs/pkgs/development/python-modules/werkzeug/default.nix
index 7f35dd124d86..73bebd8366ec 100644
--- a/nixpkgs/pkgs/development/python-modules/werkzeug/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/werkzeug/default.nix
@@ -25,5 +25,6 @@ buildPythonPackage rec {
     homepage = "https://palletsprojects.com/p/werkzeug/";
     description = "A WSGI utility library for Python";
     license = licenses.bsd3;
+    maintainers = [ ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/wheel/default.nix b/nixpkgs/pkgs/development/python-modules/wheel/default.nix
index 4f51fb486ebc..60398998380a 100644
--- a/nixpkgs/pkgs/development/python-modules/wheel/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/wheel/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "wheel";
-  version = "0.35.1";
+  version = "0.36.2";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "pypa";
     repo = pname;
     rev = version;
-    sha256 = "uS+9a47ZopI0yGlEnJi421WyzS//8BxUvH25hX4BBL8=";
+    sha256 = "sha256-8lK2UvqBIxUYm6IOuT+Jk71wYbEEjvI7typS3749N9g=";
     name = "${pname}-${version}-source";
   };
 
diff --git a/nixpkgs/pkgs/development/python-modules/wiffi/default.nix b/nixpkgs/pkgs/development/python-modules/wiffi/default.nix
new file mode 100644
index 000000000000..a3da3f2f027e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/wiffi/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "wiffi";
+  version = "1.0.1";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "mampfes";
+    repo = "python-wiffi";
+    rev = version;
+    sha256 = "1bsx8dcmbkajh7hdgxg6wdnyxz4bfnd45piiy3yzyvszfdyvxw0f";
+  };
+
+  propagatedBuildInputs = [ aiohttp ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "wiffi" ];
+
+  meta = with lib; {
+    description = "Python module to interface with STALL WIFFI devices";
+    homepage = "https://github.com/mampfes/python-wiffi";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/winacl/default.nix b/nixpkgs/pkgs/development/python-modules/winacl/default.nix
index c08c5541a61a..9aca67e2ed8d 100644
--- a/nixpkgs/pkgs/development/python-modules/winacl/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/winacl/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "winacl";
-  version = "0.1.0";
+  version = "0.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "05xhdhbvzs1hcd8lxmdr9mpr6ifx5flhlvk6jr0qi6h25imhqclp";
+    sha256 = "sha256-V+W0WRtL4rJD1LeYgr0PtiKdWTDQYv2ulB1divaqKe4=";
   };
 
   # Project doesn't have tests
diff --git a/nixpkgs/pkgs/development/python-modules/wrapio/default.nix b/nixpkgs/pkgs/development/python-modules/wrapio/default.nix
index bbbc1917f541..3e6a4372a642 100644
--- a/nixpkgs/pkgs/development/python-modules/wrapio/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/wrapio/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "wrapio";
-  version = "0.3.8";
+  version = "1.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-jGupLh+xzwil+VBtAjIG+ZYT+dy+QaZOTIfipTQeyWo";
+    sha256 = "sha256-JWcPsqZy1wM6/mbU3H0W3EkpLg0wrEUUg3pT/QrL+rE=";
   };
 
   doCheck = false;
diff --git a/nixpkgs/pkgs/development/python-modules/wsgi-intercept/default.nix b/nixpkgs/pkgs/development/python-modules/wsgi-intercept/default.nix
new file mode 100644
index 000000000000..7303a27f5b3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/wsgi-intercept/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, six, httplib2, py, pytestCheckHook, requests, urllib3 }:
+
+buildPythonPackage rec {
+  pname = "wsgi-intercept";
+  version = "1.9.2";
+
+  src = fetchPypi {
+    pname = "wsgi_intercept";
+    inherit version;
+    sha256 = "1b6251d03jnhqywr54bzj9fnc3qzp2kvz22asxpd27jy984qx21n";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  checkInputs = [ httplib2 py pytestCheckHook requests urllib3 ];
+
+  disabledTests = [
+    "test_http_not_intercepted"
+    "test_https_not_intercepted"
+    "test_https_no_ssl_verification_not_intercepted"
+  ];
+
+  pythonImportsCheck = [ "wsgi_intercept" ];
+
+  meta = with lib; {
+    description = "wsgi_intercept installs a WSGI application in place of a real URI for testing";
+    homepage = "https://github.com/cdent/wsgi-intercept";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/wxPython/4.0.nix b/nixpkgs/pkgs/development/python-modules/wxPython/4.0.nix
index d72d4aa35d4d..2fc9a98a26f9 100644
--- a/nixpkgs/pkgs/development/python-modules/wxPython/4.0.nix
+++ b/nixpkgs/pkgs/development/python-modules/wxPython/4.0.nix
@@ -10,9 +10,6 @@
 , doxygen
 , ncurses
 , libintl
-, numpy
-, pillow
-, six
 , wxGTK
 , wxmac
 , IOKit
diff --git a/nixpkgs/pkgs/development/python-modules/wxPython/4.1.nix b/nixpkgs/pkgs/development/python-modules/wxPython/4.1.nix
index e4cb6ec79e01..a86e07729d97 100644
--- a/nixpkgs/pkgs/development/python-modules/wxPython/4.1.nix
+++ b/nixpkgs/pkgs/development/python-modules/wxPython/4.1.nix
@@ -6,7 +6,6 @@
 , pkg-config
 , python
 , isPy27
-, pyopengl
 , doxygen
 , cairo
 , ncurses
diff --git a/nixpkgs/pkgs/development/python-modules/xarray/default.nix b/nixpkgs/pkgs/development/python-modules/xarray/default.nix
index d905a11e3418..42402c259ab0 100644
--- a/nixpkgs/pkgs/development/python-modules/xarray/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/xarray/default.nix
@@ -1,34 +1,29 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, pytest
+, pytestCheckHook
 , numpy
 , pandas
-, python
 , setuptools
 , isPy3k
+, setuptools-scm
 }:
 
 buildPythonPackage rec {
   pname = "xarray";
-  version = "0.16.1";
+  version = "0.16.2";
+  disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5e1af056ff834bf62ca57da917159328fab21b1f8c25284f92083016bb2d92a5";
+    sha256 = "sha256-OOhDnWyRvNW3wPyjSdr44GQ6xohQyYcmLVNSbp19AeQ=";
   };
 
-  checkInputs = [ pytest ];
+  nativeBuildInputs = [ setuptools-scm ];
   propagatedBuildInputs = [ numpy pandas setuptools ];
+  checkInputs = [ pytestCheckHook ];
 
-  checkPhase = ''
-    pytest $out/${python.sitePackages}
-  '';
-
-  # There always seem to be broken tests...
-  doCheck = false;
-
-  disabled = !isPy3k;
+  pythonImportsCheck = [ "xarray" ];
 
   meta = {
     description = "N-D labeled arrays and datasets in Python";
diff --git a/nixpkgs/pkgs/development/python-modules/xcffib/default.nix b/nixpkgs/pkgs/development/python-modules/xcffib/default.nix
index 8f51ec1e77f8..59a2c8d7c1bc 100644
--- a/nixpkgs/pkgs/development/python-modules/xcffib/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/xcffib/default.nix
@@ -8,12 +8,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.11.0";
+  version = "0.11.1";
   pname = "xcffib";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a751081d816a63d02a4c63f91fd9c0112c1e0061af7ccf79c4e7c18517a75406";
+    sha256 = "12949cfe2e68c806efd57596bb9bf3c151f399d4b53e15d1101b2e9baaa66f5a";
   };
 
   patchPhase = ''
diff --git a/nixpkgs/pkgs/development/python-modules/xdis/default.nix b/nixpkgs/pkgs/development/python-modules/xdis/default.nix
index 280470957dc7..3da25743594e 100644
--- a/nixpkgs/pkgs/development/python-modules/xdis/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/xdis/default.nix
@@ -6,14 +6,14 @@
 
 buildPythonPackage rec {
   pname = "xdis";
-  version = "5.0.5";
+  version = "5.0.8";
   disabled = isPy27;
 
   src = fetchFromGitHub {
     owner = "rocky";
     repo = "python-xdis";
     rev = version;
-    sha256 = "01248nh8y5szin6ymd3hrl8qnsg4xijsk3lxyks8zk9cjh008lmq";
+    sha256 = "01g1bk7rscwmvr2i183z0y2bs1iw7bxk7c5rcf9gf25242nppv6a";
   };
 
   checkInputs = [ pytest ];
@@ -22,10 +22,11 @@ buildPythonPackage rec {
   checkPhase = ''
     make check
   '';
+  pythonImportsCheck = [ "xdis" ];
 
   meta = with lib; {
     description = "Python cross-version byte-code disassembler and marshal routines";
     homepage = "https://github.com/rocky/python-xdis/";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/xknx/default.nix b/nixpkgs/pkgs/development/python-modules/xknx/default.nix
index 221076fae84c..a181a6741887 100644
--- a/nixpkgs/pkgs/development/python-modules/xknx/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/xknx/default.nix
@@ -11,14 +11,14 @@
 
 buildPythonPackage rec {
   pname = "xknx";
-  version = "0.16.3";
+  version = "0.18.0";
   disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "XKNX";
     repo = pname;
     rev = version;
-    sha256 = "sha256-toB66woREkFUv3J14wwquRo+uAOgXKO+cwFgyw4Mma8=";
+    sha256 = "sha256-8g8DrFvhecdPsfiw+uKnfJOrLQeuFUziK2Jl3xKmrf4=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/xmldiff/default.nix b/nixpkgs/pkgs/development/python-modules/xmldiff/default.nix
new file mode 100644
index 000000000000..1dfb09147589
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/xmldiff/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, lxml
+, setuptools
+, six
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "xmldiff";
+  version = "2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-Bb6iDOHyyWeGg7zODDupmB+H2StwnRkOAYvL8Efsz2M=";
+  };
+
+  propagatedBuildInputs = [ lxml setuptools six ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Shoobx/xmldiff";
+    description = "Creates diffs of XML files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sfrijters ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/xmlsec/default.nix b/nixpkgs/pkgs/development/python-modules/xmlsec/default.nix
new file mode 100644
index 000000000000..82f4a968ba6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/xmlsec/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchPypi
+, buildPythonPackage
+, pytestCheckHook
+, libxslt
+, libxml2
+, libtool
+, pkg-config
+, xmlsec
+, pkgconfig
+, setuptools-scm
+, toml
+, lxml
+, hypothesis
+}:
+
+buildPythonPackage rec {
+  pname = "xmlsec";
+  version = "1.3.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1c4k42zv3plm6v65p7z6l5rxyf50h40d02nhc16vq7cjrfvdf4rx";
+  };
+
+  # https://github.com/mehcode/python-xmlsec/issues/84#issuecomment-632930116
+  patches = [
+    ./reset-lxml-in-tests.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config pkgconfig setuptools-scm toml ];
+
+  buildInputs = [ xmlsec libxslt libxml2 libtool ];
+
+  propagatedBuildInputs = [ lxml ];
+
+  # Full git clone required for test_doc_examples
+  checkInputs = [ pytestCheckHook hypothesis ];
+  disabledTestPaths = [ "tests/test_doc_examples.py" ];
+
+  meta = with lib; {
+    description = "Python bindings for the XML Security Library";
+    homepage = "https://github.com/mehcode/python-xmlsec";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/xmlsec/reset-lxml-in-tests.patch b/nixpkgs/pkgs/development/python-modules/xmlsec/reset-lxml-in-tests.patch
new file mode 100644
index 000000000000..0968583faa63
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/xmlsec/reset-lxml-in-tests.patch
@@ -0,0 +1,22 @@
+diff --git a/tests/base.py b/tests/base.py
+index b05de1d..5ec356f 100644
+--- a/tests/base.py
++++ b/tests/base.py
+@@ -94,6 +94,7 @@ class TestMemoryLeaks(unittest.TestCase):
+ 
+     def load_xml(self, name, xpath=None):
+         """returns xml.etree"""
++        etree.set_default_parser(parser=etree.XMLParser())
+         root = etree.parse(self.path(name)).getroot()
+         if xpath is None:
+             return root
+diff --git a/tests/test_doc_examples.py b/tests/test_doc_examples.py
+index 2fc490f..53d2377 100644
+--- a/tests/test_doc_examples.py
++++ b/tests/test_doc_examples.py
+@@ -42,3 +42,5 @@ def test_doc_example(example):
+     """
+     with cd(example.parent):
+         runpy.run_path(str(example))
++    from lxml import etree
++    etree.set_default_parser(parser=etree.XMLParser())
diff --git a/nixpkgs/pkgs/development/python-modules/xmpppy/default.nix b/nixpkgs/pkgs/development/python-modules/xmpppy/default.nix
deleted file mode 100644
index 65e2b3711fa0..000000000000
--- a/nixpkgs/pkgs/development/python-modules/xmpppy/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ lib, buildPythonPackage, fetchurl, isPy3k }:
-buildPythonPackage rec {
-  pname = "xmpp.py";
-  version = "0.5.0rc1";
-
-  patches = [ ./ssl.patch ];
-
-  src = fetchurl {
-    url = "mirror://sourceforge/xmpppy/xmpppy-${version}.tar.gz";
-    sha256 = "16hbh8kwc5n4qw2rz1mrs8q17rh1zq9cdl05b1nc404n7idh56si";
-  };
-
-  preInstall = ''
-    mkdir -p $out/bin $out/lib $out/share $(toPythonPath $out)
-    export PYTHONPATH=$PYTHONPATH:$(toPythonPath $out)
-  '';
-
-  disabled = isPy3k;
-
-  meta = with lib; {
-    description = "XMPP python library";
-    homepage = "http://xmpppy.sourceforge.net/";
-    license = licenses.gpl3;
-    maintainers = [ maintainers.mic92 ];
-  };
-}
diff --git a/nixpkgs/pkgs/development/python-modules/xmpppy/ssl.patch b/nixpkgs/pkgs/development/python-modules/xmpppy/ssl.patch
deleted file mode 100644
index 915602dc23e5..000000000000
--- a/nixpkgs/pkgs/development/python-modules/xmpppy/ssl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -wbBur xmpppy-0.5.0rc1/xmpp/transports.py xmpppy-0.5.0rc1.q/xmpp/transports.py
---- xmpppy-0.5.0rc1/xmpp/transports.py	2009-04-07 12:34:09.000000000 +0400
-+++ xmpppy-0.5.0rc1.q/xmpp/transports.py	2015-05-08 13:06:03.049252065 +0300
-@@ -27,7 +27,7 @@
- Also exception 'error' is defined to allow capture of this module specific exceptions.
- """
- 
--import socket,select,base64,dispatcher,sys
-+import socket,ssl,select,base64,dispatcher,sys
- from simplexml import ustr
- from client import PlugIn
- from protocol import *
-@@ -312,9 +312,9 @@
-         """ Immidiatedly switch socket to TLS mode. Used internally."""
-         """ Here we should switch pending_data to hint mode."""
-         tcpsock=self._owner.Connection
--        tcpsock._sslObj    = socket.ssl(tcpsock._sock, None, None)
--        tcpsock._sslIssuer = tcpsock._sslObj.issuer()
--        tcpsock._sslServer = tcpsock._sslObj.server()
-+        tcpsock._sslObj    = ssl.wrap_socket(tcpsock._sock, None, None)
-+        tcpsock._sslIssuer = tcpsock._sslObj.getpeercert().get('issuer')
-+        tcpsock._sslServer = tcpsock._sslObj.getpeercert().get('server')
-         tcpsock._recv = tcpsock._sslObj.read
-         tcpsock._send = tcpsock._sslObj.write
- 
diff --git a/nixpkgs/pkgs/development/python-modules/xpath-expressions/default.nix b/nixpkgs/pkgs/development/python-modules/xpath-expressions/default.nix
new file mode 100644
index 000000000000..a7c08ddc0bec
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/xpath-expressions/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, lxml
+, poetry-core
+, pythonOlder
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "xpath-expressions";
+  version = "1.1.0";
+  disabled = pythonOlder "3.5";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "orf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0l289iw2zmzxyfi3g2z7b917vmsaz47h5jp871zvykpmpigc632h";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  checkInputs = [
+    lxml
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    # Was fixed upstream but not released
+    substituteInPlace pyproject.toml \
+      --replace "poetry.masonry.api" "poetry.core.masonry.api"
+  '';
+
+  pythonImportsCheck = [ "xpath" ];
+
+  meta = with lib; {
+    description = "Python module to handle XPath expressions";
+    homepage = "https://github.com/orf/xpath-expressions";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/yalesmartalarmclient/default.nix b/nixpkgs/pkgs/development/python-modules/yalesmartalarmclient/default.nix
new file mode 100644
index 000000000000..a4ca97e27ac0
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/yalesmartalarmclient/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "yalesmartalarmclient";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "domwillcode";
+    repo = "yale-smart-alarm-client";
+    rev = "v${version}";
+    sha256 = "0fscp9n66h8a8khvjs2rjgm95xsdckpknadnyxqdmhw3hlj0aw6h";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "yalesmartalarmclient" ];
+
+  meta = with lib; {
+    description = "Python module to interface with Yale Smart Alarm Systems";
+    homepage = "https://github.com/mampfes/python-wiffi";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/yalexs/default.nix b/nixpkgs/pkgs/development/python-modules/yalexs/default.nix
new file mode 100644
index 000000000000..c65c88b88d5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/yalexs/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, aiofiles
+, aiohttp
+, aioresponses
+, aiounittest
+, asynctest
+, buildPythonPackage
+, fetchFromGitHub
+, pubnub
+, pytestCheckHook
+, python-dateutil
+, pythonOlder
+, requests
+, requests-mock
+}:
+
+buildPythonPackage rec {
+  pname = "yalexs";
+  version = "1.1.10";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "bdraco";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qmxiafqmh51i3l30pajaqj5h0kziq4d37fn6hl58429bb85dpp9";
+  };
+
+  propagatedBuildInputs = [
+    aiofiles
+    aiohttp
+    pubnub
+    python-dateutil
+    requests
+  ];
+
+  checkInputs = [
+    aioresponses
+    aiounittest
+    asynctest
+    pytestCheckHook
+    requests-mock
+  ];
+
+  postPatch = ''
+    # Not used requirement
+    substituteInPlace setup.py --replace '"vol",' ""
+  '';
+
+  pythonImportsCheck = [ "yalexs" ];
+
+  meta = with lib; {
+    description = "Python API for Yale Access (formerly August) Smart Lock and Doorbell";
+    homepage = "https://github.com/bdraco/yalexs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/yamllint/default.nix b/nixpkgs/pkgs/development/python-modules/yamllint/default.nix
index 13545c0430d1..2178e4d25791 100644
--- a/nixpkgs/pkgs/development/python-modules/yamllint/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/yamllint/default.nix
@@ -1,26 +1,48 @@
-{ lib, buildPythonPackage, fetchPypi
-, nose, pyyaml, pathspec }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pathspec
+, pytestCheckHook
+, pythonOlder
+, pyyaml
+, stdenv
+}:
 
 buildPythonPackage rec {
   pname = "yamllint";
-  version = "1.25.0";
+  version = "1.26.0";
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b1549cbe5b47b6ba67bdeea31720f5c51431a4d0c076c1557952d841f7223519";
+    sha256 = "11qhs1jk9pwvyk5k3q5blh9sq42dh1ywdf1f3i2zixf7hncwir5h";
   };
 
-  checkInputs = [ nose ];
+  propagatedBuildInputs = [
+    pyyaml
+    pathspec
+  ];
 
-  propagatedBuildInputs = [  pyyaml pathspec ];
+  checkInputs = [
+    pytestCheckHook
+  ];
 
-  # Two test failures
-  doCheck = false;
+  disabledTests = [
+    # test failure reported upstream: https://github.com/adrienverge/yamllint/issues/373
+    "test_find_files_recursively"
+  ] ++ lib.optional stdenv.isDarwin [
+    # locale tests are broken on BSDs; see https://github.com/adrienverge/yamllint/issues/307
+    "test_locale_accents"
+    "test_locale_case"
+    "test_run_with_locale"
+  ];
+
+  pythonImportsCheck = [ "yamllint" ];
 
   meta = with lib; {
     description = "A linter for YAML files";
     homepage = "https://github.com/adrienverge/yamllint";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ jonringer mikefaille ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/yapf/default.nix b/nixpkgs/pkgs/development/python-modules/yapf/default.nix
index 9c0e9d353993..9c759f3a2b7e 100644
--- a/nixpkgs/pkgs/development/python-modules/yapf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/yapf/default.nix
@@ -1,19 +1,46 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
 
 buildPythonPackage rec {
   pname = "yapf";
-  version = "0.30.0";
+  version = "0.31.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3000abee4c28daebad55da6c85f3cd07b8062ce48e2e9943c8da1b9667d48427";
+    hash = "sha256-QI+5orJUwwL0nbg8WfmqC0sP0OwlvjpcURgTJ5Iv9j0=";
   };
 
+  checkInputs = [
+    nose
+  ];
+
   meta = with lib; {
-    description = "A formatter for Python code.";
-    homepage    = "https://github.com/google/yapf";
-    license     = licenses.asl20;
-    maintainers = with maintainers; [ siddharthist ];
-  };
+    homepage = "https://github.com/google/yapf";
+    description = "Yet Another Python Formatter";
+    longDescription = ''
+      Most of the current formatters for Python --- e.g., autopep8, and pep8ify
+      --- are made to remove lint errors from code. This has some obvious
+      limitations. For instance, code that conforms to the PEP 8 guidelines may
+      not be reformatted. But it doesn't mean that the code looks good.
 
+      YAPF takes a different approach. It's based off of 'clang-format',
+      developed by Daniel Jasper. In essence, the algorithm takes the code and
+      reformats it to the best formatting that conforms to the style guide, even
+      if the original code didn't violate the style guide. The idea is also
+      similar to the 'gofmt' tool for the Go programming language: end all holy
+      wars about formatting - if the whole codebase of a project is simply piped
+      through YAPF whenever modifications are made, the style remains consistent
+      throughout the project and there's no point arguing about style in every
+      code review.
+
+      The ultimate goal is that the code YAPF produces is as good as the code
+      that a programmer would write if they were following the style guide. It
+      takes away some of the drudgery of maintaining your code.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres siddharthist ];
+  };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/yapsy/default.nix b/nixpkgs/pkgs/development/python-modules/yapsy/default.nix
index e60b0a114731..a6471d8f07ef 100644
--- a/nixpkgs/pkgs/development/python-modules/yapsy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/yapsy/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
 }:
@@ -16,6 +17,7 @@ buildPythonPackage rec {
     homepage = "http://yapsy.sourceforge.net/";
     description = "Yet another plugin system";
     license = licenses.bsd0;
+    # tests fail and are not using pytest to easily disable them
+    broken = stdenv.isDarwin;
   };
-
 }
diff --git a/nixpkgs/pkgs/development/python-modules/yaswfp/default.nix b/nixpkgs/pkgs/development/python-modules/yaswfp/default.nix
new file mode 100644
index 000000000000..267052f5c17d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/yaswfp/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "yaswfp";
+  version = "unstable-20210331";
+
+  src = fetchFromGitHub {
+    owner = "facundobatista";
+    repo = pname;
+    rev = "2a2cc6ca4c0b4d52bd2e658fb5f80fdc0db4924c";
+    sha256 = "1dxdz89hlycy1rnn269fwl1f0qxgxqarkc0ivs2m77f8xba2qgj9";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "yaswfp" ];
+
+  meta = with lib; {
+    description = "Python SWF Parser";
+    homepage = "https://github.com/facundobatista/yaswfp";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/ytmusicapi/default.nix b/nixpkgs/pkgs/development/python-modules/ytmusicapi/default.nix
new file mode 100644
index 000000000000..1f211cd2872d
--- /dev/null
+++ b/nixpkgs/pkgs/development/python-modules/ytmusicapi/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, isPy27
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "ytmusicapi";
+  version = "0.15.1";
+
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-W/eZubJ/SNLBya1S6wLUwTwZCUD+wCQ5FAuNcSpl+9Y=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  doCheck = false; # requires network access
+
+  pythonImportsCheck = [ "ytmusicapi" ];
+
+  meta = with lib; {
+    description = "Unofficial API for YouTube Music";
+    homepage = "https://github.com/sigma67/ytmusicapi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/python-modules/zerobin/default.nix b/nixpkgs/pkgs/development/python-modules/zerobin/default.nix
deleted file mode 100644
index 19d02a70496b..000000000000
--- a/nixpkgs/pkgs/development/python-modules/zerobin/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchFromGitHub
-, cherrypy
-, bottle
-, lockfile
-, clize
-}:
-
-buildPythonPackage {
-  pname = "zerobin";
-  version = "20160108";
-
-  src = fetchFromGitHub {
-    owner = "sametmax";
-    repo = "0bin";
-    rev = "7da1615";
-    sha256 = "1pzcwy454kn5216pvwjqzz311s6jbh7viw9s6kw4xps6f5h44bid";
-  };
-
-  propagatedBuildInputs = [ cherrypy bottle lockfile clize ];
-
-  # zerobin doesn't have any tests, but includes a copy of cherrypy which
-  # can wrongly fail the check phase.
-  doCheck = false;
-
-  meta = with lib; {
-    description = "A client side encrypted pastebin";
-    homepage = "https://0bin.net/";
-    license = licenses.wtfpl;
-  };
-
-}
diff --git a/nixpkgs/pkgs/development/python-modules/zeroc-ice/default.nix b/nixpkgs/pkgs/development/python-modules/zeroc-ice/default.nix
index 6dccf51100e2..2786fc979f1a 100644
--- a/nixpkgs/pkgs/development/python-modules/zeroc-ice/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zeroc-ice/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "zeroc-ice";
-  version = "3.7.4";
+  version = "3.7.5";
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "dc79a1eaad1d1cd1cf8cfe636e1bc413c60645e3e87a5a8e9b97ce882690e0e4";
+    sha256 = "3b4897cc3f2adf3d03802368cedb72a038aa33c988663a667c1c48e42ea10797";
   };
 
   buildInputs = [ openssl bzip2 ];
diff --git a/nixpkgs/pkgs/development/python-modules/zeroconf/default.nix b/nixpkgs/pkgs/development/python-modules/zeroconf/default.nix
index a3b00ec32324..5105cbfff021 100644
--- a/nixpkgs/pkgs/development/python-modules/zeroconf/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zeroconf/default.nix
@@ -3,27 +3,26 @@
 , buildPythonPackage
 , fetchPypi
 , ifaddr
-, typing
-, isPy27
 , pythonOlder
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "zeroconf";
-  version = "0.28.8";
-  disabled = isPy27;
+  version = "0.29.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0narq8haa3b375vfblbyil77n8bw0wxqnanl91pl0wwwm884mqjb";
+    sha256 = "sha256-eu+7ZYtFKx/X5REkNk+TjG9eQtbqiT+iVXvqjAbFQK8=";
   };
 
-  propagatedBuildInputs = [ ifaddr ]
-    ++ lib.optionals (pythonOlder "3.5") [ typing ];
+  propagatedBuildInputs = [ ifaddr ];
 
   checkInputs = [ pytestCheckHook ];
+
   pytestFlagsArray = [ "zeroconf/test.py" ];
+
   disabledTests = [
     # disable tests that expect some sort of networking in the build container
     "test_launch_and_close"
@@ -33,6 +32,7 @@ buildPythonPackage rec {
   ] ++ lib.optionals stdenv.isDarwin [
     "test_lots_of_names"
   ];
+
   __darwinAllowLocalNetworking = true;
 
   pythonImportsCheck = [ "zeroconf" ];
@@ -40,7 +40,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Python implementation of multicast DNS service discovery";
     homepage = "https://github.com/jstasiak/python-zeroconf";
-    license = licenses.lgpl21;
+    license = licenses.lgpl21Only;
     maintainers = with maintainers; [ abbradar ];
   };
 }
diff --git a/nixpkgs/pkgs/development/python-modules/zetup/default.nix b/nixpkgs/pkgs/development/python-modules/zetup/default.nix
index 85e950b830e8..3862a8e757d1 100644
--- a/nixpkgs/pkgs/development/python-modules/zetup/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zetup/default.nix
@@ -1,6 +1,11 @@
-{ lib, buildPythonPackage, fetchPypi
-, setuptools_scm, pathpy, nbconvert
-, pytest }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, nbconvert
+, pathpy
+, pytestCheckHook
+, setuptools-scm
+}:
 
 buildPythonPackage rec {
   pname = "zetup";
@@ -11,18 +16,25 @@ buildPythonPackage rec {
     sha256 = "b8a9bdcfa4b705d72b55b218658bc9403c157db7b57a14158253c98d03ab713d";
   };
 
-  # Python 3.8 compatibility
+  # Python > 3.7 compatibility
   postPatch = ''
     substituteInPlace zetup/zetup_config.py \
-      --replace "'3.7']" "'3.7', '3.8']"
+      --replace "'3.7']" "'3.7', '3.8', '3.9', '3.10']"
   '';
 
   checkPhase = ''
     py.test test -k "not TestObject" --deselect=test/test_zetup_config.py::test_classifiers
   '';
 
-  checkInputs = [ pytest pathpy nbconvert ];
-  propagatedBuildInputs = [ setuptools_scm ];
+  propagatedBuildInputs = [ setuptools-scm ];
+
+  checkInputs = [
+    pathpy
+    nbconvert
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "zetup" ];
 
   meta = with lib; {
     description = "Zimmermann's Extensible Tools for Unified Project setups";
diff --git a/nixpkgs/pkgs/development/python-modules/zha-quirks/default.nix b/nixpkgs/pkgs/development/python-modules/zha-quirks/default.nix
index 3141f666a63a..34a4c90d190a 100644
--- a/nixpkgs/pkgs/development/python-modules/zha-quirks/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zha-quirks/default.nix
@@ -1,25 +1,34 @@
 { lib
-, buildPythonPackage
-, fetchFromGitHub
 , aiohttp
-, zigpy
 , asynctest
+, buildPythonPackage
+, fetchFromGitHub
 , pytestCheckHook
+, zigpy
 }:
 
 buildPythonPackage rec {
   pname = "zha-quirks";
-  version = "0.0.53";
+  version = "0.0.55";
 
   src = fetchFromGitHub {
     owner = "zigpy";
     repo = "zha-device-handlers";
     rev = version;
-    sha256 = "16n99r7bjd3lnxn72lfnxg44n7mkv196vdhkw2sf1nq1an4ks1nc";
+    sha256 = "sha256-mc7mOaxn2FCvwYv9yE0mIOSQ1F+xJJ+1LynOdEV07I8=";
   };
 
-  propagatedBuildInputs = [ aiohttp zigpy ];
-  checkInputs = [ pytestCheckHook asynctest ];
+  propagatedBuildInputs = [
+    aiohttp
+    zigpy
+  ];
+
+  checkInputs = [
+    asynctest
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "zhaquirks" ];
 
   meta = with lib; {
     description = "ZHA Device Handlers are custom quirks implementations for Zigpy";
diff --git a/nixpkgs/pkgs/development/python-modules/zigpy-deconz/default.nix b/nixpkgs/pkgs/development/python-modules/zigpy-deconz/default.nix
index d9c7854bf984..0b7c027c0fef 100644
--- a/nixpkgs/pkgs/development/python-modules/zigpy-deconz/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zigpy-deconz/default.nix
@@ -11,13 +11,13 @@
 
 buildPythonPackage rec {
   pname = "zigpy-deconz";
-  version = "0.11.1";
+  version = "0.12.0";
 
   src = fetchFromGitHub {
     owner = "zigpy";
     repo = pname;
     rev = version;
-    sha256 = "1p9mdsfc200iyszppcflazzfwqg4v8nqqwqsx114nip5km7a5s37";
+    sha256 = "sha256-d/yAk8owMu+J1BzlwR5mzF9HkXiE6Kc81AznvsAboy8=";
   };
 
   propagatedBuildInputs = [ pyserial pyserial-asyncio zigpy ];
diff --git a/nixpkgs/pkgs/development/python-modules/zigpy-znp/default.nix b/nixpkgs/pkgs/development/python-modules/zigpy-znp/default.nix
index 1a1c639a4738..2543d0675852 100644
--- a/nixpkgs/pkgs/development/python-modules/zigpy-znp/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zigpy-znp/default.nix
@@ -17,13 +17,13 @@
 
 buildPythonPackage rec {
   pname = "zigpy-znp";
-  version = "0.3.0";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     owner = "zha-ng";
     repo = "zigpy-znp";
     rev = "v${version}";
-    sha256 = "18dav2n5fqdigf8dl7gcqa9z8l6p2ig6l5q78gqg2wj7wjpncwyj";
+    sha256 = "1g5jssdnibhb4i4k1js9iy9w40cipf1gdnyp847x0bv6wblzx8rl";
   };
 
   propagatedBuildInputs = [
@@ -45,11 +45,6 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
-  disabledTests = [
-    # zigpy-znp was too slow to sync up with the zigpy 0.29 release and has API breakage, remove >0.3.0
-    "test_force_remove"
-  ];
-
   meta = with lib; {
     description = "A library for zigpy which communicates with TI ZNP radios";
     homepage = "https://github.com/zha-ng/zigpy-znp";
diff --git a/nixpkgs/pkgs/development/python-modules/zigpy/default.nix b/nixpkgs/pkgs/development/python-modules/zigpy/default.nix
index dbc42561db63..f03b9e96759e 100644
--- a/nixpkgs/pkgs/development/python-modules/zigpy/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zigpy/default.nix
@@ -15,13 +15,13 @@
 
 buildPythonPackage rec {
   pname = "zigpy";
-  version = "0.32.0";
+  version = "0.33.0";
 
   src = fetchFromGitHub {
     owner = "zigpy";
     repo = "zigpy";
     rev = version;
-    sha256 = "18grqx1fzh539ccar0865shgd2mnfni65rjj787cq5j5p5rn0yc7";
+    sha256 = "sha256-oEf4GnvbQ6LY4NaNFWRmnNz1TK2tMpIVUxskhU38g4w=";
   };
 
   propagatedBuildInputs = [
diff --git a/nixpkgs/pkgs/development/python-modules/zope_schema/default.nix b/nixpkgs/pkgs/development/python-modules/zope_schema/default.nix
index 75683cb2eb8f..43fab18daeb3 100644
--- a/nixpkgs/pkgs/development/python-modules/zope_schema/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zope_schema/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "zope.schema";
-  version = "6.0.0";
+  version = "6.0.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "20fbbce8a0726ba34f0e3958676498feebb818f06575193254e139d8d7214f26";
+    sha256 = "9b3fc3ac656099aa9ebf3beb2bbd83d2d6ee6f94b9ac6969d6e3993ec9c4a197";
   };
 
   propagatedBuildInputs = [ zope_location zope_event zope_interface zope_testing ];
diff --git a/nixpkgs/pkgs/development/python-modules/zopfli/default.nix b/nixpkgs/pkgs/development/python-modules/zopfli/default.nix
index a80b3155b8ce..9d6757793511 100644
--- a/nixpkgs/pkgs/development/python-modules/zopfli/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/zopfli/default.nix
@@ -2,14 +2,15 @@
 
 buildPythonPackage rec {
   pname = "zopfli";
-  version = "0.1.7";
+  version = "0.1.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "512892714f0e3dcc9a77222cb509ed519f41ce2b92467e47a4b406a23b48561a";
+    sha256 = "8b977dc07e3797907ab59e08096583bcd0b7e6c739849fbbeec09263f6356623";
     extension = "zip";
   };
 
+  # doesn't work with pytestCheckHook
   checkInputs = [ pytest ];
 
   meta = with lib; {