about summary refs log tree commit diff
path: root/pkgs/development/python-modules
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules')
-rw-r--r--pkgs/development/python-modules/afsapi/default.nix6
-rw-r--r--pkgs/development/python-modules/ailment/default.nix4
-rw-r--r--pkgs/development/python-modules/aioairzone/default.nix4
-rw-r--r--pkgs/development/python-modules/aioamqp/compat-pamqp-3.patch498
-rw-r--r--pkgs/development/python-modules/aioamqp/default.nix31
-rw-r--r--pkgs/development/python-modules/aiobotocore/default.nix4
-rw-r--r--pkgs/development/python-modules/aioimaplib/default.nix7
-rw-r--r--pkgs/development/python-modules/aiolimiter/default.nix65
-rw-r--r--pkgs/development/python-modules/aiooncue/default.nix4
-rw-r--r--pkgs/development/python-modules/aioqsw/default.nix4
-rw-r--r--pkgs/development/python-modules/aioslimproto/default.nix15
-rw-r--r--pkgs/development/python-modules/androguard/default.nix4
-rw-r--r--pkgs/development/python-modules/androidtv/default.nix4
-rw-r--r--pkgs/development/python-modules/angr/default.nix4
-rw-r--r--pkgs/development/python-modules/angrop/default.nix4
-rw-r--r--pkgs/development/python-modules/ansible-compat/default.nix4
-rw-r--r--pkgs/development/python-modules/ansible/default.nix5
-rw-r--r--pkgs/development/python-modules/apache-beam/default.nix10
-rw-r--r--pkgs/development/python-modules/apispec/default.nix4
-rw-r--r--pkgs/development/python-modules/approvaltests/default.nix4
-rw-r--r--pkgs/development/python-modules/archinfo/default.nix4
-rw-r--r--pkgs/development/python-modules/argon2-cffi/default.nix (renamed from pkgs/development/python-modules/argon2_cffi/default.nix)5
-rw-r--r--pkgs/development/python-modules/async-lru/default.nix13
-rw-r--r--pkgs/development/python-modules/async-upnp-client/default.nix4
-rw-r--r--pkgs/development/python-modules/atomman/default.nix10
-rw-r--r--pkgs/development/python-modules/aurorapy/default.nix4
-rw-r--r--pkgs/development/python-modules/autobahn/default.nix64
-rw-r--r--pkgs/development/python-modules/awkward/default.nix2
-rw-r--r--pkgs/development/python-modules/aws-adfs/default.nix6
-rw-r--r--pkgs/development/python-modules/aws-lambda-builders/default.nix6
-rw-r--r--pkgs/development/python-modules/azure-eventhub/default.nix11
-rw-r--r--pkgs/development/python-modules/azure-mgmt-containerservice/default.nix4
-rw-r--r--pkgs/development/python-modules/azure-mgmt-datafactory/default.nix4
-rw-r--r--pkgs/development/python-modules/azure-mgmt-msi/default.nix19
-rw-r--r--pkgs/development/python-modules/azure-mgmt-network/default.nix20
-rw-r--r--pkgs/development/python-modules/azure-mgmt-recoveryservicesbackup/default.nix16
-rw-r--r--pkgs/development/python-modules/azure-mgmt-redhatopenshift/default.nix4
-rw-r--r--pkgs/development/python-modules/azure-mgmt-resource/default.nix4
-rw-r--r--pkgs/development/python-modules/azure-servicebus/default.nix20
-rw-r--r--pkgs/development/python-modules/azure-storage-file-share/default.nix19
-rw-r--r--pkgs/development/python-modules/backports-zoneinfo/default.nix19
-rw-r--r--pkgs/development/python-modules/beaker/default.nix10
-rw-r--r--pkgs/development/python-modules/beancount/default.nix4
-rw-r--r--pkgs/development/python-modules/bellows/default.nix6
-rw-r--r--pkgs/development/python-modules/bitarray/default.nix6
-rw-r--r--pkgs/development/python-modules/bleach/default.nix4
-rw-r--r--pkgs/development/python-modules/blocksat-cli/default.nix4
-rw-r--r--pkgs/development/python-modules/bond-api/default.nix4
-rw-r--r--pkgs/development/python-modules/boolean-py/default.nix27
-rw-r--r--pkgs/development/python-modules/breezy/default.nix25
-rw-r--r--pkgs/development/python-modules/browser-cookie3/default.nix4
-rw-r--r--pkgs/development/python-modules/brunt/default.nix47
-rw-r--r--pkgs/development/python-modules/buildbot/default.nix2
-rw-r--r--pkgs/development/python-modules/cachy/default.nix4
-rw-r--r--pkgs/development/python-modules/casbin/default.nix4
-rw-r--r--pkgs/development/python-modules/chainer/default.nix21
-rw-r--r--pkgs/development/python-modules/chiavdf/default.nix4
-rw-r--r--pkgs/development/python-modules/cirq-core/default.nix27
-rw-r--r--pkgs/development/python-modules/cirq/default.nix9
-rw-r--r--pkgs/development/python-modules/ciscoconfparse/default.nix25
-rw-r--r--pkgs/development/python-modules/claripy/default.nix4
-rw-r--r--pkgs/development/python-modules/cle/default.nix4
-rw-r--r--pkgs/development/python-modules/clickgen/default.nix28
-rw-r--r--pkgs/development/python-modules/container-inspector/default.nix56
-rw-r--r--pkgs/development/python-modules/contexttimer/default.nix2
-rw-r--r--pkgs/development/python-modules/crossplane/default.nix24
-rw-r--r--pkgs/development/python-modules/curio/default.nix3
-rw-r--r--pkgs/development/python-modules/dash/default.nix6
-rw-r--r--pkgs/development/python-modules/databricks-connect/default.nix4
-rw-r--r--pkgs/development/python-modules/datapoint/default.nix43
-rw-r--r--pkgs/development/python-modules/datatable/default.nix4
-rw-r--r--pkgs/development/python-modules/db-dtypes/default.nix18
-rw-r--r--pkgs/development/python-modules/dbf/default.nix51
-rw-r--r--pkgs/development/python-modules/debian-inspector/default.nix12
-rw-r--r--pkgs/development/python-modules/defcon/default.nix4
-rw-r--r--pkgs/development/python-modules/devolo-home-control-api/default.nix4
-rw-r--r--pkgs/development/python-modules/devolo-plc-api/default.nix4
-rw-r--r--pkgs/development/python-modules/diagrams/default.nix3
-rw-r--r--pkgs/development/python-modules/django-auth-ldap/default.nix4
-rw-r--r--pkgs/development/python-modules/django-jinja2/default.nix4
-rw-r--r--pkgs/development/python-modules/django-tastypie/default.nix41
-rw-r--r--pkgs/development/python-modules/django-versatileimagefield/default.nix4
-rw-r--r--pkgs/development/python-modules/django/4.nix8
-rw-r--r--pkgs/development/python-modules/dlinfo/default.nix37
-rw-r--r--pkgs/development/python-modules/dnachisel/default.nix6
-rw-r--r--pkgs/development/python-modules/dparse2/default.nix50
-rw-r--r--pkgs/development/python-modules/ducc0/default.nix30
-rw-r--r--pkgs/development/python-modules/dunamai/default.nix6
-rw-r--r--pkgs/development/python-modules/dungeon-eos/default.nix4
-rw-r--r--pkgs/development/python-modules/ecos/default.nix33
-rw-r--r--pkgs/development/python-modules/editorconfig/default.nix6
-rw-r--r--pkgs/development/python-modules/eiswarnung/default.nix6
-rw-r--r--pkgs/development/python-modules/elkm1-lib/default.nix6
-rw-r--r--pkgs/development/python-modules/emcee/default.nix6
-rw-r--r--pkgs/development/python-modules/enhancements/default.nix43
-rw-r--r--pkgs/development/python-modules/eventlet/default.nix2
-rw-r--r--pkgs/development/python-modules/evtx/default.nix48
-rw-r--r--pkgs/development/python-modules/exceptiongroup/default.nix4
-rw-r--r--pkgs/development/python-modules/exchangelib/default.nix6
-rw-r--r--pkgs/development/python-modules/extractcode/default.nix4
-rw-r--r--pkgs/development/python-modules/fakeredis/default.nix4
-rw-r--r--pkgs/development/python-modules/falcon/default.nix5
-rw-r--r--pkgs/development/python-modules/fastapi/default.nix2
-rw-r--r--pkgs/development/python-modules/fastbencode/default.nix26
-rw-r--r--pkgs/development/python-modules/fastjsonschema/default.nix3
-rw-r--r--pkgs/development/python-modules/flametree/default.nix6
-rw-r--r--pkgs/development/python-modules/flask-restful/default.nix33
-rw-r--r--pkgs/development/python-modules/flask-security-too/default.nix2
-rw-r--r--pkgs/development/python-modules/flux-led/default.nix4
-rw-r--r--pkgs/development/python-modules/fontmake/default.nix42
-rw-r--r--pkgs/development/python-modules/fontmath/default.nix4
-rw-r--r--pkgs/development/python-modules/fonttools/default.nix10
-rw-r--r--pkgs/development/python-modules/ftputil/default.nix4
-rw-r--r--pkgs/development/python-modules/gbulb/default.nix43
-rw-r--r--pkgs/development/python-modules/gcal-sync/default.nix46
-rw-r--r--pkgs/development/python-modules/genshi/default.nix4
-rw-r--r--pkgs/development/python-modules/gidgethub/default.nix36
-rw-r--r--pkgs/development/python-modules/github3_py/default.nix46
-rw-r--r--pkgs/development/python-modules/globus-sdk/default.nix4
-rw-r--r--pkgs/development/python-modules/glyphslib/default.nix59
-rw-r--r--pkgs/development/python-modules/google-cloud-bigquery/default.nix11
-rw-r--r--pkgs/development/python-modules/google-cloud-pubsub/default.nix4
-rw-r--r--pkgs/development/python-modules/gpt-2-simple/default.nix26
-rw-r--r--pkgs/development/python-modules/graphite-web/default.nix4
-rw-r--r--pkgs/development/python-modules/graphviz/default.nix7
-rw-r--r--pkgs/development/python-modules/grpcio-status/default.nix4
-rw-r--r--pkgs/development/python-modules/grpcio-tools/default.nix4
-rw-r--r--pkgs/development/python-modules/gst-python/default.nix6
-rw-r--r--pkgs/development/python-modules/hahomematic/default.nix4
-rw-r--r--pkgs/development/python-modules/hatasmota/default.nix4
-rw-r--r--pkgs/development/python-modules/hatch-vcs/default.nix48
-rw-r--r--pkgs/development/python-modules/hg-commitsigs/default.nix6
-rw-r--r--pkgs/development/python-modules/holoviews/default.nix32
-rw-r--r--pkgs/development/python-modules/howdoi/default.nix18
-rw-r--r--pkgs/development/python-modules/http-sfv/default.nix4
-rw-r--r--pkgs/development/python-modules/httpcore/default.nix10
-rw-r--r--pkgs/development/python-modules/httpie-ntlm/default.nix31
-rw-r--r--pkgs/development/python-modules/httpie/default.nix91
-rw-r--r--pkgs/development/python-modules/httpx-socks/default.nix11
-rw-r--r--pkgs/development/python-modules/httpx/default.nix21
-rw-r--r--pkgs/development/python-modules/huggingface-hub/default.nix8
-rw-r--r--pkgs/development/python-modules/humblewx/default.nix4
-rw-r--r--pkgs/development/python-modules/hvplot/default.nix13
-rw-r--r--pkgs/development/python-modules/hy/default.nix43
-rw-r--r--pkgs/development/python-modules/hyrule/default.nix43
-rw-r--r--pkgs/development/python-modules/ibis-framework/default.nix54
-rw-r--r--pkgs/development/python-modules/imap-tools/default.nix4
-rw-r--r--pkgs/development/python-modules/impacket/default.nix4
-rw-r--r--pkgs/development/python-modules/influxgraph/default.nix10
-rw-r--r--pkgs/development/python-modules/insteon-frontend-home-assistant/default.nix26
-rw-r--r--pkgs/development/python-modules/intbitset/default.nix7
-rw-r--r--pkgs/development/python-modules/invoke/default.nix8
-rw-r--r--pkgs/development/python-modules/ipwhl/default.nix4
-rw-r--r--pkgs/development/python-modules/ipywidgets/default.nix26
-rw-r--r--pkgs/development/python-modules/itemadapter/default.nix4
-rw-r--r--pkgs/development/python-modules/jc/default.nix4
-rw-r--r--pkgs/development/python-modules/jenkinsapi/default.nix4
-rw-r--r--pkgs/development/python-modules/jupyter-sphinx/default.nix3
-rw-r--r--pkgs/development/python-modules/jupyter_server/default.nix6
-rw-r--r--pkgs/development/python-modules/jwcrypto/default.nix14
-rw-r--r--pkgs/development/python-modules/karton-autoit-ripper/default.nix17
-rw-r--r--pkgs/development/python-modules/karton-classifier/default.nix4
-rw-r--r--pkgs/development/python-modules/karton-core/default.nix4
-rw-r--r--pkgs/development/python-modules/keyrings-cryptfile/default.nix4
-rw-r--r--pkgs/development/python-modules/ldaptor/default.nix27
-rw-r--r--pkgs/development/python-modules/lektor/default.nix4
-rw-r--r--pkgs/development/python-modules/license-expression/default.nix12
-rw-r--r--pkgs/development/python-modules/limits/default.nix79
-rw-r--r--pkgs/development/python-modules/linkify-it-py/default.nix6
-rw-r--r--pkgs/development/python-modules/loopy/default.nix (renamed from pkgs/development/python-modules/loo-py/default.nix)52
-rw-r--r--pkgs/development/python-modules/losant-rest/default.nix4
-rw-r--r--pkgs/development/python-modules/luxtronik/default.nix4
-rw-r--r--pkgs/development/python-modules/magic-wormhole-mailbox-server/default.nix32
-rw-r--r--pkgs/development/python-modules/magic-wormhole-transit-relay/default.nix17
-rw-r--r--pkgs/development/python-modules/magic-wormhole/default.nix43
-rw-r--r--pkgs/development/python-modules/malduck/default.nix12
-rw-r--r--pkgs/development/python-modules/mapbox/default.nix3
-rw-r--r--pkgs/development/python-modules/mastodon-py/default.nix4
-rw-r--r--pkgs/development/python-modules/matplotlib/default.nix4
-rw-r--r--pkgs/development/python-modules/mcstatus/default.nix4
-rw-r--r--pkgs/development/python-modules/meater-python/default.nix37
-rw-r--r--pkgs/development/python-modules/meilisearch/default.nix4
-rw-r--r--pkgs/development/python-modules/memcached/default.nix27
-rw-r--r--pkgs/development/python-modules/mocket/default.nix4
-rw-r--r--pkgs/development/python-modules/moku/default.nix57
-rw-r--r--pkgs/development/python-modules/motionblinds/default.nix4
-rw-r--r--pkgs/development/python-modules/mypy-boto3-s3/default.nix4
-rw-r--r--pkgs/development/python-modules/mysql-connector/default.nix41
-rw-r--r--pkgs/development/python-modules/name-that-hash/default.nix44
-rw-r--r--pkgs/development/python-modules/napalm/default.nix6
-rw-r--r--pkgs/development/python-modules/nbclient/default.nix43
-rw-r--r--pkgs/development/python-modules/nbconvert/default.nix72
-rw-r--r--pkgs/development/python-modules/nettigo-air-monitor/default.nix4
-rw-r--r--pkgs/development/python-modules/nose-randomly/default.nix6
-rw-r--r--pkgs/development/python-modules/nose/default.nix4
-rw-r--r--pkgs/development/python-modules/notebook/default.nix4
-rw-r--r--pkgs/development/python-modules/notify-events/default.nix34
-rw-r--r--pkgs/development/python-modules/notify-py/default.nix28
-rw-r--r--pkgs/development/python-modules/nutils/default.nix42
-rw-r--r--pkgs/development/python-modules/nvchecker/default.nix4
-rw-r--r--pkgs/development/python-modules/ocrmypdf/default.nix2
-rw-r--r--pkgs/development/python-modules/oletools/default.nix7
-rw-r--r--pkgs/development/python-modules/openshift/default.nix4
-rw-r--r--pkgs/development/python-modules/openstep-plist/default.nix31
-rw-r--r--pkgs/development/python-modules/oscrypto/default.nix44
-rw-r--r--pkgs/development/python-modules/osmpythontools/default.nix7
-rw-r--r--pkgs/development/python-modules/pandoc-xnos/default.nix30
-rw-r--r--pkgs/development/python-modules/parameter-expansion-patched/default.nix16
-rw-r--r--pkgs/development/python-modules/paramiko/default.nix24
-rw-r--r--pkgs/development/python-modules/passlib/default.nix19
-rw-r--r--pkgs/development/python-modules/pcapy-ng/default.nix59
-rw-r--r--pkgs/development/python-modules/pdfminer_six/default.nix24
-rw-r--r--pkgs/development/python-modules/peaqevcore/default.nix4
-rw-r--r--pkgs/development/python-modules/pex/default.nix4
-rw-r--r--pkgs/development/python-modules/pglast/default.nix22
-rw-r--r--pkgs/development/python-modules/phonemizer/backend-paths.patch56
-rw-r--r--pkgs/development/python-modules/phonemizer/default.nix22
-rw-r--r--pkgs/development/python-modules/phonemizer/drop-readme-festival-test.patch12
-rw-r--r--pkgs/development/python-modules/phonemizer/remove-intertwined-festival-test.patch103
-rw-r--r--pkgs/development/python-modules/phonenumbers/default.nix4
-rw-r--r--pkgs/development/python-modules/pip-requirements-parser/default.nix50
-rw-r--r--pkgs/development/python-modules/pip-tools/default.nix10
-rw-r--r--pkgs/development/python-modules/pkgconfig/default.nix40
-rw-r--r--pkgs/development/python-modules/pkginfo2/default.nix35
-rw-r--r--pkgs/development/python-modules/pkutils/default.nix10
-rw-r--r--pkgs/development/python-modules/plugincode/default.nix16
-rw-r--r--pkgs/development/python-modules/plugwise/default.nix20
-rw-r--r--pkgs/development/python-modules/poetry-dynamic-versioning/default.nix4
-rw-r--r--pkgs/development/python-modules/pontos/default.nix5
-rw-r--r--pkgs/development/python-modules/praw/default.nix6
-rw-r--r--pkgs/development/python-modules/proglog/default.nix4
-rw-r--r--pkgs/development/python-modules/proton-client/default.nix1
-rw-r--r--pkgs/development/python-modules/protonvpn-nm-lib/0001-Patching-GIRepository.patch22
-rw-r--r--pkgs/development/python-modules/protonvpn-nm-lib/default.nix17
-rw-r--r--pkgs/development/python-modules/prox-tv/default.nix6
-rw-r--r--pkgs/development/python-modules/proxmoxer/default.nix21
-rw-r--r--pkgs/development/python-modules/pure-pcapy3/default.nix19
-rw-r--r--pkgs/development/python-modules/puremagic/default.nix4
-rw-r--r--pkgs/development/python-modules/pushbullet/default.nix4
-rw-r--r--pkgs/development/python-modules/pweave/default.nix3
-rw-r--r--pkgs/development/python-modules/py-canary/default.nix12
-rw-r--r--pkgs/development/python-modules/py-deprecate/default.nix39
-rw-r--r--pkgs/development/python-modules/py-desmume/default.nix17
-rw-r--r--pkgs/development/python-modules/py-nextbusnext/default.nix32
-rw-r--r--pkgs/development/python-modules/py3exiv2/default.nix40
-rw-r--r--pkgs/development/python-modules/pyTelegramBotAPI/default.nix4
-rw-r--r--pkgs/development/python-modules/pyahocorasick/default.nix23
-rw-r--r--pkgs/development/python-modules/pyarrow/default.nix14
-rw-r--r--pkgs/development/python-modules/pyautogui/default.nix4
-rw-r--r--pkgs/development/python-modules/pychromecast/default.nix4
-rw-r--r--pkgs/development/python-modules/pycryptodome-test-vectors/default.nix4
-rw-r--r--pkgs/development/python-modules/pycurl/default.nix11
-rw-r--r--pkgs/development/python-modules/pydeck/default.nix28
-rw-r--r--pkgs/development/python-modules/pydeconz/default.nix10
-rw-r--r--pkgs/development/python-modules/pydeps/default.nix4
-rw-r--r--pkgs/development/python-modules/pydicom/default.nix18
-rw-r--r--pkgs/development/python-modules/pydyf/default.nix10
-rw-r--r--pkgs/development/python-modules/pyeapi/default.nix44
-rw-r--r--pkgs/development/python-modules/pyevilgenius/default.nix4
-rw-r--r--pkgs/development/python-modules/pyglet/default.nix4
-rw-r--r--pkgs/development/python-modules/pygtfs/default.nix12
-rw-r--r--pkgs/development/python-modules/pyicu/default.nix4
-rw-r--r--pkgs/development/python-modules/pyinfra/default.nix30
-rw-r--r--pkgs/development/python-modules/pyinsteon/default.nix6
-rw-r--r--pkgs/development/python-modules/pykeepass/default.nix6
-rw-r--r--pkgs/development/python-modules/pykulersky/default.nix4
-rw-r--r--pkgs/development/python-modules/pylint-django/default.nix13
-rw-r--r--pkgs/development/python-modules/pylint-plugin-utils/default.nix39
-rw-r--r--pkgs/development/python-modules/pylint/default.nix11
-rw-r--r--pkgs/development/python-modules/pylsp-mypy/default.nix1
-rw-r--r--pkgs/development/python-modules/pymbolic/default.nix29
-rw-r--r--pkgs/development/python-modules/pymyq/default.nix6
-rw-r--r--pkgs/development/python-modules/pynest2d/default.nix4
-rw-r--r--pkgs/development/python-modules/pynetgear/default.nix4
-rw-r--r--pkgs/development/python-modules/pynws/default.nix4
-rw-r--r--pkgs/development/python-modules/pyomo/default.nix6
-rw-r--r--pkgs/development/python-modules/pyopenssl/default.nix2
-rw-r--r--pkgs/development/python-modules/pypiserver/default.nix36
-rw-r--r--pkgs/development/python-modules/pyrainbird/default.nix58
-rw-r--r--pkgs/development/python-modules/pyrogram/default.nix4
-rw-r--r--pkgs/development/python-modules/pysabnzbd/default.nix33
-rw-r--r--pkgs/development/python-modules/pyscf/default.nix1
-rw-r--r--pkgs/development/python-modules/pyskyqremote/default.nix4
-rw-r--r--pkgs/development/python-modules/pysnow/default.nix4
-rw-r--r--pkgs/development/python-modules/pytest-cases/default.nix4
-rw-r--r--pkgs/development/python-modules/python-engineio/default.nix4
-rw-r--r--pkgs/development/python-modules/python-lsp-black/default.nix11
-rw-r--r--pkgs/development/python-modules/python-lsp-server/default.nix19
-rw-r--r--pkgs/development/python-modules/python-magic/default.nix2
-rw-r--r--pkgs/development/python-modules/python-memcached/default.nix40
-rw-r--r--pkgs/development/python-modules/python-rabbitair/default.nix60
-rw-r--r--pkgs/development/python-modules/python-socketio/default.nix4
-rw-r--r--pkgs/development/python-modules/python-sql/default.nix32
-rw-r--r--pkgs/development/python-modules/python-trovo/default.nix4
-rw-r--r--pkgs/development/python-modules/pytomorrowio/default.nix6
-rw-r--r--pkgs/development/python-modules/pytorch-lightning/default.nix10
-rw-r--r--pkgs/development/python-modules/pytube/default.nix4
-rw-r--r--pkgs/development/python-modules/pyupgrade/default.nix4
-rw-r--r--pkgs/development/python-modules/pyvesync/default.nix4
-rw-r--r--pkgs/development/python-modules/pyvex/default.nix4
-rw-r--r--pkgs/development/python-modules/pyvips/default.nix26
-rw-r--r--pkgs/development/python-modules/pyzerproc/default.nix4
-rw-r--r--pkgs/development/python-modules/qcs-api-client/default.nix4
-rw-r--r--pkgs/development/python-modules/qnapstats/default.nix48
-rw-r--r--pkgs/development/python-modules/qstylizer/default.nix47
-rw-r--r--pkgs/development/python-modules/raincloudy/default.nix61
-rw-r--r--pkgs/development/python-modules/relatorio/default.nix34
-rw-r--r--pkgs/development/python-modules/reportengine/default.nix53
-rw-r--r--pkgs/development/python-modules/requests-aws4auth/default.nix7
-rw-r--r--pkgs/development/python-modules/rethinkdb/default.nix4
-rw-r--r--pkgs/development/python-modules/rflink/default.nix6
-rw-r--r--pkgs/development/python-modules/rich/default.nix4
-rw-r--r--pkgs/development/python-modules/sanic/default.nix9
-rw-r--r--pkgs/development/python-modules/scancode-toolkit/default.nix23
-rw-r--r--pkgs/development/python-modules/scikit-bio/default.nix9
-rw-r--r--pkgs/development/python-modules/scipy/default.nix2
-rw-r--r--pkgs/development/python-modules/scmrepo/default.nix4
-rw-r--r--pkgs/development/python-modules/scrapy/default.nix4
-rw-r--r--pkgs/development/python-modules/sdds/default.nix31
-rw-r--r--pkgs/development/python-modules/sentry-sdk/default.nix6
-rw-r--r--pkgs/development/python-modules/setupmeta/default.nix4
-rw-r--r--pkgs/development/python-modules/setuptools-rust/default.nix4
-rw-r--r--pkgs/development/python-modules/shapely/default.nix4
-rw-r--r--pkgs/development/python-modules/shapely/library-paths.patch212
-rw-r--r--pkgs/development/python-modules/shiv/default.nix13
-rw-r--r--pkgs/development/python-modules/signedjson/default.nix49
-rw-r--r--pkgs/development/python-modules/simplisafe-python/default.nix10
-rw-r--r--pkgs/development/python-modules/sjcl/default.nix42
-rw-r--r--pkgs/development/python-modules/skia-pathops/default.nix43
-rw-r--r--pkgs/development/python-modules/skytemple-files/default.nix7
-rw-r--r--pkgs/development/python-modules/skytemple-rust/default.nix21
-rw-r--r--pkgs/development/python-modules/skytemple-ssb-debugger/default.nix4
-rw-r--r--pkgs/development/python-modules/slack-sdk/default.nix6
-rw-r--r--pkgs/development/python-modules/slicer/default.nix6
-rw-r--r--pkgs/development/python-modules/snapcast/default.nix16
-rw-r--r--pkgs/development/python-modules/snowflake-connector-python/default.nix4
-rw-r--r--pkgs/development/python-modules/spglib/default.nix20
-rw-r--r--pkgs/development/python-modules/sphinx-better-theme/default.nix45
-rw-r--r--pkgs/development/python-modules/spyder-kernels/default.nix4
-rw-r--r--pkgs/development/python-modules/spyder/default.nix102
-rw-r--r--pkgs/development/python-modules/sqlalchemy-mixins/default.nix6
-rw-r--r--pkgs/development/python-modules/sqlite-utils/default.nix11
-rw-r--r--pkgs/development/python-modules/sqlmap/default.nix4
-rw-r--r--pkgs/development/python-modules/ssh-mitm/default.nix58
-rw-r--r--pkgs/development/python-modules/stripe/default.nix4
-rw-r--r--pkgs/development/python-modules/superqt/default.nix6
-rw-r--r--pkgs/development/python-modules/tempest/default.nix6
-rw-r--r--pkgs/development/python-modules/tensorflow-metadata/default.nix6
-rw-r--r--pkgs/development/python-modules/tesla-powerwall/default.nix42
-rw-r--r--pkgs/development/python-modules/testtools/default.nix7
-rw-r--r--pkgs/development/python-modules/textual/default.nix29
-rw-r--r--pkgs/development/python-modules/timetagger/default.nix19
-rw-r--r--pkgs/development/python-modules/tldextract/default.nix6
-rw-r--r--pkgs/development/python-modules/torchmetrics/default.nix78
-rw-r--r--pkgs/development/python-modules/total-connect-client/default.nix4
-rw-r--r--pkgs/development/python-modules/treq/default.nix38
-rw-r--r--pkgs/development/python-modules/trimesh/default.nix4
-rw-r--r--pkgs/development/python-modules/trytond/default.nix61
-rw-r--r--pkgs/development/python-modules/ttp-templates/default.nix50
-rw-r--r--pkgs/development/python-modules/tubeup/default.nix4
-rw-r--r--pkgs/development/python-modules/tweepy/default.nix6
-rw-r--r--pkgs/development/python-modules/twisted/default.nix23
-rw-r--r--pkgs/development/python-modules/txaio/default.nix2
-rw-r--r--pkgs/development/python-modules/txtorcon/default.nix2
-rw-r--r--pkgs/development/python-modules/typecode/default.nix7
-rw-r--r--pkgs/development/python-modules/types-dateutil/default.nix4
-rw-r--r--pkgs/development/python-modules/types-pytz/default.nix4
-rw-r--r--pkgs/development/python-modules/types-tabulate/default.nix4
-rw-r--r--pkgs/development/python-modules/types-toml/default.nix4
-rw-r--r--pkgs/development/python-modules/uasiren/default.nix58
-rw-r--r--pkgs/development/python-modules/ufo2ft/default.nix4
-rw-r--r--pkgs/development/python-modules/ufoLib2/default.nix3
-rw-r--r--pkgs/development/python-modules/uharfbuzz/default.nix2
-rw-r--r--pkgs/development/python-modules/ujson/default.nix8
-rw-r--r--pkgs/development/python-modules/ukrainealarm/default.nix58
-rw-r--r--pkgs/development/python-modules/urwid/default.nix5
-rw-r--r--pkgs/development/python-modules/validobj/default.nix31
-rw-r--r--pkgs/development/python-modules/vallox-websocket-api/default.nix42
-rw-r--r--pkgs/development/python-modules/voluptuous/default.nix26
-rw-r--r--pkgs/development/python-modules/wandb/default.nix30
-rw-r--r--pkgs/development/python-modules/weasyprint/default.nix8
-rw-r--r--pkgs/development/python-modules/webssh/default.nix4
-rw-r--r--pkgs/development/python-modules/weconnect-mqtt/default.nix4
-rw-r--r--pkgs/development/python-modules/weconnect/default.nix4
-rw-r--r--pkgs/development/python-modules/werkzeug/1.nix62
-rw-r--r--pkgs/development/python-modules/whispers/default.nix65
-rw-r--r--pkgs/development/python-modules/widgetsnbextension/default.nix11
-rw-r--r--pkgs/development/python-modules/xdot/default.nix4
-rw-r--r--pkgs/development/python-modules/xknx/default.nix4
-rw-r--r--pkgs/development/python-modules/xmltodict/default.nix2
-rw-r--r--pkgs/development/python-modules/yalexs/default.nix4
-rw-r--r--pkgs/development/python-modules/yte/default.nix8
-rw-r--r--pkgs/development/python-modules/ytmusicapi/default.nix4
-rw-r--r--pkgs/development/python-modules/zeroconf/default.nix6
-rw-r--r--pkgs/development/python-modules/zigpy/default.nix6
-rw-r--r--pkgs/development/python-modules/zimports/default.nix24
-rw-r--r--pkgs/development/python-modules/zope_event/default.nix2
-rw-r--r--pkgs/development/python-modules/zope_lifecycleevent/default.nix4
-rw-r--r--pkgs/development/python-modules/zwave-js-server-python/default.nix4
399 files changed, 5037 insertions, 2246 deletions
diff --git a/pkgs/development/python-modules/afsapi/default.nix b/pkgs/development/python-modules/afsapi/default.nix
index 864d0caba3959..d1f6325f85073 100644
--- a/pkgs/development/python-modules/afsapi/default.nix
+++ b/pkgs/development/python-modules/afsapi/default.nix
@@ -11,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "afsapi";
-  version = "0.2.3";
+  version = "0.2.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -19,8 +19,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "wlcrs";
     repo = "python-afsapi";
-    rev = version;
-    hash = "sha256-6nmj15jCGBRkT7Ip/VGHX5IrAbhu1LUlvXuvFhvXknY=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-pNggrg97GIBBTm4rjtpx0NOZIWCGn9boB/Wss/QwF6U=";
   };
 
   SETUPTOOLS_SCM_PRETEND_VERSION = version;
diff --git a/pkgs/development/python-modules/ailment/default.nix b/pkgs/development/python-modules/ailment/default.nix
index 9f6828fd63292..498caa2045daa 100644
--- a/pkgs/development/python-modules/ailment/default.nix
+++ b/pkgs/development/python-modules/ailment/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "ailment";
-  version = "9.2.1";
+  version = "9.2.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-F0t4vVxi4KUUtIZc8FJD9+2qf1XA58haFfjmHwAQaWA=";
+    hash = "sha256-R8AaQj/Rdz8SSN2L8v8ZzIxnPQqdg/SKUB6FV9uYFLs=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/aioairzone/default.nix b/pkgs/development/python-modules/aioairzone/default.nix
index fc62525915e91..5c12501723dfb 100644
--- a/pkgs/development/python-modules/aioairzone/default.nix
+++ b/pkgs/development/python-modules/aioairzone/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "aioairzone";
-  version = "0.3.4";
+  version = "0.4.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "Noltari";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-ENdgaG30Fll5HQOTcghkmqOAiMYEY1aHRIel4Bd25Pk=";
+    hash = "sha256-fYhYqBnwvnfu2GbWUlmMmW/Xon3OE3fh+gGlnQRsCyA=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/aioamqp/compat-pamqp-3.patch b/pkgs/development/python-modules/aioamqp/compat-pamqp-3.patch
deleted file mode 100644
index 0d319eb2a0d4b..0000000000000
--- a/pkgs/development/python-modules/aioamqp/compat-pamqp-3.patch
+++ /dev/null
@@ -1,498 +0,0 @@
-From 17b5be250cb5ecf95cf4f77c8c930450d876efa6 Mon Sep 17 00:00:00 2001
-From: dzen <benoit.calvez@polyconseil.fr>
-Date: Thu, 12 Mar 2020 08:32:29 +0100
-Subject: [PATCH 1/3] Moves to pamqp 3.0
-
----
- aioamqp/channel.py        | 114 +++++++++++++++++++-------------------
- aioamqp/frame.py          |   1 -
- aioamqp/protocol.py       |  22 ++++----
- aioamqp/tests/testcase.py |   2 +-
- 4 files changed, 69 insertions(+), 70 deletions(-)
-
-diff --git a/aioamqp/channel.py b/aioamqp/channel.py
-index 7f0f402..ea164c4 100644
---- a/aioamqp/channel.py
-+++ b/aioamqp/channel.py
-@@ -9,7 +9,7 @@
- from itertools import count
- import warnings
- 
--import pamqp.specification
-+import pamqp.commands
- 
- from . import frame as amqp_frame
- from . import exceptions
-@@ -78,35 +78,35 @@ def connection_closed(self, server_code=None, server_reason=None, exception=None
- 
-     async def dispatch_frame(self, frame):
-         methods = {
--            pamqp.specification.Channel.OpenOk.name: self.open_ok,
--            pamqp.specification.Channel.FlowOk.name: self.flow_ok,
--            pamqp.specification.Channel.CloseOk.name: self.close_ok,
--            pamqp.specification.Channel.Close.name: self.server_channel_close,
--
--            pamqp.specification.Exchange.DeclareOk.name: self.exchange_declare_ok,
--            pamqp.specification.Exchange.BindOk.name: self.exchange_bind_ok,
--            pamqp.specification.Exchange.UnbindOk.name: self.exchange_unbind_ok,
--            pamqp.specification.Exchange.DeleteOk.name: self.exchange_delete_ok,
--
--            pamqp.specification.Queue.DeclareOk.name: self.queue_declare_ok,
--            pamqp.specification.Queue.DeleteOk.name: self.queue_delete_ok,
--            pamqp.specification.Queue.BindOk.name: self.queue_bind_ok,
--            pamqp.specification.Queue.UnbindOk.name: self.queue_unbind_ok,
--            pamqp.specification.Queue.PurgeOk.name: self.queue_purge_ok,
--
--            pamqp.specification.Basic.QosOk.name: self.basic_qos_ok,
--            pamqp.specification.Basic.ConsumeOk.name: self.basic_consume_ok,
--            pamqp.specification.Basic.CancelOk.name: self.basic_cancel_ok,
--            pamqp.specification.Basic.GetOk.name: self.basic_get_ok,
--            pamqp.specification.Basic.GetEmpty.name: self.basic_get_empty,
--            pamqp.specification.Basic.Deliver.name: self.basic_deliver,
--            pamqp.specification.Basic.Cancel.name: self.server_basic_cancel,
--            pamqp.specification.Basic.Ack.name: self.basic_server_ack,
--            pamqp.specification.Basic.Nack.name: self.basic_server_nack,
--            pamqp.specification.Basic.RecoverOk.name: self.basic_recover_ok,
--            pamqp.specification.Basic.Return.name: self.basic_return,
--
--            pamqp.specification.Confirm.SelectOk.name: self.confirm_select_ok,
-+            pamqp.commands.Channel.OpenOk.name: self.open_ok,
-+            pamqp.commands.Channel.FlowOk.name: self.flow_ok,
-+            pamqp.commands.Channel.CloseOk.name: self.close_ok,
-+            pamqp.commands.Channel.Close.name: self.server_channel_close,
-+
-+            pamqp.commands.Exchange.DeclareOk.name: self.exchange_declare_ok,
-+            pamqp.commands.Exchange.BindOk.name: self.exchange_bind_ok,
-+            pamqp.commands.Exchange.UnbindOk.name: self.exchange_unbind_ok,
-+            pamqp.commands.Exchange.DeleteOk.name: self.exchange_delete_ok,
-+
-+            pamqp.commands.Queue.DeclareOk.name: self.queue_declare_ok,
-+            pamqp.commands.Queue.DeleteOk.name: self.queue_delete_ok,
-+            pamqp.commands.Queue.BindOk.name: self.queue_bind_ok,
-+            pamqp.commands.Queue.UnbindOk.name: self.queue_unbind_ok,
-+            pamqp.commands.Queue.PurgeOk.name: self.queue_purge_ok,
-+
-+            pamqp.commands.Basic.QosOk.name: self.basic_qos_ok,
-+            pamqp.commands.Basic.ConsumeOk.name: self.basic_consume_ok,
-+            pamqp.commands.Basic.CancelOk.name: self.basic_cancel_ok,
-+            pamqp.commands.Basic.GetOk.name: self.basic_get_ok,
-+            pamqp.commands.Basic.GetEmpty.name: self.basic_get_empty,
-+            pamqp.commands.Basic.Deliver.name: self.basic_deliver,
-+            pamqp.commands.Basic.Cancel.name: self.server_basic_cancel,
-+            pamqp.commands.Basic.Ack.name: self.basic_server_ack,
-+            pamqp.commands.Basic.Nack.name: self.basic_server_nack,
-+            pamqp.commands.Basic.RecoverOk.name: self.basic_recover_ok,
-+            pamqp.commands.Basic.Return.name: self.basic_return,
-+
-+            pamqp.commands.Confirm.SelectOk.name: self.confirm_select_ok,
-         }
- 
-         if frame.name not in methods:
-@@ -144,7 +144,7 @@ async def _write_frame_awaiting_response(self, waiter_id, channel_id, request,
- 
-     async def open(self):
-         """Open the channel on the server."""
--        request = pamqp.specification.Channel.Open()
-+        request = pamqp.commands.Channel.Open()
-         return (await self._write_frame_awaiting_response(
-             'open', self.channel_id, request, no_wait=False, check_open=False))
- 
-@@ -159,7 +159,7 @@ async def close(self, reply_code=0, reply_text="Normal Shutdown"):
-         if not self.is_open:
-             raise exceptions.ChannelClosed("channel already closed or closing")
-         self.close_event.set()
--        request = pamqp.specification.Channel.Close(reply_code, reply_text, class_id=0, method_id=0)
-+        request = pamqp.commands.Channel.Close(reply_code, reply_text, class_id=0, method_id=0)
-         return (await self._write_frame_awaiting_response(
-             'close', self.channel_id, request, no_wait=False, check_open=False))
- 
-@@ -169,7 +169,7 @@ async def close_ok(self, frame):
-         self.protocol.release_channel_id(self.channel_id)
- 
-     async def _send_channel_close_ok(self):
--        request = pamqp.specification.Channel.CloseOk()
-+        request = pamqp.commands.Channel.CloseOk()
-         await self._write_frame(self.channel_id, request)
- 
-     async def server_channel_close(self, frame):
-@@ -183,7 +183,7 @@ async def server_channel_close(self, frame):
-         self.connection_closed(results['reply_code'], results['reply_text'])
- 
-     async def flow(self, active):
--        request = pamqp.specification.Channel.Flow(active)
-+        request = pamqp.commands.Channel.Flow(active)
-         return (await self._write_frame_awaiting_response(
-             'flow', self.channel_id, request, no_wait=False,
-             check_open=False))
-@@ -201,7 +201,7 @@ async def flow_ok(self, frame):
- 
-     async def exchange_declare(self, exchange_name, type_name, passive=False, durable=False,
-                          auto_delete=False, no_wait=False, arguments=None):
--        request = pamqp.specification.Exchange.Declare(
-+        request = pamqp.commands.Exchange.Declare(
-             exchange=exchange_name,
-             exchange_type=type_name,
-             passive=passive,
-@@ -222,7 +222,7 @@ async def exchange_declare_ok(self, frame):
-         return future
- 
-     async def exchange_delete(self, exchange_name, if_unused=False, no_wait=False):
--        request = pamqp.specification.Exchange.Delete(exchange=exchange_name, if_unused=if_unused, nowait=no_wait)
-+        request = pamqp.commands.Exchange.Delete(exchange=exchange_name, if_unused=if_unused, nowait=no_wait)
-         return await self._write_frame_awaiting_response(
-             'exchange_delete', self.channel_id, request, no_wait)
- 
-@@ -235,7 +235,7 @@ async def exchange_bind(self, exchange_destination, exchange_source, routing_key
-                       no_wait=False, arguments=None):
-         if arguments is None:
-             arguments = {}
--        request = pamqp.specification.Exchange.Bind(
-+        request = pamqp.commands.Exchange.Bind(
-             destination=exchange_destination,
-             source=exchange_source,
-             routing_key=routing_key,
-@@ -255,7 +255,7 @@ async def exchange_unbind(self, exchange_destination, exchange_source, routing_k
-         if arguments is None:
-             arguments = {}
- 
--        request = pamqp.specification.Exchange.Unbind(
-+        request = pamqp.commands.Exchange.Unbind(
-             destination=exchange_destination,
-             source=exchange_source,
-             routing_key=routing_key,
-@@ -297,7 +297,7 @@ async def queue_declare(self, queue_name=None, passive=False, durable=False,
- 
-         if not queue_name:
-             queue_name = 'aioamqp.gen-' + str(uuid.uuid4())
--        request = pamqp.specification.Queue.Declare(
-+        request = pamqp.commands.Queue.Declare(
-             queue=queue_name,
-             passive=passive,
-             durable=durable,
-@@ -327,7 +327,7 @@ async def queue_delete(self, queue_name, if_unused=False, if_empty=False, no_wai
-                if_empty:       bool, the queue is deleted if it has no messages. Raise if not.
-                no_wait:        bool, if set, the server will not respond to the method
-         """
--        request = pamqp.specification.Queue.Delete(
-+        request = pamqp.commands.Queue.Delete(
-             queue=queue_name,
-             if_unused=if_unused,
-             if_empty=if_empty,
-@@ -346,7 +346,7 @@ async def queue_bind(self, queue_name, exchange_name, routing_key, no_wait=False
-         if arguments is None:
-             arguments = {}
- 
--        request = pamqp.specification.Queue.Bind(
-+        request = pamqp.commands.Queue.Bind(
-             queue=queue_name,
-             exchange=exchange_name,
-             routing_key=routing_key,
-@@ -367,7 +367,7 @@ async def queue_unbind(self, queue_name, exchange_name, routing_key, arguments=N
-         if arguments is None:
-             arguments = {}
- 
--        request = pamqp.specification.Queue.Unbind(
-+        request = pamqp.commands.Queue.Unbind(
-             queue=queue_name,
-             exchange=exchange_name,
-             routing_key=routing_key,
-@@ -383,7 +383,7 @@ async def queue_unbind_ok(self, frame):
-         logger.debug("Queue unbound")
- 
-     async def queue_purge(self, queue_name, no_wait=False):
--        request = pamqp.specification.Queue.Purge(
-+        request = pamqp.commands.Queue.Purge(
-             queue=queue_name, nowait=no_wait
-         )
-         return (await self._write_frame_awaiting_response(
-@@ -406,7 +406,7 @@ async def basic_publish(self, payload, exchange_name, routing_key,
-         if properties is None:
-             properties = {}
- 
--        method_request = pamqp.specification.Basic.Publish(
-+        method_request = pamqp.commands.Basic.Publish(
-             exchange=exchange_name,
-             routing_key=routing_key,
-             mandatory=mandatory,
-@@ -417,7 +417,7 @@ async def basic_publish(self, payload, exchange_name, routing_key,
- 
-         header_request = pamqp.header.ContentHeader(
-             body_size=len(payload),
--            properties=pamqp.specification.Basic.Properties(**properties)
-+            properties=pamqp.commands.Basic.Properties(**properties)
-         )
-         await self._write_frame(self.channel_id, header_request, drain=False)
- 
-@@ -446,7 +446,7 @@ async def basic_qos(self, prefetch_size=0, prefetch_count=0, connection_global=F
-                                 settings should apply per-consumer channel; and global=true to mean
-                                 that the QoS settings should apply per-channel.
-         """
--        request = pamqp.specification.Basic.Qos(
-+        request = pamqp.commands.Basic.Qos(
-             prefetch_size, prefetch_count, connection_global
-         )
-         return (await self._write_frame_awaiting_response(
-@@ -490,7 +490,7 @@ async def basic_consume(self, callback, queue_name='', consumer_tag='', no_local
-         if arguments is None:
-             arguments = {}
- 
--        request = pamqp.specification.Basic.Consume(
-+        request = pamqp.commands.Basic.Consume(
-             queue=queue_name,
-             consumer_tag=consumer_tag,
-             no_local=no_local,
-@@ -561,7 +561,7 @@ async def server_basic_cancel(self, frame):
-                              callback, error)
- 
-     async def basic_cancel(self, consumer_tag, no_wait=False):
--        request = pamqp.specification.Basic.Cancel(consumer_tag, no_wait)
-+        request = pamqp.commands.Basic.Cancel(consumer_tag, no_wait)
-         return (await self._write_frame_awaiting_response(
-             'basic_cancel', self.channel_id, request, no_wait=no_wait)
-         )
-@@ -575,7 +575,7 @@ async def basic_cancel_ok(self, frame):
-         logger.debug("Cancel ok")
- 
-     async def basic_get(self, queue_name='', no_ack=False):
--        request = pamqp.specification.Basic.Get(queue=queue_name, no_ack=no_ack)
-+        request = pamqp.commands.Basic.Get(queue=queue_name, no_ack=no_ack)
-         return (await self._write_frame_awaiting_response(
-             'basic_get', self.channel_id, request, no_wait=False)
-         )
-@@ -606,11 +606,11 @@ async def basic_get_empty(self, frame):
-         future.set_exception(exceptions.EmptyQueue)
- 
-     async def basic_client_ack(self, delivery_tag, multiple=False):
--        request = pamqp.specification.Basic.Ack(delivery_tag, multiple)
-+        request = pamqp.commands.Basic.Ack(delivery_tag, multiple)
-         await self._write_frame(self.channel_id, request)
- 
-     async def basic_client_nack(self, delivery_tag, multiple=False, requeue=True):
--        request = pamqp.specification.Basic.Nack(delivery_tag, multiple, requeue)
-+        request = pamqp.commands.Basic.Nack(delivery_tag, multiple, requeue)
-         await self._write_frame(self.channel_id, request)
- 
-     async def basic_server_ack(self, frame):
-@@ -620,15 +620,15 @@ async def basic_server_ack(self, frame):
-         fut.set_result(True)
- 
-     async def basic_reject(self, delivery_tag, requeue=False):
--        request = pamqp.specification.Basic.Reject(delivery_tag, requeue)
-+        request = pamqp.commands.Basic.Reject(delivery_tag, requeue)
-         await self._write_frame(self.channel_id, request)
- 
-     async def basic_recover_async(self, requeue=True):
--        request = pamqp.specification.Basic.RecoverAsync(requeue)
-+        request = pamqp.commands.Basic.RecoverAsync(requeue)
-         await self._write_frame(self.channel_id, request)
- 
-     async def basic_recover(self, requeue=True):
--        request = pamqp.specification.Basic.Recover(requeue)
-+        request = pamqp.commands.Basic.Recover(requeue)
-         return (await self._write_frame_awaiting_response(
-             'basic_recover', self.channel_id, request, no_wait=False)
-         )
-@@ -681,7 +681,7 @@ async def publish(self, payload, exchange_name, routing_key, properties=None, ma
-             delivery_tag = next(self.delivery_tag_iter)  # pylint: disable=stop-iteration-return
-             fut = self._set_waiter('basic_server_ack_{}'.format(delivery_tag))
- 
--        method_request = pamqp.specification.Basic.Publish(
-+        method_request = pamqp.commands.Basic.Publish(
-             exchange=exchange_name,
-             routing_key=routing_key,
-             mandatory=mandatory,
-@@ -689,7 +689,7 @@ async def publish(self, payload, exchange_name, routing_key, properties=None, ma
-         )
-         await self._write_frame(self.channel_id, method_request, drain=False)
- 
--        properties = pamqp.specification.Basic.Properties(**properties)
-+        properties = pamqp.commands.Basic.Properties(**properties)
-         header_request = pamqp.header.ContentHeader(
-             body_size=len(payload), properties=properties
-         )
-@@ -710,7 +710,7 @@ async def publish(self, payload, exchange_name, routing_key, properties=None, ma
-     async def confirm_select(self, *, no_wait=False):
-         if self.publisher_confirms:
-             raise ValueError('publisher confirms already enabled')
--        request = pamqp.specification.Confirm.Select(nowait=no_wait)
-+        request = pamqp.commands.Confirm.Select(nowait=no_wait)
- 
-         return (await self._write_frame_awaiting_response(
-             'confirm_select', self.channel_id, request, no_wait)
-diff --git a/aioamqp/frame.py b/aioamqp/frame.py
-index d70cfd7..af27ab5 100644
---- a/aioamqp/frame.py
-+++ b/aioamqp/frame.py
-@@ -42,7 +42,6 @@
- import socket
- 
- import pamqp.encode
--import pamqp.specification
- import pamqp.frame
- 
- from . import exceptions
-diff --git a/aioamqp/protocol.py b/aioamqp/protocol.py
-index e111dea..f0b928d 100644
---- a/aioamqp/protocol.py
-+++ b/aioamqp/protocol.py
-@@ -5,9 +5,9 @@
- import asyncio
- import logging
- 
-+import pamqp.commands
- import pamqp.frame
- import pamqp.heartbeat
--import pamqp.specification
- 
- from . import channel as amqp_channel
- from . import constants as amqp_constants
-@@ -159,7 +159,7 @@ async def close(self, no_wait=False, timeout=None):
-         """Close connection (and all channels)"""
-         await self.ensure_open()
-         self.state = CLOSING
--        request = pamqp.specification.Connection.Close(
-+        request = pamqp.commands.Connection.Close(
-             reply_code=0,
-             reply_text='',
-             class_id=0,
-@@ -254,11 +254,11 @@ async def dispatch_frame(self, frame_channel=None, frame=None):
-         """Dispatch the received frame to the corresponding handler"""
- 
-         method_dispatch = {
--            pamqp.specification.Connection.Close.name: self.server_close,
--            pamqp.specification.Connection.CloseOk.name: self.close_ok,
--            pamqp.specification.Connection.Tune.name: self.tune,
--            pamqp.specification.Connection.Start.name: self.start,
--            pamqp.specification.Connection.OpenOk.name: self.open_ok,
-+            pamqp.commands.Connection.Close.name: self.server_close,
-+            pamqp.commands.Connection.CloseOk.name: self.close_ok,
-+            pamqp.commands.Connection.Tune.name: self.tune,
-+            pamqp.commands.Connection.Start.name: self.start,
-+            pamqp.commands.Connection.OpenOk.name: self.open_ok,
-         }
-         if frame_channel is None and frame is None:
-             frame_channel, frame = await self.get_frame()
-@@ -395,7 +395,7 @@ async def start_ok(self, client_properties, mechanism, auth, locale):
-         def credentials():
-             return '\0{LOGIN}\0{PASSWORD}'.format(**auth)
- 
--        request = pamqp.specification.Connection.StartOk(
-+        request = pamqp.commands.Connection.StartOk(
-             client_properties=client_properties,
-             mechanism=mechanism,
-             locale=locale,
-@@ -417,7 +417,7 @@ async def server_close(self, frame):
-         self._stream_writer.close()
- 
-     async def _close_ok(self):
--        request = pamqp.specification.Connection.CloseOk()
-+        request = pamqp.commands.Connection.CloseOk()
-         await self._write_frame(0, request)
- 
-     async def tune(self, frame):
-@@ -426,7 +426,7 @@ async def tune(self, frame):
-         self.server_heartbeat = frame.heartbeat
- 
-     async def tune_ok(self, channel_max, frame_max, heartbeat):
--        request = pamqp.specification.Connection.TuneOk(
-+        request = pamqp.commands.Connection.TuneOk(
-             channel_max, frame_max, heartbeat
-         )
-         await self._write_frame(0, request)
-@@ -436,7 +436,7 @@ async def secure_ok(self, login_response):
- 
-     async def open(self, virtual_host, capabilities='', insist=False):
-         """Open connection to virtual host."""
--        request = pamqp.specification.Connection.Open(
-+        request = pamqp.commands.Connection.Open(
-             virtual_host, capabilities, insist
-         )
-         await self._write_frame(0, request)
-diff --git a/aioamqp/tests/testcase.py b/aioamqp/tests/testcase.py
-index 120104b..d6d702b 100644
---- a/aioamqp/tests/testcase.py
-+++ b/aioamqp/tests/testcase.py
-@@ -147,7 +147,7 @@ def server_version(self, amqp=None):
-         if amqp is None:
-             amqp = self.amqp
- 
--        server_version = tuple(int(x) for x in amqp.server_properties['version'].decode().split('.'))
-+        server_version = tuple(int(x) for x in amqp.server_properties['version'].split('.'))
-         return server_version
- 
-     async def check_exchange_exists(self, exchange_name):
-
-From c900f6d5e8ef273000d221d0e46ab81ed4aed2a2 Mon Sep 17 00:00:00 2001
-From: dzen <benoit.calvez@polyconseil.fr>
-Date: Wed, 25 Mar 2020 11:02:04 +0100
-Subject: [PATCH 2/3] fix pamqp version for tests on travis
-
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index a740243..2277b28 100644
---- a/setup.py
-+++ b/setup.py
-@@ -25,7 +25,7 @@
-         'aioamqp',
-     ],
-     install_requires=[
--        'pamqp>=2.2.0,<3',
-+        'pamqp>=3.0.0', # TODO(bcalvez): for tests purpose, until 3.0 is released
-     ],
-     classifiers=[
-         "Development Status :: 4 - Beta",
-
-From 836340e8d881a93b0111b9aed6f2bb2926f38de6 Mon Sep 17 00:00:00 2001
-From: dzen <benoit.calvez@polyconseil.fr>
-Date: Wed, 25 Mar 2020 11:37:45 +0100
-Subject: [PATCH 3/3] pamqp 3.0 is no more compatible with 3.5
-
----
- .travis.yml | 1 -
- setup.cfg   | 2 +-
- setup.py    | 2 +-
- 3 files changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/.travis.yml b/.travis.yml
-index 1069e7c..46d6fea 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -1,7 +1,6 @@
- language: python
- dist: bionic
- python:
--- 3.5
- - 3.6
- - 3.7-dev
- - 3.8
-diff --git a/setup.cfg b/setup.cfg
-index 0ab7d0b..d0ba16e 100644
---- a/setup.cfg
-+++ b/setup.cfg
-@@ -1,2 +1,2 @@
- [bdist_wheel]
--python-tag = py35.py36.py37.py38
-+python-tag = py36.py37.py38
-diff --git a/setup.py b/setup.py
-index 2277b28..c413078 100644
---- a/setup.py
-+++ b/setup.py
-@@ -27,6 +27,7 @@
-     install_requires=[
-         'pamqp==3.0.0a6', # TODO(bcalvez): for tests purpose, until 3.0 is released
-     ],
-+    python_requires=">=3.6",
-     classifiers=[
-         "Development Status :: 4 - Beta",
-         "Intended Audience :: Developers",
-@@ -34,7 +35,6 @@
-         "Operating System :: OS Independent",
-         "Programming Language :: Python",
-         "Programming Language :: Python :: 3",
--        "Programming Language :: Python :: 3.5",
-         "Programming Language :: Python :: 3.6",
-         "Programming Language :: Python :: 3.7",
-         "Programming Language :: Python :: 3.8",
diff --git a/pkgs/development/python-modules/aioamqp/default.nix b/pkgs/development/python-modules/aioamqp/default.nix
index a2882ce1288b0..5d8c934e4275c 100644
--- a/pkgs/development/python-modules/aioamqp/default.nix
+++ b/pkgs/development/python-modules/aioamqp/default.nix
@@ -2,43 +2,38 @@
 , buildPythonPackage
 , fetchFromGitHub
 , pamqp
-, pytest
-, asynctest
-, pyrabbit2
-, isPy27
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "aioamqp";
-  version = "0.14.0";
-  disabled = isPy27;
+  version = "0.15.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "Polyconseil";
     repo = pname;
     rev = "${pname}-${version}";
-    sha256 = "1gpfsrc2vi6w33c9zsycd2qn589pr7a222rb41r85m915283zy48";
+    hash = "sha256-fssPknJn1tLtzb+2SFyZjfdhUdD8jqkwlInoi5uaplk=";
   };
 
-  patches = [ ./compat-pamqp-3.patch ];
-
   propagatedBuildInputs = [
     pamqp
   ];
 
-  checkInputs = [
-    pytest
-    asynctest
-    pyrabbit2
-  ];
-
-  # tests assume rabbitmq server running
+  # Tests assume rabbitmq server running
   doCheck = false;
 
+  pythonImportsCheck = [
+    "aioamqp"
+  ];
+
   meta = with lib; {
-    homepage = "https://github.com/polyconseil/aioamqp";
     description = "AMQP implementation using asyncio";
+    homepage = "https://github.com/polyconseil/aioamqp";
     license = licenses.bsd3;
-    maintainers = [ maintainers.costrouc ];
+    maintainers = with maintainers; [ costrouc ];
   };
 }
diff --git a/pkgs/development/python-modules/aiobotocore/default.nix b/pkgs/development/python-modules/aiobotocore/default.nix
index df800eb475521..199495494ab45 100644
--- a/pkgs/development/python-modules/aiobotocore/default.nix
+++ b/pkgs/development/python-modules/aiobotocore/default.nix
@@ -10,12 +10,12 @@
 
 buildPythonPackage rec {
   pname = "aiobotocore";
-  version = "2.2.0";
+  version = "2.3.0";
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-cTV5OcMCJnDXu5SDMZQUekTr/OJLFkPk5E/twe5zSbo=";
+    sha256 = "sha256-/D09YGFBC8GU0J7FReMLRGnV90dw+TespfaqReYqG/4=";
   };
 
   # relax version constraints: aiobotocore works with newer botocore versions
diff --git a/pkgs/development/python-modules/aioimaplib/default.nix b/pkgs/development/python-modules/aioimaplib/default.nix
index a94818aee5c5c..7ec2499a9f5b1 100644
--- a/pkgs/development/python-modules/aioimaplib/default.nix
+++ b/pkgs/development/python-modules/aioimaplib/default.nix
@@ -1,4 +1,6 @@
 { lib
+, pythonOlder
+, pythonAtLeast
 , asynctest
 , buildPythonPackage
 , docutils
@@ -15,6 +17,11 @@
 buildPythonPackage rec {
   pname = "aioimaplib";
   version = "0.9.0";
+  format = "setuptools";
+
+  # Check https://github.com/bamthomas/aioimaplib/issues/75
+  # for Python 3.10 support
+  disabled = pythonOlder "3.5" || pythonAtLeast "3.10";
 
   src = fetchFromGitHub {
     owner = "bamthomas";
diff --git a/pkgs/development/python-modules/aiolimiter/default.nix b/pkgs/development/python-modules/aiolimiter/default.nix
new file mode 100644
index 0000000000000..9f8f81e2fca85
--- /dev/null
+++ b/pkgs/development/python-modules/aiolimiter/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, poetry-core
+, importlib-metadata
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+, toml
+}:
+
+buildPythonPackage rec {
+  pname = "aiolimiter";
+  version = "1.0.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "mjpieters";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4wByVZoOLhrXFx9oK19GBmRcjGoJolQ3Gwx9vQV/n8s=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = lib.optionals (pythonOlder "3.8") [
+    importlib-metadata
+  ];
+
+  checkInputs = [
+    pytest-asyncio
+    pytestCheckHook
+    toml
+  ];
+
+  patches = [
+    # Switch to poetry-core, https://github.com/mjpieters/aiolimiter/pull/77
+    (fetchpatch {
+      name = "switch-to-peotry-core.patch";
+      url = "https://github.com/mjpieters/aiolimiter/commit/84a85eff42621b0daff8fcf6bb485db313faae0b.patch";
+      sha256 = "sha256-xUfJwLvMF2Xt/V1bKBFn/fjn1uyw7bGNo9RpWxtyr50=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace tox.ini \
+      --replace " --cov=aiolimiter --cov-config=tox.ini --cov-report term-missing" ""
+  '';
+
+  pythonImportsCheck = [
+    "aiolimiter"
+  ];
+
+  meta = with lib; {
+    description = "Implementation of a rate limiter for asyncio";
+    homepage = "https://github.com/mjpieters/aiolimiter";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/aiooncue/default.nix b/pkgs/development/python-modules/aiooncue/default.nix
index 3e9cc46b16b0e..728c28eddd888 100644
--- a/pkgs/development/python-modules/aiooncue/default.nix
+++ b/pkgs/development/python-modules/aiooncue/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "aiooncue";
-  version = "0.3.3";
+  version = "0.3.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "bdraco";
     repo = pname;
     rev = version;
-    hash = "sha256-rzgSvgVfpz2AVwqnat+TO+QhA3KcXV/a1HDNAP1fNPM=";
+    hash = "sha256-/Db32OomEkrBtq5lfT8zBGgvaUWnWE/sTqwNVNB9XAg=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/aioqsw/default.nix b/pkgs/development/python-modules/aioqsw/default.nix
index ae311fe4bc7b5..d788b1e8c7cb9 100644
--- a/pkgs/development/python-modules/aioqsw/default.nix
+++ b/pkgs/development/python-modules/aioqsw/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "aioqsw";
-  version = "0.0.7";
+  version = "0.0.8";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "Noltari";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-EEgEpil6/pa3gihiLZ5RrtTxP63H24VmMc8Nf1Vsrw8=";
+    hash = "sha256-FSH7MWtxYdJjCLpit2IhxXUFkGWml6P0SroUJ3iorRw=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/aioslimproto/default.nix b/pkgs/development/python-modules/aioslimproto/default.nix
index beb1652b14f02..2990659556cbb 100644
--- a/pkgs/development/python-modules/aioslimproto/default.nix
+++ b/pkgs/development/python-modules/aioslimproto/default.nix
@@ -1,12 +1,13 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, pytestCheckHook
 , pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "aioslimproto";
-  version = "1.0.1";
+  version = "2.0.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.9";
@@ -15,11 +16,17 @@ buildPythonPackage rec {
     owner = "home-assistant-libs";
     repo = pname;
     rev = version;
-    hash = "sha256-kR2PG2eivBfqu67hXr8/RRvo5EzI75e8NmG15NPGo1E=";
+    hash = "sha256-xa0LZGq0di4lnJGVMbb1Un0Ebd4vXRlbkxbatJ9GwB0=";
   };
 
-  # Module has no tests
-  doCheck = false;
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # AssertionError: assert ['mixer', 'volume', '50'] == ['volume', '50']
+    "test_msg_instantiation"
+  ];
 
   pythonImportsCheck = [
     "aioslimproto"
diff --git a/pkgs/development/python-modules/androguard/default.nix b/pkgs/development/python-modules/androguard/default.nix
index 42f37e130994f..5584f2bd6719a 100644
--- a/pkgs/development/python-modules/androguard/default.nix
+++ b/pkgs/development/python-modules/androguard/default.nix
@@ -17,7 +17,7 @@
 , nose
 , nose-timer
 , mock
-, python_magic
+, python-magic
 , codecov
 , coverage
 , qt5
@@ -70,7 +70,7 @@ buildPythonPackage rec {
     nose-timer
     pyperclip
     pyqt5
-    python_magic
+    python-magic
   ];
   inherit doCheck;
 
diff --git a/pkgs/development/python-modules/androidtv/default.nix b/pkgs/development/python-modules/androidtv/default.nix
index f116cef3dc759..2f7afc1137565 100644
--- a/pkgs/development/python-modules/androidtv/default.nix
+++ b/pkgs/development/python-modules/androidtv/default.nix
@@ -11,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "androidtv";
-  version = "0.0.66";
+  version = "0.0.67";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -20,7 +20,7 @@ buildPythonPackage rec {
     owner = "JeffLIrion";
     repo = "python-androidtv";
     rev = "v${version}";
-    hash = "sha256-gSbckVjM49nVfzpk9sfynJDx15+zQ/KgaI7oxEkXQpo=";
+    hash = "sha256-MAlKD2PDQJQaKPiMQDu1CMvn4xnxb8FmeYqzcW4hso0=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/angr/default.nix b/pkgs/development/python-modules/angr/default.nix
index 31629eab9d674..f8e3ac530f17c 100644
--- a/pkgs/development/python-modules/angr/default.nix
+++ b/pkgs/development/python-modules/angr/default.nix
@@ -46,7 +46,7 @@ in
 
 buildPythonPackage rec {
   pname = "angr";
-  version = "9.2.1";
+  version = "9.2.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -55,7 +55,7 @@ buildPythonPackage rec {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-7t4NV1udBq3tK7czuKYUsQ+9tLahFM8DlUUBT3d6bco=";
+    hash = "sha256-RcAiPzz2JUlNIGU7+6WCd5JskRYmlMee8wOcOclfb0Q=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/angrop/default.nix b/pkgs/development/python-modules/angrop/default.nix
index d32441a989c6a..d46c18f6d1773 100644
--- a/pkgs/development/python-modules/angrop/default.nix
+++ b/pkgs/development/python-modules/angrop/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "angrop";
-  version = "9.2.1";
+  version = "9.2.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-VhlsRd5IN8zF6aUU5Ji/ULkdecOpR+egU3vhYpi+KL8=";
+    hash = "sha256-bhdn3uomvegpvynR0ts4KdwFapX2xGfuwp4e57Xtcoo=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/ansible-compat/default.nix b/pkgs/development/python-modules/ansible-compat/default.nix
index 743ebab42f1e8..88ce74ad4cd0e 100644
--- a/pkgs/development/python-modules/ansible-compat/default.nix
+++ b/pkgs/development/python-modules/ansible-compat/default.nix
@@ -12,12 +12,12 @@
 
 buildPythonPackage rec {
   pname = "ansible-compat";
-  version = "2.0.2";
+  version = "2.0.3";
   format = "pyproject";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-xlGZXcMj7xRbq4V/7mVA/ryIH7cbf+r+gWPUnicxY6U=";
+    sha256 = "sha256-oRV+QFneQYefP2XV7WK/ND/lvUUoYQHi0pcf/lfjqKU=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/ansible/default.nix b/pkgs/development/python-modules/ansible/default.nix
index 0e6f26700bcd4..2e44fa4e243c7 100644
--- a/pkgs/development/python-modules/ansible/default.nix
+++ b/pkgs/development/python-modules/ansible/default.nix
@@ -20,7 +20,7 @@
 
 let
   pname = "ansible";
-  version = "5.7.0";
+  version = "5.7.1";
 in
 buildPythonPackage {
   inherit pname version;
@@ -30,7 +30,7 @@ buildPythonPackage {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-6AwOdN4XdK2ufAIzskf/crj72LXxBwd9tdC38DcNa4Y=";
+    sha256 = "sha256-kKCaNFENGU1jVWiVoiWonkqLdIua4hW1XlF6N94GOmE=";
   };
 
   postPatch = ''
@@ -78,6 +78,7 @@ buildPythonPackage {
   meta = with lib; {
     description = "Radically simple IT automation";
     homepage = "https://www.ansible.com";
+    changelog = "https://github.com/ansible-community/ansible-build-data/blob/${version}/${lib.versions.major version}/CHANGELOG-v${lib.versions.major version}.rst";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ hexa ];
   };
diff --git a/pkgs/development/python-modules/apache-beam/default.nix b/pkgs/development/python-modules/apache-beam/default.nix
index 8d774410ca355..e3545ee0e6dd0 100644
--- a/pkgs/development/python-modules/apache-beam/default.nix
+++ b/pkgs/development/python-modules/apache-beam/default.nix
@@ -5,6 +5,7 @@
 , dill
 , fastavro
 , fetchFromGitHub
+, fetchpatch
 , freezegun
 , grpcio
 , grpcio-tools
@@ -51,6 +52,15 @@ buildPythonPackage rec {
     sha256 = "sha256-FmfTxRLqXUHhhAZIxCRx2+phX0bmU5rIHaftBU4yBJY=";
   };
 
+  patches = [
+    # patch in the pyarrow.Table.to_batches(max_chunksize=...) argument fix
+    (fetchpatch {
+      url = "https://github.com/apache/beam/commit/2418a14ee99ff490d1c82944043f97f37ec97a85.patch";
+      sha256 = "sha256-G8ARBBf7nmF46P2ncnlteGFnPWq5iCqZDfuaosre9jY=";
+      stripLen = 2;
+    })
+  ];
+
   # See https://github.com/NixOS/nixpkgs/issues/156957.
   postPatch = ''
     substituteInPlace setup.py \
diff --git a/pkgs/development/python-modules/apispec/default.nix b/pkgs/development/python-modules/apispec/default.nix
index 0c1458488109c..9ad41715a2316 100644
--- a/pkgs/development/python-modules/apispec/default.nix
+++ b/pkgs/development/python-modules/apispec/default.nix
@@ -12,14 +12,14 @@
 
 buildPythonPackage rec {
   pname = "apispec";
-  version = "5.2.1";
+  version = "5.2.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-z3VMQ5pW3xLwFJ/FaQpCJ3TprDOV+2eYiCwX+8OinS0=";
+    hash = "sha256-bqZULh6//p/ZW6Ae8/UTUerGwgCpdFYsdHMFm5zSCqc=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/approvaltests/default.nix b/pkgs/development/python-modules/approvaltests/default.nix
index dd2f26e92d1ee..1a087e323c087 100644
--- a/pkgs/development/python-modules/approvaltests/default.nix
+++ b/pkgs/development/python-modules/approvaltests/default.nix
@@ -16,7 +16,7 @@
 }:
 
 buildPythonPackage rec {
-  version = "5.0.1";
+  version = "5.0.2";
   pname = "approvaltests";
   format = "setuptools";
 
@@ -27,7 +27,7 @@ buildPythonPackage rec {
     owner = "approvals";
     repo = "ApprovalTests.Python";
     rev = "refs/tags/v${version}";
-    sha256 = "sha256-lmH/nw/7woLCDepR/rDQUqwrhuLFY+TO8sdgK1+apgc=";
+    sha256 = "sha256-yEzfDbYHGm3Za4+yIk5lIWM4I+5TnqfluZj8OLN9oK0=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/archinfo/default.nix b/pkgs/development/python-modules/archinfo/default.nix
index b9b29a7167abc..59a2f9ad9c9a6 100644
--- a/pkgs/development/python-modules/archinfo/default.nix
+++ b/pkgs/development/python-modules/archinfo/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "archinfo";
-  version = "9.2.1";
+  version = "9.2.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-RWdY7tzT5wDVjAn1QIkQm8b5lIo++VzktsYZxn8taeg=";
+    hash = "sha256-r0cZXyj47HmgFVyQ3POGexeQxBiQ1xx/ptsPMwCRjHY=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/argon2_cffi/default.nix b/pkgs/development/python-modules/argon2-cffi/default.nix
index 4ecf5fbc5f0d1..ed79243a6bd17 100644
--- a/pkgs/development/python-modules/argon2_cffi/default.nix
+++ b/pkgs/development/python-modules/argon2-cffi/default.nix
@@ -13,13 +13,12 @@
 }:
 
 buildPythonPackage rec {
-  pname = "argon2_cffi";
+  pname = "argon2-cffi";
   version = "21.3.0";
   format = "flit";
 
   src = fetchPypi {
-    pname = "argon2-cffi";
-    inherit version;
+    inherit pname version;
     sha256 = "d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b";
   };
 
diff --git a/pkgs/development/python-modules/async-lru/default.nix b/pkgs/development/python-modules/async-lru/default.nix
index 69e6519b32c3d..b656b19478575 100644
--- a/pkgs/development/python-modules/async-lru/default.nix
+++ b/pkgs/development/python-modules/async-lru/default.nix
@@ -8,15 +8,15 @@
 
 buildPythonPackage rec {
   pname = "async-lru";
-  version = "unstable-2022-02-03";
+  version = "1.0.3";
 
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "aio-libs";
     repo = "async-lru";
-    rev = "3574af7691371015c47faf77e0abf8c7b06a3cdc";
-    hash = "sha256-EsadpQlRNnebp0UUybzQwzyK4zwFlortutv3VTUsprU=";
+    rev = "v${version}";
+    hash = "sha256-98ZPFSOFRnymTCfCG9OuajfxXAWyCrByyJEHhpPVPbM=";
   };
 
   postPatch = ''
@@ -32,13 +32,6 @@ buildPythonPackage rec {
     "--asyncio-mode=strict"
   ];
 
-  disabledTests = [
-    # https://github.com/aio-libs/async-lru/issues/341
-    "test_alru_cache_deco"
-    "test_alru_cache_fn_called"
-    "test_close"
-  ];
-
   pythonImportsCheck = [ "async_lru" ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/async-upnp-client/default.nix b/pkgs/development/python-modules/async-upnp-client/default.nix
index f2fc5b855c109..c80c2646b7d4c 100644
--- a/pkgs/development/python-modules/async-upnp-client/default.nix
+++ b/pkgs/development/python-modules/async-upnp-client/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "async-upnp-client";
-  version = "0.28.0";
+  version = "0.29.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "StevenLooman";
     repo = "async_upnp_client";
     rev = version;
-    sha256 = "sha256-ZyYIZLIlLQV3Yj4a+M5vZVaTe9lEsrWhBe/g9wzM1TY=";
+    sha256 = "sha256-IzT48ABfk/v8VZJRJEMU/Rsi6mJG4IvtF7HNRv6TLeA=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/atomman/default.nix b/pkgs/development/python-modules/atomman/default.nix
index 7e1738ad33ad4..cdef83e999e2b 100644
--- a/pkgs/development/python-modules/atomman/default.nix
+++ b/pkgs/development/python-modules/atomman/default.nix
@@ -13,6 +13,7 @@
 , pymatgen
 , pytest
 , pythonOlder
+, pythonAtLeast
 , requests
 , scipy
 , toolz
@@ -24,7 +25,7 @@ buildPythonPackage rec {
   pname = "atomman";
   format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.6" || pythonAtLeast "3.10";
 
   src = fetchFromGitHub {
     owner = "usnistgov";
@@ -57,8 +58,11 @@ buildPythonPackage rec {
   checkPhase = ''
     # pytestCheckHook doesn't work
     pytest tests -k "not test_rootdir and not test_version \
-      and not test_atomic_mass and not imageflags" \
-      --ignore tests/plot/test_interpolate.py
+      and not test_atomic_mass and not imageflags \
+      and not test_build_unit and not test_set_and_get_in_units \
+      and not test_set_literal and not test_scalar_model " \
+      --ignore tests/plot/test_interpolate.py \
+      --ignore tests/tools/test_vect_angle.py
   '';
 
   pythonImportsCheck = [
diff --git a/pkgs/development/python-modules/aurorapy/default.nix b/pkgs/development/python-modules/aurorapy/default.nix
index 7e59d9c8bc958..00eb71e3d7daf 100644
--- a/pkgs/development/python-modules/aurorapy/default.nix
+++ b/pkgs/development/python-modules/aurorapy/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "aurorapy";
-  version = "0.2.6";
+  version = "0.2.7";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "energievalsabbia";
     repo = pname;
     rev = version;
-    hash = "sha256-DMlzzLe94dbeHjESmLc045v7vQ//IEsngAv7TeVznHE=";
+    hash = "sha256-rGwfGq3zdoG9NCGqVN29Q4bWApk5B6CRdsW9ctWgOec=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/autobahn/default.nix b/pkgs/development/python-modules/autobahn/default.nix
index 49f18ebca4982..ff866c6364cab 100644
--- a/pkgs/development/python-modules/autobahn/default.nix
+++ b/pkgs/development/python-modules/autobahn/default.nix
@@ -1,25 +1,49 @@
 { lib
-, argon2_cffi
 , buildPythonPackage
-, cbor
+, fetchPypi
+, attrs
+, argon2-cffi
+, base58
 , cbor2
 , cffi
+, click
 , cryptography
-, fetchPypi
+, ecdsa
+  # , eth-abi
 , flatbuffers
+, jinja2
+, hkdf
+, hyperlink
+, mnemonic
 , mock
 , msgpack
 , passlib
+  # , py-ecc
+  # , py-eth-sig-utils
+, py-multihash
+, py-ubjson
 , pynacl
+, pygobject3
+, pyopenssl
+, pyqrcode
 , pytest-asyncio
+, python-snappy
 , pytestCheckHook
 , pythonOlder
+  # , pytrie
+, rlp
+, service-identity
+, spake2
 , twisted
-, py-ubjson
 , txaio
 , ujson
+  # , web3
+  # , wsaccel
+  # , xbr
+, yapf
+  # , zlmdb
 , zope_interface
-}:
+}@args:
 
 buildPythonPackage rec {
   pname = "autobahn";
@@ -34,27 +58,18 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    argon2_cffi
-    cbor
-    cbor2
-    cffi
     cryptography
-    flatbuffers
-    msgpack
-    passlib
-    py-ubjson
+    hyperlink
     pynacl
-    twisted
     txaio
-    ujson
-    zope_interface
   ];
 
   checkInputs = [
     mock
     pytest-asyncio
     pytestCheckHook
-  ];
+  ] ++ passthru.extras-require.scram
+  ++ passthru.extras-require.serialization;
 
   postPatch = ''
     substituteInPlace setup.py \
@@ -74,10 +89,23 @@ buildPythonPackage rec {
     "autobahn"
   ];
 
+  passthru.extras-require = rec {
+    all = accelerate ++ compress ++ encryption ++ nvx ++ serialization ++ scram ++ twisted ++ ui ++ xbr;
+    accelerate = [ /* wsaccel */ ];
+    compress = [ python-snappy ];
+    encryption = [ pynacl pyopenssl pyqrcode /* pytrie */ service-identity ];
+    nvx = [ cffi ];
+    scram = [ argon2-cffi cffi passlib ];
+    serialization = [ cbor2 flatbuffers msgpack ujson py-ubjson ];
+    twisted = [ attrs args.twisted zope_interface ];
+    ui = [ pygobject3 ];
+    xbr = [ base58 cbor2 click ecdsa /* eth-abi */ jinja2 hkdf mnemonic /* py-ecc py-eth-sig-utils */ py-multihash rlp spake2 twisted /* web3 xbr */ yapf /* zlmdb */ ];
+  };
+
   meta = with lib; {
     description = "WebSocket and WAMP in Python for Twisted and asyncio";
     homepage = "https://crossbar.io/autobahn";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/awkward/default.nix b/pkgs/development/python-modules/awkward/default.nix
index 2b3b1e4ce8c17..9698b445eb873 100644
--- a/pkgs/development/python-modules/awkward/default.nix
+++ b/pkgs/development/python-modules/awkward/default.nix
@@ -30,7 +30,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Manipulate JSON-like data with NumPy-like idioms";
-    homepage = "https://github.com/scikit-hep/awkward-1.0";
+    homepage = "https://github.com/scikit-hep/awkward";
     license = licenses.bsd3;
     maintainers = with maintainers; [ veprbl ];
   };
diff --git a/pkgs/development/python-modules/aws-adfs/default.nix b/pkgs/development/python-modules/aws-adfs/default.nix
index 9f4a6dcb45a04..c888a99f26418 100644
--- a/pkgs/development/python-modules/aws-adfs/default.nix
+++ b/pkgs/development/python-modules/aws-adfs/default.nix
@@ -18,7 +18,7 @@
 
 buildPythonPackage rec {
   pname = "aws-adfs";
-  version = "2.0.2";
+  version = "2.0.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -26,8 +26,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "venth";
     repo = pname;
-    rev = version;
-    hash = "sha256-T3AmPCOSeu7gvl57aHjnviy5iQAKlWy85fUOVecFRFc=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-/cOJ8k8YuwTGEXrNuPFAYvDyDKERMJf3o3nRkDLkrJE=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/aws-lambda-builders/default.nix b/pkgs/development/python-modules/aws-lambda-builders/default.nix
index 0aac1e71e7c45..6d4baf0f553e7 100644
--- a/pkgs/development/python-modules/aws-lambda-builders/default.nix
+++ b/pkgs/development/python-modules/aws-lambda-builders/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "aws-lambda-builders";
-  version = "1.14.0";
+  version = "1.16.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -18,8 +18,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "awslabs";
     repo = "aws-lambda-builders";
-    rev = "v${version}";
-    sha256 = "sha256-ypzo0cYvP8LV74cQMzHIFDk3LH0bbEB4UxPxRuqe2fc=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-XJDukyYTtnAHiHACi5gEJ9VPjqv8Y4V7oe4q3l5fpMA=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/azure-eventhub/default.nix b/pkgs/development/python-modules/azure-eventhub/default.nix
index de3ddb803aa54..feafb56323cc2 100644
--- a/pkgs/development/python-modules/azure-eventhub/default.nix
+++ b/pkgs/development/python-modules/azure-eventhub/default.nix
@@ -3,21 +3,27 @@
 , fetchPypi
 , azure-core
 , uamqp
+, pythonOlder
+, typing-extensions
 }:
 
 buildPythonPackage rec {
   pname = "azure-eventhub";
-  version = "5.7.0";
+  version = "5.9.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "6ac364e5f1c5b376604c3b5a25ad0be5e3a5f96368f590e05b47e6745f1006ee";
+    sha256 = "509c6b351db0c1674a7c33308e6ffebc5a9bd2b0a9d10bcb2fa3d0a3a47d42d0";
   };
 
   propagatedBuildInputs = [
     azure-core
     uamqp
+    typing-extensions
   ];
 
   # too complicated to set up
@@ -31,6 +37,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Microsoft Azure Event Hubs Client Library for Python";
     homepage = "https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/eventhub/azure-eventhub";
+    changelog = "https://github.com/Azure/azure-sdk-for-python/blob/azure-eventhub_${version}/sdk/eventhub/azure-eventhub/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ dotlambda ];
   };
diff --git a/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix b/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix
index 4a502ac65dbfb..df03e41d56b9f 100644
--- a/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-containerservice/default.nix
@@ -11,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-containerservice";
-  version = "19.0.0";
+  version = "19.1.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "sha256-UHkSUoNzXWomr4vczGRRXVJplVRfqDjwFczkOP2Jwsc=";
+    sha256 = "sha256-t06Cesxvjk31aDxkX2Yj0VzFubWbiAc26LzNTIgVEqs=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix b/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix
index d26033c414f1f..fc638390a3b30 100644
--- a/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-datafactory/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "azure-mgmt-datafactory";
-  version = "2.4.0";
+  version = "2.5.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    hash = "sha256-oCDh7tWsBA6z/auQm3AtkRzT9IUrq8HJ+R//HDJ+1nw=";
+    hash = "sha256-vV+VAK+lesBylrIsGB+MZCT4kW84beFSIYJZfOzPoTY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/azure-mgmt-msi/default.nix b/pkgs/development/python-modules/azure-mgmt-msi/default.nix
index 1f1a2dde37627..d36a1b985c716 100644
--- a/pkgs/development/python-modules/azure-mgmt-msi/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-msi/default.nix
@@ -1,27 +1,30 @@
 { lib
 , buildPythonPackage
+, pythonOlder
 , fetchPypi
 , msrest
-, msrestazure
 , azure-common
-, azure-mgmt-nspkg
+, azure-mgmt-core
 }:
 
 buildPythonPackage rec {
   pname = "azure-mgmt-msi";
-  version = "6.0.0";
+  version = "6.0.1";
+
+  disabled = pythonOlder "3.6";
+
+  format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "sha256-RpmYeF6LRKqu0KrjNAFAaOGxyfPuK+TImOumP+FPX2w=";
+    sha256 = "sha256-PPkQmUoBkJ8Su7h9G2/t8dVy/PT3uCYZjlf70fnY2vU=";
   };
 
   propagatedBuildInputs = [
     msrest
-    msrestazure
     azure-common
-    azure-mgmt-nspkg
+    azure-mgmt-core
   ];
 
   pythonNamespaces = [ "azure.mgmt" ];
@@ -29,9 +32,11 @@ buildPythonPackage rec {
   # has no tests
   doCheck = false;
 
+  pythonImportsCheck = [ "azure.mgmt.msi" ];
+
   meta = with lib; {
     description = "This is the Microsoft Azure MSI Management Client Library";
-    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/resources/azure-mgmt-msi";
     license = licenses.mit;
     maintainers = with maintainers; [ maxwilson ];
   };
diff --git a/pkgs/development/python-modules/azure-mgmt-network/default.nix b/pkgs/development/python-modules/azure-mgmt-network/default.nix
index 6da9e8e2e0b49..93cd52c63d196 100644
--- a/pkgs/development/python-modules/azure-mgmt-network/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-network/default.nix
@@ -5,18 +5,20 @@
 , azure-mgmt-core
 , msrest
 , msrestazure
-, isPy3k
+, pythonOlder
 }:
 
 buildPythonPackage rec {
-  version = "19.3.0";
+  version = "20.0.0";
   pname = "azure-mgmt-network";
-  disabled = !isPy3k;
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "0b6a1ccdffd76e057ab16a6c319740a0ca68d59fedf7e9c02f2437396e72aa11";
+    hash = "sha256-mnjPyCAJ+rlNgZ4umSYjfVVVg83EobZYY/zupyDjdoY=";
   };
 
   propagatedBuildInputs = [
@@ -26,12 +28,16 @@ buildPythonPackage rec {
     msrestazure
   ];
 
-  # has no tests
+  # Module has no tests
   doCheck = false;
 
-  pythonNamespaces = [ "azure.mgmt" ];
+  pythonNamespaces = [
+    "azure.mgmt"
+  ];
 
-  pythonImportsCheck = [ "azure.mgmt.network" ];
+  pythonImportsCheck = [
+    "azure.mgmt.network"
+  ];
 
   meta = with lib; {
     description = "Microsoft Azure SDK for Python";
diff --git a/pkgs/development/python-modules/azure-mgmt-recoveryservicesbackup/default.nix b/pkgs/development/python-modules/azure-mgmt-recoveryservicesbackup/default.nix
index 5baf84c1c394d..f2426586d6a0c 100644
--- a/pkgs/development/python-modules/azure-mgmt-recoveryservicesbackup/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-recoveryservicesbackup/default.nix
@@ -5,17 +5,20 @@
 , msrestazure
 , azure-common
 , azure-mgmt-core
-, azure-mgmt-nspkg
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "azure-mgmt-recoveryservicesbackup";
-  version = "4.1.1";
+  version = "4.2.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "sha256-9xF2TIAzydmviOwfveA0ZGP7Qj0HWLL6rXp4V4IDS6A=";
+    hash = "sha256-At0BP9mWJneG65FDZuQXTnikaNcEWe+GtTr9ZPri89M=";
   };
 
   propagatedBuildInputs = [
@@ -23,13 +26,14 @@ buildPythonPackage rec {
     msrestazure
     azure-common
     azure-mgmt-core
-    azure-mgmt-nspkg
   ];
 
-  # has no tests
+  # Module has no tests
   doCheck = false;
 
-  pythonImportsCheck = [ "azure.mgmt.recoveryservicesbackup" ];
+  pythonImportsCheck = [
+    "azure.mgmt.recoveryservicesbackup"
+  ];
 
   meta = with lib; {
     description = "This is the Microsoft Azure Recovery Services Backup Management Client Library";
diff --git a/pkgs/development/python-modules/azure-mgmt-redhatopenshift/default.nix b/pkgs/development/python-modules/azure-mgmt-redhatopenshift/default.nix
index f2f4587cc67eb..b2a763441a332 100644
--- a/pkgs/development/python-modules/azure-mgmt-redhatopenshift/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-redhatopenshift/default.nix
@@ -9,14 +9,14 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.0.0";
+  version = "1.1.0";
   pname = "azure-mgmt-redhatopenshift";
   disabled = isPy27; # don't feel like fixing namespace issues on python2
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "94cd41f1ebd82e40620fd3e6d88f666b5c19ac7cf8b4e8edadb9721bd7c80980";
+    sha256 = "sha256-Tq8h3fvajxIG2QjtCyHCQDE2deBDioxLLaQQek/O24U=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/azure-mgmt-resource/default.nix b/pkgs/development/python-modules/azure-mgmt-resource/default.nix
index 761472b631fff..8ac4330b45a80 100644
--- a/pkgs/development/python-modules/azure-mgmt-resource/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-resource/default.nix
@@ -8,14 +8,14 @@
 
 
 buildPythonPackage rec {
-  version = "21.0.0";
+  version = "21.1.0";
   pname = "azure-mgmt-resource";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "sha256-y9J/UhxwtA/YO/Y88XsStbwD5ecNwrbnpxtevYuQDQM=";
+    sha256 = "sha256-UpZa3jHNBZ/qKxUT1l/mFgRuQz3g5YPc9cnJvr8+vWk=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/azure-servicebus/default.nix b/pkgs/development/python-modules/azure-servicebus/default.nix
index a0864529177fc..0fd1ca89f08c3 100644
--- a/pkgs/development/python-modules/azure-servicebus/default.nix
+++ b/pkgs/development/python-modules/azure-servicebus/default.nix
@@ -3,22 +3,25 @@
 , azure-core
 , buildPythonPackage
 , fetchPypi
-, futures ? null
 , isodate
-, isPy3k
 , msrestazure
+, pythonOlder
+, six
+, typing-extensions
 , uamqp
 }:
 
 buildPythonPackage rec {
   pname = "azure-servicebus";
-  version = "7.6.0";
+  version = "7.6.1";
   format = "setuptools";
 
+  disabled = pythonOlder "3.6";
+
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "sha256-uZGxQ1Vl6wpBCMW1+80/CBuqelLV02yXf1sNlNtCpHU=";
+    hash = "sha256-wqt+uWKVklP2AxiQN9PeuOFUixtZuBUIUhN+WZBYrBI=";
   };
 
   propagatedBuildInputs = [
@@ -26,16 +29,15 @@ buildPythonPackage rec {
     azure-core
     isodate
     msrestazure
+    six
+    typing-extensions
     uamqp
-  ] ++ lib.optionals (!isPy3k) [
-    futures
   ];
 
-  # has no tests
+  # Tests require dev-tools
   doCheck = false;
 
-  # python2 will fail due to pep 420
-  pythonImportsCheck = lib.optionals isPy3k [
+  pythonImportsCheck = [
     "azure.servicebus"
   ];
 
diff --git a/pkgs/development/python-modules/azure-storage-file-share/default.nix b/pkgs/development/python-modules/azure-storage-file-share/default.nix
index c7c59fd2b9f41..754fbae5522ea 100644
--- a/pkgs/development/python-modules/azure-storage-file-share/default.nix
+++ b/pkgs/development/python-modules/azure-storage-file-share/default.nix
@@ -1,7 +1,7 @@
-{ buildPythonPackage
+{ lib
+, buildPythonPackage
 , fetchPypi
-, isPy3k
-, lib
+, pythonOlder
 
 # pythonPackages
 , azure-core
@@ -11,13 +11,15 @@
 
 buildPythonPackage rec {
   pname = "azure-storage-file-share";
-  version = "12.7.0";
-  disabled = !isPy3k;
+  version = "12.8.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "sha256-kYNugiWNlXEgryKLwrzytca/W+2481RqqUCbdJWrqDI=";
+    hash = "sha256-46OEVjMYFUa8A6Qh+yicrqUuXmUaSzsWT4maBFG6Yqg=";
   };
 
   propagatedBuildInputs = [
@@ -28,6 +30,7 @@ buildPythonPackage rec {
 
   # requires checkout from monorepo
   doCheck = false;
+
   pythonImportsCheck = [
     "azure.core"
     "azure.storage"
@@ -37,8 +40,6 @@ buildPythonPackage rec {
     description = "Microsoft Azure File Share Storage Client Library for Python";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [
-      kamadorueda
-    ];
+    maintainers = with maintainers; [ kamadorueda ];
   };
 }
diff --git a/pkgs/development/python-modules/backports-zoneinfo/default.nix b/pkgs/development/python-modules/backports-zoneinfo/default.nix
index d2b6d06c4cdbb..5fa4c6323169a 100644
--- a/pkgs/development/python-modules/backports-zoneinfo/default.nix
+++ b/pkgs/development/python-modules/backports-zoneinfo/default.nix
@@ -7,6 +7,7 @@
 , tzdata
 , hypothesis
 , pytestCheckHook
+, fetchpatch
 }:
 
 buildPythonPackage rec {
@@ -22,7 +23,25 @@ buildPythonPackage rec {
     sha256 = "sha256-00xdDOVdDanfsjQTd3yjMN2RFGel4cWRrAA3CvSnl24=";
   };
 
+  # Make sure test data update patch applies
+  prePatch = ''
+    substituteInPlace tests/data/zoneinfo_data.json --replace \"2020a\" \"2021a\"
+  '';
+
   patches = [
+    # Update test suite's test data to zoneinfo 2022a
+    # https://github.com/pganssle/zoneinfo/pull/115
+    (fetchpatch {
+      name = "backports-zoneinfo-2022a-update-test-data1.patch";
+      url = "https://github.com/pganssle/zoneinfo/pull/115/commits/837e2a0f9f1a1332e4233f83e3648fa564a9ec9e.patch";
+      sha256 = "196knwa212mr0b7zsh8papzr3f5mii87gcjjjx1r9zzvmk3g3ri0";
+    })
+    (fetchpatch {
+      name = "backports-zoneinfo-2022a-update-test-data2.patch";
+      url = "https://github.com/pganssle/zoneinfo/pull/115/commits/9fd330265b177916d6182249439bb40d5691eb58.patch";
+      sha256 = "1zxa5bkwi8hbnh4c0qv72wv6vdp5jlxqizfjsc05ymzvwa99cf75";
+    })
+
     (substituteAll {
       name = "zoneinfo-path";
       src = ./zoneinfo.patch;
diff --git a/pkgs/development/python-modules/beaker/default.nix b/pkgs/development/python-modules/beaker/default.nix
index 60823b4c077b5..c455ee50284ae 100644
--- a/pkgs/development/python-modules/beaker/default.nix
+++ b/pkgs/development/python-modules/beaker/default.nix
@@ -5,7 +5,7 @@
 , glibcLocales
 , nose
 , pylibmc
-, memcached
+, python-memcached
 , redis
 , pymongo
 , mock
@@ -42,7 +42,7 @@ buildPythonPackage rec {
 
   checkInputs = [
     glibcLocales
-    memcached
+    python-memcached
     mock
     nose
     pylibmc
@@ -52,11 +52,7 @@ buildPythonPackage rec {
   ];
 
   # Can not run memcached tests because it immediately tries to connect
-  postPatch = lib.optionalString isPy3k ''
-    substituteInPlace setup.py \
-      --replace "python-memcached" "python3-memcached"
-    '' + ''
-
+  postPatch = ''
     rm tests/test_memcached.py
   '';
 
diff --git a/pkgs/development/python-modules/beancount/default.nix b/pkgs/development/python-modules/beancount/default.nix
index d4ced793f8304..6ba700cc6e24a 100644
--- a/pkgs/development/python-modules/beancount/default.nix
+++ b/pkgs/development/python-modules/beancount/default.nix
@@ -12,7 +12,7 @@
 , oauth2client
 , ply
 , pytest
-, python_magic
+, python-magic
 , requests
 }:
 
@@ -40,7 +40,7 @@ buildPythonPackage rec {
     lxml
     oauth2client
     ply
-    python_magic
+    python-magic
     requests
     # pytest really is a runtime dependency
     # https://github.com/beancount/beancount/blob/v2/setup.py#L81-L82
diff --git a/pkgs/development/python-modules/bellows/default.nix b/pkgs/development/python-modules/bellows/default.nix
index 33539e371c2a4..531f05844f54d 100644
--- a/pkgs/development/python-modules/bellows/default.nix
+++ b/pkgs/development/python-modules/bellows/default.nix
@@ -17,14 +17,14 @@
 
 buildPythonPackage rec {
   pname = "bellows";
-  version = "0.29.0";
+  version = "0.30.0";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = "zigpy";
     repo = "bellows";
-    rev = version;
-    sha256 = "sha256-coIrI3C6Wnn8Of/IHAlvZgkcBBf9OBQt5Ir6YOXCf0c=";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-epsE/VKK6LwMVbkx5PWgAxZ62PO4udCFr3jYi0MrUpI=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/bitarray/default.nix b/pkgs/development/python-modules/bitarray/default.nix
index d5806d77112d5..79ac6475ae6a0 100644
--- a/pkgs/development/python-modules/bitarray/default.nix
+++ b/pkgs/development/python-modules/bitarray/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "bitarray";
-  version = "2.4.1";
+  version = "2.5.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-+uygP5eemSzHb3QGr365eVyxEbjYlpyJGgMr10l8h9o=";
+    sha256 = "sha256-jTj2B1EAgJmmWdWs+zXvQVAYPv/Vsr+mwQGZJw3fTJw=";
   };
 
   checkPhase = ''
@@ -23,7 +23,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Efficient arrays of booleans";
     homepage = "https://github.com/ilanschnell/bitarray";
-    changelog = "https://github.com/ilanschnell/bitarray/blob/master/CHANGE_LOG";
+    changelog = "https://github.com/ilanschnell/bitarray/raw/${version}/CHANGE_LOG";
     license = licenses.psfl;
     maintainers = [ maintainers.bhipple ];
   };
diff --git a/pkgs/development/python-modules/bleach/default.nix b/pkgs/development/python-modules/bleach/default.nix
index 6d3c7fffe6adc..fce105163a54f 100644
--- a/pkgs/development/python-modules/bleach/default.nix
+++ b/pkgs/development/python-modules/bleach/default.nix
@@ -11,12 +11,12 @@
 
 buildPythonPackage rec {
   pname = "bleach";
-  version = "4.1.0";
+  version = "5.0.0";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-CQDYs366YagC7kCsAGH4wrXe4pwZJ90dIz4HXr9acdo=";
+    hash = "sha256-xtbMBUvcnIO0i4CD4jbl8A8jhChmbSzi4IPqpf1WhWU=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/blocksat-cli/default.nix b/pkgs/development/python-modules/blocksat-cli/default.nix
index 4c5b96bce5382..8652dbdc54416 100644
--- a/pkgs/development/python-modules/blocksat-cli/default.nix
+++ b/pkgs/development/python-modules/blocksat-cli/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "blocksat-cli";
-  version = "0.4.2";
+  version = "0.4.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-hz5BGE+gqOrPiXvmeOTOecm2RUrTvM/xxvV3cnO2QSc=";
+    sha256 = "sha256-HHalq64pgjobnPwjXMi57OumHxOuf7wjuw0d6arMoAI=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/bond-api/default.nix b/pkgs/development/python-modules/bond-api/default.nix
index a685c01fbc0fc..555caa6033ca2 100644
--- a/pkgs/development/python-modules/bond-api/default.nix
+++ b/pkgs/development/python-modules/bond-api/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "bond-api";
-  version = "0.1.16";
+  version = "0.1.17";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "prystupa";
     repo = "bond-api";
     rev = "v${version}";
-    sha256 = "1nqf090b14nd7an2n776mb37yskddfnihmas2fy56pxclwvwqr9n";
+    hash = "sha256-fuVYyDy3fG+XobFe2GCzMWRWPk8VDPLU4RHJzcF5MLg=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/boolean-py/default.nix b/pkgs/development/python-modules/boolean-py/default.nix
index dc1b1be0d81b2..3ac516e5e1b72 100644
--- a/pkgs/development/python-modules/boolean-py/default.nix
+++ b/pkgs/development/python-modules/boolean-py/default.nix
@@ -1,21 +1,36 @@
-{ lib, buildPythonPackage, fetchFromGitHub
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
-  pname = "boolean.py";
-  version = "3.8";
+  pname = "boolean-py";
+  version = "4.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "bastikr";
     repo = "boolean.py";
     rev = "v${version}";
-    sha256 = "02jznrfrihhk69ai1vnh26s3rshl4kfc2id7li6xccavc2ws5y3b";
+    hash = "sha256-i6aNzGDhZip9YHXLiuh9crGm2qT2toBU2xze4PDLleg=";
   };
 
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "boolean"
+  ];
+
   meta = with lib; {
-    homepage = "https://github.com/bastikr/boolean.py";
     description = "Implements boolean algebra in one module";
+    homepage = "https://github.com/bastikr/boolean.py";
     license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
   };
-
 }
diff --git a/pkgs/development/python-modules/breezy/default.nix b/pkgs/development/python-modules/breezy/default.nix
index 3c24d5f31924a..64774a70867a2 100644
--- a/pkgs/development/python-modules/breezy/default.nix
+++ b/pkgs/development/python-modules/breezy/default.nix
@@ -3,23 +3,36 @@
 , fetchPypi
 , configobj
 , patiencediff
-, six
+, fastbencode
 , fastimport
 , dulwich
 , launchpadlib
 , testtools
+, pythonOlder
+, installShellFiles
 }:
 
 buildPythonPackage rec {
   pname = "breezy";
-  version = "3.2.1";
+  version = "3.2.2";
+
+  disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-4LJo6xoooq8EUoDDfQIa4y1/8XX0ybmfM6rX2wsp2Fw=";
+    sha256 = "sha256-GHpuRSCN0F2BdQc2cgyDcQz0gJT1R+xAgcVxJZVZpNU=";
   };
 
-  propagatedBuildInputs = [ configobj patiencediff six fastimport dulwich launchpadlib ];
+  nativeBuildInputs = [ installShellFiles ];
+
+  propagatedBuildInputs = [
+    configobj
+    fastbencode
+    patiencediff
+    fastimport
+    dulwich
+    launchpadlib
+  ];
 
   checkInputs = [ testtools ];
 
@@ -29,6 +42,8 @@ buildPythonPackage rec {
   # symlink for bazaar compatibility
   postInstall = ''
     ln -s "$out/bin/brz" "$out/bin/bzr"
+
+    installShellCompletion --cmd brz --bash contrib/bash/brz
   '';
 
   pythonImportsCheck = [ "breezy" ];
@@ -36,7 +51,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Friendly distributed version control system";
     homepage = "https://www.breezy-vcs.org/";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     maintainers = [ maintainers.marsam ];
   };
 }
diff --git a/pkgs/development/python-modules/browser-cookie3/default.nix b/pkgs/development/python-modules/browser-cookie3/default.nix
index 163c0e4a15ad6..a452c310e43dd 100644
--- a/pkgs/development/python-modules/browser-cookie3/default.nix
+++ b/pkgs/development/python-modules/browser-cookie3/default.nix
@@ -11,14 +11,14 @@
 
 buildPythonPackage rec {
   pname = "browser-cookie3";
-  version = "0.14.0";
+  version = "0.14.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-kWYMl/JZxonLfT0u/13bXz0MlC36jssWWq/i05FDpOA=";
+    hash = "sha256-2cMWFyHK+7M99Z9O7PiKue37c5XVBe/n88AF5ax7A2s=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/brunt/default.nix b/pkgs/development/python-modules/brunt/default.nix
new file mode 100644
index 0000000000000..1c11e92b2346d
--- /dev/null
+++ b/pkgs/development/python-modules/brunt/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, aiohttp
+, requests
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "brunt";
+  version = "1.2.0";
+
+  disabled = pythonOlder "3.8";
+
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "e704627dc7b9c0a50c67ae90f1d320b14f99f2b2fc9bf1ef0461b141dcf1bce9";
+  };
+
+  postPatch = ''
+    sed -i '/--cov/d' setup.cfg
+  '';
+
+  propagatedBuildInputs = [
+    aiohttp
+    requests
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  # tests require Brunt hardware
+  doCheck = false;
+
+  pythonImportsCheck = [ "brunt" ];
+
+  meta = {
+    description = "Unofficial Python SDK for Brunt";
+    homepage = "https://github.com/eavanvalkenburg/brunt-api";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/buildbot/default.nix b/pkgs/development/python-modules/buildbot/default.nix
index 743c9f2c4b117..2eff37314e83d 100644
--- a/pkgs/development/python-modules/buildbot/default.nix
+++ b/pkgs/development/python-modules/buildbot/default.nix
@@ -53,7 +53,7 @@ let
       unidiff
     ]
       # tls
-      ++ twisted.extras.tls;
+      ++ twisted.extras-require.tls;
 
     checkInputs = [
       treq
diff --git a/pkgs/development/python-modules/cachy/default.nix b/pkgs/development/python-modules/cachy/default.nix
index 278dd5a8ae60e..c88067146f344 100644
--- a/pkgs/development/python-modules/cachy/default.nix
+++ b/pkgs/development/python-modules/cachy/default.nix
@@ -1,6 +1,6 @@
 { lib, buildPythonPackage, fetchPypi
 , redis
-, memcached
+, python-memcached
 , msgpack
 }:
 
@@ -15,7 +15,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     redis
-    memcached
+    python-memcached
     msgpack
   ];
 
diff --git a/pkgs/development/python-modules/casbin/default.nix b/pkgs/development/python-modules/casbin/default.nix
index f09b2ab66307e..f38d9aa634ad9 100644
--- a/pkgs/development/python-modules/casbin/default.nix
+++ b/pkgs/development/python-modules/casbin/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "casbin";
-  version = "1.16.3";
+  version = "1.16.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
     owner = pname;
     repo = "pycasbin";
     rev = "refs/tags/v${version}";
-    sha256 = "sha256-7URIk76iQ1u59RM1VeqO5qqTg+0kCPtsP+2Y5CxCZ3I=";
+    sha256 = "sha256-/zIx1GlzAnQf0t2d8ME+bi2CZGj6Qr9f5Z4afrQD8FY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/chainer/default.nix b/pkgs/development/python-modules/chainer/default.nix
index 1b40d506abc1d..1585d6d5e895c 100644
--- a/pkgs/development/python-modules/chainer/default.nix
+++ b/pkgs/development/python-modules/chainer/default.nix
@@ -8,7 +8,6 @@ buildPythonPackage rec {
   version = "7.8.1";
   disabled = !isPy3k; # python2.7 abandoned upstream
 
-  # no tests in Pypi tarball
   src = fetchFromGitHub {
     owner = "chainer";
     repo = "chainer";
@@ -16,11 +15,6 @@ buildPythonPackage rec {
     sha256 = "1n07zjzc4g92m1sbgxvnansl0z00y4jnhma2mw06vnahs7s9nrf6";
   };
 
-  checkInputs = [
-    pytestCheckHook
-    mock
-  ];
-
   propagatedBuildInputs = [
     filelock
     protobuf
@@ -28,8 +22,21 @@ buildPythonPackage rec {
     typing-extensions
   ] ++ lib.optionals cudaSupport [ cupy ];
 
+  checkInputs = [
+    pytestCheckHook
+    mock
+  ];
+
   pytestFlagsArray = [ "tests/chainer_tests/utils_tests" ];
 
+  preCheck = ''
+    # cf. https://github.com/chainer/chainer/issues/8621
+    export CHAINER_WARN_VERSION_MISMATCH=0
+
+    # ignore pytest warnings not listed
+    rm setup.cfg
+  '';
+
   disabledTests = [
     "gpu"
     "cupy"
@@ -39,8 +46,6 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "A flexible framework of neural networks for deep learning";
     homepage = "https://chainer.org/";
-    # Un-break me when updating chainer next time!
-    broken = cudaSupport && (lib.versionAtLeast cupy.version "8.0.0");
     license = licenses.mit;
     maintainers = with maintainers; [ hyphon81 ];
   };
diff --git a/pkgs/development/python-modules/chiavdf/default.nix b/pkgs/development/python-modules/chiavdf/default.nix
index a4bd20f9cd6a8..819b6fdcda39c 100644
--- a/pkgs/development/python-modules/chiavdf/default.nix
+++ b/pkgs/development/python-modules/chiavdf/default.nix
@@ -14,12 +14,12 @@
 
 buildPythonPackage rec {
   pname = "chiavdf";
-  version = "1.0.6";
+  version = "1.0.7";
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-Ri7j/T0nnZFml4kC0qIQkyYRJBPZMhTYxolW/A25030=";
+    hash = "sha256-956517eGqRSLg+Y4ybmASiZoypgpYn/D9lbPA4Rcfts=";
   };
 
   patches = [
diff --git a/pkgs/development/python-modules/cirq-core/default.nix b/pkgs/development/python-modules/cirq-core/default.nix
index 92045eb3e3ef4..74f8e488fd925 100644
--- a/pkgs/development/python-modules/cirq-core/default.nix
+++ b/pkgs/development/python-modules/cirq-core/default.nix
@@ -30,7 +30,7 @@
 
 buildPythonPackage rec {
   pname = "cirq-core";
-  version = "0.13.1";
+  version = "0.14.1";
 
   disabled = pythonOlder "3.6";
 
@@ -38,32 +38,17 @@ buildPythonPackage rec {
     owner = "quantumlib";
     repo = "cirq";
     rev = "v${version}";
-    sha256 = "sha256-MVfJ8iEeW8gFvCNTqrWfYpNNYuDAufHgcjd7Nh3qp8U=";
+    sha256 = "sha256-cIDwV3IBXrTJ4jC1/HYmduY3tLe/f6wj8CWZ4cnThG8=";
   };
 
   sourceRoot = "source/${pname}";
 
-  patches = [
-    # present in upstream master - remove after 0.13.1
-    (fetchpatch {
-      name = "fix-test-tolerances.part-1.patch";
-      url = "https://github.com/quantumlib/Cirq/commit/eb1d9031e55d3c8801ea44abbb6a4132b2fc5126.patch";
-      sha256 = "0ka24v6dfxnap9p07ni32z9zccbmw0lbrp5mcknmpsl12hza98xm";
-      stripLen = 1;
-    })
-    (fetchpatch {
-      name = "fix-test-tolerances.part-2.patch";
-      url = "https://github.com/quantumlib/Cirq/commit/a28d601b2bcfc393336375c53e5915fd16455395.patch";
-      sha256 = "0k2dqsm4ydn6556d40kc8j04jgjn59z4wqqg1jn1r916a7yxw493";
-      stripLen = 1;
-    })
-  ];
-
   postPatch = ''
     substituteInPlace requirements.txt \
       --replace "matplotlib~=3.0" "matplotlib" \
       --replace "networkx~=2.4" "networkx" \
-      --replace "numpy~=1.16" "numpy"
+      --replace "numpy~=1.16" "numpy" \
+      --replace "sympy<1.10" "sympy"
   '';
 
   propagatedBuildInputs = [
@@ -93,9 +78,9 @@ buildPythonPackage rec {
     freezegun
   ];
 
-  pytestFlagsArray = lib.optionals (!withContribRequires) [
+  disabledTestPaths = lib.optionals (!withContribRequires) [
     # requires external (unpackaged) libraries, so untested.
-    "--ignore=cirq/contrib/"
+    "cirq/contrib/"
   ];
   disabledTests = [
     "test_metadata_search_path" # tries to import flynt, which isn't in Nixpkgs
diff --git a/pkgs/development/python-modules/cirq/default.nix b/pkgs/development/python-modules/cirq/default.nix
index 6e428eeb4ef61..17623817e7b64 100644
--- a/pkgs/development/python-modules/cirq/default.nix
+++ b/pkgs/development/python-modules/cirq/default.nix
@@ -1,4 +1,5 @@
 { buildPythonPackage
+, fetchpatch
 , cirq-aqt
 , cirq-core
 , cirq-google
@@ -14,6 +15,14 @@ buildPythonPackage rec {
   pname = "cirq";
   inherit (cirq-core) version src meta;
 
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/quantumlib/Cirq/commit/b832db606e5f1850b1eda168a6d4a8e77d8ec711.patch";
+      name = "pr-5330-prevent-implicit-packages.patch";
+      sha256 = "sha256-HTEH3fFxPiBedaz5GxZjXayvoiazwHysKZIOzqwZmbg=";
+    })
+  ];
+
   propagatedBuildInputs = [
     cirq-aqt
     cirq-core
diff --git a/pkgs/development/python-modules/ciscoconfparse/default.nix b/pkgs/development/python-modules/ciscoconfparse/default.nix
index 49b36a5c6582c..535c46fc40aa6 100644
--- a/pkgs/development/python-modules/ciscoconfparse/default.nix
+++ b/pkgs/development/python-modules/ciscoconfparse/default.nix
@@ -1,24 +1,27 @@
 { lib
 , buildPythonPackage
-, fetchFromGitHub
-, poetry-core
-, passlib
 , dnspython
+, fetchFromGitHub
 , loguru
-, toml
+, passlib
+, poetry-core
 , pytestCheckHook
+, pythonOlder
+, toml
 }:
 
 buildPythonPackage rec {
   pname = "ciscoconfparse";
-  version = "1.6.36";
+  version = "1.6.40";
   format = "pyproject";
 
+  disabled = pythonOlder "3.7";
+
   src = fetchFromGitHub {
     owner = "mpenning";
     repo = pname;
     rev = version;
-    sha256 = "sha256-nIuuqAxz8eHEQRuH8nfYVQ+vGMmcDcARJLizoI5Mty8=";
+    hash = "sha256-2j1AlCIwTxIjotZ0fSt1zhsgPfJTqJukZ6KQvh74NJ8=";
   };
 
   postPatch = ''
@@ -45,17 +48,19 @@ buildPythonPackage rec {
   ];
 
   disabledTests = [
+    # Tests require network access
     "test_dns_lookup"
     "test_reverse_dns_lookup"
   ];
 
-  pythonImportsCheck = [ "ciscoconfparse" ];
+  pythonImportsCheck = [
+    "ciscoconfparse"
+  ];
 
   meta = with lib; {
-    description =
-      "Parse, Audit, Query, Build, and Modify Cisco IOS-style configurations";
+    description = "Parse, Audit, Query, Build, and Modify Cisco IOS-style configurations";
     homepage = "https://github.com/mpenning/ciscoconfparse";
     license = licenses.gpl3Only;
-    maintainers = [ maintainers.astro ];
+    maintainers = with maintainers; [ astro ];
   };
 }
diff --git a/pkgs/development/python-modules/claripy/default.nix b/pkgs/development/python-modules/claripy/default.nix
index 8f66e8551edf5..e37f1ee8dbd3d 100644
--- a/pkgs/development/python-modules/claripy/default.nix
+++ b/pkgs/development/python-modules/claripy/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "claripy";
-  version = "9.2.1";
+  version = "9.2.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-pCqhSpZfX3u9vJ8Oy1yyicagBQYK5+jBVCEab0TnGA4=";
+    hash = "sha256-O2nkGIQfjGmhrqBPoMI97DsCvOUZix0VcUHwmDyF40Q=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/cle/default.nix b/pkgs/development/python-modules/cle/default.nix
index 8ee898b445e72..f626e62db0d3b 100644
--- a/pkgs/development/python-modules/cle/default.nix
+++ b/pkgs/development/python-modules/cle/default.nix
@@ -15,7 +15,7 @@
 
 let
   # The binaries are following the argr projects release cycle
-  version = "9.2.1";
+  version = "9.2.3";
 
   # Binary files from https://github.com/angr/binaries (only used for testing and only here)
   binaries = fetchFromGitHub {
@@ -37,7 +37,7 @@ buildPythonPackage rec {
     owner = "angr";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-OGdnrRFfx2LMMsw6giPC+4izWX603cYbpKHuslj4Gng=";
+    hash = "sha256-gyWeE4sF9Bmk2CNmXh90xMtXlaz/Agm7wX6sWr0Fyco=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/clickgen/default.nix b/pkgs/development/python-modules/clickgen/default.nix
index a85cee778b0b7..b74827d1971dd 100644
--- a/pkgs/development/python-modules/clickgen/default.nix
+++ b/pkgs/development/python-modules/clickgen/default.nix
@@ -1,5 +1,8 @@
 { lib
+, stdenv
 , buildPythonPackage
+, pythonOlder
+, pythonAtLeast
 , fetchFromGitHub
 , pillow
 , libX11
@@ -11,26 +14,38 @@
 
 buildPythonPackage rec {
   pname = "clickgen";
-  version = "1.1.9";
+  version = "1.2.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.8" || pythonAtLeast "3.10";
 
   src = fetchFromGitHub {
     owner = "ful1e5";
     repo = "clickgen";
     rev = "v${version}";
-    sha256 = "108f3sbramd3hhs4d84s3i3lbwllfrkvjakjq4gdmbw6xpilvm0l";
+    sha256 = "sha256-01c8SVy+J004dq5KCUe62w7i/xUTxTfl/IpvUtGQgw0=";
   };
 
   buildInputs = [ libXcursor libX11 libpng ];
 
   propagatedBuildInputs = [ pillow ];
 
-  pythonImportsCheck = [ "clickgen" ];
+  checkInputs = [ pytestCheckHook ];
+
+  postBuild = ''
+    # Needs to build xcursorgen.so
+    cd src/xcursorgen
+    make
+    cd ../..
+  '';
 
   postInstall = ''
-    install -m644 clickgen/xcursorgen.so $out/${python.sitePackages}/clickgen/xcursorgen.so
+    install -m644 src/xcursorgen/xcursorgen.so $out/${python.sitePackages}/clickgen/xcursorgen.so
+    # Copying scripts directory needed by clickgen script at $out/bin/
+    cp -R src/clickgen/scripts $out/${python.sitePackages}/clickgen/scripts
   '';
 
-  checkInputs = [ pytestCheckHook ];
+  pythonImportsCheck = [ "clickgen" ];
 
   meta = with lib; {
     homepage = "https://github.com/ful1e5/clickgen";
@@ -41,5 +56,8 @@ buildPythonPackage rec {
     '';
     license = licenses.mit;
     maintainers = with maintainers; [ AdsonCicilioti ];
+    # fails with:
+    # ld: unknown option: -zdefs
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/pkgs/development/python-modules/container-inspector/default.nix b/pkgs/development/python-modules/container-inspector/default.nix
new file mode 100644
index 0000000000000..9d4f67ca83020
--- /dev/null
+++ b/pkgs/development/python-modules/container-inspector/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, attrs
+, buildPythonPackage
+, click
+, commoncode
+, dockerfile-parse
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+, setuptools-scm
+}:
+
+buildPythonPackage rec {
+  pname = "container-inspector";
+  version = "31.0.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "nexB";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-YwtyNZsTMb8iFXo/rojvjkKUbMNRCXVamzFykpwYCOk=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  dontConfigure = true;
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = [
+    attrs
+    click
+    dockerfile-parse
+    commoncode
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "container_inspector"
+  ];
+
+  meta = with lib; {
+    description = "Suite of analysis utilities and command line tools for container images";
+    homepage = "https://github.com/nexB/container-inspector";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/contexttimer/default.nix b/pkgs/development/python-modules/contexttimer/default.nix
index 02aeec5bfcc3c..7cf41e9fcbdc5 100644
--- a/pkgs/development/python-modules/contexttimer/default.nix
+++ b/pkgs/development/python-modules/contexttimer/default.nix
@@ -25,7 +25,7 @@ buildPythonPackage rec {
     })
   ];
 
-  pythonImportCheck = [ "contexttimer" ];
+  pythonImportsCheck = [ "contexttimer" ];
 
   checkInputs = [ mock ];
 
diff --git a/pkgs/development/python-modules/crossplane/default.nix b/pkgs/development/python-modules/crossplane/default.nix
new file mode 100644
index 0000000000000..14e153cd8b281
--- /dev/null
+++ b/pkgs/development/python-modules/crossplane/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, pytestCheckHook, fetchFromGitHub }:
+
+buildPythonPackage rec {
+  pname = "crossplane";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "nginxinc";
+    repo = "crossplane";
+    rev = "v${version}";
+    sha256 = "0lv3frfvnvz5wjxwh3mwy8nbypv4i62v4bvy5fv7vd6kmbxy1q9l";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "crossplane" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nginxinc/crossplane";
+    description = "NGINX configuration file parser and builder";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/pkgs/development/python-modules/curio/default.nix b/pkgs/development/python-modules/curio/default.nix
index 1a0f4e2d9fe75..7a66e47966489 100644
--- a/pkgs/development/python-modules/curio/default.nix
+++ b/pkgs/development/python-modules/curio/default.nix
@@ -26,9 +26,10 @@ buildPythonPackage rec {
 
   disabledTests = [
      "test_aside_basic" # times out
+     "test_write_timeout" # flaky, does not always time out
      "test_aside_cancel" # fails because modifies PYTHONPATH and cant find pytest
      "test_ssl_outgoing" # touches network
-   ] ++ lib.optionals (stdenv.isDarwin) [
+   ] ++ lib.optionals stdenv.isDarwin [
      "test_unix_echo" # socket bind error on hydra when built with other packages
      "test_unix_ssl_server" # socket bind error on hydra when built with other packages
    ];
diff --git a/pkgs/development/python-modules/dash/default.nix b/pkgs/development/python-modules/dash/default.nix
index dfae5ea249d2a..064c6f2b12ffc 100644
--- a/pkgs/development/python-modules/dash/default.nix
+++ b/pkgs/development/python-modules/dash/default.nix
@@ -15,7 +15,7 @@
 
 buildPythonPackage rec {
   pname = "dash";
-  version = "2.3.1";
+  version = "2.4.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -23,8 +23,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "plotly";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-gsP/WbALUkO3AB0uuX/ByhzaeIDSUUE1Cb8Cnh4GEh0=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-7B1LEcEgUGJ/gDCDD4oURqli8I5YTJo9jl7l4E1aLVQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/databricks-connect/default.nix b/pkgs/development/python-modules/databricks-connect/default.nix
index 3475001a58b7d..1782598efd819 100644
--- a/pkgs/development/python-modules/databricks-connect/default.nix
+++ b/pkgs/development/python-modules/databricks-connect/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "databricks-connect";
-  version = "9.1.14";
+  version = "9.1.15";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-l+mTqiQPuPJfGbEVSILpCTlxAka0GeCgIXjMG4Vs82o=";
+    sha256 = "sha256-qXS/hgF2qKUtTfo9UZ5KBa9N0PHJqKA8SC/vgE46LmA=";
   };
 
   sourceRoot = ".";
diff --git a/pkgs/development/python-modules/datapoint/default.nix b/pkgs/development/python-modules/datapoint/default.nix
new file mode 100644
index 0000000000000..b5d86acf2a006
--- /dev/null
+++ b/pkgs/development/python-modules/datapoint/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, appdirs
+, pytz
+, requests
+, pytestCheckHook
+, requests-mock
+}:
+
+buildPythonPackage rec {
+  pname = "datapoint";
+  version = "0.9.8";
+
+  src = fetchFromGitHub {
+    owner = "ejep";
+    repo = "datapoint-python";
+    rev = "v${version}";
+    hash = "sha256-YC8KFTv6lnCqMfDw1LSova7XBgmKbR3TpPDAAbH9imw=";
+  };
+
+  propagatedBuildInputs = [
+    appdirs
+    pytz
+    requests
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  pytestFlagsArray = [ "tests/unit" ];
+
+  pythonImportsCheck = [ "datapoint" ];
+
+  meta = {
+    description = "Python interface to the Met Office's Datapoint API";
+    homepage = "https://github.com/ejep/datapoint-python";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/datatable/default.nix b/pkgs/development/python-modules/datatable/default.nix
index 004e47a60b5cc..2ebb488aba77f 100644
--- a/pkgs/development/python-modules/datatable/default.nix
+++ b/pkgs/development/python-modules/datatable/default.nix
@@ -6,6 +6,7 @@
 , llvm
 , pytestCheckHook
 , typesentry
+, isPy310
 }:
 
 buildPythonPackage rec {
@@ -61,5 +62,8 @@ buildPythonPackage rec {
     homepage = "https://github.com/h2oai/datatable";
     license = licenses.mpl20;
     maintainers = with maintainers; [ abbradar ];
+    # uses custom build system and adds -Wunused-variable -Werror
+    # warning: ‘dt::expr::doc_first’ defined but not used [-Wunused-variable]
+    broken = isPy310;
   };
 }
diff --git a/pkgs/development/python-modules/db-dtypes/default.nix b/pkgs/development/python-modules/db-dtypes/default.nix
index 883439aba4621..636882e4edff4 100644
--- a/pkgs/development/python-modules/db-dtypes/default.nix
+++ b/pkgs/development/python-modules/db-dtypes/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
-, fetchPypi
+, fetchpatch
+, fetchFromGitHub
 , numpy
 , packaging
 , pandas
@@ -12,11 +13,20 @@ buildPythonPackage rec {
   pname = "db-dtypes";
   version = "1.0.0";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "3070d1a8d86ff0b5d9b16f15c5fab9c18893c6b3d5723cd95ee397b169049454";
+  src = fetchFromGitHub {
+    owner = "googleapis";
+    repo = "python-db-dtypes-pandas";
+    rev = "v${version}";
+    hash = "sha256-7u/E0ICiz7LQfuplm/mkGlWrgGEPqeMwM3CUhfH6868=";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/googleapis/python-db-dtypes-pandas/commit/fb30adfd427d3df9919df00b096210ba1eb1b91d.patch";
+      sha256 = "sha256-39kZtYGbn3U1WXiDTczki5EM6SjUlSRXz8UMcdTU20g=";
+    })
+  ];
+
   propagatedBuildInputs = [
     numpy
     packaging
diff --git a/pkgs/development/python-modules/dbf/default.nix b/pkgs/development/python-modules/dbf/default.nix
index b5b6f277fd651..6c85d0def6e82 100644
--- a/pkgs/development/python-modules/dbf/default.nix
+++ b/pkgs/development/python-modules/dbf/default.nix
@@ -1,28 +1,39 @@
-{ lib, fetchPypi, buildPythonPackage, aenum, isPy3k, pythonOlder, enum34, python }:
+{ lib
+, fetchPypi
+, buildPythonPackage
+, aenum
+, pythonOlder
+, python
+}:
 
 buildPythonPackage rec {
-    pname = "dbf";
-    version = "0.99.1";
+  pname = "dbf";
+  version = "0.99.2";
+  format = "setuptools";
 
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "4ed598a3866dfe7761b8099cf53ab44cb6ed5e4a7dbffb0da8c67a4af8d62fc5";
-    };
+  disabled = pythonOlder "3.7";
 
-    propagatedBuildInputs = [ aenum ] ++ lib.optional (pythonOlder "3.4") enum34;
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-aeutAP2y+bUmUOZ39TpXULP+egeBcjyDmtoCheGzw+0=";
+  };
 
-    doCheck = !isPy3k;
-    # tests are not yet ported.
-    # https://groups.google.com/forum/#!topic/python-dbase/96rx2xmCG4w
+  propagatedBuildInputs = [
+    aenum
+  ];
 
-    checkPhase = ''
-      ${python.interpreter} dbf/test.py
-    '';
+  checkPhase = ''
+    ${python.interpreter} dbf/test.py
+  '';
 
-    meta = with lib; {
-      description = "Pure python package for reading/writing dBase, FoxPro, and Visual FoxPro .dbf files";
-      homepage    = "https://pypi.python.org/pypi/dbf";
-      license     = licenses.bsd2;
-      maintainers = with maintainers; [ vrthra ];
-    };
+  pythonImportsCheck = [
+    "dbf"
+  ];
+
+  meta = with lib; {
+    description = "Module for reading/writing dBase, FoxPro, and Visual FoxPro .dbf files";
+    homepage = "https://github.com/ethanfurman/dbf";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ vrthra ];
+  };
 }
diff --git a/pkgs/development/python-modules/debian-inspector/default.nix b/pkgs/development/python-modules/debian-inspector/default.nix
index 0da7f634d848e..1c8cee1d7186c 100644
--- a/pkgs/development/python-modules/debian-inspector/default.nix
+++ b/pkgs/development/python-modules/debian-inspector/default.nix
@@ -6,24 +6,30 @@
 , commoncode
 , pytestCheckHook
 , setuptools-scm
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "debian-inspector";
   version = "30.0.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     pname = "debian_inspector";
     inherit version;
-    sha256 = "sha256-0PT5sT6adaqgYQtWjks12ys0z1C3n116aeJaEKR/Wxg=";
+    hash = "sha256-0PT5sT6adaqgYQtWjks12ys0z1C3n116aeJaEKR/Wxg=";
   };
 
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  dontConfigure = true;
+
   nativeBuildInputs = [
     setuptools-scm
   ];
 
-  dontConfigure = true;
-
   propagatedBuildInputs = [
     chardet
     attrs
diff --git a/pkgs/development/python-modules/defcon/default.nix b/pkgs/development/python-modules/defcon/default.nix
index f40ba374d0345..12cbdf0a210df 100644
--- a/pkgs/development/python-modules/defcon/default.nix
+++ b/pkgs/development/python-modules/defcon/default.nix
@@ -5,13 +5,13 @@
 
 buildPythonPackage rec {
   pname = "defcon";
-  version = "0.10.0";
+  version = "0.10.1";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a009862a0bc3f41f2b1a1b1f80d6aeedb3a17ed77d598da09f5a1bd93e970b3c";
+    sha256 = "sha256-+nlk9xG3mOCS4xHzp54J/V+he7HNMg1aMgFeTFTrMHA=";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/devolo-home-control-api/default.nix b/pkgs/development/python-modules/devolo-home-control-api/default.nix
index 31e9da795d3a7..5485372a1e1c4 100644
--- a/pkgs/development/python-modules/devolo-home-control-api/default.nix
+++ b/pkgs/development/python-modules/devolo-home-control-api/default.nix
@@ -12,14 +12,14 @@
 
 buildPythonPackage rec {
   pname = "devolo-home-control-api";
-  version = "0.18.1";
+  version = "0.18.2";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "2Fake";
     repo = "devolo_home_control_api";
     rev = "v${version}";
-    sha256 = "sha256-Xj5k09uEVxZgG0oLbiPOBx/dALsRjqkZbLKit4X4q9Q=";
+    sha256 = "sha256-H4kLomHM0qq6LqsRMEp34oKy/4Me7AQi6dij2vraBS8=";
   };
 
   SETUPTOOLS_SCM_PRETEND_VERSION = version;
diff --git a/pkgs/development/python-modules/devolo-plc-api/default.nix b/pkgs/development/python-modules/devolo-plc-api/default.nix
index 4fbc0f06fc43b..5d44866da0eb1 100644
--- a/pkgs/development/python-modules/devolo-plc-api/default.nix
+++ b/pkgs/development/python-modules/devolo-plc-api/default.nix
@@ -15,7 +15,7 @@
 
 buildPythonPackage rec {
   pname = "devolo-plc-api";
-  version = "0.7.1";
+  version = "0.8.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -24,7 +24,7 @@ buildPythonPackage rec {
     owner = "2Fake";
     repo = "devolo_plc_api";
     rev = "v${version}";
-    sha256 = "sha256-XR/daDrnfbLBrUTTMFYtndr6+RxPwnF4qbXAdXsXKHk=";
+    sha256 = "sha256-LMwvIwbP/nRFby295ur6QTgyXLLJ8ip30V9bti27qKQ=";
   };
 
   SETUPTOOLS_SCM_PRETEND_VERSION = version;
diff --git a/pkgs/development/python-modules/diagrams/default.nix b/pkgs/development/python-modules/diagrams/default.nix
index 84d98d091356e..5708a17d6f0ea 100644
--- a/pkgs/development/python-modules/diagrams/default.nix
+++ b/pkgs/development/python-modules/diagrams/default.nix
@@ -27,8 +27,7 @@ buildPythonPackage rec {
 
   postPatch = ''
     substituteInPlace pyproject.toml \
-      --replace 'jinja2 = "^2.10"' 'jinja2 = "*"' \
-      --replace 'graphviz = ">=0.13.2,<0.17.0"' 'graphviz = "*"'
+      --replace 'graphviz = ">=0.13.2,<0.20.0"' 'graphviz = "*"'
   '';
 
   preConfigure = ''
diff --git a/pkgs/development/python-modules/django-auth-ldap/default.nix b/pkgs/development/python-modules/django-auth-ldap/default.nix
index ffd4796f2a570..b3596e1e44447 100644
--- a/pkgs/development/python-modules/django-auth-ldap/default.nix
+++ b/pkgs/development/python-modules/django-auth-ldap/default.nix
@@ -17,14 +17,14 @@
 
 buildPythonPackage rec {
   pname = "django-auth-ldap";
-  version = "4.0.0";
+  version = "4.1.0";
   format = "pyproject";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "276f79e624ce083ce13f161387f65ff1c0efe83ef8a42f2b9830d43317b15239";
+    sha256 = "sha256-d/dJ07F4B86OtWqcnI5XRv8xZWf4HVumE0ldnHSVqUk=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/django-jinja2/default.nix b/pkgs/development/python-modules/django-jinja2/default.nix
index 039a75aacee24..305e153ce602a 100644
--- a/pkgs/development/python-modules/django-jinja2/default.nix
+++ b/pkgs/development/python-modules/django-jinja2/default.nix
@@ -4,7 +4,7 @@
 
 buildPythonPackage rec {
   pname = "django-jinja";
-  version = "2.10.0";
+  version = "2.10.2";
 
   meta = {
     description = "Simple and nonobstructive jinja2 integration with Django";
@@ -14,7 +14,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ae6a3fdf1ffa7a9ef6fd2f0a59c1a68c96b29f7f00f5166375658ef392f1ed32";
+    sha256 = "sha256-v9+7VcH1pnnWmtV11VDEcH04ZjQAkVLv4BQInzxNFBI=";
   };
 
   buildInputs = [ django pytz tox ];
diff --git a/pkgs/development/python-modules/django-tastypie/default.nix b/pkgs/development/python-modules/django-tastypie/default.nix
new file mode 100644
index 0000000000000..a6c184e2d67e2
--- /dev/null
+++ b/pkgs/development/python-modules/django-tastypie/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, python-dateutil
+, python-mimeparse
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "django-tastypie";
+  version = "0.14.4";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "django-tastypie";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-O/aVi8BshOZmg9WQxrFlBEOXfgyqJKVK/QlEFG3Edqs=";
+  };
+
+  propagatedBuildInputs = [
+    python-dateutil
+    python-mimeparse
+  ];
+
+  # Tests requires a Django instance
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "tastypie"
+  ];
+
+  meta = with lib; {
+    description = "Utilities and helpers for writing Pylint plugins";
+    homepage = "https://github.com/django-tastypie/django-tastypie";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/django-versatileimagefield/default.nix b/pkgs/development/python-modules/django-versatileimagefield/default.nix
index eefda80f18e4e..01c1b8353ba88 100644
--- a/pkgs/development/python-modules/django-versatileimagefield/default.nix
+++ b/pkgs/development/python-modules/django-versatileimagefield/default.nix
@@ -3,7 +3,7 @@
 , fetchPypi
 , django
 , pillow
-, python_magic
+, python-magic
 }:
 
 buildPythonPackage rec {
@@ -14,7 +14,7 @@ buildPythonPackage rec {
     inherit pname version;
     sha256 = "6569d5c3e13c69ab8912ba5100084aa5abcdcffb8d1f5abc085b226e7bbd65b3";
   };
-  propagatedBuildInputs = [ pillow python_magic ];
+  propagatedBuildInputs = [ pillow python-magic ];
 
   checkInputs = [ django ];
 
diff --git a/pkgs/development/python-modules/django/4.nix b/pkgs/development/python-modules/django/4.nix
index db00506798115..924ece59feab2 100644
--- a/pkgs/development/python-modules/django/4.nix
+++ b/pkgs/development/python-modules/django/4.nix
@@ -17,12 +17,12 @@
 
 # tests
 , aiosmtpd
-, argon2_cffi
+, argon2-cffi
 , bcrypt
 , docutils
 , geoip2
 , jinja2
-, memcached
+, python-memcached
 , numpy
 , pillow
 , pylibmc
@@ -70,13 +70,13 @@ buildPythonPackage rec {
 
   checkInputs = [
     aiosmtpd
-    argon2_cffi
+    argon2-cffi
     asgiref
     bcrypt
     docutils
     geoip2
     jinja2
-    memcached
+    python-memcached
     numpy
     pillow
     pylibmc
diff --git a/pkgs/development/python-modules/dlinfo/default.nix b/pkgs/development/python-modules/dlinfo/default.nix
new file mode 100644
index 0000000000000..a1f3ace78275a
--- /dev/null
+++ b/pkgs/development/python-modules/dlinfo/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, setuptools-scm
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "dlinfo";
+  version = "1.2.1";
+
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5f6f43b47f3aa5fe12bd347cf536dc8fca6068c61a0a260e408bec7f6eb4bd38";
+  };
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "dlinfo" ];
+
+  meta = {
+    description = "Python wrapper for libc's dlinfo and dyld_find on Mac";
+    homepage = "https://github.com/cloudflightio/python-dlinfo";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/pkgs/development/python-modules/dnachisel/default.nix b/pkgs/development/python-modules/dnachisel/default.nix
index 0f30113ba2ffc..1c86e3bccf6bd 100644
--- a/pkgs/development/python-modules/dnachisel/default.nix
+++ b/pkgs/development/python-modules/dnachisel/default.nix
@@ -15,13 +15,13 @@
 
 buildPythonPackage rec {
   pname = "dnachisel";
-  version = "3.2.8";
+  version = "3.2.9";
 
   src = fetchFromGitHub {
     owner = "Edinburgh-Genome-Foundry";
     repo = "DnaChisel";
-    rev = "v${version}";
-    sha256 = "17jldscmsq5lwp3pnjlxg56k3vfpr7rj4qbcbzkzhphifrfgm729";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-Fg0gkI+01xIt8LQmNmRzkzd4AObg/99x34y5NclMtDQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/dparse2/default.nix b/pkgs/development/python-modules/dparse2/default.nix
new file mode 100644
index 0000000000000..d3b61574cf8a0
--- /dev/null
+++ b/pkgs/development/python-modules/dparse2/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, toml
+, pyyaml
+, packaging
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "dparse2";
+  version = "0.6.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "nexB";
+    repo = pname;
+    rev = version;
+    hash = "sha256-1tbNW7Gy7gvMnETdAM2ahHiwbhG9qvdYZggia1+7eGo=";
+  };
+
+  propagatedBuildInputs = [
+    toml
+    pyyaml
+    packaging
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Requries pipenv
+    "tests/test_parse.py"
+  ];
+
+  pythonImportsCheck = [
+    "dparse2"
+  ];
+
+  meta = with lib; {
+    description = "Module to parse Python dependency files";
+    homepage = "https://github.com/nexB/dparse2";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/ducc0/default.nix b/pkgs/development/python-modules/ducc0/default.nix
new file mode 100644
index 0000000000000..6b84db43d4d19
--- /dev/null
+++ b/pkgs/development/python-modules/ducc0/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildPythonPackage, fetchFromGitLab, pythonOlder, pytestCheckHook, pybind11, numpy }:
+
+buildPythonPackage rec {
+  pname = "ducc0";
+  version = "0.23.0";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.mpcdf.mpg.de";
+    owner = "mtr";
+    repo = "ducc";
+    rev = "ducc0_${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "dOc3TihtoRuLfniC9zQ1MEbnvGJHzFZfZ8+J8Dnw6Lk=";
+  };
+
+  buildInputs = [ pybind11 ];
+  propagatedBuildInputs = [ numpy ];
+
+  checkInputs = [ pytestCheckHook ];
+  pytestFlagsArray = [ "python/test" ];
+  pythonImportsCheck = [ "ducc0" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.mpcdf.mpg.de/mtr/ducc";
+    description = "Efficient algorithms for Fast Fourier transforms and more";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ parras ];
+  };
+}
diff --git a/pkgs/development/python-modules/dunamai/default.nix b/pkgs/development/python-modules/dunamai/default.nix
index 8b51d829c8df1..7627c0505ac20 100644
--- a/pkgs/development/python-modules/dunamai/default.nix
+++ b/pkgs/development/python-modules/dunamai/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "dunamai";
-  version = "1.11.1";
+  version = "1.12.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -18,8 +18,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "mtkennerly";
     repo = "dunamai";
-    rev = "v${version}";
-    sha256 = "sha256-nkE9QBziCQA/aN+Z0OuqJlf5FJ4fidE7u5Gt25zjX0c=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-SyHml8TIcqU7KQE4IuTZbp+Jktao7ReJHQyHV8wKeWg=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/dungeon-eos/default.nix b/pkgs/development/python-modules/dungeon-eos/default.nix
index 0b1e5ebc53f5f..f87bbf82b77b3 100644
--- a/pkgs/development/python-modules/dungeon-eos/default.nix
+++ b/pkgs/development/python-modules/dungeon-eos/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "dungeon-eos";
-  version = "0.0.4";
+  version = "0.0.5";
 
   src = fetchFromGitHub {
     owner = "SkyTemple";
     repo = pname;
     rev = version;
-    sha256 = "0hxygjk9i4qlwsxnxr52cxhqy3i62pc373z1x5sh2pas5ag59bvl";
+    sha256 = "sha256-Z1fGtslXP8zcZmVeWjRrbcM2ZJsfbrWjpLWZ49uSCRY=";
   };
 
   doCheck = false; # there are no tests
diff --git a/pkgs/development/python-modules/ecos/default.nix b/pkgs/development/python-modules/ecos/default.nix
index 35470cb8b60b2..da1f9fa510696 100644
--- a/pkgs/development/python-modules/ecos/default.nix
+++ b/pkgs/development/python-modules/ecos/default.nix
@@ -1,50 +1,49 @@
 { lib
-, pythonOlder
 , buildPythonPackage
 , fetchFromGitHub
-, pkgs
+, nose
 , numpy
+, pythonOlder
 , scipy
-  # check inputs
-, nose
 }:
 
 buildPythonPackage rec {
   pname = "ecos";
-  version = "2.0.8";
+  version = "2.0.10";
+  format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "embotech";
     repo = "ecos-python";
-    rev = version;
-    sha256 = "sha256-2OJqbcOZceeD2fO5cu9fohuUVaA2LwQOQSWR4jRv3mk=";
+    rev = "v${version}";
+    sha256 = "sha256-TPxrTyVZ1KXgPoDbZZqXT5+NEIEndg9qepujqFQwK+Q=";
     fetchSubmodules = true;
   };
 
-  prePatch = ''
-    echo '__version__ = "${version}"' >> ./src/ecos/version.py
-  '';
-
   propagatedBuildInputs = [
     numpy
     scipy
   ];
 
-  checkInputs = [ nose ];
+  checkInputs = [
+    nose
+  ];
+
   checkPhase = ''
-    # Run tests
     cd ./src
     nosetests test_interface.py test_interface_bb.py
   '';
-  pythonImportsCheck = [ "ecos" ];
+
+  pythonImportsCheck = [
+    "ecos"
+  ];
 
   meta = with lib; {
     description = "Python package for ECOS: Embedded Cone Solver";
-    downloadPage = "https://github.com/embotech/ecos-python/releases";
-    homepage = pkgs.ecos.meta.homepage;
-    license = licenses.asl20;
+    homepage = "https://github.com/embotech/ecos-python";
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ drewrisinger ];
   };
 }
diff --git a/pkgs/development/python-modules/editorconfig/default.nix b/pkgs/development/python-modules/editorconfig/default.nix
index 32e446d71a3b8..e90a6efdc63e1 100644
--- a/pkgs/development/python-modules/editorconfig/default.nix
+++ b/pkgs/development/python-modules/editorconfig/default.nix
@@ -30,7 +30,7 @@ buildPythonPackage rec {
     chmod +w -R source/tests
   '';
 
-  nativeBuildInputs = [
+  checkInputs = [
     cmake
   ];
 
@@ -46,8 +46,8 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "EditorConfig File Locator and Interpreter for Python";
-    homepage = "https://editorconfig.org";
+    homepage = "https://github.com/editorconfig/editorconfig-core-py";
     license = licenses.psfl;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/eiswarnung/default.nix b/pkgs/development/python-modules/eiswarnung/default.nix
index 87ff2a4287ac6..8bea9552b35b6 100644
--- a/pkgs/development/python-modules/eiswarnung/default.nix
+++ b/pkgs/development/python-modules/eiswarnung/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "eiswarnung";
-  version = "1.0.0";
+  version = "1.1.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.9";
@@ -20,8 +20,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "klaasnicolaas";
     repo = "python-eiswarnung";
-    rev = "v${version}";
-    hash = "sha256-Cw/xRypErasdrOZJ/0dWLl4eYH01vBI9mYm98teIdRc=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-fyxqVSZcbo/rrItad5ZTwmp4N8s0HGBdxvx3LBax/hc=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/elkm1-lib/default.nix b/pkgs/development/python-modules/elkm1-lib/default.nix
index 57c51964fc8da..40f9aa451b693 100644
--- a/pkgs/development/python-modules/elkm1-lib/default.nix
+++ b/pkgs/development/python-modules/elkm1-lib/default.nix
@@ -11,16 +11,16 @@
 
 buildPythonPackage rec {
   pname = "elkm1-lib";
-  version = "1.3.6";
+  version = "2.0.0";
   format = "pyproject";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.9";
 
   src = fetchFromGitHub {
     owner = "gwww";
     repo = "elkm1";
     rev = version;
-    hash = "sha256-aIqwb2YHw/kYHBqydelTRs2+75WimgJ+4X0BYcwogh8=";
+    hash = "sha256-o0RQgAP38W7paVJonrfj54y2OhMmTihT9xiipEyNVaM=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/emcee/default.nix b/pkgs/development/python-modules/emcee/default.nix
index f41bfae5942e4..c79adccc41f64 100644
--- a/pkgs/development/python-modules/emcee/default.nix
+++ b/pkgs/development/python-modules/emcee/default.nix
@@ -8,13 +8,13 @@
 
 buildPythonPackage rec {
   pname = "emcee";
-  version = "3.1.1";
+  version = "3.1.2";
 
   src = fetchFromGitHub {
     owner = "dfm";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "0q9dj7mihjjkcy6famzwhz1xcxxzzvm00n01w4bbm66ax9zvis52";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-MguhnLLo1zeNuMca8vWpxwysh9YJDD+IzvGQDbScK2M=";
   };
 
   SETUPTOOLS_SCM_PRETEND_VERSION = version;
diff --git a/pkgs/development/python-modules/enhancements/default.nix b/pkgs/development/python-modules/enhancements/default.nix
new file mode 100644
index 0000000000000..18fdfd29ce130
--- /dev/null
+++ b/pkgs/development/python-modules/enhancements/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, argcomplete
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+, typeguard
+}:
+
+buildPythonPackage rec {
+  pname = "enhancements";
+  version = "0.4.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "ssh-mitm";
+    repo = "python-enhancements";
+    rev = version;
+    hash = "sha256-Nff44WAQwSbkRpUHb9ANsQWWH2B819gtwQdXAjWJJls=";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    typeguard
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "enhancements"
+  ];
+
+  meta = with lib; {
+    description = "Library which extends various Python classes";
+    homepage = "https://enhancements.readthedocs.io";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/eventlet/default.nix b/pkgs/development/python-modules/eventlet/default.nix
index 096279b3453a0..d24874ac5911f 100644
--- a/pkgs/development/python-modules/eventlet/default.nix
+++ b/pkgs/development/python-modules/eventlet/default.nix
@@ -59,6 +59,8 @@ buildPythonPackage rec {
     "test_patcher_existing_locks_locked"
     # broken with pyopenssl 22.0.0
     "test_sendall_timeout"
+  ] ++ lib.optionals stdenv.isAarch64 [
+    "test_fork_after_monkey_patch"
   ];
 
   disabledTestPaths = [
diff --git a/pkgs/development/python-modules/evtx/default.nix b/pkgs/development/python-modules/evtx/default.nix
new file mode 100644
index 0000000000000..1348282f98d86
--- /dev/null
+++ b/pkgs/development/python-modules/evtx/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+, rustPlatform
+}:
+
+buildPythonPackage rec {
+  pname = "evtx";
+  version = "0.7.3";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "omerbenamram";
+    repo = "pyevtx-rs";
+    rev = version;
+    sha256 = "sha256-59iEmgF1m+Yr5k4oxZGqMs5oMZxToUFYuwQDeLEQ2jY=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    sha256 = "sha256-Q2SpJohLSQCMYmx1ZMWZ7a/NC0lPsHkwxom00qVooNM=";
+  };
+
+  nativeBuildInputs = with rustPlatform; [
+    cargoSetupHook
+    maturinBuildHook
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "evtx"
+  ];
+
+  meta = with lib; {
+    description = "Bindings for evtx";
+    homepage = "https://github.com/omerbenamram/pyevtx-rs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/exceptiongroup/default.nix b/pkgs/development/python-modules/exceptiongroup/default.nix
index ac4174b2f4554..b2a355e94d273 100644
--- a/pkgs/development/python-modules/exceptiongroup/default.nix
+++ b/pkgs/development/python-modules/exceptiongroup/default.nix
@@ -8,14 +8,14 @@
 
 buildPythonPackage rec {
   pname = "exceptiongroup";
-  version = "1.0.0rc2";
+  version = "1.0.0rc5";
   format = "flit";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-TSVLBSMb7R1DB5vc/g8dZsCrR4Pmd3oyk1X5t43jrYM=";
+    hash = "sha256-ZlQiVQuWU6zUbpzTXZM/KMUVjKTAWMU2Gc+hEpFc1p4=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/exchangelib/default.nix b/pkgs/development/python-modules/exchangelib/default.nix
index 2f3f5fe16abbc..137f034d51a01 100644
--- a/pkgs/development/python-modules/exchangelib/default.nix
+++ b/pkgs/development/python-modules/exchangelib/default.nix
@@ -26,7 +26,7 @@
 
 buildPythonPackage rec {
   pname = "exchangelib";
-  version = "4.7.2";
+  version = "4.7.3";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -34,8 +34,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "ecederstrand";
     repo = pname;
-    rev = "v${version}";
-    hash = "sha256-fdYc+fJEePgCzAkUWz7pmL/CI/O9zm5G9xh1f4bhrH4=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-79113cUVl07oeXjlDaqfdfwNZvD7EWJK8JKHsPnBRG8=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/extractcode/default.nix b/pkgs/development/python-modules/extractcode/default.nix
index 93374bd004c97..8af4cb865fd39 100644
--- a/pkgs/development/python-modules/extractcode/default.nix
+++ b/pkgs/development/python-modules/extractcode/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "extractcode";
-  version = "30.0.0";
+  version = "31.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5a660d1b9e3bae4aa87828e6947dc3b31dc2fa6705acb28a514874602b40bc90";
+    sha256 = "sha256-gIGTkum8+BKfdNiQT+ipjA3+0ngjVoQnNygsAoMRPYg=";
   };
 
   dontConfigure = true;
diff --git a/pkgs/development/python-modules/fakeredis/default.nix b/pkgs/development/python-modules/fakeredis/default.nix
index 5d45c4dc5ce38..a75f2e3da959f 100644
--- a/pkgs/development/python-modules/fakeredis/default.nix
+++ b/pkgs/development/python-modules/fakeredis/default.nix
@@ -16,14 +16,14 @@
 
 buildPythonPackage rec {
   pname = "fakeredis";
-  version = "1.7.1";
+  version = "1.7.5";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-fCxLobQuCnUzfFS3d78GcQVrRWllDj/5J+S5s4WvyOw=";
+    hash = "sha256-STdcYwmB3UBF2akuJwn81Edskfkn4CKEk+76Yl5wUTM=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/falcon/default.nix b/pkgs/development/python-modules/falcon/default.nix
index 58bbae872832e..8051fbb55bfbc 100644
--- a/pkgs/development/python-modules/falcon/default.nix
+++ b/pkgs/development/python-modules/falcon/default.nix
@@ -80,6 +80,11 @@ buildPythonPackage rec {
     "tests"
   ];
 
+  disabledTestPaths = [
+    # needs a running server
+    "tests/asgi/test_asgi_servers.py"
+  ];
+
   meta = with lib; {
     description = "An unladen web framework for building APIs and app backends";
     homepage = "https://falconframework.org/";
diff --git a/pkgs/development/python-modules/fastapi/default.nix b/pkgs/development/python-modules/fastapi/default.nix
index c3abc2163be76..63071fd9e4469 100644
--- a/pkgs/development/python-modules/fastapi/default.nix
+++ b/pkgs/development/python-modules/fastapi/default.nix
@@ -49,7 +49,7 @@ buildPythonPackage rec {
     pytest-asyncio
     sqlalchemy
     trio
-  ];
+  ] ++ passlib.extras-require.bcrypt;
 
   patches = [
     # Bump starlette, https://github.com/tiangolo/fastapi/pull/4483
diff --git a/pkgs/development/python-modules/fastbencode/default.nix b/pkgs/development/python-modules/fastbencode/default.nix
new file mode 100644
index 0000000000000..87072491cef45
--- /dev/null
+++ b/pkgs/development/python-modules/fastbencode/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, fetchPypi, python, cython }:
+
+buildPythonPackage rec {
+  pname = "fastbencode";
+  version = "0.0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-tryavlQtBmN5NSlXb0m6iJFQhVT4XQm11tXtevfgxuQ=";
+  };
+
+  nativeBuildInputs = [ cython ];
+
+  pythonImportsCheck = [ "fastbencode" ];
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest fastbencode.tests.test_suite
+  '';
+
+  meta = with lib; {
+    description = "Fast implementation of bencode";
+    homepage = "https://github.com/breezy-team/fastbencode";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/pkgs/development/python-modules/fastjsonschema/default.nix b/pkgs/development/python-modules/fastjsonschema/default.nix
index 23a552a9b4cdc..f4551b65bd3b0 100644
--- a/pkgs/development/python-modules/fastjsonschema/default.nix
+++ b/pkgs/development/python-modules/fastjsonschema/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchFromGitHub
 , pytestCheckHook
@@ -31,6 +32,8 @@ buildPythonPackage rec {
     # these tests require network access
     "remote ref"
     "definitions"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "test_compile_to_code_custom_format"  # cannot import temporary module created during test
   ];
 
   pythonImportsCheck = [
diff --git a/pkgs/development/python-modules/flametree/default.nix b/pkgs/development/python-modules/flametree/default.nix
index b4311eeb7cd68..047f2849d046b 100644
--- a/pkgs/development/python-modules/flametree/default.nix
+++ b/pkgs/development/python-modules/flametree/default.nix
@@ -10,13 +10,13 @@
 
 buildPythonPackage rec {
   pname = "flametree";
-  version = "0.1.11";
+  version = "0.1.12";
 
   src = fetchFromGitHub {
     owner = "Edinburgh-Genome-Foundry";
     repo = "Flametree";
-    rev = "v${version}";
-    sha256 = "1ynrk1ivl1vjiga0ayl8k89vs5il7i0pf9jz2ycn771c47szwk4x";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-oyiuhsYouGDKRssKc0aYIoG32H7GS6Bn4RtI7/9N158=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/flask-restful/default.nix b/pkgs/development/python-modules/flask-restful/default.nix
index 1af875d4bbc59..cefedfe7fc371 100644
--- a/pkgs/development/python-modules/flask-restful/default.nix
+++ b/pkgs/development/python-modules/flask-restful/default.nix
@@ -1,26 +1,32 @@
 { lib
+, aniso8601
+, blinker
 , buildPythonPackage
 , fetchPypi
-, aniso8601
 , flask
-, pytz
-, six
-, blinker
 , mock
 , nose
 , pytestCheckHook
+, pythonOlder
+, pytz
+, six
+, werkzeug
 }:
 
 buildPythonPackage rec {
-  pname = "Flask-RESTful";
+  pname = "flask-restful";
   version = "0.3.9";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
-    inherit pname version;
-    sha256 = "0gm5dz088v3d2k1dkcp9b3nnqpkk0fp2jly870hijj2xhc5nbv6c";
+    pname = "Flask-RESTful";
+    inherit version;
+    hash = "sha256-zOxlC4NdSBkhOMhTKa4Dc15s7VjpstnCFG1shMBvpT4=";
   };
 
-  patches = [
+  patches = lib.optionals (lib.versionAtLeast werkzeug.version "2.1.0") [
     ./werkzeug-2.1.0-compat.patch
   ];
 
@@ -32,19 +38,24 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    pytestCheckHook
+    blinker
     mock
     nose
-    blinker
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "flask_restful"
   ];
 
   meta = with lib; {
+    description = "Framework for creating REST APIs";
     homepage = "https://flask-restful.readthedocs.io";
-    description = "Simple framework for creating REST APIs";
     longDescription = ''
       Flask-RESTful provides the building blocks for creating a great
       REST API.
     '';
     license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/development/python-modules/flask-security-too/default.nix b/pkgs/development/python-modules/flask-security-too/default.nix
index 8379ec7bcfe4b..70a6b6e1d6b94 100644
--- a/pkgs/development/python-modules/flask-security-too/default.nix
+++ b/pkgs/development/python-modules/flask-security-too/default.nix
@@ -32,6 +32,7 @@
 , passlib
 
 # tests
+, argon2-cffi
 , flask-mongoengine
 , mongoengine
 , mongomock
@@ -85,6 +86,7 @@ buildPythonPackage rec {
   };
 
   checkInputs = [
+    argon2-cffi
     flask-mongoengine
     mongoengine
     mongomock
diff --git a/pkgs/development/python-modules/flux-led/default.nix b/pkgs/development/python-modules/flux-led/default.nix
index 9e1c881805e8c..590f1d9f824e5 100644
--- a/pkgs/development/python-modules/flux-led/default.nix
+++ b/pkgs/development/python-modules/flux-led/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "flux-led";
-  version = "0.28.28";
+  version = "0.28.29";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "Danielhiversen";
     repo = "flux_led";
     rev = version;
-    sha256 = "sha256-FtZHZ48XGo+0aP4ARSfzI9xzFVptYhG6CDVGTT4oDBQ=";
+    sha256 = "sha256-Hwe8eshY5j+10fARCp7fMnZf2Sxal7+7Vj5DYVPNXks=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/fontmake/default.nix b/pkgs/development/python-modules/fontmake/default.nix
new file mode 100644
index 0000000000000..a075d64406ee5
--- /dev/null
+++ b/pkgs/development/python-modules/fontmake/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, glyphslib
+, setuptools-scm
+, ufo2ft
+, fonttools
+, fontmath
+, lxml
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "fontmake";
+  version = "3.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-lD7MvZdr9CeWdoZtD3+8stVJTeQN5/AQ4miA/I2TFoE=";
+    extension = "zip";
+  };
+
+  nativeBuildInputs = [ setuptools-scm ];
+
+  propagatedBuildInputs = [
+    glyphslib
+    ufo2ft
+    fonttools
+    fontmath
+    lxml
+    setuptools
+  ];
+
+  pythonImportsCheck = [ "fontmake" ];
+
+  meta = {
+    description = "Compiles fonts from various sources (.glyphs, .ufo, designspace) into binaries formats (.otf, .ttf)";
+    homepage = "https://github.com/googlefonts/fontmake";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.BarinovMaxim ];
+  };
+}
diff --git a/pkgs/development/python-modules/fontmath/default.nix b/pkgs/development/python-modules/fontmath/default.nix
index c0e4bc85773df..2d5f90ebb6868 100644
--- a/pkgs/development/python-modules/fontmath/default.nix
+++ b/pkgs/development/python-modules/fontmath/default.nix
@@ -5,12 +5,12 @@
 
 buildPythonPackage rec {
   pname = "fontMath";
-  version = "0.9.1";
+  version = "0.9.2";
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1c5e76e135409f49b15809d0ce94dfd00850f893f86d4d6a336808dbbf292700";
+    sha256 = "sha256-TIsccR4cv0upPD0IQ5NbBmGXMTEmGvCGCL3hfeEBhAQ=";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/fonttools/default.nix b/pkgs/development/python-modules/fonttools/default.nix
index a70dfef00541b..a667f631eb184 100644
--- a/pkgs/development/python-modules/fonttools/default.nix
+++ b/pkgs/development/python-modules/fonttools/default.nix
@@ -13,11 +13,12 @@
 , sphinx
 , pytestCheckHook
 , glibcLocales
+, setuptools-scm
 }:
 
 buildPythonPackage rec {
   pname = "fonttools";
-  version = "4.30.0";
+  version = "4.33.3";
 
   disabled = pythonOlder "3.7";
 
@@ -25,9 +26,11 @@ buildPythonPackage rec {
     owner  = pname;
     repo   = pname;
     rev    = version;
-    sha256 = "1y9f071bdl66rsx42j16j5v53h85xra5qlg860rz3m054s2rmin9";
+    sha256 = "MUIZGnYwlfTat9655AOYgK5r6AvHj/xXghUvOZR8HIM=";
   };
 
+  nativeBuildInputs = [ setuptools-scm ];
+
   # all dependencies are optional, but
   # we run the checks with them
 
@@ -51,6 +54,8 @@ buildPythonPackage rec {
     unicodedata2
   ];
 
+  pythonImportsCheck = [ "fontTools" ];
+
   preCheck = ''
     # tests want to execute the "fonttools" executable from $PATH
     export PATH="$out/bin:$PATH"
@@ -72,7 +77,6 @@ buildPythonPackage rec {
     "Tests/ufoLib"
   ];
 
-
   meta = with lib; {
     homepage = "https://github.com/fonttools/fonttools";
     description = "A library to manipulate font files from Python";
diff --git a/pkgs/development/python-modules/ftputil/default.nix b/pkgs/development/python-modules/ftputil/default.nix
index e9e445f11c3dd..4cb2fe442d325 100644
--- a/pkgs/development/python-modules/ftputil/default.nix
+++ b/pkgs/development/python-modules/ftputil/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "ftputil";
-  version = "5.0.3";
+  version = "5.0.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-m4buZ8GYDOHYmxN1K8SLlJP+4GNJy0doKFlOduCPhIg=";
+    hash = "sha256-aInbhkndINm21ApsXw+EzPNAp9rB4L/A8AJAkPwq+zM=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/gbulb/default.nix b/pkgs/development/python-modules/gbulb/default.nix
new file mode 100644
index 0000000000000..fe0c1b21d288c
--- /dev/null
+++ b/pkgs/development/python-modules/gbulb/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pygobject3
+, pytestCheckHook
+, gtk3
+, gobject-introspection
+}:
+
+buildPythonPackage rec {
+  pname = "gbulb";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "beeware";
+    repo = "gbulb";
+    rev = "v${version}";
+    sha256 = "sha256-QNpZf1zfe6r6MtmYMWSrXPsXm5iX36oMx4GnXiTYPaQ=";
+  };
+
+  propagatedBuildInputs = [
+    pygobject3
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    gtk3
+    gobject-introspection
+  ];
+
+  disabledTests = [
+    "test_glib_events.TestBaseGLibEventLoop" # Somtimes fail due to imprecise timing
+  ];
+
+  pythonImportsCheck = [ "gbulb" ];
+
+  meta = with lib; {
+    description = "GLib implementation of PEP 3156";
+    homepage = "https://github.com/beeware/gbulb";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marius851000 ];
+  };
+}
diff --git a/pkgs/development/python-modules/gcal-sync/default.nix b/pkgs/development/python-modules/gcal-sync/default.nix
new file mode 100644
index 0000000000000..101a3ef53d6d9
--- /dev/null
+++ b/pkgs/development/python-modules/gcal-sync/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, aiohttp
+, pydantic
+, freezegun
+, pytest-aiohttp
+, pytest-asyncio
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "gcal-sync";
+  version = "0.7.1";
+
+  disabled = pythonOlder "3.9";
+
+  src = fetchFromGitHub {
+    owner = "allenporter";
+    repo = "gcal_sync";
+    rev = version;
+    hash = "sha256-NOB74P+5i63FEeHJsPXRdRgY6iyIUEn7BogbVKm8P5M=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    pydantic
+  ];
+
+  checkInputs = [
+    freezegun
+    pytest-aiohttp
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "gcal_sync" ];
+
+  meta = {
+    description = "Python library for syncing Google Calendar to local storage";
+    homepage = "https://github.com/allenporter/gcal_sync";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/genshi/default.nix b/pkgs/development/python-modules/genshi/default.nix
index be6abbd836443..6dd458fefb4f1 100644
--- a/pkgs/development/python-modules/genshi/default.nix
+++ b/pkgs/development/python-modules/genshi/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "Genshi";
-  version = "0.7.6";
+  version = "0.7.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-NKLOi4DoQ/Ygxbe35ZqqNip2zpdkpvEQMig+2UWMOlk=";
+    sha256 = "sha256-wQBSCGLNaQhdEO4ah+kSief1n2s9m9Yiv1iygE5rmqs=";
   };
 
   # FAIL: test_sanitize_remove_script_elem (genshi.filters.tests.html.HTMLSanitizerTestCase)
diff --git a/pkgs/development/python-modules/gidgethub/default.nix b/pkgs/development/python-modules/gidgethub/default.nix
index 9d1fdc07d9017..327672bad1bd7 100644
--- a/pkgs/development/python-modules/gidgethub/default.nix
+++ b/pkgs/development/python-modules/gidgethub/default.nix
@@ -2,21 +2,20 @@
 , buildPythonPackage
 , fetchPypi
 , pythonOlder
-, setuptools
-, pytest-runner
-, pytest
-, pytest-asyncio
-, twisted
-, treq
-, tornado
-, aiohttp
 , uritemplate
 , pyjwt
+, pytestCheckHook
+, aiohttp
+, httpx
+, importlib-resources
+, pytest-asyncio
+, pytest-tornasync
 }:
 
 buildPythonPackage rec {
   pname = "gidgethub";
   version = "5.1.0";
+  format = "flit";
 
   disabled = pythonOlder "3.6";
 
@@ -25,20 +24,25 @@ buildPythonPackage rec {
     sha256 = "sha256-kNGTb6mA2XBaljYvpOWaKFEks3NigsiPgmdIgSMKTiU=";
   };
 
-  nativeBuildInputs = [ setuptools pytest-runner ];
-  checkInputs = [ pytest pytest-asyncio twisted treq tornado aiohttp ];
   propagatedBuildInputs = [
     uritemplate
     pyjwt
   ];
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "extras_require=extras_require," "extras_require=None,"
-  '';
+  checkInputs = [
+    pytestCheckHook
+    aiohttp
+    httpx
+    importlib-resources
+    pytest-asyncio
+    pytest-tornasync
+  ];
 
-  # requires network (reqests github.com)
-  doCheck = false;
+  disabledTests = [
+    # Require internet connection
+    "test__request"
+    "test_get"
+  ];
 
   meta = with lib; {
     description = "An async GitHub API library";
diff --git a/pkgs/development/python-modules/github3_py/default.nix b/pkgs/development/python-modules/github3_py/default.nix
index 67e1868fb8b1a..08786916bd994 100644
--- a/pkgs/development/python-modules/github3_py/default.nix
+++ b/pkgs/development/python-modules/github3_py/default.nix
@@ -1,41 +1,50 @@
 { lib
-, pythonOlder
 , buildPythonPackage
+, pythonOlder
 , fetchPypi
-, betamax
-, pytest
-, betamax-matchers
-, unittest2
-, mock
 , requests
 , uritemplate
 , python-dateutil
-, jwcrypto
-, pyopenssl
-, ndg-httpsclient
-, pyasn1
+, pyjwt
+, pytestCheckHook
+, betamax
+, betamax-matchers
 }:
 
 buildPythonPackage rec {
   pname = "github3.py";
   version = "3.2.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "sha256-Cbcr4Ul9NGsJaM3oNgoNavedwgbQFJpjzT7IbGXDd8w=";
   };
 
-  checkInputs = [ betamax pytest betamax-matchers ]
-    ++ lib.optional (pythonOlder "3") unittest2
-    ++ lib.optional (pythonOlder "3.3") mock;
-  propagatedBuildInputs = [ requests uritemplate python-dateutil jwcrypto pyopenssl ndg-httpsclient pyasn1 ];
+  propagatedBuildInputs = [
+    requests
+    uritemplate
+    python-dateutil
+    pyjwt
+  ];
 
-  postPatch = ''
-    sed -i -e 's/unittest2 ==0.5.1/unittest2>=0.5.1/' setup.py
+  checkInputs = [
+    pytestCheckHook
+    betamax
+    betamax-matchers
+  ];
+
+  # Solves "__main__.py: error: unrecognized arguments: -nauto"
+  preCheck = ''
+    rm tox.ini
   '';
 
-  # TODO: only disable the tests that require network
-  doCheck = false;
+  disabledTests = [
+    # FileNotFoundError: [Errno 2] No such file or directory: 'tests/id_rsa.pub'
+    "test_delete_key"
+  ];
 
   meta = with lib; {
     homepage = "https://github3py.readthedocs.org/en/master/";
@@ -43,5 +52,4 @@ buildPythonPackage rec {
     license = licenses.bsd3;
     maintainers = with maintainers; [ pSub ];
   };
-
 }
diff --git a/pkgs/development/python-modules/globus-sdk/default.nix b/pkgs/development/python-modules/globus-sdk/default.nix
index 88a2c49e0520b..6820927542621 100644
--- a/pkgs/development/python-modules/globus-sdk/default.nix
+++ b/pkgs/development/python-modules/globus-sdk/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "globus-sdk";
-  version = "3.7.0";
+  version = "3.8.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -22,7 +22,7 @@ buildPythonPackage rec {
     owner = "globus";
     repo = "globus-sdk-python";
     rev = "refs/tags/${version}";
-    hash = "sha256-Us3SCkrBPL3v9YCOQ7ceF3neCUZkJTrchYsvCRSX84Y=";
+    hash = "sha256-JaAiAAf0zIJDXXl3zb4UE9XpmjZ8KQiEcZJm1ps+efA=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/glyphslib/default.nix b/pkgs/development/python-modules/glyphslib/default.nix
new file mode 100644
index 0000000000000..2d6b19bea35d7
--- /dev/null
+++ b/pkgs/development/python-modules/glyphslib/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, fonttools
+, openstep-plist
+, ufoLib2
+, pytestCheckHook
+, unicodedata2
+, setuptools-scm
+, ufonormalizer
+, xmldiff
+, defcon
+, ufo2ft
+, skia-pathops
+}:
+
+buildPythonPackage rec {
+  pname = "glyphslib";
+  version = "6.0.4";
+
+  format = "pyproject";
+
+  src = fetchPypi {
+    pname = "glyphsLib";
+    inherit version;
+    sha256 = "sha256-PT66n1WEO5FNcwov8GaXT1YNrAi22X4HN7iVNkuehKI=";
+  };
+
+  nativeBuildInputs = [ setuptools-scm ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "glyphsLib" ];
+
+  propagatedBuildInputs = [
+    fonttools
+    openstep-plist
+    ufoLib2
+    unicodedata2
+    ufonormalizer
+    xmldiff
+    defcon
+    ufo2ft
+    skia-pathops
+  ];
+
+  disabledTestPaths = [
+    "tests/builder/designspace_gen_test.py" # this test tries to use non-existent font "CoolFoundry Examplary Serif"
+    "tests/builder/interpolation_test.py" # this test tries to use a font that previous test should made
+  ];
+
+  meta = {
+    description = "Bridge from Glyphs source files (.glyphs) to UFOs and Designspace files via defcon and designspaceLib";
+    homepage = "https://github.com/googlefonts/glyphsLib";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.BarinovMaxim ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/google-cloud-bigquery/default.nix b/pkgs/development/python-modules/google-cloud-bigquery/default.nix
index 3a5142a9ceffe..94cebca1a0acc 100644
--- a/pkgs/development/python-modules/google-cloud-bigquery/default.nix
+++ b/pkgs/development/python-modules/google-cloud-bigquery/default.nix
@@ -16,18 +16,24 @@
 , proto-plus
 , psutil
 , pyarrow
+, pytest-xdist
 }:
 
 buildPythonPackage rec {
   pname = "google-cloud-bigquery";
-  version = "3.0.1";
+  version = "3.1.0";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-UmW6BEV44Ucdg/hUGSQk/kyDnB+Hsyx4q3AXTQe89hI=";
+    sha256 = "sha256-0tbK940cEz5//ZsLfi198fmy9wPeN3SXuW2adM/o7AI=";
   };
 
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace 'pyarrow >= 3.0.0, < 8.0dev' 'pyarrow >= 3.0.0, < 9.0dev'
+  '';
+
   propagatedBuildInputs = [
     google-cloud-core
     google-cloud-bigquery-storage
@@ -47,6 +53,7 @@ buildPythonPackage rec {
     google-cloud-datacatalog
     google-cloud-storage
     pytestCheckHook
+    pytest-xdist
   ];
 
   # prevent google directory from shadowing google imports
diff --git a/pkgs/development/python-modules/google-cloud-pubsub/default.nix b/pkgs/development/python-modules/google-cloud-pubsub/default.nix
index 9ba7f9145e30f..6871296a763de 100644
--- a/pkgs/development/python-modules/google-cloud-pubsub/default.nix
+++ b/pkgs/development/python-modules/google-cloud-pubsub/default.nix
@@ -15,14 +15,14 @@
 
 buildPythonPackage rec {
   pname = "google-cloud-pubsub";
-  version = "2.12.0";
+  version = "2.12.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-5RoIpyVm/y2+6pN4mJPWHbVUwxH6yWI/vIuCVNJU2aw=";
+    hash = "sha256-mTphUjL61NwaE7vKDgeCv+0WeA15FNQzvnY/6fHZ/QU=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/gpt-2-simple/default.nix b/pkgs/development/python-modules/gpt-2-simple/default.nix
new file mode 100644
index 0000000000000..68f8cba8dc472
--- /dev/null
+++ b/pkgs/development/python-modules/gpt-2-simple/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, fetchFromGitHub, regex, requests, tqdm, numpy
+, toposort, tensorflow }:
+
+buildPythonPackage rec {
+  pname = "gpt-2-simple";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "minimaxir";
+    repo = "gpt-2-simple";
+    rev = "v${version}";
+    sha256 = "sha256-WwD4sDcc28zXEOISJsq8e+rgaNrrgIy79Wa4J3E7Ovc=";
+  };
+
+  propagatedBuildInputs = [ regex requests tqdm numpy toposort tensorflow ];
+
+  dontCheck = true; # no tests in upstream
+
+  meta = with lib; {
+    description =
+      "Easily retrain OpenAI's GPT-2 text-generating model on new texts";
+    homepage = "https://github.com/minimaxir/gpt-2-simple";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ckie ];
+  };
+}
diff --git a/pkgs/development/python-modules/graphite-web/default.nix b/pkgs/development/python-modules/graphite-web/default.nix
index cf188e1d5d1dd..cb05a8104bf0d 100644
--- a/pkgs/development/python-modules/graphite-web/default.nix
+++ b/pkgs/development/python-modules/graphite-web/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , django
-, memcached
+, python-memcached
 , txamqp
 , django_tagging
 , gunicorn
@@ -36,7 +36,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     django
-    memcached
+    python-memcached
     txamqp
     django_tagging
     gunicorn
diff --git a/pkgs/development/python-modules/graphviz/default.nix b/pkgs/development/python-modules/graphviz/default.nix
index 46a541fe50409..2fa10120c18c2 100644
--- a/pkgs/development/python-modules/graphviz/default.nix
+++ b/pkgs/development/python-modules/graphviz/default.nix
@@ -16,16 +16,16 @@
 
 buildPythonPackage rec {
   pname = "graphviz";
-  version = "0.19.1";
+  version = "0.20";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   # patch does not apply to PyPI tarball due to different line endings
   src = fetchFromGitHub {
     owner = "xflr6";
     repo = "graphviz";
     rev = version;
-    sha256 = "sha256-pE1lsx/r/BjvW5W2niDx/UeRXxx4kvCyHzAUAG3bdGc=";
+    hash = "sha256-QyZwXxRbcMushxh/Ypy+v4FOTM4H1u5b7IZMSVgLyEs=";
   };
 
   patches = [
@@ -65,6 +65,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Simple Python interface for Graphviz";
     homepage = "https://github.com/xflr6/graphviz";
+    changelog = "https://github.com/xflr6/graphviz/blob/${src.rev}/CHANGES.rst";
     license = licenses.mit;
     maintainers = with maintainers; [ dotlambda ];
   };
diff --git a/pkgs/development/python-modules/grpcio-status/default.nix b/pkgs/development/python-modules/grpcio-status/default.nix
index 173353fc9f2f3..4e72e19392ff9 100644
--- a/pkgs/development/python-modules/grpcio-status/default.nix
+++ b/pkgs/development/python-modules/grpcio-status/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "grpcio-status";
-  version = "1.45.0";
+  version = "1.46.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-S6rY6Ow8RHiOA4wk49fccCWeBroJ9ApbgXhThWO6Plo=";
+    sha256 = "700ad7bdc2da6b1d873ae9abffd957b3df6b74c8ca4b34c50bf1b062ae10a620";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/grpcio-tools/default.nix b/pkgs/development/python-modules/grpcio-tools/default.nix
index b3794e8b9d434..b8bc4c9b5403c 100644
--- a/pkgs/development/python-modules/grpcio-tools/default.nix
+++ b/pkgs/development/python-modules/grpcio-tools/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "grpcio-tools";
-  version = "1.45.0";
+  version = "1.46.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-oBbPwh4NkbOwNtPU+WjR/eqGXfoDUkyx++yoRxn9RaI=";
+    sha256 = "d54d80a4cfd7da002893711af613c9c9358dddfdd27feea44eb902c495b09105";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/pkgs/development/python-modules/gst-python/default.nix b/pkgs/development/python-modules/gst-python/default.nix
index c02e3b593b82c..e14223c1fd6db 100644
--- a/pkgs/development/python-modules/gst-python/default.nix
+++ b/pkgs/development/python-modules/gst-python/default.nix
@@ -5,7 +5,7 @@
 , ninja
 
 , pkg-config
-, python3
+, python
 , pygobject3
 , gobject-introspection
 , gst-plugins-base
@@ -32,7 +32,7 @@ buildPythonPackage rec {
     meson
     ninja
     pkg-config
-    python3
+    python
     gobject-introspection
     gst-plugins-base
   ];
@@ -43,7 +43,7 @@ buildPythonPackage rec {
   ];
 
   mesonFlags = [
-    "-Dpygi-overrides-dir=${placeholder "out"}/${python3.sitePackages}/gi/overrides"
+    "-Dpygi-overrides-dir=${placeholder "out"}/${python.sitePackages}/gi/overrides"
   ];
 
   doCheck = true;
diff --git a/pkgs/development/python-modules/hahomematic/default.nix b/pkgs/development/python-modules/hahomematic/default.nix
index aef938e8266d9..27c1a673eee96 100644
--- a/pkgs/development/python-modules/hahomematic/default.nix
+++ b/pkgs/development/python-modules/hahomematic/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "hahomematic";
-  version = "1.2.2";
+  version = "1.3.1";
   format = "pyproject";
 
   disabled = pythonOlder "3.9";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "danielperna84";
     repo = pname;
     rev = "refs/tags/${version}";
-    sha256 = "sha256-eXJXKWlvNJIqEJY5WE5Wbk9BdGu9N9xhintJbdSkJrQ=";
+    sha256 = "sha256-RgjsaGtji5vSQcv+npOYcXJNYUhx9Snz56BXnfoc2QY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/hatasmota/default.nix b/pkgs/development/python-modules/hatasmota/default.nix
index db524438d63a9..5f09cb3b73558 100644
--- a/pkgs/development/python-modules/hatasmota/default.nix
+++ b/pkgs/development/python-modules/hatasmota/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "hatasmota";
-  version = "0.4.1";
+  version = "0.5.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "emontnemery";
     repo = pname;
     rev = "refs/tags/${version}";
-    sha256 = "sha256-So3wnz6HBGlgBgBJiU4m+fFx7f8Y+6c15OCD8GFGQaE=";
+    sha256 = "sha256-pIMao1zZXJJVEG9J9ypWlo/JF0nmci49ANcqHJSY2AY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/hatch-vcs/default.nix b/pkgs/development/python-modules/hatch-vcs/default.nix
new file mode 100644
index 0000000000000..6e785d0c9a284
--- /dev/null
+++ b/pkgs/development/python-modules/hatch-vcs/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, pythonOlder
+, git
+, hatchling
+, setuptools-scm
+}:
+
+buildPythonPackage rec {
+  pname = "hatch-vcs";
+  version = "0.2.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    pname = "hatch_vcs";
+    inherit version;
+    sha256 = "sha256-mRPXM7NO7JuwNF0GJsoyFlpK0t4V0c5kPDbQnKkIq/8=";
+  };
+
+  nativeBuildInputs = [
+    hatchling
+  ];
+
+  propagatedBuildInputs = [
+    hatchling
+    setuptools-scm
+  ];
+
+  checkInputs = [
+    git
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "hatch_vcs"
+  ];
+
+  meta = with lib; {
+    description = "A plugin for Hatch that uses your preferred version control system (like Git) to determine project versions";
+    homepage = "https://github.com/ofek/hatch-vcs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+  };
+}
diff --git a/pkgs/development/python-modules/hg-commitsigs/default.nix b/pkgs/development/python-modules/hg-commitsigs/default.nix
index 5c195bfe19f1b..a97c2be2b98cb 100644
--- a/pkgs/development/python-modules/hg-commitsigs/default.nix
+++ b/pkgs/development/python-modules/hg-commitsigs/default.nix
@@ -1,7 +1,7 @@
 { lib
 , fetchhg
 , stdenv
-, python3
+, python
 }:
 
 stdenv.mkDerivation rec {
@@ -20,9 +20,9 @@ stdenv.mkDerivation rec {
   dontBuild = true;
 
   installPhase = ''
-    mkdir -p $out/lib/${python3.libPrefix}/site-packages/hgext3rd/
+    mkdir -p $out/lib/${python.libPrefix}/site-packages/hgext3rd/
     install -D $src/commitsigs.py \
-               $out/lib/${python3.libPrefix}/site-packages/hgext3rd/
+               $out/lib/${python.libPrefix}/site-packages/hgext3rd/
   '';
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/holoviews/default.nix b/pkgs/development/python-modules/holoviews/default.nix
index 18a5f0cd82aac..57797ff8acd15 100644
--- a/pkgs/development/python-modules/holoviews/default.nix
+++ b/pkgs/development/python-modules/holoviews/default.nix
@@ -1,26 +1,30 @@
-{ buildPythonPackage
+{ lib
+, bokeh
+, buildPythonPackage
+, colorcet
 , fetchPypi
-, lib
-, param
-, numpy
-, pyviz-comms
 , ipython
+, matplotlib
 , notebook
+, numpy
 , pandas
-, matplotlib
-, bokeh
-, scipy
 , panel
-, colorcet
+, param
+, pythonOlder
+, pyviz-comms
+, scipy
 }:
 
 buildPythonPackage rec {
   pname = "holoviews";
-  version = "1.14.8";
+  version = "1.14.9";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-bDZVmaLLFnk7tifJtcVDCYK7WRyd6IhQAv+RtTm2ETM=";
+    hash = "sha256-mRI5CqJ58/vb5N81UYsS6Hy+zNeRXnIZEd7lVW22MGo=";
   };
 
   propagatedBuildInputs = [
@@ -35,12 +39,14 @@ buildPythonPackage rec {
   # tests not fully included with pypi release
   doCheck = false;
 
-  pythonImportsCheck = [ "holoviews" ];
+  pythonImportsCheck = [
+    "holoviews"
+  ];
 
   meta = with lib; {
     description = "Python data analysis and visualization seamless and simple";
     homepage = "http://www.holoviews.org/";
     license = licenses.bsd3;
-    maintainers = [ maintainers.costrouc ];
+    maintainers = with maintainers; [ costrouc ];
   };
 }
diff --git a/pkgs/development/python-modules/howdoi/default.nix b/pkgs/development/python-modules/howdoi/default.nix
index 213c382be0bd8..49535fd333988 100644
--- a/pkgs/development/python-modules/howdoi/default.nix
+++ b/pkgs/development/python-modules/howdoi/default.nix
@@ -10,17 +10,21 @@
 , pyquery
 , requests
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "howdoi";
   version = "2.0.19";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "gleitz";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0hl7cpxm4llsgw6390bpjgkzrprrpb0vxx2flgly7wiy9zl1rc5q";
+    hash = "sha256-uLAc6E8+8uPpo070vsG6Od/855N3gTQMf5pSUvtlh0I=";
   };
 
   propagatedBuildInputs = [
@@ -46,6 +50,16 @@ buildPythonPackage rec {
     # AssertionError: "The...
     "test_get_text_with_one_link"
     "test_get_text_without_links"
+    # Those tests are failing in the sandbox
+    # OSError: [Errno 24] Too many open files
+    "test_answers"
+    "test_answers_bing"
+    "test_colorize"
+    "test_json_output"
+    "test_missing_pre_or_code_query"
+    "test_multiple_answers"
+    "test_position"
+    "test_unicode_answer"
   ];
 
   pythonImportsCheck = [
@@ -54,7 +68,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Instant coding answers via the command line";
-    homepage = "https://pypi.python.org/pypi/howdoi";
+    homepage = "https://github.com/gleitz/howdoi";
     license = licenses.mit;
     maintainers = with maintainers; [ costrouc ];
   };
diff --git a/pkgs/development/python-modules/http-sfv/default.nix b/pkgs/development/python-modules/http-sfv/default.nix
index 264065b6efa18..0e5407420cac4 100644
--- a/pkgs/development/python-modules/http-sfv/default.nix
+++ b/pkgs/development/python-modules/http-sfv/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "http-sfv";
-  version = "0.9.5";
+  version = "0.9.6";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "mnot";
     repo = "http_sfv";
     rev = "http_sfv-${version}";
-    hash = "sha256-hzg5vRX0vNKS/hYLF6n8mLK5qiwP7do4M8YMlBAA66I=";
+    hash = "sha256-S+cbcDx+cXwN2TpfiUpr6xK1GFRxSYgfHdUavfzeyAE=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/httpcore/default.nix b/pkgs/development/python-modules/httpcore/default.nix
index 7f028c478fc5c..5b8d84ec30893 100644
--- a/pkgs/development/python-modules/httpcore/default.nix
+++ b/pkgs/development/python-modules/httpcore/default.nix
@@ -39,11 +39,14 @@ buildPythonPackage rec {
     anyio
     certifi
     h11
-    h2
     sniffio
-    socksio
   ];
 
+  passthru.extras-require = {
+    http2 = [ h2 ];
+    socks = [ socksio ];
+  };
+
   checkInputs = [
     pproxy
     pytest-asyncio
@@ -53,7 +56,8 @@ buildPythonPackage rec {
     trio
     trustme
     uvicorn
-  ];
+  ] ++ passthru.extras-require.http2
+    ++ passthru.extras-require.socks;
 
   pythonImportsCheck = [ "httpcore" ];
 
diff --git a/pkgs/development/python-modules/httpie-ntlm/default.nix b/pkgs/development/python-modules/httpie-ntlm/default.nix
new file mode 100644
index 0000000000000..22a995ebd24b9
--- /dev/null
+++ b/pkgs/development/python-modules/httpie-ntlm/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, httpie
+, requests_ntlm
+}:
+
+buildPythonPackage rec {
+  pname = "httpie-ntlm";
+  version = "1.0.2";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "b1f757180c0bd60741ea16cf91fc53d47df402a5c287c4a61a14b335ea0552b3";
+  };
+
+  propagatedBuildInputs = [ httpie requests_ntlm ];
+
+  # Package have no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "httpie_ntlm" ];
+
+  meta = with lib; {
+    description = "NTLM auth plugin for HTTPie";
+    homepage = "https://github.com/httpie/httpie-ntlm";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ kfollesdal ];
+  };
+}
diff --git a/pkgs/development/python-modules/httpie/default.nix b/pkgs/development/python-modules/httpie/default.nix
new file mode 100644
index 0000000000000..4f852bb3c25e8
--- /dev/null
+++ b/pkgs/development/python-modules/httpie/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, installShellFiles
+, pandoc
+, pythonOlder
+# BuildInputs
+, charset-normalizer
+, defusedxml
+, multidict
+, pygments
+, requests
+, requests-toolbelt
+, setuptools
+, rich
+, pysocks
+# CheckInputs
+, pytest-httpbin
+, pytest-lazy-fixture
+, pytest-mock
+, pytestCheckHook
+, responses
+, werkzeug
+}:
+
+buildPythonPackage rec {
+  pname = "httpie";
+  version = "3.2.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "httpie";
+    repo = "httpie";
+    rev = version;
+    hash = "sha256-WEe8zSlNckl7bPBi6u8mHQ1/xPw3kE81F8Xr15TchgM=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pandoc
+  ];
+
+  propagatedBuildInputs = [
+    charset-normalizer
+    defusedxml
+    multidict
+    pygments
+    requests
+    requests-toolbelt
+    setuptools
+    rich
+    pysocks
+  ];
+
+  checkInputs = [
+    pytest-httpbin
+    pytest-lazy-fixture
+    pytest-mock
+    pytestCheckHook
+    responses
+    werkzeug
+  ];
+
+  postInstall = ''
+    # install completions
+    installShellCompletion --bash \
+      --name http.bash extras/httpie-completion.bash
+    installShellCompletion --fish \
+      --name http.fish extras/httpie-completion.fish
+
+    # convert the docs/README.md file
+    pandoc --standalone -f markdown -t man docs/README.md -o docs/http.1
+    installManPage docs/http.1
+  '';
+
+  pytestFlagsArray = [
+    "httpie"
+    "tests"
+  ];
+
+  pythonImportsCheck = [
+    "httpie"
+  ];
+
+  meta = with lib; {
+    description = "A command line HTTP client whose goal is to make CLI human-friendly";
+    homepage = "https://httpie.org/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ antono relrod schneefux SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/development/python-modules/httpx-socks/default.nix b/pkgs/development/python-modules/httpx-socks/default.nix
index e45e6a85487a5..3bfbf2327f217 100644
--- a/pkgs/development/python-modules/httpx-socks/default.nix
+++ b/pkgs/development/python-modules/httpx-socks/default.nix
@@ -33,15 +33,16 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    async-timeout
-    curio
-    httpcore
     httpx
+    httpcore
     python-socks
-    sniffio
-    trio
   ];
 
+  passthru.extras-require = {
+    asyncio = [ async-timeout ];
+    trio = [ trio ];
+  };
+
   checkInputs = [
     flask
     hypercorn
diff --git a/pkgs/development/python-modules/httpx/default.nix b/pkgs/development/python-modules/httpx/default.nix
index dbf8d1745c0e5..d75dbaa1c9bdb 100644
--- a/pkgs/development/python-modules/httpx/default.nix
+++ b/pkgs/development/python-modules/httpx/default.nix
@@ -3,12 +3,19 @@
 , buildPythonPackage
 , pythonOlder
 , fetchFromGitHub
-, brotlicffi
 , certifi
 , charset-normalizer
 , httpcore
 , rfc3986
 , sniffio
+, h2
+, socksio
+, isPyPy
+, brotli
+, brotlicffi
+, click
+, rich
+, pygments
 , python
 , pytestCheckHook
 , pytest-asyncio
@@ -33,7 +40,6 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    brotlicffi
     certifi
     charset-normalizer
     httpcore
@@ -43,6 +49,13 @@ buildPythonPackage rec {
     async_generator
   ];
 
+  passthru.extras-require = {
+    http2 = [ h2 ];
+    socks = [ socksio ];
+    brotli = if isPyPy then [ brotlicffi ] else [ brotli ];
+    cli = [ click rich pygments ];
+  };
+
   checkInputs = [
     pytestCheckHook
     pytest-asyncio
@@ -50,7 +63,9 @@ buildPythonPackage rec {
     trustme
     typing-extensions
     uvicorn
-  ];
+  ] ++ passthru.extras-require.http2
+    ++ passthru.extras-require.brotli
+    ++ passthru.extras-require.socks;
 
   postPatch = ''
     substituteInPlace setup.py \
diff --git a/pkgs/development/python-modules/huggingface-hub/default.nix b/pkgs/development/python-modules/huggingface-hub/default.nix
index 3bbc8ad2669e9..d0eba93fb85d7 100644
--- a/pkgs/development/python-modules/huggingface-hub/default.nix
+++ b/pkgs/development/python-modules/huggingface-hub/default.nix
@@ -14,13 +14,13 @@
 
 buildPythonPackage rec {
   pname = "huggingface-hub";
-  version = "0.4.0";
+  version = "0.6.0";
 
   src = fetchFromGitHub {
     owner = "huggingface";
     repo = "huggingface_hub";
-    rev = "v${version}";
-    sha256 = "sha256-rrkubNy60e/1VcGacYQang4yWxUzIBGySxZyq6G1arw=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-jR4aqMAAQJ5a7pOe3RpCtLgdm5JVVSPsBQtube6FeqM=";
   };
 
   nativeBuildInputs = [ packaging ];
@@ -41,7 +41,7 @@ buildPythonPackage rec {
    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}";
+    changelog = "https://github.com/huggingface/huggingface_hub/releases/tag/v${version}";
     license = licenses.asl20;
     maintainers = with maintainers; [ ];
   };
diff --git a/pkgs/development/python-modules/humblewx/default.nix b/pkgs/development/python-modules/humblewx/default.nix
index 7fd0b0e8dd90d..58672a3663e5a 100644
--- a/pkgs/development/python-modules/humblewx/default.nix
+++ b/pkgs/development/python-modules/humblewx/default.nix
@@ -2,7 +2,7 @@
 , fetchFromGitHub
 , buildPythonPackage
 , wxPython_4_0
-, python3
+, python
 }:
 
 buildPythonPackage rec {
@@ -22,7 +22,7 @@ buildPythonPackage rec {
   checkPhase = ''
     runHook preCheck
     for i in examples/*; do
-      ${python3.interpreter} $i
+      ${python.interpreter} $i
     done
     runHook postCheck
   '';
diff --git a/pkgs/development/python-modules/hvplot/default.nix b/pkgs/development/python-modules/hvplot/default.nix
index 22be0ff75c9f1..c39fc338a1764 100644
--- a/pkgs/development/python-modules/hvplot/default.nix
+++ b/pkgs/development/python-modules/hvplot/default.nix
@@ -5,22 +5,21 @@
 , fetchPypi
 , holoviews
 , pandas
-, pythonImportsCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "hvplot";
-  version = "0.7.3";
+  version = "0.8.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "74b269c6e118dd6f7d2a4039e91f16a193638f4119b4358dc6dbd58a2e71e432";
+    sha256 = "sha256-hjDbo0lpsQXiZ8vhQjfi1W2ZacgBmArl5RkLwYsnktY=";
   };
 
-  nativeBuildInputs = [
-    pythonImportsCheckHook
-  ];
-
   propagatedBuildInputs = [
     bokeh
     colorcet
diff --git a/pkgs/development/python-modules/hy/default.nix b/pkgs/development/python-modules/hy/default.nix
index 63625bd7ee60b..a962f86854f2a 100644
--- a/pkgs/development/python-modules/hy/default.nix
+++ b/pkgs/development/python-modules/hy/default.nix
@@ -4,31 +4,44 @@
 , colorama
 , fetchFromGitHub
 , funcparserlib
+, hy
 , pytestCheckHook
+, python
 , pythonOlder
 , rply
+, testers
+, toPythonApplication
+, hyDefinedPythonPackages ? python-packages: [ ] /* Packages like with python.withPackages */
 }:
 
 buildPythonPackage rec {
   pname = "hy";
-  version = "1.0a3";
+  version = "1.0a4";
+  format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "hylang";
     repo = pname;
     rev = version;
-    sha256 = "1dqw24rvsps2nab1pbjjm1c81vrs34r4kkk691h3xdyxnv9hb84b";
+    sha256 = "sha256-MBzp3jqBg/kH233wcgYYHc+Yg9GuOaBsXIfjFDihD1E=";
   };
 
+  # https://github.com/hylang/hy/blob/1.0a4/get_version.py#L9-L10
+  HY_VERSION = version;
+
   propagatedBuildInputs = [
     colorama
     funcparserlib
-    rply
-  ] ++ lib.optionals (pythonOlder "3.9") [
+    rply # TODO: remove on the next release
+  ]
+  ++ lib.optionals (pythonOlder "3.9") [
     astor
-  ];
+  ]
+  # for backwards compatibility with removed pkgs/development/interpreters/hy
+  # See: https://github.com/NixOS/nixpkgs/issues/171428
+  ++ (hyDefinedPythonPackages python.pkgs);
 
   checkInputs = [
     pytestCheckHook
@@ -43,10 +56,22 @@ buildPythonPackage rec {
 
   pythonImportsCheck = [ "hy" ];
 
+  passthru = {
+    tests.version = testers.testVersion {
+      package = hy;
+      command = "hy -v";
+    };
+    # also for backwards compatibility with removed pkgs/development/interpreters/hy
+    withPackages = python-packages: (toPythonApplication hy).override {
+      hyDefinedPythonPackages = python-packages;
+    };
+  };
+
   meta = with lib; {
-    description = "Python to/from Lisp layer";
-    homepage = "https://github.com/hylang/hy";
+    description = "A LISP dialect embedded in Python";
+    homepage = "https://hylang.org/";
+    changelog = "https://github.com/hylang/hy/releases/tag/${version}";
     license = licenses.mit;
-    maintainers = with maintainers; [ fab ];
+    maintainers = with maintainers; [ fab mazurel nixy thiagokokada ];
   };
 }
diff --git a/pkgs/development/python-modules/hyrule/default.nix b/pkgs/development/python-modules/hyrule/default.nix
new file mode 100644
index 0000000000000..46ed096486b0f
--- /dev/null
+++ b/pkgs/development/python-modules/hyrule/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, hy
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "hyrule";
+  version = "0.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "hylang";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-sqS5vOcbln+Vfv/Ji/8rJ4GTQpXIuhgf+MukjV0Kkuw=";
+  };
+
+  propagatedBuildInputs = [
+    hy
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  # Some tests depends on hy on PATH
+  preCheck = "PATH=${hy}/bin:$PATH";
+
+  pythonImportsCheck = [ "hyrule" ];
+
+  meta = with lib; {
+    description = "Hyrule is a utility library for the Hy programming language";
+    homepage = "https://github.com/hylang/hyrule";
+    changelog = "https://github.com/hylang/hylure/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thiagokokada ];
+  };
+}
diff --git a/pkgs/development/python-modules/ibis-framework/default.nix b/pkgs/development/python-modules/ibis-framework/default.nix
index dee63fb0856d4..c5dfcc13e5c47 100644
--- a/pkgs/development/python-modules/ibis-framework/default.nix
+++ b/pkgs/development/python-modules/ibis-framework/default.nix
@@ -5,37 +5,45 @@
 , pytestCheckHook
 , atpublic
 , cached-property
-, clickhouse-driver
 , click
+, clickhouse-cityhash
+, clickhouse-driver
 , dask
 , datafusion
 , duckdb
 , duckdb-engine
-, graphviz
+, geoalchemy2
+, geopandas
+, graphviz-nox
 , importlib-metadata
+, lz4
 , multipledispatch
 , numpy
+, packaging
 , pandas
 , parsy
 , poetry-core
 , poetry-dynamic-versioning
+, psycopg2
 , pyarrow
 , pydantic
+, pymysql
+, pyspark
 , pytest-benchmark
+, pytest-randomly
 , pytest-mock
 , pytest-xdist
 , python
 , pytz
 , regex
-, requests
+, shapely
 , sqlalchemy
 , sqlite
 , tabulate
 , toolz
 }:
 let
-  # ignore tests for which dependencies are not available
-  backends = [
+  testBackends = [
     "dask"
     "datafusion"
     "duckdb"
@@ -70,24 +78,16 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     atpublic
     cached-property
-    clickhouse-driver
-    dask
-    datafusion
-    duckdb
-    duckdb-engine
-    graphviz
     importlib-metadata
     multipledispatch
     numpy
+    packaging
     pandas
     parsy
     poetry-dynamic-versioning
-    pyarrow
     pydantic
     pytz
     regex
-    requests
-    sqlalchemy
     tabulate
     toolz
   ];
@@ -97,9 +97,9 @@ buildPythonPackage rec {
     click
     pytest-benchmark
     pytest-mock
+    pytest-randomly
     pytest-xdist
-    sqlite
-  ];
+  ] ++ lib.concatMap (name: passthru.extras-require.${name}) testBackends;
 
   preBuild = ''
     # setup.py exists only for developer convenience and is automatically generated
@@ -109,7 +109,7 @@ buildPythonPackage rec {
   pytestFlagsArray = [
     "--dist=loadgroup"
     "-m"
-    "'${lib.concatStringsSep " or " backends} or core'"
+    "'${lib.concatStringsSep " or " testBackends} or core'"
   ];
 
   preCheck = ''
@@ -125,7 +125,7 @@ buildPythonPackage rec {
     find "$IBIS_TEST_DATA_DIRECTORY" -type f -exec chmod u+rw {} +
 
     # load data
-    for backend in ${lib.concatStringsSep " " backends}; do
+    for backend in ${lib.concatStringsSep " " testBackends}; do
       ${python.interpreter} ci/datamgr.py load "$backend"
     done
   '';
@@ -136,7 +136,23 @@ buildPythonPackage rec {
 
   pythonImportsCheck = [
     "ibis"
-  ] ++ (map (backend: "ibis.backends.${backend}") backends);
+  ] ++ map (backend: "ibis.backends.${backend}") testBackends;
+
+  passthru = {
+    extras-require = {
+      clickhouse = [ clickhouse-cityhash clickhouse-driver lz4 ];
+      dask = [ dask pyarrow ];
+      datafusion = [ datafusion ];
+      duckdb = [ duckdb duckdb-engine sqlalchemy ];
+      geospatial = [ geoalchemy2 geopandas shapely ];
+      mysql = [ pymysql sqlalchemy ];
+      pandas = [ ];
+      postgres = [ psycopg2 sqlalchemy ];
+      pyspark = [ pyarrow pyspark ];
+      sqlite = [ sqlalchemy sqlite ];
+      visualization = [ graphviz-nox ];
+    };
+  };
 
   meta = with lib; {
     description = "Productivity-centric Python Big Data Framework";
diff --git a/pkgs/development/python-modules/imap-tools/default.nix b/pkgs/development/python-modules/imap-tools/default.nix
index a63754f0c09e3..404731e22a9a5 100644
--- a/pkgs/development/python-modules/imap-tools/default.nix
+++ b/pkgs/development/python-modules/imap-tools/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "imap-tools";
-  version = "0.54.0";
+  version = "0.55.0";
 
   disabled = isPy27;
 
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "ikvk";
     repo = "imap_tools";
     rev = "v${version}";
-    hash = "sha256-RiKGxyCPYlAJ5YbxvEKxCYgUg1D9s29YSCT4tY3FIEE=";
+    hash = "sha256-Jtuw0pYkgR1wrqPlEBOpia1rFU/+MLadOFEm2xLIFMw=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/impacket/default.nix b/pkgs/development/python-modules/impacket/default.nix
index 6b6f7e452b279..cc957ac156aa1 100644
--- a/pkgs/development/python-modules/impacket/default.nix
+++ b/pkgs/development/python-modules/impacket/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname = "impacket";
-  version = "0.9.24";
+  version = "0.10.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-GNVX04f0kU+vpzmBO5FyvD+L2cA26Tv1iajg67cwS7o=";
+    hash = "sha256-uOsCCiy7RxRmac/jHGS7Ln1kmdBJxJPWQYuXFvXHRYM=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/influxgraph/default.nix b/pkgs/development/python-modules/influxgraph/default.nix
index c8403cf644630..7f24e1fd87e5b 100644
--- a/pkgs/development/python-modules/influxgraph/default.nix
+++ b/pkgs/development/python-modules/influxgraph/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonPackage, fetchPypi, isPy3k
-, influxdb, graphite_api, memcached
+, influxdb, graphite_api, python-memcached
 }:
 
 buildPythonPackage rec {
@@ -11,13 +11,7 @@ buildPythonPackage rec {
     sha256 = "0l33sfwdh4bfprmzp2kx0d9098g6yxbnhyyx9qr3kzczpm0jg9vy";
   };
 
-  patchPhase = lib.optionalString isPy3k ''
-    sed 's/python-memcached/python3-memcached/' \
-      -i ./influxgraph.egg-info/requires.txt    \
-      -i ./setup.py
-  '';
-
-  propagatedBuildInputs = [ influxdb graphite_api memcached ];
+  propagatedBuildInputs = [ influxdb graphite_api python-memcached ];
 
   passthru.moduleName = "influxgraph.InfluxDBFinder";
 
diff --git a/pkgs/development/python-modules/insteon-frontend-home-assistant/default.nix b/pkgs/development/python-modules/insteon-frontend-home-assistant/default.nix
new file mode 100644
index 0000000000000..646ffec6552ea
--- /dev/null
+++ b/pkgs/development/python-modules/insteon-frontend-home-assistant/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "insteon-frontend-home-assistant";
+  version = "0.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "70ee413cae8717416f5add1be7647158d8ff4303942dafccac0792ef44336cdf";
+  };
+
+  # upstream has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "insteon_frontend" ];
+
+  meta = {
+    description = "The Insteon frontend for Home Assistant";
+    homepage = "https://github.com/teharris1/insteon-panel";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/intbitset/default.nix b/pkgs/development/python-modules/intbitset/default.nix
index 9cedf7c4d284c..f6459c13e706a 100644
--- a/pkgs/development/python-modules/intbitset/default.nix
+++ b/pkgs/development/python-modules/intbitset/default.nix
@@ -2,6 +2,7 @@
 , fetchPypi
 , buildPythonPackage
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
@@ -9,9 +10,11 @@ buildPythonPackage rec {
   version = "3.0.1";
   format = "setuptools";
 
+  disabled = pythonOlder "3.7";
+
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-8ebQPGcpkioiPFGEnfZbnpFuYlrvuRF4Tn+azUwgfVM=";
+    hash = "sha256-8ebQPGcpkioiPFGEnfZbnpFuYlrvuRF4Tn+azUwgfVM=";
   };
 
   checkInputs = [
@@ -25,7 +28,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "C-based extension implementing fast integer bit sets";
     homepage = "https://github.com/inveniosoftware/intbitset";
-    license = licenses.lgpl3Only;
+    license = licenses.lgpl3Plus;
     maintainers = teams.determinatesystems.members;
   };
 }
diff --git a/pkgs/development/python-modules/invoke/default.nix b/pkgs/development/python-modules/invoke/default.nix
index 45711a3dc20e9..a2180f5b964a6 100644
--- a/pkgs/development/python-modules/invoke/default.nix
+++ b/pkgs/development/python-modules/invoke/default.nix
@@ -7,17 +7,15 @@
 
 buildPythonPackage rec {
   pname = "invoke";
-  version = "1.7.0";
+  version = "1.7.1";
   format = "setuptools";
 
-  disabled = pythonOlder "3.7";
-
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-4zLkneQEY/IBYxX1HfQjE4VXcr6GQ1aGFWvBj0W1zGw=";
+    hash = "sha256-e23q9YXu4KhIIF0LjAAUub9vKHqOt5iBimQt/x3xSxk=";
   };
 
-  patchPhase = ''
+  postPatch = ''
     sed -e 's|/bin/bash|${bash}/bin/bash|g' -i invoke/config.py
   '';
 
diff --git a/pkgs/development/python-modules/ipwhl/default.nix b/pkgs/development/python-modules/ipwhl/default.nix
index 1b8b7f002ae3f..8bbf257ebdcf4 100644
--- a/pkgs/development/python-modules/ipwhl/default.nix
+++ b/pkgs/development/python-modules/ipwhl/default.nix
@@ -3,7 +3,7 @@
 
 buildPythonPackage rec {
   pname = "ipwhl";
-  version = "1.0.0";
+  version = "1.1.0";
   format = "flit";
   disabled = pythonOlder "3.6";
 
@@ -11,7 +11,7 @@ buildPythonPackage rec {
     owner = "~cnx";
     repo = "ipwhl-utils";
     rev = version;
-    sha256 = "sha256-KstwdmHpn4ypBNpX56NeStqdzy5RElMTW1oR2hCtJ7c=";
+    sha256 = "sha256-YaIYcoUnbiv9wUOFIzGj2sWGbh7NsqRQcqOR2X6+QZA=";
   };
 
   buildInputs = [ ipfs ];
diff --git a/pkgs/development/python-modules/ipywidgets/default.nix b/pkgs/development/python-modules/ipywidgets/default.nix
index b33ec2759b561..8894fbaf21ff3 100644
--- a/pkgs/development/python-modules/ipywidgets/default.nix
+++ b/pkgs/development/python-modules/ipywidgets/default.nix
@@ -1,43 +1,35 @@
-{ lib
-, buildPythonPackage
+{ buildPythonPackage
 , fetchPypi
-, python
-, nose
-, pytest
-, mock
-, ipython
 , ipykernel
+, ipython
 , jupyterlab-widgets
+, lib
+, nbformat
+, pytestCheckHook
 , traitlets
-, notebook
 , widgetsnbextension
 }:
 
 buildPythonPackage rec {
   pname = "ipywidgets";
   version = "7.7.0";
+  format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-q0pVloVaiLg3YZIcdocH1l5YRwaBObwXKd3+g0cDVCo=";
+    hash = "sha256-q0pVloVaiLg3YZIcdocH1l5YRwaBObwXKd3+g0cDVCo=";
   };
 
-  # Tests are not distributed
-  # doCheck = false;
-
-  buildInputs = [ nose pytest mock ];
   propagatedBuildInputs = [
     ipython
     ipykernel
     jupyterlab-widgets
     traitlets
-    notebook
+    nbformat
     widgetsnbextension
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ pytestCheckHook ];
 
   meta = {
     description = "IPython HTML widgets for Jupyter";
diff --git a/pkgs/development/python-modules/itemadapter/default.nix b/pkgs/development/python-modules/itemadapter/default.nix
index b082387e23cfb..74b8eabd866f9 100644
--- a/pkgs/development/python-modules/itemadapter/default.nix
+++ b/pkgs/development/python-modules/itemadapter/default.nix
@@ -6,14 +6,14 @@
 
 buildPythonPackage rec {
   pname = "itemadapter";
-  version = "0.5.0";
+  version = "0.6.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-BbanndMaepk9+y6Dhqkcl+O4xs8otyVT6AjmJeC4fCA=";
+    hash = "sha256-Px9g69bJGwAiKCDzi/USaqSaj7bkZ9NR8DZEIflToV0=";
   };
 
   # Infinite recursion with Scrapy
diff --git a/pkgs/development/python-modules/jc/default.nix b/pkgs/development/python-modules/jc/default.nix
index d7f8e6c5a1bad..cff3ad1c737d0 100644
--- a/pkgs/development/python-modules/jc/default.nix
+++ b/pkgs/development/python-modules/jc/default.nix
@@ -10,14 +10,14 @@
 
 buildPythonPackage rec {
   pname = "jc";
-  version = "1.18.8";
+  version = "1.19.0";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "kellyjonbrazil";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-tZrvWMt0qdOFTNeL99mZGFl8bVDGCqj25zVl7QvXQLw=";
+    sha256 = "sha256-0UOU4arSCh+5l258mwZQLNf/JUbPcTgcHtusiTyYPwg=";
   };
 
   propagatedBuildInputs = [ ruamel-yaml xmltodict pygments ];
diff --git a/pkgs/development/python-modules/jenkinsapi/default.nix b/pkgs/development/python-modules/jenkinsapi/default.nix
index 912c21cc8fb42..39ad443f1891e 100644
--- a/pkgs/development/python-modules/jenkinsapi/default.nix
+++ b/pkgs/development/python-modules/jenkinsapi/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , buildPythonPackage
+, pythonAtLeast
 , fetchPypi
 , mock
 , pytest
@@ -13,6 +14,9 @@
 buildPythonPackage rec {
   pname = "jenkinsapi";
   version = "0.3.11";
+  format = "setuptools";
+
+  disabled = pythonAtLeast "3.6";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/jupyter-sphinx/default.nix b/pkgs/development/python-modules/jupyter-sphinx/default.nix
index 2da21db1eb145..56cd051ecf4cb 100644
--- a/pkgs/development/python-modules/jupyter-sphinx/default.nix
+++ b/pkgs/development/python-modules/jupyter-sphinx/default.nix
@@ -5,6 +5,7 @@
 , sphinx
 , ipywidgets
 , pythonOlder
+, nbconvert
 }:
 
 buildPythonPackage rec {
@@ -17,7 +18,7 @@ buildPythonPackage rec {
     sha256 = "37fc9408385c45326ac79ca0452fbd7ae2bf0e97842d626d2844d4830e30aaf2";
   };
 
-  propagatedBuildInputs = [ nbformat sphinx ipywidgets ];
+  propagatedBuildInputs = [ nbconvert nbformat sphinx ipywidgets ];
 
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/jupyter_server/default.nix b/pkgs/development/python-modules/jupyter_server/default.nix
index 2cb7d06b646a7..0001dd5e9373a 100644
--- a/pkgs/development/python-modules/jupyter_server/default.nix
+++ b/pkgs/development/python-modules/jupyter_server/default.nix
@@ -6,10 +6,11 @@
 , pythonOlder
 , pytestCheckHook
 , pytest-tornasync
-, argon2_cffi
+, argon2-cffi
 , jinja2
 , tornado
 , pyzmq
+, ipykernel
 , ipython_genutils
 , traitlets
 , jupyter_core
@@ -43,7 +44,7 @@ buildPythonPackage rec {
   ];
 
   propagatedBuildInputs = [
-    argon2_cffi
+    argon2-cffi
     jinja2
     tornado
     pyzmq
@@ -62,6 +63,7 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    ipykernel
     pytestCheckHook
     pytest-tornasync
     requests
diff --git a/pkgs/development/python-modules/jwcrypto/default.nix b/pkgs/development/python-modules/jwcrypto/default.nix
index 4a6bd63c76542..2904380775f17 100644
--- a/pkgs/development/python-modules/jwcrypto/default.nix
+++ b/pkgs/development/python-modules/jwcrypto/default.nix
@@ -3,15 +3,19 @@
 , fetchPypi
 , cryptography
 , deprecated
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "jwcrypto";
-  version = "1.2";
+  version = "1.3";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-7fQwkyFyHlFhzvzN1ksEUJ4Dkk/q894IW0d4B2WYmuM=";
+    hash = "sha256-DWRhuhP3wnHYusUBjuYN28rl/zlAP6+kI3X1fQjjmLs=";
   };
 
   propagatedBuildInputs = [
@@ -19,10 +23,14 @@ buildPythonPackage rec {
     deprecated
   ];
 
+  pythonImportsCheck = [
+    "jwcrypto"
+  ];
+
   meta = with lib; {
     description = "Implementation of JOSE Web standards";
     homepage = "https://github.com/latchset/jwcrypto";
     license = licenses.lgpl3Plus;
-    maintainers = [ maintainers.costrouc ];
+    maintainers = with maintainers; [ costrouc ];
   };
 }
diff --git a/pkgs/development/python-modules/karton-autoit-ripper/default.nix b/pkgs/development/python-modules/karton-autoit-ripper/default.nix
index 2e7d561cf6e00..ea79a5f453f23 100644
--- a/pkgs/development/python-modules/karton-autoit-ripper/default.nix
+++ b/pkgs/development/python-modules/karton-autoit-ripper/default.nix
@@ -4,12 +4,16 @@
 , fetchFromGitHub
 , karton-core
 , malduck
+, pythonOlder
 , regex
 }:
 
 buildPythonPackage rec {
   pname = "karton-autoit-ripper";
   version = "1.1.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "CERT-Polska";
@@ -27,14 +31,17 @@ buildPythonPackage rec {
 
   postPatch = ''
     substituteInPlace requirements.txt \
-      --replace "autoit-ripper==1.0.0" "autoit-ripper" \
-      --replace "malduck==3.1.0" "malduck>=3.1.0" \
-      --replace "regex==2020.2.20" "regex>=2020.2.20"
+      --replace "autoit-ripper==" "autoit-ripper>=" \
+      --replace "malduck==" "malduck>=" \
+      --replace "regex==" "regex>="
   '';
 
-  # Project has no tests
+  # Module has no tests
   doCheck = false;
-  pythonImportsCheck = [ "karton.autoit_ripper" ];
+
+  pythonImportsCheck = [
+    "karton.autoit_ripper"
+  ];
 
   meta = with lib; {
     description = "AutoIt script ripper for Karton framework";
diff --git a/pkgs/development/python-modules/karton-classifier/default.nix b/pkgs/development/python-modules/karton-classifier/default.nix
index ca2703389b306..8195632bdfd4e 100644
--- a/pkgs/development/python-modules/karton-classifier/default.nix
+++ b/pkgs/development/python-modules/karton-classifier/default.nix
@@ -4,7 +4,7 @@
 , fetchFromGitHub
 , karton-core
 , pytestCheckHook
-, python_magic
+, python-magic
 , pythonOlder
 }:
 
@@ -24,7 +24,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     chardet
     karton-core
-    python_magic
+    python-magic
   ];
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/karton-core/default.nix b/pkgs/development/python-modules/karton-core/default.nix
index 562d8880692fc..b839230b5f280 100644
--- a/pkgs/development/python-modules/karton-core/default.nix
+++ b/pkgs/development/python-modules/karton-core/default.nix
@@ -8,13 +8,13 @@
 
 buildPythonPackage rec {
   pname = "karton-core";
-  version = "4.4.0";
+  version = "4.4.1";
 
   src = fetchFromGitHub {
     owner = "CERT-Polska";
     repo = "karton";
     rev = "refs/tags/v${version}";
-    sha256 = "sha256-TwTq44l/Nx+FQ6tFZHat4SPGOmHSwYfg7ShbGnxpkVw=";
+    sha256 = "sha256-smgKrFexuL0bgt/1Ikm1tpSGPJNJm7Ko68iZn3AQw5E=";
   };
 
   propagatedBuildInputs = [ minio redis ];
diff --git a/pkgs/development/python-modules/keyrings-cryptfile/default.nix b/pkgs/development/python-modules/keyrings-cryptfile/default.nix
index 7f2cacea62944..23b8b66ea9fa7 100644
--- a/pkgs/development/python-modules/keyrings-cryptfile/default.nix
+++ b/pkgs/development/python-modules/keyrings-cryptfile/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , fetchpatch
-, argon2_cffi
+, argon2-cffi
 , keyring
 , pycryptodome
 , pytestCheckHook
@@ -32,7 +32,7 @@ buildPythonPackage rec {
   ];
 
   propagatedBuildInputs = [
-    argon2_cffi
+    argon2-cffi
     keyring
     pycryptodome
   ];
diff --git a/pkgs/development/python-modules/ldaptor/default.nix b/pkgs/development/python-modules/ldaptor/default.nix
index 0d0c1159332ad..55725fb49c9f8 100644
--- a/pkgs/development/python-modules/ldaptor/default.nix
+++ b/pkgs/development/python-modules/ldaptor/default.nix
@@ -3,17 +3,18 @@
 , fetchPypi
 , twisted
 , passlib
-, pyopenssl
 , pyparsing
 , service-identity
+, six
 , zope_interface
-, isPy3k
+, pythonOlder
 , python
 }:
 
 buildPythonPackage rec {
   pname = "ldaptor";
   version = "21.2.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
@@ -21,18 +22,30 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    twisted passlib pyopenssl pyparsing service-identity zope_interface
+    passlib
+    pyparsing
+    six
+    twisted
+    zope_interface
+  ] ++ twisted.extras-require.tls;
+
+  checkInputs = [
+    twisted
   ];
 
-  disabled = !isPy3k;
+  # Test creates an excessive amount of temporary files (order of millions).
+  # Cleaning up those files already took over 15 hours already on my zfs
+  # filesystem and is not finished yet.
+  doCheck = false;
 
   checkPhase = ''
-    ${python.interpreter} -m twisted.trial ldaptor
+    trial -j$NIX_BUILD_CORES ldaptor
   '';
 
-  meta = {
+  meta = with lib; {
     description = "A Pure-Python Twisted library for LDAP";
     homepage = "https://github.com/twisted/ldaptor";
-    license = lib.licenses.mit;
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/lektor/default.nix b/pkgs/development/python-modules/lektor/default.nix
index 020506d519100..600304f48a127 100644
--- a/pkgs/development/python-modules/lektor/default.nix
+++ b/pkgs/development/python-modules/lektor/default.nix
@@ -27,7 +27,7 @@
 
 buildPythonPackage rec {
   pname = "lektor";
-  version = "3.3.3";
+  version = "3.3.4";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -36,7 +36,7 @@ buildPythonPackage rec {
     owner = "lektor";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-3jPN4VQdIUVjSSGJxPek2RrnXzCwkDxoEBqk4vuL+nc=";
+    hash = "sha256-9Zd+N6FkvRuW7rptWAr3JLIARXwJDcocxAp/ZCTQ3Hw=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/license-expression/default.nix b/pkgs/development/python-modules/license-expression/default.nix
index 5ed61931a7d8b..e1f77e45dcc70 100644
--- a/pkgs/development/python-modules/license-expression/default.nix
+++ b/pkgs/development/python-modules/license-expression/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "license-expression";
-  version = "21.6.14";
+  version = "30.0.0";
 
   disabled = pythonOlder "3.6";
 
@@ -17,9 +17,11 @@ buildPythonPackage rec {
     owner = "nexB";
     repo = "license-expression";
     rev = "v${version}";
-    sha256 = "sha256-hwfYKKalo8WYFwPCsRRXNz+/F8/42PXA8jxbIQjJH/g=";
+    hash = "sha256-tGXNZm9xH8sXa7dtBFsTzGgT+hfbmkwps7breR7KUWU=";
   };
 
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
   dontConfigure = true;
 
   nativeBuildInputs = [
@@ -34,10 +36,12 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
-  pythonImportsCheck = [ "license_expression" ];
+  pythonImportsCheck = [
+    "license_expression"
+  ];
 
   meta = with lib; {
-    description = "Utility library to parse, normalize and compare License expressions for Python";
+    description = "Utility library to parse, normalize and compare License expressions";
     homepage = "https://github.com/nexB/license-expression";
     license = licenses.asl20;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/development/python-modules/limits/default.nix b/pkgs/development/python-modules/limits/default.nix
index 7cb622df047ec..afc777e1d858f 100644
--- a/pkgs/development/python-modules/limits/default.nix
+++ b/pkgs/development/python-modules/limits/default.nix
@@ -1,21 +1,84 @@
-{ lib, fetchPypi, buildPythonPackage, six }:
+{ lib
+, buildPythonPackage
+, deprecated
+, fetchFromGitHub
+, hiro
+, packaging
+, pymemcache
+, pymongo
+, pytest-asyncio
+, pytest-lazy-fixture
+, pytestCheckHook
+, pythonOlder
+, redis
+, setuptools
+, typing-extensions
+}:
 
 buildPythonPackage rec {
   pname = "limits";
-  version = "2.4.0";
+  version = "2.6.1";
+  format = "setuptools";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "sha256-jiK2PfJjECB6d7db1HRZnwpGE6fZFjZQ7TpCjpzHrjU=";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "alisaifee";
+    repo = pname;
+    rev = version;
+    # Upstream uses versioneer, which relies on git attributes substitution.
+    # This leads to non-reproducible archives on github. Remove the substituted
+    # file here, and recreate it later based on our version info.
+    extraPostFetch = ''
+      rm "$out/limits/_version.py"
+    '';
+    hash = "sha256-ja+YbRHCcZ5tFnoofdR44jbkkdDroVUdKeDOt6yE0LI=";
   };
 
-  propagatedBuildInputs = [ six ];
+  propagatedBuildInputs = [
+    deprecated
+    packaging
+    setuptools
+    typing-extensions
+  ];
+
+  checkInputs = [
+    hiro
+    pymemcache
+    pymongo
+    pytest-asyncio
+    pytest-lazy-fixture
+    pytestCheckHook
+    redis
+  ];
+
+  postPatch = ''
+    substituteInPlace pytest.ini \
+      --replace "--cov=limits" "" \
+      --replace "-K" ""
+    # redis-py-cluster doesn't support redis > 4
+    substituteInPlace tests/conftest.py \
+      --replace "import rediscluster" ""
+
+    # Recreate _version.py, deleted at fetch time due to non-reproducibility.
+    echo 'def get_versions(): return {"version": "${version}"}' > limits/_version.py
+  '';
 
-  doCheck = false; # ifilter
+  pythonImportsCheck = [
+    "limits"
+  ];
+
+  pytestFlagsArray = [
+    # All other tests require a running Docker instance
+    "tests/test_limits.py"
+    "tests/test_ratelimit_parser.py"
+    "tests/test_limit_granularities.py"
+  ];
 
   meta = with lib; {
     description = "Rate limiting utilities";
-    license = licenses.mit;
     homepage = "https://limits.readthedocs.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/development/python-modules/linkify-it-py/default.nix b/pkgs/development/python-modules/linkify-it-py/default.nix
index ef97439cdc86a..54f71fe2ec2be 100644
--- a/pkgs/development/python-modules/linkify-it-py/default.nix
+++ b/pkgs/development/python-modules/linkify-it-py/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "linkify-it-py";
-  version = "1.0.3";
+  version = "2.0.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -16,8 +16,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "tsutsu3";
     repo = pname;
-    rev = "v${version}";
-    hash = "sha256-1QqfqFdTEdZr02jQnmHmvw3fgnC/ktsfALyhtkGSXoY=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-3bgkhIC6tHl5zieiyllvqFCKwLms55m8MGt1xGhQ4Dk=";
   };
 
   propagatedBuildInputs = [ uc-micro-py ];
diff --git a/pkgs/development/python-modules/loo-py/default.nix b/pkgs/development/python-modules/loopy/default.nix
index d16b06a284abe..75d250ad03daa 100644
--- a/pkgs/development/python-modules/loo-py/default.nix
+++ b/pkgs/development/python-modules/loopy/default.nix
@@ -1,51 +1,55 @@
 { lib
 , buildPythonPackage
-, fetchPypi
-, pytools
-, pymbolic
-, genpy
+, codepy
 , cgen
-, islpy
-, six
 , colorama
+, fetchFromGitHub
+, genpy
+, islpy
 , mako
+, numpy
+, pymbolic
 , pyopencl
-, pytest
+, pyrsistent
+, pythonOlder
+, pytools
 }:
 
 buildPythonPackage rec {
-  pname = "loo-py";
-  version = "2020.2";
+  pname = "loopy";
+  version = "2020.2.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
-  src = fetchPypi {
-    pname = "loo.py";
-    inherit version;
-    sha256 = "c0aba31f8b61f6487e84120a154fab862d19c3b374ad4285b987c4f2d746d51f";
+  src = fetchFromGitHub {
+    owner = "inducer";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-GL2GY3fbP9yMEQYyuh4CRHpeN9DGnZxbMt6jC+O/C0g=";
   };
 
-  checkInputs = [ pytest ];
   propagatedBuildInputs = [
-    pytools
-    pymbolic
-    genpy
+    codepy
     cgen
-    islpy
-    six
     colorama
+    genpy
+    islpy
     mako
+    numpy
+    pymbolic
     pyopencl
+    pyrsistent
+    pytools
   ];
 
   # pyopencl._cl.LogicError: clGetPlatformIDs failed: PLATFORM_NOT_FOUND_KHR
   doCheck = false;
-  checkPhase = ''
-    HOME=$(mktemp -d) pytest test
-  '';
 
   meta = with lib; {
     description = "A code generator for array-based code on CPUs and GPUs";
-    homepage = "https://mathema.tician.de/software/loopy";
+    homepage = "https://github.com/inducer/loopy";
     license = licenses.mit;
-    maintainers = [ maintainers.costrouc ];
+    maintainers = with maintainers; [ costrouc ];
   };
 }
diff --git a/pkgs/development/python-modules/losant-rest/default.nix b/pkgs/development/python-modules/losant-rest/default.nix
index 8056e93c51a78..a160095513eb5 100644
--- a/pkgs/development/python-modules/losant-rest/default.nix
+++ b/pkgs/development/python-modules/losant-rest/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "losant-rest";
-  version = "1.16.1";
+  version = "1.16.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
     owner = "Losant";
     repo = "losant-rest-python";
     rev = "v${version}";
-    sha256 = "sha256-mdSqGeVfZTSW65eQiYerjlq6afq2dyYjUi38DVsI6wQ=";
+    sha256 = "sha256-OR5SegUfui5g11QZZJzAq8nhp7bFjS4Ip2gMjfx7tpA=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/luxtronik/default.nix b/pkgs/development/python-modules/luxtronik/default.nix
index 7f7225bdb92a1..e8c72a5cf4cbe 100644
--- a/pkgs/development/python-modules/luxtronik/default.nix
+++ b/pkgs/development/python-modules/luxtronik/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "luxtronik";
-  version = "0.3.12";
+  version = "0.3.13";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "Bouni";
     repo = "python-luxtronik";
     rev = version;
-    sha256 = "sha256-qQwMahZ3EzXzI7FyTL71WzDpLqmIgVYxiJ0IGvlw8dY=";
+    sha256 = "sha256-ULpi3oNJJe8H9z1C1nCNsR5eMmXQnXtbonrV9Ec2NyY=";
   };
 
   # Project has no tests
diff --git a/pkgs/development/python-modules/magic-wormhole-mailbox-server/default.nix b/pkgs/development/python-modules/magic-wormhole-mailbox-server/default.nix
index dfd16c04a6f8b..77870ed683656 100644
--- a/pkgs/development/python-modules/magic-wormhole-mailbox-server/default.nix
+++ b/pkgs/development/python-modules/magic-wormhole-mailbox-server/default.nix
@@ -1,4 +1,15 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27, six, attrs, twisted, pyopenssl, service-identity, autobahn, treq, mock, pytest }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, six
+, attrs
+, twisted
+, pyopenssl
+, service-identity
+, autobahn
+, treq
+, mock
+}:
 
 buildPythonPackage rec {
   version = "0.4.1";
@@ -9,18 +20,27 @@ buildPythonPackage rec {
     sha256 = "1af10592909caaf519c00e706eac842c5e77f8d4356215fe9c61c7b2258a88fb";
   };
 
-  propagatedBuildInputs = [ six attrs twisted pyopenssl service-identity autobahn ];
+  propagatedBuildInputs = [
+    attrs
+    six
+    twisted
+    autobahn
+  ] ++ autobahn.extras-require.twisted
+  ++ twisted.extras-require.tls;
 
-  # zope.interface import issue
-  doCheck = !isPy27;
-  checkInputs = [ treq mock pytest ];
+  checkInputs = [
+    treq
+    mock
+    twisted
+  ];
   checkPhase = ''
-    pytest
+    trial -j$NIX_BUILD_CORES wormhole_mailbox_server
   '';
 
   meta = with lib; {
     description = "Securely transfer data between computers";
     homepage = "https://github.com/warner/magic-wormhole-mailbox-server";
     license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/magic-wormhole-transit-relay/default.nix b/pkgs/development/python-modules/magic-wormhole-transit-relay/default.nix
index 2d6a8d969d8b4..a618be999c0bc 100644
--- a/pkgs/development/python-modules/magic-wormhole-transit-relay/default.nix
+++ b/pkgs/development/python-modules/magic-wormhole-transit-relay/default.nix
@@ -1,4 +1,10 @@
-{ lib, buildPythonPackage, fetchPypi, twisted, mock }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, autobahn
+, mock
+, twisted
+}:
 
 buildPythonPackage rec {
   pname = "magic-wormhole-transit-relay";
@@ -9,17 +15,18 @@ buildPythonPackage rec {
     sha256 = "0ppsx2s1ysikns1h053x67z2zmficbn3y3kf52bzzslhd2s02j6b";
   };
 
-  propagatedBuildInputs = [ twisted ];
+  propagatedBuildInputs = [ autobahn twisted ];
 
-  checkInputs = [ mock ];
+  checkInputs = [ mock twisted ];
 
   checkPhase = ''
-    ${twisted}/bin/trial wormhole_transit_relay
+    trial -j$NIX_BUILD_CORES wormhole_transit_relay
   '';
 
   meta = with lib; {
     description = "Transit Relay server for Magic-Wormhole";
-    homepage = "https://github.com/warner/magic-wormhole-transit-relay";
+    homepage = "https://github.com/magic-wormhole/magic-wormhole-transit-relay";
     license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/magic-wormhole/default.nix b/pkgs/development/python-modules/magic-wormhole/default.nix
index abb9a04eaa488..c6450c3cecb9d 100644
--- a/pkgs/development/python-modules/magic-wormhole/default.nix
+++ b/pkgs/development/python-modules/magic-wormhole/default.nix
@@ -1,7 +1,7 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
-, isPy27
 , spake2
 , pynacl
 , six
@@ -15,7 +15,6 @@
 , humanize
 , txtorcon
 , nettools
-, glibcLocales
 , mock
 , magic-wormhole-transit-relay
 , magic-wormhole-mailbox-server
@@ -30,9 +29,28 @@ buildPythonPackage rec {
     sha256 = "0q41j99718y7m95zg1vaybnsp31lp6lhyqkbv4yqz5ys6jixh3qv";
   };
 
-  buildInputs = [ glibcLocales ];
-  propagatedBuildInputs = [ spake2 pynacl six attrs twisted autobahn automat hkdf tqdm click humanize txtorcon ];
-  checkInputs = [ mock magic-wormhole-transit-relay magic-wormhole-mailbox-server ];
+  propagatedBuildInputs = [
+    spake2
+    pynacl
+    six
+    attrs
+    twisted
+    autobahn
+    automat
+    hkdf
+    tqdm
+    click
+    humanize
+    txtorcon
+  ] ++ autobahn.extras-require.twisted
+  ++ twisted.extras-require.tls;
+
+  checkInputs = [
+    mock
+    magic-wormhole-transit-relay
+    magic-wormhole-mailbox-server
+    twisted
+  ];
 
   postPatch = lib.optionalString stdenv.isLinux ''
     sed -i -e "s|'ifconfig'|'${nettools}/bin/ifconfig'|" src/wormhole/ipaddrs.py
@@ -42,9 +60,7 @@ buildPythonPackage rec {
     install -Dm644 docs/wormhole.1 $out/share/man/man1/wormhole.1
   '';
 
-  # zope.interface issue
-  doCheck = !isPy27;
-  preCheck = ''
+  checkPhase = ''
     export PATH=$out/bin:$PATH
     export LANG="en_US.UTF-8"
     export LC_ALL="en_US.UTF-8"
@@ -52,16 +68,15 @@ buildPythonPackage rec {
       --replace 'getProcessOutputAndValue("locale", ["-a"])' 'getProcessOutputAndValue("locale", ["-a"], env=os.environ)' \
       --replace 'if (os.path.dirname(os.path.abspath(wormhole))' 'if not os.path.abspath(wormhole).startswith("/nix/store") and (os.path.dirname(os.path.abspath(wormhole))' \
       --replace 'locale_env = dict(LC_ALL=locale, LANG=locale)' 'locale_env = dict(LC_ALL=locale, LANG=locale, LOCALE_ARCHIVE=os.getenv("LOCALE_ARCHIVE"))'
+
+    trial -j$NIX_BUILD_CORES wormhole
   '';
 
   meta = with lib; {
     description = "Securely transfer data between computers";
-    homepage = "https://github.com/warner/magic-wormhole";
+    homepage = "https://github.com/magic-wormhole/magic-wormhole";
     license = licenses.mit;
-    # Currently broken on Python 2.7. See
-    # https://github.com/NixOS/nixpkgs/issues/71826
-    broken = isPy27;
-    maintainers = with maintainers; [ asymmetric ];
+    maintainers = with maintainers; [ asymmetric SuperSandro2000 ];
     mainProgram = "wormhole";
   };
 }
diff --git a/pkgs/development/python-modules/malduck/default.nix b/pkgs/development/python-modules/malduck/default.nix
index 1b757a144ccf5..7d5998da2e96b 100644
--- a/pkgs/development/python-modules/malduck/default.nix
+++ b/pkgs/development/python-modules/malduck/default.nix
@@ -14,14 +14,16 @@
 
 buildPythonPackage rec {
   pname = "malduck";
-  version = "4.1.0";
+  version = "4.2.0";
+  format = "setuptools";
+
   disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "CERT-Polska";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "04d8bhzax9ynbl83hif9i8gcs29zrvcay2r6n7mcxiixlxcqciak";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UgpblcZ/Jxl3U4256YIHzly7igNXwhTdFN4HOqZBVbM=";
   };
 
   propagatedBuildInputs = [
@@ -43,7 +45,9 @@ buildPythonPackage rec {
   # Project has no tests. They will come with the next release
   doCheck = false;
 
-  pythonImportsCheck = [ "malduck" ];
+  pythonImportsCheck = [
+    "malduck"
+  ];
 
   meta = with lib; {
     description = "Helper for malware analysis";
diff --git a/pkgs/development/python-modules/mapbox/default.nix b/pkgs/development/python-modules/mapbox/default.nix
index f721228ddca4c..84ca6199e2f40 100644
--- a/pkgs/development/python-modules/mapbox/default.nix
+++ b/pkgs/development/python-modules/mapbox/default.nix
@@ -32,5 +32,8 @@ buildPythonPackage rec {
     description = "Mapbox SDK for Python";
     longDescription = "Low-level client API for Mapbox web services.";
     maintainers = with maintainers; [ ersin ];
+    # ImportError: cannot import name 'Mapping' from 'collections'
+    # and archived upstreamed
+    broken = true;
   };
 }
diff --git a/pkgs/development/python-modules/mastodon-py/default.nix b/pkgs/development/python-modules/mastodon-py/default.nix
index c1a7c8985b78d..178ed4b8fc06b 100644
--- a/pkgs/development/python-modules/mastodon-py/default.nix
+++ b/pkgs/development/python-modules/mastodon-py/default.nix
@@ -6,7 +6,7 @@
 , decorator
 , http-ece
 , python-dateutil
-, python_magic
+, python-magic
 , pytz
 , requests
 , six
@@ -37,7 +37,7 @@ buildPythonPackage rec {
     decorator
     http-ece
     python-dateutil
-    python_magic
+    python-magic
     pytz
     requests
     six
diff --git a/pkgs/development/python-modules/matplotlib/default.nix b/pkgs/development/python-modules/matplotlib/default.nix
index cc118d9f0ab08..933fd3865d6bb 100644
--- a/pkgs/development/python-modules/matplotlib/default.nix
+++ b/pkgs/development/python-modules/matplotlib/default.nix
@@ -17,7 +17,7 @@ let
 in
 
 buildPythonPackage rec {
-  version = "3.5.1";
+  version = "3.5.2";
   pname = "matplotlib";
   format = "setuptools";
 
@@ -25,7 +25,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b2e9810e09c3a47b73ce9cab5a72243a1258f61e7900969097a817232246ce1c";
+    sha256 = "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8";
   };
 
   XDG_RUNTIME_DIR = "/tmp";
diff --git a/pkgs/development/python-modules/mcstatus/default.nix b/pkgs/development/python-modules/mcstatus/default.nix
index f2745bf3f6f83..9adbbf5e5d3c9 100644
--- a/pkgs/development/python-modules/mcstatus/default.nix
+++ b/pkgs/development/python-modules/mcstatus/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "mcstatus";
-  version = "9.0.4";
+  version = "9.1.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -22,7 +22,7 @@ buildPythonPackage rec {
     owner = "py-mine";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-h5pPtzs04TDqOkDFBpcn6faFN4sz/nEMsjjiH7mTEH0=";
+    hash = "sha256-qKQs0uGPMUtueOryVzFk37Th+N9vmApr/IzJ6jZI2Ic=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/meater-python/default.nix b/pkgs/development/python-modules/meater-python/default.nix
new file mode 100644
index 0000000000000..219af570dfe87
--- /dev/null
+++ b/pkgs/development/python-modules/meater-python/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "meater-python";
+  version = "0.0.8";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-86XJmKOc2MCyU9v0UAZsPCUL/kAXywOlQOIHaykNF1o=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  # Module has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "meater"
+  ];
+
+  meta = with lib; {
+    description = "Library for the Apption Labs Meater cooking probe";
+    homepage = "https://github.com/Sotolotl/meater-python";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/meilisearch/default.nix b/pkgs/development/python-modules/meilisearch/default.nix
index 73f1c75a5192b..b7f0f049db70f 100644
--- a/pkgs/development/python-modules/meilisearch/default.nix
+++ b/pkgs/development/python-modules/meilisearch/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "meilisearch";
-  version = "0.18.2";
+  version = "0.18.3";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "meilisearch";
     repo = "meilisearch-python";
     rev = "v${version}";
-    hash = "sha256-U9fdMcxPdtLiUStgTez99SPRh93WLZNVn8uIj4lNWh4=";
+    hash = "sha256-Ym3AbIEf8eMSrtP8W1dPXqL0mTVN2bd8hlxdFhW/dkQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/memcached/default.nix b/pkgs/development/python-modules/memcached/default.nix
deleted file mode 100644
index e7a41d7b238d0..0000000000000
--- a/pkgs/development/python-modules/memcached/default.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{ lib
-, buildPythonPackage
-, fetchurl
-, fetchPypi
-, isPy3k
-}:
-
-buildPythonPackage rec {
-  pname = "memcached";
-  version = "1.51";
-
-  src = if isPy3k then fetchPypi {
-    inherit version;
-    pname = "python3-${pname}";
-    sha256 = "0na8b369q8fivh3y0nvzbvhh3lgvxiyyv9xp93cnkvwfsr8mkgkw";
-  } else fetchurl {
-    url = "http://ftp.tummy.com/pub/python-memcached/old-releases/python-${pname}-${version}.tar.gz";
-    sha256 = "124s98m6hvxj6x90d7aynsjfz878zli771q96ns767r2mbqn7192";
-  };
-
-  meta = with lib; {
-    description = "Python API for communicating with the memcached distributed memory object cache daemon";
-    homepage = "https://github.com/linsomniac/python-memcached";
-    license = licenses.psfl;
-  };
-
-}
diff --git a/pkgs/development/python-modules/mocket/default.nix b/pkgs/development/python-modules/mocket/default.nix
index d5fe44b37e746..bba7b1884176f 100644
--- a/pkgs/development/python-modules/mocket/default.nix
+++ b/pkgs/development/python-modules/mocket/default.nix
@@ -5,7 +5,7 @@
 , isPy3k
 , decorator
 , http-parser
-, python_magic
+, python-magic
 , urllib3
 , pytestCheckHook
 , pytest-mock
@@ -30,7 +30,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     decorator
     http-parser
-    python_magic
+    python-magic
     urllib3
   ];
 
diff --git a/pkgs/development/python-modules/moku/default.nix b/pkgs/development/python-modules/moku/default.nix
new file mode 100644
index 0000000000000..3ed68ce8b47a1
--- /dev/null
+++ b/pkgs/development/python-modules/moku/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, zeroconf
+, requests
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "moku";
+  version = "2.3";
+
+  /*
+
+  Pypi's webpage <https://pypi.org/project/moku/> lists
+  https://github.com/liquidinstruments/moku/archive/${version}.tar.gz as the
+  download link, but that repository doesn't exist from some reason :/. When
+  packaging this, I didn't find any mention of a git repo of the sources. Note
+  that the pymoku <https://github.com/liquidinstruments/pymoku> repo holds the
+  sources of the legacy API package.
+
+  */
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-EzVcECjJyrr2NLQkG0Yp/jYBMnsEP1/FnS5O3UplszI=";
+  };
+  /*
+
+  Note: If you run `moku download` and encounter the error:
+
+  [Errno 13] Permission denied: '/nix/store/.../lib/python 3.9/site-packages/moku/data'
+
+  Then use the $MOKU_DATA_PATH environment variable to control where the
+  downloaded files will go to. It is undocumented upstream and there's no
+  repository to contribute such documentation unfortunately. Also there is no
+  suitable default value for this on Nix systems, so there's no patch we can
+  apply locally to make the situation better.
+
+  */
+
+  propagatedBuildInputs = [
+    zeroconf
+    requests
+    setuptools
+  ];
+
+  pythonImportsCheck = [
+    "moku"
+  ];
+
+  meta = with lib; {
+    description = "Python scripting interface to the Liquid Instruments Moku";
+    homepage = "https://apis.liquidinstruments.com/starting-python.html";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/pkgs/development/python-modules/motionblinds/default.nix b/pkgs/development/python-modules/motionblinds/default.nix
index f3cf778fcbad4..e2a27b56cac17 100644
--- a/pkgs/development/python-modules/motionblinds/default.nix
+++ b/pkgs/development/python-modules/motionblinds/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "motionblinds";
-  version = "0.6.5";
+  version = "0.6.7";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "starkillerOG";
     repo = "motion-blinds";
     rev = "refs/tags/${version}";
-    sha256 = "sha256-RAGsVHi/f+0gIzVomhC8h3JvoD4EEe6dK9PBi5daTgU=";
+    sha256 = "sha256-c6+kctEB4gwLGTgTA+sUA3v9ST4dn4RFPbyaXSgGvoQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/mypy-boto3-s3/default.nix b/pkgs/development/python-modules/mypy-boto3-s3/default.nix
index c77dc38466369..987aa20d2dbb3 100644
--- a/pkgs/development/python-modules/mypy-boto3-s3/default.nix
+++ b/pkgs/development/python-modules/mypy-boto3-s3/default.nix
@@ -8,14 +8,14 @@
 
 buildPythonPackage rec {
   pname = "mypy-boto3-s3";
-  version = "1.22.0.post1";
+  version = "1.23.0.post1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-lOpsygYi1iCZ9DgqOjfJ4HL9PvRmLqMpEWqgeOyFCI4=";
+    hash = "sha256-eF0ChMOqisXsMWLlKCAWGMrTUe4sGfZxWo5uc/ZKAQk=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/mysql-connector/default.nix b/pkgs/development/python-modules/mysql-connector/default.nix
index 211bdec41fe0e..38417ddb9c62a 100644
--- a/pkgs/development/python-modules/mysql-connector/default.nix
+++ b/pkgs/development/python-modules/mysql-connector/default.nix
@@ -1,16 +1,24 @@
-{ lib, buildPythonPackage, fetchFromGitHub, python }:
+{ lib
+, buildPythonPackage
+, django
+, dnspython
+, fetchFromGitHub
+, protobuf
+, pythonOlder
+}:
 
-let
-  py = python;
-in buildPythonPackage rec {
+buildPythonPackage rec {
   pname = "mysql-connector";
-  version = "8.0.24";
+  version = "8.0.29";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "mysql";
     repo = "mysql-connector-python";
     rev = version;
-    sha256 = "1zb5wf65rnpbk0lw31i4piy0bq09hqa62gx7bh241zc5310zccc7";
+    hash = "sha256-X0qiXNYkNoR00ESUdByPj4dPnEnjLyopm25lm1JvkAk=";
   };
 
   patches = [
@@ -22,16 +30,19 @@ in buildPythonPackage rec {
     ./0001-Revert-Fix-MacOS-wheels-platform-tag.patch
   ];
 
-  propagatedBuildInputs = with py.pkgs; [ protobuf dnspython ];
+  propagatedBuildInputs = [
+    dnspython
+    protobuf
+  ];
 
-  # Tests are failing (TODO: unknown reason)
-  # TypeError: __init__() missing 1 required positional argument: 'string'
-  # But the library should be working as expected.
-  doCheck = false;
+  pythonImportsCheck = [
+    "mysql"
+  ];
 
-  pythonImportsCheck = [ "mysql" ];
+  # Tests require a running MySQL instance
+  doCheck = false;
 
-  meta = {
+  meta = with lib; {
     description = "A MySQL driver";
     longDescription = ''
       A MySQL driver that does not depend on MySQL C client libraries and
@@ -39,7 +50,7 @@ in buildPythonPackage rec {
     '';
     homepage = "https://github.com/mysql/mysql-connector-python";
     changelog = "https://raw.githubusercontent.com/mysql/mysql-connector-python/${version}/CHANGES.txt";
-    license = [ lib.licenses.gpl2Only ];
-    maintainers = with lib.maintainers; [ neosimsim turion ];
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ neosimsim turion ];
   };
 }
diff --git a/pkgs/development/python-modules/name-that-hash/default.nix b/pkgs/development/python-modules/name-that-hash/default.nix
new file mode 100644
index 0000000000000..de073e502dc8f
--- /dev/null
+++ b/pkgs/development/python-modules/name-that-hash/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, click
+, rich
+}:
+
+buildPythonPackage rec {
+  pname = "name-that-hash";
+  version = "1.10";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "HashPals";
+    repo = pname;
+    rev = version;
+    hash = "sha256-3sddUPoC3NfKQzmNgqPf/uHaYN9VZBqsmV712uz1Phg=";
+  };
+
+  # TODO remove on next update which bumps rich
+  postPatch = ''
+    substituteInPlace pyproject.toml --replace 'rich = ">=9.9,<11.0"' 'rich = ">=9.9"'
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    click
+    rich
+  ];
+
+  pythonImportsCheck = [ "name_that_hash" ];
+
+  meta = with lib; {
+    longDescription = "Don't know what type of hash it is? Name That Hash will name that hash type! Identify MD5, SHA256 and 300+ other hashes.";
+    description = "Module and CLI for the identification of hashes";
+    homepage = "https://github.com/HashPals/Name-That-Hash";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ eyjhb ];
+  };
+}
diff --git a/pkgs/development/python-modules/napalm/default.nix b/pkgs/development/python-modules/napalm/default.nix
index 2266283cc53bd..ef59a33a956a3 100644
--- a/pkgs/development/python-modules/napalm/default.nix
+++ b/pkgs/development/python-modules/napalm/default.nix
@@ -1,10 +1,14 @@
 { lib, buildPythonPackage, fetchFromGitHub, callPackage, setuptools, cffi
 , paramiko, requests, future, textfsm, jinja2, netaddr, pyyaml, pyeapi, netmiko
-, junos-eznc, ciscoconfparse, scp, lxml, ncclient, pytestCheckHook, ddt, mock }:
+, junos-eznc, ciscoconfparse, scp, lxml, ncclient, pytestCheckHook, ddt, mock
+, pythonOlder, pythonAtLeast }:
 
 buildPythonPackage rec {
   pname = "napalm";
   version = "3.3.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6" || pythonAtLeast "3.9";
 
   src = fetchFromGitHub {
     owner = "napalm-automation";
diff --git a/pkgs/development/python-modules/nbclient/default.nix b/pkgs/development/python-modules/nbclient/default.nix
index 1b2071e7f0c58..7311384229aa7 100644
--- a/pkgs/development/python-modules/nbclient/default.nix
+++ b/pkgs/development/python-modules/nbclient/default.nix
@@ -1,27 +1,50 @@
-{ lib, buildPythonPackage, fetchPypi, pythonOlder,
-  async_generator, traitlets, nbformat, nest-asyncio, jupyter-client,
-  pytest, xmltodict, nbconvert, ipywidgets
-, doCheck ? true
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, async_generator
+, traitlets
+, nbformat
+, nest-asyncio
+, jupyter-client
+, pytestCheckHook
+, xmltodict
+, nbconvert
+, ipywidgets
 }:
 
-buildPythonPackage rec {
+let nbclient = buildPythonPackage rec {
   pname = "nbclient";
-  version = "0.5.13";
+  version = "0.6.3";
+  format = "setuptools";
+
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-QMUsm148MfrsruafICs/U+ONfBxWPeD63enX7aD9r+g=";
+    hash = "sha256-uAcm/B+4mg6Pi+HnfijQAmsejtkLwUPIoMdiLk+M3Z4=";
   };
 
-  inherit doCheck;
-  checkInputs = [ pytest xmltodict nbconvert ipywidgets ];
   propagatedBuildInputs = [ async_generator traitlets nbformat nest-asyncio jupyter-client ];
 
+  # circular dependencies if enabled by default
+  doCheck = false;
+
+  checkInputs = [ pytestCheckHook xmltodict nbconvert ipywidgets ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  passthru.tests = {
+    check = nbclient.overridePythonAttrs (_: { doCheck = true; });
+  };
+
   meta = with lib; {
     homepage = "https://github.com/jupyter/nbclient";
     description = "A client library for executing notebooks";
     license = licenses.bsd3;
     maintainers = [ maintainers.erictapen ];
   };
-}
+};
+in nbclient
diff --git a/pkgs/development/python-modules/nbconvert/default.nix b/pkgs/development/python-modules/nbconvert/default.nix
index 5a89210170fe2..9b85586f7d9be 100644
--- a/pkgs/development/python-modules/nbconvert/default.nix
+++ b/pkgs/development/python-modules/nbconvert/default.nix
@@ -1,34 +1,29 @@
-{ lib
+{ beautifulsoup4
+, bleach
 , buildPythonPackage
+, defusedxml
 , fetchPypi
-, pytestCheckHook
-, glibcLocales
-, entrypoints
-, bleach
-, beautifulsoup4
-, mistune
-, nbclient
+, ipywidgets
 , jinja2
-, pygments
-, traitlets
-, testpath
-, jupyter_core
 , jupyterlab-pygments
-, nbformat
-, ipykernel
+, lib
+, markupsafe
+, mistune
+, nbclient
 , pandocfilters
-, tornado
-, jupyter-client
-, defusedxml
+, pyppeteer
+, pytestCheckHook
+, tinycss2
 }:
 
 buildPythonPackage rec {
   pname = "nbconvert";
-  version = "6.4.5";
+  version = "6.5.0";
+  format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-IRY6jiBzwHEJyo85iDbkXv26KqzqaNb3WopUX+8HDU4=";
+    hash = "sha256-Ij5G4nq+hZa4rtVDAfrbukM7f/6oGWpo/Xsf9Qnu6Z0=";
   };
 
   # Add $out/share/jupyter to the list of paths that are used to search for
@@ -41,37 +36,38 @@ buildPythonPackage rec {
     substituteAllInPlace ./nbconvert/exporters/templateexporter.py
   '';
 
-  checkInputs = [ pytestCheckHook glibcLocales ];
-
   propagatedBuildInputs = [
-    entrypoints bleach mistune jinja2 pygments traitlets testpath
-    jupyter_core nbformat ipykernel pandocfilters tornado jupyter-client
-    defusedxml beautifulsoup4
-    (nbclient.override { doCheck = false; }) # avoid infinite recursion
+    beautifulsoup4
+    bleach
+    defusedxml
+    jinja2
     jupyterlab-pygments
+    markupsafe
+    mistune
+    nbclient
+    pandocfilters
+    tinycss2
   ];
 
-  # disable preprocessor tests for ipython 7
-  # see issue https://github.com/jupyter/nbconvert/issues/898
   preCheck = ''
-    export LC_ALL=en_US.UTF-8
-    HOME=$(mktemp -d)
+    export HOME=$(mktemp -d)
   '';
 
-  pytestFlagsArray = [
-    "--ignore=nbconvert/preprocessors/tests/test_execute.py"
-    # can't resolve template paths within sandbox
-    "--ignore=nbconvert/tests/base.py"
-    "--ignore=nbconvert/tests/test_nbconvertapp.py"
+  checkInputs = [
+    ipywidgets
+    pyppeteer
+    pytestCheckHook
   ];
 
+  pytestFlagsArray = [
+    # DeprecationWarning: Support for bleach <5 will be removed in a future version of nbconvert
+    "-W ignore::DeprecationWarning"
+  ];
 
   disabledTests = [
+    # Attempts network access (Failed to establish a new connection: [Errno -3] Temporary failure in name resolution)
     "test_export"
-    "test_webpdf_without_chromium"
-    #"test_cell_tag_output"
-    #"test_convert_from_stdin"
-    #"test_convert_full_qualified_name"
+    "test_webpdf_with_chromium"
   ];
 
   # Some of the tests use localhost networking.
diff --git a/pkgs/development/python-modules/nettigo-air-monitor/default.nix b/pkgs/development/python-modules/nettigo-air-monitor/default.nix
index 6f85a797c3743..b9bfb95e2e8cc 100644
--- a/pkgs/development/python-modules/nettigo-air-monitor/default.nix
+++ b/pkgs/development/python-modules/nettigo-air-monitor/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "nettigo-air-monitor";
-  version = "1.2.2";
+  version = "1.2.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "bieniu";
     repo = pname;
     rev = version;
-    sha256 = "sha256-gHgFEDUji43vTBZp5FLK90H+D44sfH2AuCc7Gu2T1pg=";
+    sha256 = "sha256-zmmJ3F2Fl4u7vOx1h5Z0LtWL0/5xmZiFRY2NU8Tc0MY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/nose-randomly/default.nix b/pkgs/development/python-modules/nose-randomly/default.nix
index eb75a375d7701..94f64028d669a 100644
--- a/pkgs/development/python-modules/nose-randomly/default.nix
+++ b/pkgs/development/python-modules/nose-randomly/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
 , nose
@@ -16,7 +17,10 @@ buildPythonPackage rec {
 
   checkInputs = [ numpy nose ];
 
-  checkPhase = ''
+  checkPhase = if stdenv.isDarwin then ''
+    # Work around "OSError: AF_UNIX path too long"
+    TMPDIR="/tmp" nosetests
+  '' else ''
     nosetests
   '';
 
diff --git a/pkgs/development/python-modules/nose/default.nix b/pkgs/development/python-modules/nose/default.nix
index 586af7a904233..31fd824ee3da4 100644
--- a/pkgs/development/python-modules/nose/default.nix
+++ b/pkgs/development/python-modules/nose/default.nix
@@ -41,8 +41,8 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "A unittest-based testing framework for python that makes writing and running tests easier";
-    homepage = "http://readthedocs.org/docs/nose/";
+    homepage = "https://nose.readthedocs.io/";
     license = licenses.lgpl3;
+    maintainers = with maintainers; [ ];
   };
-
 }
diff --git a/pkgs/development/python-modules/notebook/default.nix b/pkgs/development/python-modules/notebook/default.nix
index 3ead3cf4fe200..d76909efdcfe9 100644
--- a/pkgs/development/python-modules/notebook/default.nix
+++ b/pkgs/development/python-modules/notebook/default.nix
@@ -2,7 +2,7 @@
 , lib
 , buildPythonPackage
 , fetchPypi
-, argon2_cffi
+, argon2-cffi
 , nose
 , nose_warnings_filters
 , glibcLocales
@@ -43,7 +43,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     jinja2 tornado ipython_genutils traitlets jupyter_core send2trash
     jupyter-client nbformat nbconvert ipykernel terminado requests pexpect
-    prometheus-client argon2_cffi
+    prometheus-client argon2-cffi
   ];
 
   # disable warning_filters
diff --git a/pkgs/development/python-modules/notify-events/default.nix b/pkgs/development/python-modules/notify-events/default.nix
new file mode 100644
index 0000000000000..97d888ae23ce5
--- /dev/null
+++ b/pkgs/development/python-modules/notify-events/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "notify-events";
+  version = "1.1.3";
+
+  format = "setuptools";
+
+  src = fetchPypi {
+    pname = "notify_events";
+    inherit version;
+    sha256 = "e63ba935c3300ff7f48cba115f7cb4474906e83c2e9b60b95a0881eb949701e7";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  # upstream has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "notify_events" ];
+
+  meta = {
+    description = "Python client for Notify.Events";
+    homepage = "https://github.com/notify-events/python";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/notify-py/default.nix b/pkgs/development/python-modules/notify-py/default.nix
index 497b20d3df8ff..6d255424812e5 100644
--- a/pkgs/development/python-modules/notify-py/default.nix
+++ b/pkgs/development/python-modules/notify-py/default.nix
@@ -9,7 +9,8 @@
 , which
 , jeepney
 , loguru
-, pytestCheckHook
+, pytest
+, dbus
 , coreutils
 }:
 
@@ -41,16 +42,29 @@ buildPythonPackage rec {
     })
   ];
 
-  propagatedBuildInputs = [ loguru ]
-    ++ lib.optionals stdenv.isLinux [ jeepney ];
+  propagatedBuildInputs = [
+    loguru
+  ] ++ lib.optionals stdenv.isLinux [
+    jeepney
+  ];
 
-  checkInputs = [ pytestCheckHook ];
+  checkInputs = [
+    pytest
+  ] ++ lib.optionals stdenv.isLinux [
+    dbus
+  ];
 
-  # Tests search for "afplay" binary which is built in to MacOS and not available in nixpkgs
-  preCheck = lib.optionalString stdenv.isDarwin ''
+  checkPhase = if stdenv.isDarwin then ''
+    # Tests search for "afplay" binary which is built in to macOS and not available in nixpkgs
     mkdir $TMP/bin
     ln -s ${coreutils}/bin/true $TMP/bin/afplay
-    export PATH="$TMP/bin:$PATH"
+    PATH="$TMP/bin:$PATH" pytest
+  '' else if stdenv.isLinux then ''
+    dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      pytest
+  '' else ''
+    pytest
   '';
 
   pythonImportsCheck = [ "notifypy" ];
diff --git a/pkgs/development/python-modules/nutils/default.nix b/pkgs/development/python-modules/nutils/default.nix
index 8848691079636..3089093d9cd18 100644
--- a/pkgs/development/python-modules/nutils/default.nix
+++ b/pkgs/development/python-modules/nutils/default.nix
@@ -1,15 +1,27 @@
-{ lib, python, buildPythonPackage, fetchPypi, numpy, treelog, stringly, coverage }:
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, numpy
+, treelog
+, stringly
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "nutils";
   version = "7.0";
+  format = "setuptools";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1sw310l2yb8wbcv2qhik8s928zjh2syzz2qxisglbzski9qdw2x6";
-  };
+  disabled = pythonOlder "3.7";
 
-  pythonImportChecks = [ "nutils" ];
+  src = fetchFromGitHub {
+    owner = "evalf";
+    repo = "nutils";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-V7lSMhwzc9+36uXMCy5uF241XwJ62Pdf59RUulOt4i8=";
+  };
 
   propagatedBuildInputs = [
     numpy
@@ -17,16 +29,24 @@ buildPythonPackage rec {
     stringly
   ];
 
-  checkInputs = [ coverage ];
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "nutils"
+  ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest
-  '';
+  disabledTestPaths = [
+    # AttributeError: type object 'setup' has no attribute '__code__'
+    "tests/test_cli.py"
+  ];
 
   meta = with lib; {
     description = "Numerical Utilities for Finite Element Analysis";
     homepage = "https://www.nutils.org/";
     license = licenses.mit;
-    maintainers = [ maintainers.Scriptkiddi ];
+    broken = stdenv.hostPlatform.isAarch64;
+    maintainers = with maintainers; [ Scriptkiddi ];
   };
 }
diff --git a/pkgs/development/python-modules/nvchecker/default.nix b/pkgs/development/python-modules/nvchecker/default.nix
index d4d9cf1811e04..bc650b7eafe1f 100644
--- a/pkgs/development/python-modules/nvchecker/default.nix
+++ b/pkgs/development/python-modules/nvchecker/default.nix
@@ -20,7 +20,7 @@
 
 buildPythonPackage rec {
   pname = "nvchecker";
-  version = "2.7";
+  version = "2.8";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -29,7 +29,7 @@ buildPythonPackage rec {
     owner = "lilydjwg";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-OPUqkHLG8PUlD5NP7q/BpKUvmAA8Jk1NvsPPVbImv0A=";
+    hash = "sha256-ikpjR1fEZBsSOE20jxTyarb9Pqn3Fz+TYOzXp0g4G9c=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/ocrmypdf/default.nix b/pkgs/development/python-modules/ocrmypdf/default.nix
index 72565e55419c8..6700b88479db8 100644
--- a/pkgs/development/python-modules/ocrmypdf/default.nix
+++ b/pkgs/development/python-modules/ocrmypdf/default.nix
@@ -83,7 +83,7 @@ buildPythonPackage rec {
   postPatch = ''
     # https://github.com/ocrmypdf/OCRmyPDF/issues/933
     substituteInPlace setup.cfg \
-      --replace "pdfminer.six!=20200720,>=20191110,<=20211012" "pdfminer.six!=20200720,>=20191110,<=20220319"
+      --replace "pdfminer.six!=20200720,>=20191110,<=20220319" "pdfminer.six!=20200720,>=20191110"
   '';
 
   pythonImportsCheck = [
diff --git a/pkgs/development/python-modules/oletools/default.nix b/pkgs/development/python-modules/oletools/default.nix
index 76019730eb70a..3ba66ac38edc3 100644
--- a/pkgs/development/python-modules/oletools/default.nix
+++ b/pkgs/development/python-modules/oletools/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "oletools";
-  version = "0.60";
+  version = "0.60.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "decalage2";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-gatUVkf8iT1OGnahX1BzQLDypCqhS1EvkAgUHJ6myA4=";
+    hash = "sha256-H3oL8sk2r267wV0hoHOq9r9DY2Atxs+hZUVb6tmHy0w=";
   };
 
   propagatedBuildInputs = [
@@ -47,6 +47,7 @@ buildPythonPackage rec {
   disabledTests = [
     # Test fails with AssertionError: Tuples differ: ('MS Word 2007+...
     "test_all"
+    "test_xlm"
   ];
 
   pythonImportsCheck = [
@@ -54,7 +55,7 @@ buildPythonPackage rec {
   ];
 
   meta = with lib; {
-    description = "Python tool to analyze MS OLE2 files and MS Office documents";
+    description = "Module to analyze MS OLE2 files and MS Office documents";
     homepage = "https://github.com/decalage2/oletools";
     license = with licenses; [ bsd2 /* and */ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/development/python-modules/openshift/default.nix b/pkgs/development/python-modules/openshift/default.nix
index c233f88c73f9c..497af2e735d18 100644
--- a/pkgs/development/python-modules/openshift/default.nix
+++ b/pkgs/development/python-modules/openshift/default.nix
@@ -44,8 +44,8 @@ buildPythonPackage rec {
   ];
 
   disabledTestPaths = [
-    # requires docker
-    "test/functional"
+    # requires kubeconfig
+    "test/integration"
   ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/openstep-plist/default.nix b/pkgs/development/python-modules/openstep-plist/default.nix
new file mode 100644
index 0000000000000..274294f593882
--- /dev/null
+++ b/pkgs/development/python-modules/openstep-plist/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, setuptools-scm
+, pytestCheckHook
+, cython
+, pythonImportsCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "openstep-plist";
+  version = "0.3.0";
+
+  src = fetchPypi {
+    pname = "openstep_plist";
+    inherit version;
+    sha256 = "sha256-KO4sGKjod5BwUFQ1MU2S1dG0DyiJ06mdroMbRDsugBk=";
+    extension = "zip";
+  };
+
+  nativeBuildInputs = [ setuptools-scm cython ];
+  checkInputs = [ pytestCheckHook ];
+  pythonImportsCheck = [ "openstep_plist" ];
+
+  meta = {
+    description = "Parser for the 'old style' OpenStep property list format also known as ASCII plist";
+    homepage = "https://github.com/fonttools/openstep-plist";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.BarinovMaxim ];
+  };
+}
diff --git a/pkgs/development/python-modules/oscrypto/default.nix b/pkgs/development/python-modules/oscrypto/default.nix
index b4d1c8fb88af5..96d4416ec9650 100644
--- a/pkgs/development/python-modules/oscrypto/default.nix
+++ b/pkgs/development/python-modules/oscrypto/default.nix
@@ -1,24 +1,25 @@
 { lib
 , stdenv
-, buildPythonPackage
 , asn1crypto
-, fetchPypi
+, buildPythonPackage
+, fetchFromGitHub
 , openssl
+, pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "oscrypto";
-  version = "1.2.1";
+  version = "1.3.0";
+  format = "setuptools";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "1546si2bdgkqnbvv4mw1hr4mhh6bq39d9z4wxgv1m7fq6miclb3x";
-  };
+  disabled = pythonOlder "3.7";
 
-  testSources = fetchPypi {
-    inherit version;
-    pname = "oscrypto_tests";
-    sha256 = "1ha68dsrbx6mlra44x0n81vscn17pajbl4yg7cqkk7mq1zfmjwks";
+  src = fetchFromGitHub {
+    owner = "wbond";
+    repo = pname;
+    rev = version;
+    hash = "sha256-CmDypmlc/kb6ONCUggjT1Iqd29xNSLRaGh5Hz36dvOw=";
   };
 
   propagatedBuildInputs = [
@@ -26,21 +27,26 @@ buildPythonPackage rec {
     openssl
   ];
 
-  preCheck = ''
-    tar -xf ${testSources}
-    mv oscrypto_tests-${version} tests
-
-    # remove tests that require network
-    sed -e '/TLSTests/d' -e '/TrustListTests/d' -i tests/__init__.py
-  '';
+  checkInputs = [
+    pytestCheckHook
+  ];
 
-  pythonImportsCheck = [ "oscrypto" ];
+  pythonImportsCheck = [
+    "oscrypto"
+  ];
 
   doCheck = !stdenv.isDarwin;
 
+  disabledTests = [
+    # Tests require network access
+    "TLSTests"
+    "TrustListTests"
+  ];
+
   meta = with lib; {
     description = "Encryption library for Python";
     homepage = "https://github.com/wbond/oscrypto";
     license = licenses.mit;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/development/python-modules/osmpythontools/default.nix b/pkgs/development/python-modules/osmpythontools/default.nix
index 23755583470aa..53c4dc1457e68 100644
--- a/pkgs/development/python-modules/osmpythontools/default.nix
+++ b/pkgs/development/python-modules/osmpythontools/default.nix
@@ -13,13 +13,13 @@
 
 buildPythonPackage rec {
   pname = "osmpythontools";
-  version = "0.3.3";
+  version = "0.3.4";
 
   src = fetchFromGitHub {
     owner = "mocnik-science";
     repo = "osm-python-tools";
-    rev = "v.${version}";
-    sha256 = "sha256-335zo/kOX4OpUwHas2aaPibY6zNmDaaHJpolbTQWqKk=";
+    rev = "v${version}";
+    sha256 = "sha256-7r42b/B9h7cMgM+wFS0Fink/3WjUNvz+PwLn3C5hawc=";
   };
 
   propagatedBuildInputs = [
@@ -54,6 +54,7 @@ buildPythonPackage rec {
     '';
     homepage = "https://github.com/mocnik-science/osm-python-tools";
     license = licenses.gpl3Only;
+    changelog = "https://raw.githubusercontent.com/mocnik-science/osm-python-tools/v${version}/version-history.md";
     maintainers = with maintainers; [ das-g ];
   };
 }
diff --git a/pkgs/development/python-modules/pandoc-xnos/default.nix b/pkgs/development/python-modules/pandoc-xnos/default.nix
new file mode 100644
index 0000000000000..ce365708b35de
--- /dev/null
+++ b/pkgs/development/python-modules/pandoc-xnos/default.nix
@@ -0,0 +1,30 @@
+{ buildPythonPackage
+, fetchFromGitHub
+, lib
+, pandocfilters
+, psutil
+}:
+
+buildPythonPackage rec {
+  pname = "pandoc-xnos";
+  version = "2.5.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-beiGvN0DS6s8wFjcDKozDuwAM2OApX3lTRaUDRUqLeU=";
+  };
+
+  propagatedBuildInputs = [ pandocfilters psutil ];
+
+  pythonImportsCheck = [ "pandocxnos" ];
+
+  meta = with lib; {
+    description = "Pandoc filter suite providing facilities for cross-referencing in markdown documents";
+    homepage = "https://github.com/tomduck/pandoc-xnos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+  };
+}
diff --git a/pkgs/development/python-modules/parameter-expansion-patched/default.nix b/pkgs/development/python-modules/parameter-expansion-patched/default.nix
index 18511e1c70fde..4f2c5eaf60946 100644
--- a/pkgs/development/python-modules/parameter-expansion-patched/default.nix
+++ b/pkgs/development/python-modules/parameter-expansion-patched/default.nix
@@ -3,19 +3,27 @@
 , fetchPypi
 , pytestCheckHook
 , pythonOlder
+, setuptools-scm
 }:
 
 buildPythonPackage rec {
   pname = "parameter-expansion-patched";
-  version = "0.2.1b4";
+  version = "0.3.1";
+  format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1vhshscjifi78qapzwn29gln6p8jhyc7cccszl8ai2jamhcph5zs";
+    hash = "sha256-/128ifveWC8zNlYtGWtxB3HpK6p7bVk1ahSwhaC2dAs=";
   };
 
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
   checkInputs = [
     pytestCheckHook
   ];
@@ -26,7 +34,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "POSIX parameter expansion in Python";
-    homepage = "https://github.com/nexB/commoncode";
+    homepage = "https://github.com/nexB/parameter_expansion_patched";
     license = licenses.asl20;
     maintainers = with maintainers; [ fab ];
   };
diff --git a/pkgs/development/python-modules/paramiko/default.nix b/pkgs/development/python-modules/paramiko/default.nix
index c5680c5c8a363..421d53b5a8812 100644
--- a/pkgs/development/python-modules/paramiko/default.nix
+++ b/pkgs/development/python-modules/paramiko/default.nix
@@ -14,14 +14,23 @@
 
 buildPythonPackage rec {
   pname = "paramiko";
-  version = "2.10.3";
+  version = "2.10.4";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-3bGXeFOu+CgEs11yoOWXskT6MmxATDUL0AxbAdv+5xo=";
+    sha256 = "sha256-PS5lC2gSzm0WCr/3AdbvRDTsl5NLE+lc8a09pw/7XFg=";
   };
 
+  patches = [
+    # Fix usage of dsa keys
+    # https://github.com/paramiko/paramiko/pull/1606/
+    (fetchpatch {
+      url = "https://github.com/paramiko/paramiko/commit/18e38b99f515056071fb27b9c1a4f472005c324a.patch";
+      sha256 = "sha256-bPDghPeLo3NiOg+JwD5CJRRLv2VEqmSx1rOF2Tf8ZDA=";
+    })
+  ];
+
   propagatedBuildInputs = [
     bcrypt
     cryptography
@@ -51,15 +60,6 @@ buildPythonPackage rec {
     "paramiko"
   ];
 
-  patches = [
-    # Fix usage of dsa keys
-    # https://github.com/paramiko/paramiko/pull/1606/
-    (fetchpatch {
-      url = "https://github.com/paramiko/paramiko/commit/18e38b99f515056071fb27b9c1a4f472005c324a.patch";
-      sha256 = "sha256-bPDghPeLo3NiOg+JwD5CJRRLv2VEqmSx1rOF2Tf8ZDA=";
-    })
-  ];
-
   __darwinAllowLocalNetworking = true;
 
   meta = with lib; {
@@ -72,6 +72,6 @@ buildPythonPackage rec {
       between python scripts. All major ciphers and hash methods are
       supported. SFTP client and server mode are both supported too.
     '';
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/passlib/default.nix b/pkgs/development/python-modules/passlib/default.nix
index ab29ab74d6849..8fd7b177a27c8 100644
--- a/pkgs/development/python-modules/passlib/default.nix
+++ b/pkgs/development/python-modules/passlib/default.nix
@@ -1,9 +1,10 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, nose
+, argon2-cffi
 , bcrypt
-, argon2_cffi
+, cryptography
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -15,9 +16,17 @@ buildPythonPackage rec {
     sha256 = "defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04";
   };
 
-  checkInputs = [ nose ];
-  propagatedBuildInputs = [ bcrypt argon2_cffi ];
-  propagatedNativeBuildInputs = [ argon2_cffi ];
+  passthru.extras-require = {
+    argon2 = [ argon2-cffi ];
+    bcrypt = [ bcrypt ];
+    totp = [ cryptography ];
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ] ++ passthru.extras-require.argon2
+    ++ passthru.extras-require.bcrypt
+    ++ passthru.extras-require.totp;
 
   meta = with lib; {
     description = "A password hashing library for Python";
diff --git a/pkgs/development/python-modules/pcapy-ng/default.nix b/pkgs/development/python-modules/pcapy-ng/default.nix
new file mode 100644
index 0000000000000..7fec65bfb52f2
--- /dev/null
+++ b/pkgs/development/python-modules/pcapy-ng/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, buildPythonPackage
+, cython
+, fetchFromGitHub
+, libpcap
+, pkgconfig
+, pytestCheckHook
+, python
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pcapy-ng";
+  version = "1.0.9";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "stamparm";
+    repo = pname;
+    rev = version;
+    hash = "sha256-6LA2n7Kv0MiZcqUJpi0lDN4Q+GcOttYw7hJwVqK/DU0=";
+  };
+
+  nativeBuildInputs = [
+    cython
+    pkgconfig
+  ];
+
+  buildInputs = [
+    libpcap
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    cd tests
+  '';
+
+  pythonImportsCheck = [
+    "pcapy"
+  ];
+
+  doCheck = pythonOlder "3.10";
+
+  pytestFlagsArray = [
+    "pcapytests.py"
+  ];
+
+  meta = with lib; {
+    description = "Module to interface with the libpcap packet capture library";
+    homepage = "https://github.com/stamparm/pcapy-ng/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/pdfminer_six/default.nix b/pkgs/development/python-modules/pdfminer_six/default.nix
index 449ea4f7fd778..b52106af285ba 100644
--- a/pkgs/development/python-modules/pdfminer_six/default.nix
+++ b/pkgs/development/python-modules/pdfminer_six/default.nix
@@ -1,8 +1,16 @@
-{ lib, buildPythonPackage, fetchFromGitHub, isPy3k, cryptography, chardet, pytestCheckHook }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy3k
+, cryptography
+, charset-normalizer
+, pytestCheckHook
+, ocrmypdf
+}:
 
 buildPythonPackage rec {
   pname = "pdfminer_six";
-  version = "20220319";
+  version = "20220506";
 
   disabled = !isPy3k;
 
@@ -10,10 +18,10 @@ buildPythonPackage rec {
     owner = "pdfminer";
     repo = "pdfminer.six";
     rev = version;
-    sha256 = "sha256-sjO7jmHSe4EDmJ1rfiXx+lsHxc+DfKeMet37Nbg03WQ=";
+    sha256 = "sha256-Lq+ou7+Lmr1H69L8X/vuky+/tXDD3bBBaCysymeRuXA=";
   };
 
-  propagatedBuildInputs = [ chardet cryptography ];
+  propagatedBuildInputs = [ charset-normalizer cryptography ];
 
   postInstall = ''
     for file in $out/bin/*.py; do
@@ -27,8 +35,16 @@ buildPythonPackage rec {
     substituteInPlace pdfminer/__init__.py --replace "__VERSION__" ${version}
   '';
 
+  pythonImportsCheck = [ "pdfminer" ];
+
   checkInputs = [ pytestCheckHook ];
 
+  passthru = {
+    tests = {
+      inherit ocrmypdf;
+    };
+  };
+
   meta = with lib; {
     description = "PDF parser and analyzer";
     homepage = "https://github.com/pdfminer/pdfminer.six";
diff --git a/pkgs/development/python-modules/peaqevcore/default.nix b/pkgs/development/python-modules/peaqevcore/default.nix
index e98122d2f399b..4b11263017dd4 100644
--- a/pkgs/development/python-modules/peaqevcore/default.nix
+++ b/pkgs/development/python-modules/peaqevcore/default.nix
@@ -6,14 +6,14 @@
 
 buildPythonPackage rec {
   pname = "peaqevcore";
-  version = "0.0.21";
+  version = "0.0.23";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-NTwLo/RtwSf3a43dAv8EK1NWuCsVjL+8+KozjvaPUm4=";
+    hash = "sha256-z59TJ+P7WNMcTyevi4etWUFUnBJXAVhDOnO4GXjjuR0=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/pex/default.nix b/pkgs/development/python-modules/pex/default.nix
index e582ad1a44623..a6d665651655d 100644
--- a/pkgs/development/python-modules/pex/default.nix
+++ b/pkgs/development/python-modules/pex/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "pex";
-  version = "2.1.84";
+  version = "2.1.87";
   format = "flit";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-tjPjLzNOO/PUU6EItLYyQw+KPekIwboTBn98T8wHpHw=";
+    hash = "sha256-LPOHpylnWxwEdPT3oJjbn8NkTY9tE/pMyGE8Dy7nwrU=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/pglast/default.nix b/pkgs/development/python-modules/pglast/default.nix
index a3836570f04bd..5c1a4b74a87d2 100644
--- a/pkgs/development/python-modules/pglast/default.nix
+++ b/pkgs/development/python-modules/pglast/default.nix
@@ -1,31 +1,35 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, isPy3k
+, pythonOlder
 , setuptools
 , pytest
 }:
 
 buildPythonPackage rec {
   pname = "pglast";
-  version = "3.9";
+  version = "3.10";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-fwXOfQW+ybhROdgayOAsgaFjf8HHh5jr5xczkBnA40w=";
+    hash = "sha256-rkoCtcBe5LBTTpmd+cj6s80UWXyTpMk74FipyK0t5go=";
   };
 
-  disabled = !isPy3k;
-
-  # ModuleNotFoundError: No module named 'pkg_resources'
-  propagatedBuildInputs = [ setuptools ];
+  propagatedBuildInputs = [
+    setuptools
+  ];
 
   postPatch = ''
     substituteInPlace setup.cfg \
       --replace "--cov=pglast --cov-report term-missing" ""
   '';
 
-  checkInputs = [ pytest ];
+  checkInputs = [
+    pytest
+  ];
 
   # pytestCheckHook doesn't work
   # ImportError: cannot import name 'parse_sql' from 'pglast'
@@ -38,6 +42,6 @@ buildPythonPackage rec {
     description = "PostgreSQL Languages AST and statements prettifier";
     changelog = "https://github.com/lelit/pglast/raw/v${version}/CHANGES.rst";
     license = licenses.gpl3Plus;
-    maintainers = [ maintainers.marsam ];
+    maintainers = with maintainers; [ marsam ];
   };
 }
diff --git a/pkgs/development/python-modules/phonemizer/backend-paths.patch b/pkgs/development/python-modules/phonemizer/backend-paths.patch
index 5f828aaaae13f..4b9f1fb4a70b6 100644
--- a/pkgs/development/python-modules/phonemizer/backend-paths.patch
+++ b/pkgs/development/python-modules/phonemizer/backend-paths.patch
@@ -1,42 +1,18 @@
-diff --git a/phonemizer/backend/espeak.py b/phonemizer/backend/espeak.py
-index b4712bf..5628fd5 100644
---- a/phonemizer/backend/espeak.py
-+++ b/phonemizer/backend/espeak.py
-@@ -82,10 +82,7 @@ class BaseEspeakBackend(BaseBackend):
-         if _ESPEAK_DEFAULT_PATH:
-             return _ESPEAK_DEFAULT_PATH
+diff --git a/phonemizer/backend/espeak/wrapper.py b/phonemizer/backend/espeak/wrapper.py
+index 84a79f5..8abcae1 100644
+--- a/phonemizer/backend/espeak/wrapper.py
++++ b/phonemizer/backend/espeak/wrapper.py
+@@ -143,12 +143,7 @@ class EspeakWrapper:
+                     f'is not a readable file')
+             return library.resolve()
  
--        espeak = distutils.spawn.find_executable('espeak-ng')
--        if not espeak:  # pragma: nocover
--            espeak = distutils.spawn.find_executable('espeak')
--        return espeak
-+        return "@espeak@"
+-        library = (
+-                ctypes.util.find_library('espeak-ng') or
+-                ctypes.util.find_library('espeak'))
+-        if not library:  # pragma: nocover
+-            raise RuntimeError(
+-                'failed to find espeak library')
++        library = '@libespeak@'
+         return library
  
-     @classmethod
-     def is_available(cls):
-diff --git a/phonemizer/backend/festival.py b/phonemizer/backend/festival.py
-index 3037be5..684ffff 100644
---- a/phonemizer/backend/festival.py
-+++ b/phonemizer/backend/festival.py
-@@ -80,7 +80,7 @@ class FestivalBackend(BaseBackend):
-         if _FESTIVAL_DEFAULT_PATH:
-             return _FESTIVAL_DEFAULT_PATH
- 
--        return distutils.spawn.find_executable('festival')
-+        return "@festival@"
- 
-     @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(
+     def _fetch_version_and_path(self):
diff --git a/pkgs/development/python-modules/phonemizer/default.nix b/pkgs/development/python-modules/phonemizer/default.nix
index 88bb69e9952ff..3d7d21bbb97c7 100644
--- a/pkgs/development/python-modules/phonemizer/default.nix
+++ b/pkgs/development/python-modules/phonemizer/default.nix
@@ -1,10 +1,13 @@
 { lib
+, stdenv
 , substituteAll
 , buildPythonApplication
 , fetchPypi
 , joblib
 , segments
 , attrs
+, dlinfo
+, typing-extensions
 , espeak-ng
 , pytestCheckHook
 , pytest-cov
@@ -26,9 +29,8 @@ buildPythonApplication rec {
   patches = [
     (substituteAll {
       src = ./backend-paths.patch;
-      espeak = "${lib.getBin espeak-ng}/bin/espeak";
-      # override festival path should you try to integrate it
-      festival = "";
+      libespeak = "${lib.getLib espeak-ng}/lib/libespeak-ng${stdenv.hostPlatform.extensions.sharedLibrary}";
+      # FIXME package festival
     })
     ./remove-intertwined-festival-test.patch
   ];
@@ -37,6 +39,8 @@ buildPythonApplication rec {
     joblib
     segments
     attrs
+    dlinfo
+    typing-extensions
   ];
 
   preCheck = ''
@@ -45,26 +49,26 @@ buildPythonApplication rec {
 
   checkInputs = [
     pytestCheckHook
-    pytest-cov
   ];
 
   # We tried to package festvial, but were unable to get the backend running,
   # so let's disable related tests.
-  pytestFlagsArray = [
-    "--ignore=test/test_festival.py"
+  disabledTestPaths = [
+    "test/test_festival.py"
   ];
 
   disabledTests = [
     "test_festival"
-    "test_relative"
-    "test_absolute"
+    "test_festival_path"
     "test_readme_festival_syll"
+    "test_unicode"
   ];
 
   meta = with lib; {
     homepage = "https://github.com/bootphon/phonemizer";
+    changelog = "https://github.com/bootphon/phonemizer/blob/v${version}/CHANGELOG.md";
     description = "Simple text to phones converter for multiple languages";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/development/python-modules/phonemizer/drop-readme-festival-test.patch b/pkgs/development/python-modules/phonemizer/drop-readme-festival-test.patch
deleted file mode 100644
index a60cdf2645a5f..0000000000000
--- a/pkgs/development/python-modules/phonemizer/drop-readme-festival-test.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/test/test_main.py b/test/test_main.py
-index 71d605a..d137cd7 100644
---- a/test/test_main.py
-+++ b/test/test_main.py
-@@ -63,7 +63,6 @@ def test_readme():
-     _test(u'hello world', u'həloʊ wɜːld ')
-     _test(u'hello world', u'həloʊ wɜːld ', '--verbose')
-     _test(u'hello world', u'həloʊ wɜːld ', '--quiet')
--    _test(u'hello world', u'hhaxlow werld', '-b festival --strip')
-     _test(u'hello world', u'həloʊ wɜːld ', '-l en-us')
-     _test(u'bonjour le monde', u'bɔ̃ʒuʁ lə mɔ̃d ', '-l fr-fr')
-     _test(u'bonjour le monde', u'b ɔ̃ ʒ u ʁ ;eword l ə ;eword m ɔ̃ d ;eword ',
diff --git a/pkgs/development/python-modules/phonemizer/remove-intertwined-festival-test.patch b/pkgs/development/python-modules/phonemizer/remove-intertwined-festival-test.patch
index d7d605df7f986..a0e0817bb72a0 100644
--- a/pkgs/development/python-modules/phonemizer/remove-intertwined-festival-test.patch
+++ b/pkgs/development/python-modules/phonemizer/remove-intertwined-festival-test.patch
@@ -1,15 +1,14 @@
 diff --git a/test/test_main.py b/test/test_main.py
-index 71d605a..0ea3c74 100644
+index b8c53e9..8f8c6d2 100644
 --- a/test/test_main.py
 +++ b/test/test_main.py
-@@ -63,17 +63,12 @@ def test_readme():
-     _test(u'hello world', u'həloʊ wɜːld ')
-     _test(u'hello world', u'həloʊ wɜːld ', '--verbose')
-     _test(u'hello world', u'həloʊ wɜːld ', '--quiet')
--    _test(u'hello world', u'hhaxlow werld', '-b festival --strip')
-     _test(u'hello world', u'həloʊ wɜːld ', '-l en-us')
-     _test(u'bonjour le monde', u'bɔ̃ʒuʁ lə mɔ̃d ', '-l fr-fr')
-     _test(u'bonjour le monde', u'b ɔ̃ ʒ u ʁ ;eword l ə ;eword m ɔ̃ d ;eword ',
+@@ -68,16 +68,11 @@ def test_readme():
+     _test('hello world', 'həloʊ wɜːld ', '--verbose')
+     _test('hello world', 'həloʊ wɜːld ', '--quiet')
+     _test('hello world', 'hello world | həloʊ wɜːld ', '--prepend-text')
+-    _test('hello world', 'hhaxlow werld', '-b festival --strip')
+     _test('bonjour le monde', 'bɔ̃ʒuʁ lə mɔ̃d ', '-l fr-fr')
+     _test('bonjour le monde', 'b ɔ̃ ʒ u ʁ ;eword l ə ;eword m ɔ̃ d ;eword ',
            '-l fr-fr -p " " -w ";eword "')
  
  
@@ -18,5 +17,87 @@ index 71d605a..0ea3c74 100644
 -    reason='festival-2.1 gives different results than further versions '
 -    'for syllable boundaries')
  def test_readme_festival_syll():
-     _test(u'hello world',
-           u'hh ax ;esyll l ow ;esyll ;eword w er l d ;esyll ;eword ',
+     _test('hello world',
+           'hh ax ;esyll l ow ;esyll ;eword w er l d ;esyll ;eword ',
+diff --git a/test/test_phonemize.py b/test/test_phonemize.py
+index d156c9e..2bbe371 100644
+--- a/test/test_phonemize.py
++++ b/test/test_phonemize.py
+@@ -213,18 +213,6 @@ def test_segments(njobs):
+         ('segments', True, True, False,
+             ['achi acho?', '', 'achi acho'],
+             [u'ʌtʃɪ ʌtʃʊ?', '', u'ʌtʃɪ ʌtʃʊ ']),
+-        ('festival', False, False, False,
+-            ['hello world!', '', 'goodbye'],
+-            ['hhaxlow werld ', 'guhdbay ']),
+-        ('festival', False, True, False,
+-            ['hello world!', '', 'goodbye'],
+-            ['hhaxlow werld!', 'guhdbay ']),
+-        ('festival', True, False, False,
+-            ['hello world!', '', 'goodbye'],
+-            ['hhaxlow werld ', '', 'guhdbay ']),
+-        ('festival', True, True, False,
+-            ['hello world!', '', 'goodbye'],
+-            ['hhaxlow werld!', '', 'guhdbay ']),
+         ('espeak', False, False, True,
+             ['hello world!', '', 'goodbye'],
+             [('hello world!', 'həloʊ wɜːld '), ('goodbye', 'ɡʊdbaɪ ')]),
+@@ -248,19 +236,7 @@ def test_segments(njobs):
+             [('achi acho?', u'ʌtʃɪ ʌtʃʊ '), ('', ''), ('achi acho', u'ʌtʃɪ ʌtʃʊ ')]),
+         ('segments', True, True, True,
+             ['achi acho?', '', 'achi acho'],
+-            [('achi acho?', u'ʌtʃɪ ʌtʃʊ?'), ('', ''), ('achi acho', u'ʌtʃɪ ʌtʃʊ ')]),
+-        ('festival', False, False, True,
+-            ['hello world!', '', 'goodbye'],
+-            [('hello world!', 'hhaxlow werld '), ('goodbye', 'guhdbay ')]),
+-        ('festival', False, True, True,
+-            ['hello world!', '', 'goodbye'],
+-            [('hello world!', 'hhaxlow werld!'), ('goodbye', 'guhdbay ')]),
+-        ('festival', True, False, True,
+-            ['hello world!', '', 'goodbye'],
+-            [('hello world!', 'hhaxlow werld '), ('', ''), ('goodbye', 'guhdbay ')]),
+-        ('festival', True, True, True,
+-            ['hello world!', '', 'goodbye'],
+-            [('hello world!', 'hhaxlow werld!'), ('', ''), ('goodbye', 'guhdbay ')])])
++            [('achi acho?', u'ʌtʃɪ ʌtʃʊ?'), ('', ''), ('achi acho', u'ʌtʃɪ ʌtʃʊ ')])])
+ def test_preserve_empty_lines(backend, empty_lines, punctuation, prepend_text, text, expected):
+     language = 'cree' if backend == 'segments' else 'en-us'
+ 
+@@ -278,11 +254,7 @@ def test_preserve_empty_lines(backend, empty_lines, punctuation, prepend_text, t
+         ('segments', False, False, [''], []),
+         ('segments', False, True, [''], []),
+         ('segments', True, False, [''], ['']),
+-        ('segments', True, True, [''], ['']),
+-        ('festival', False, False, [''], []),
+-        ('festival', False, True, [''], []),
+-        ('festival', True, False, [''], ['']),
+-        ('festival', True, True, [''], [''])])
++        ('segments', True, True, [''], [''])])
+ def test_empty_input(backend, empty_lines, punctuation, text, expected):
+     language = 'cree' if backend == 'segments' else 'en-us'
+ 
+diff --git a/test/test_punctuation.py b/test/test_punctuation.py
+index b2206ac..62e31c1 100644
+--- a/test/test_punctuation.py
++++ b/test/test_punctuation.py
+@@ -28,9 +28,6 @@ ESPEAK_150 = (EspeakBackend.version() >= (1, 50))
+ # True if we are using espeak>=1.49.3
+ ESPEAK_143 = (EspeakBackend.version() >= (1, 49, 3))
+ 
+-# True if we are using festival>=2.5
+-FESTIVAL_25 = (FestivalBackend.version() >= (2, 5))
+-
+ 
+ @pytest.mark.parametrize(
+     'inp, out', [
+@@ -179,9 +176,7 @@ def test_issue_54(text):
+         ('espeak', 'default', ['! ?', 'hey!'], ['! ?', 'heɪ!']),
+         ('espeak', '!', ['! ?', 'hey!'], ['! ', 'heɪ!']),
+         ('segments', 'default', ['! ?', 'hey!'], ['! ?', 'heːj!']),
+-        ('segments', '!', ['! ?', 'hey!'], ValueError),
+-        ('festival', 'default', ['! ?', 'hey!'], ['! ?', 'hhey!']),
+-        ('festival', '!', ['! ?', 'hey!'], ['! ', 'hhey!'])])
++        ('segments', '!', ['! ?', 'hey!'], ValueError)])
+ def test_issue55(backend, marks, text, expected):
+     if marks == 'default':
+         marks = Punctuation.default_marks()
diff --git a/pkgs/development/python-modules/phonenumbers/default.nix b/pkgs/development/python-modules/phonenumbers/default.nix
index 4f8dc93c671ec..2366d94ed8c91 100644
--- a/pkgs/development/python-modules/phonenumbers/default.nix
+++ b/pkgs/development/python-modules/phonenumbers/default.nix
@@ -6,12 +6,12 @@
 
 buildPythonPackage rec {
   pname = "phonenumbers";
-  version = "8.12.47";
+  version = "8.12.48";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-Vv1gXS9UYOHfIRcIW2U7s4MiKV7GWOasqvycl2hn1SI=";
+    sha256 = "sha256-rwaB+/6foHITdq2bcp53Ll0gvyz1DZ3Yyi8L3Xjp8M4=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/pip-requirements-parser/default.nix b/pkgs/development/python-modules/pip-requirements-parser/default.nix
new file mode 100644
index 0000000000000..0693fbf4fde87
--- /dev/null
+++ b/pkgs/development/python-modules/pip-requirements-parser/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, packaging
+, pytestCheckHook
+, pythonOlder
+, setuptools-scm
+}:
+
+buildPythonPackage rec {
+  pname = "pip-requirements-parser";
+  version = "31.2.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "nexB";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-i4hw3tS4i2ek2JzcDiGo5aFFJ9J2JJ9MB5vxDhOilb0=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  dontConfigure = true;
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = [
+    packaging
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "pip_requirements_parser"
+  ];
+
+  meta = with lib; {
+    description = "Module to parse pip requirements";
+    homepage = "https://github.com/nexB/pip-requirements-parser";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/pip-tools/default.nix b/pkgs/development/python-modules/pip-tools/default.nix
index e2f2f565862ff..2b079c8f00e3b 100644
--- a/pkgs/development/python-modules/pip-tools/default.nix
+++ b/pkgs/development/python-modules/pip-tools/default.nix
@@ -8,17 +8,18 @@
 , click
 , setuptools-scm
 , pep517
+, stdenv
 }:
 
 buildPythonPackage rec {
   pname = "pip-tools";
-  version = "6.6.0";
+  version = "6.6.1";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-mKokAERAocBInXGlZ6Tor98jx3gr/0g9EhmIHnMC3oM=";
+    sha256 = "sha256-Y04+jUcHJXwAQxPRap1sFMHOlNPA+h+Tw40mRAHy5PI=";
   };
 
   checkInputs = [
@@ -26,6 +27,11 @@ buildPythonPackage rec {
     pytest-xdist
   ];
 
+  preCheck = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    # https://github.com/python/cpython/issues/74570#issuecomment-1093748531
+    export no_proxy='*';
+  '';
+
   nativeBuildInputs = [
     setuptools-scm
   ];
diff --git a/pkgs/development/python-modules/pkgconfig/default.nix b/pkgs/development/python-modules/pkgconfig/default.nix
index fc593e6a48fb1..105beaccb9b0a 100644
--- a/pkgs/development/python-modules/pkgconfig/default.nix
+++ b/pkgs/development/python-modules/pkgconfig/default.nix
@@ -1,8 +1,15 @@
-{ lib, buildPythonPackage, fetchPypi, pkg-config }:
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pkg-config
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "pkgconfig";
   version = "1.5.5";
+  format = "pyproject";
 
   inherit (pkg-config)
     setupHooks
@@ -10,28 +17,39 @@ buildPythonPackage rec {
     suffixSalt
     targetPrefix
     baseBinName
-  ;
+    ;
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "deb4163ef11f75b520d822d9505c1f462761b4309b1bb713d08689759ea8b899";
+  src = fetchFromGitHub {
+    owner = "matze";
+    repo = "pkgconfig";
+    rev = "v${version}";
+    sha256 = "sha256-uuLUGRNLCR3NS9g6OPCI+qG7tPWsLhI3OE5WmSI3vm8=";
   };
 
-
-  propagatedNativeBuildInputs = [ pkg-config ];
-
-  doCheck = false;
-
   patches = [ ./executable.patch ];
+
   postPatch = ''
-    substituteInPlace pkgconfig/pkgconfig.py --replace 'PKG_CONFIG_EXE = "pkg-config"' 'PKG_CONFIG_EXE = "${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"'
+    rm pkgconfig/pkgconfig.py.orig
+    substituteInPlace pkgconfig/pkgconfig.py \
+      --replace 'PKG_CONFIG_EXE = "pkg-config"' 'PKG_CONFIG_EXE = "${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"'
+
+    # those pc files are missing and pkg-config validates that they exist
+    substituteInPlace data/fake-openssl.pc \
+      --replace "Requires: libssl libcrypto" ""
   '';
 
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedNativeBuildInputs = [ pkg-config ];
+
+  checkInputs = [ pytestCheckHook ];
+
   pythonImportsCheck = [ "pkgconfig" ];
 
   meta = with lib; {
     description = "Interface Python with pkg-config";
     homepage = "https://github.com/matze/pkgconfig";
     license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/pkginfo2/default.nix b/pkgs/development/python-modules/pkginfo2/default.nix
new file mode 100644
index 0000000000000..25b9b053748a1
--- /dev/null
+++ b/pkgs/development/python-modules/pkginfo2/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "pkginfo2";
+  version = "30.0.0";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "nexB";
+    repo = "pkginfo2";
+    rev = "v${version}";
+    hash = "sha256-E9EyaN3ncf/34vvvhRe0rwV28VrjqJo79YFgXq2lKWU=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "pkginfo2"
+  ];
+
+  meta = with lib; {
+    description = "Query metadatdata from sdists, bdists or installed packages";
+    homepage = "https://github.com/nexB/pkginfo2";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/pkutils/default.nix b/pkgs/development/python-modules/pkutils/default.nix
index 48afe57ef34a7..c4baa649cf94a 100644
--- a/pkgs/development/python-modules/pkutils/default.nix
+++ b/pkgs/development/python-modules/pkutils/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "pkutils";
-  version = "2.0.0";
+  version = "3.0.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "reubano";
     repo = "pkutils";
     rev = "v${version}";
-    sha256 = "sha256-jvRUjuxlcfmJOX50bnZR/pP2Axe1KDy9/KGXTL4yPxA=";
+    hash = "sha256-AK+xX+LPz6IVLZedsqMUm7G28ue0s3pXgIzxS4EHHLE=";
   };
 
   propagatedBuildInputs = [
@@ -28,12 +28,6 @@ buildPythonPackage rec {
     nose
   ];
 
-  postPatch = ''
-    # Remove when https://github.com/reubano/pkutils/pull/4 merged
-    substituteInPlace requirements.txt \
-      --replace "semver>=2.2.1,<2.7.3" "semver"
-  '';
-
   checkPhase = ''
     runHook preCheck
     nosetests
diff --git a/pkgs/development/python-modules/plugincode/default.nix b/pkgs/development/python-modules/plugincode/default.nix
index 7270685f41b12..2e54d5604e194 100644
--- a/pkgs/development/python-modules/plugincode/default.nix
+++ b/pkgs/development/python-modules/plugincode/default.nix
@@ -7,14 +7,19 @@
 , pluggy
 , pytestCheckHook
 , pytest-xdist
+, pythonOlder
 }:
+
 buildPythonPackage rec {
   pname = "plugincode";
-  version = "21.1.21";
+  version = "30.0.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "97b5a2c96f0365c80240be103ecd86411c68b11a16f137913cbea9129c54907a";
+    hash = "sha256-QjcQCvhlaBzcbBB8MIhbsx4cRy7XkdvUcmG7rM48Sos=";
   };
 
   dontConfigure = true;
@@ -38,8 +43,13 @@ buildPythonPackage rec {
     "plugincode"
   ];
 
+  disabledTests = [
+    # We don't want black as an input
+    "test_skeleton_codestyle"
+  ];
+
   meta = with lib; {
-    description = "A library that provides plugin functionality for ScanCode toolkit";
+    description = "Library that provides plugin functionality for ScanCode toolkit";
     homepage = "https://github.com/nexB/plugincode";
     license = licenses.asl20;
     maintainers = teams.determinatesystems.members;
diff --git a/pkgs/development/python-modules/plugwise/default.nix b/pkgs/development/python-modules/plugwise/default.nix
index 18d4fec6c1685..7bbfbdb27d3b2 100644
--- a/pkgs/development/python-modules/plugwise/default.nix
+++ b/pkgs/development/python-modules/plugwise/default.nix
@@ -13,27 +13,25 @@
 , pytest-asyncio
 , pytestCheckHook
 , python-dateutil
+, pythonOlder
 , pytz
 , semver
 }:
 
 buildPythonPackage rec {
   pname = "plugwise";
-  version = "0.17.8";
+  version = "0.18.3";
   format = "setuptools";
 
+  disabled = pythonOlder "3.7";
+
   src = fetchFromGitHub {
     owner = pname;
     repo = "python-plugwise";
     rev = "refs/tags/v${version}";
-    sha256 = "sha256-ZNlkdubB6E5ak+EaXsEBGa1xpm5ms4Rp3DG/M4/+WOg=";
+    sha256 = "sha256-aNlPOgUChLFkPPZtb3o4A49uoSBjxKaq3WtuupHlmi8=";
   };
 
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "aiohttp==3.8.0" "aiohttp>=3.8.0"
-  '';
-
   propagatedBuildInputs = [
     aiohttp
     async-timeout
@@ -54,16 +52,14 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
-  pythonImportsCheck = [ "plugwise" ];
+  pythonImportsCheck = [
+    "plugwise"
+  ];
 
   __darwinAllowLocalNetworking = true;
 
   meta = with lib; {
     description = "Python module for Plugwise Smiles, Stretch and USB stick";
-    longDescription = ''
-      XKNX is an asynchronous Python library for reading and writing KNX/IP
-      packets. It provides support for KNX/IP routing and tunneling devices.
-    '';
     homepage = "https://github.com/plugwise/python-plugwise";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/development/python-modules/poetry-dynamic-versioning/default.nix b/pkgs/development/python-modules/poetry-dynamic-versioning/default.nix
index b662452d8a0b4..bdc484fd1bb3c 100644
--- a/pkgs/development/python-modules/poetry-dynamic-versioning/default.nix
+++ b/pkgs/development/python-modules/poetry-dynamic-versioning/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "poetry-dynamic-versioning";
-  version = "0.15.0";
+  version = "0.16.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "mtkennerly";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-RHCP5SakizURg5MwD96Bxs/NvoTdPSCKWVYt5m4meLA=";
+    hash = "sha256-dLtZSm10OYWLRK4eRo83RczW0zBVAUF0HQXLQbeDJCk=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/pontos/default.nix b/pkgs/development/python-modules/pontos/default.nix
index 0ea1be9c21f0f..19f2a352d1ed8 100644
--- a/pkgs/development/python-modules/pontos/default.nix
+++ b/pkgs/development/python-modules/pontos/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "pontos";
-  version = "22.4.0";
+  version = "22.5.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -22,7 +22,7 @@ buildPythonPackage rec {
     owner = "greenbone";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-W+l5QIpum1uTsx/mxZGkRoJAZaC1viURVYg4Kvjv32Y=";
+    hash = "sha256-WTIuK5kPPqft4u44dN5NDJJKxIPrZGCJjZ5pR6HgOxw=";
   };
 
   nativeBuildInputs = [
@@ -53,6 +53,7 @@ buildPythonPackage rec {
     "test_find_unreleased_information"
     # CLI test fails
     "test_missing_cmd"
+    "test_update_file_changed"
   ];
 
   pythonImportsCheck = [
diff --git a/pkgs/development/python-modules/praw/default.nix b/pkgs/development/python-modules/praw/default.nix
index ddef2dcc1c1ee..967ff88be92cb 100644
--- a/pkgs/development/python-modules/praw/default.nix
+++ b/pkgs/development/python-modules/praw/default.nix
@@ -15,16 +15,16 @@
 
 buildPythonPackage rec {
   pname = "praw";
-  version = "7.5.0";
+  version = "7.6.0";
   format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "praw-dev";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-xcITJ349ek9Y0HvJwzKJ7xDUV74w2v3yTBaj5n8YJ58=";
+    sha256 = "sha256-y2eynMsjF4wZd31YoLdtk8F+ga7Z3R+IQkQK0x0RAGA=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/proglog/default.nix b/pkgs/development/python-modules/proglog/default.nix
index 9839ea9dd2338..3b630f719054d 100644
--- a/pkgs/development/python-modules/proglog/default.nix
+++ b/pkgs/development/python-modules/proglog/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "proglog";
-  version = "0.1.9";
+  version = "0.1.10";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "13diln950wk6nnn4rpmzx37rvrnpa7f803gwygiwbq1q46zwri6q";
+    sha256 = "sha256-ZYwoycguTK6y8l9Ij/+c6s4i+NabFdDByG1kJ15N2rQ=";
   };
 
   propagatedBuildInputs = [ tqdm ];
diff --git a/pkgs/development/python-modules/proton-client/default.nix b/pkgs/development/python-modules/proton-client/default.nix
index ca68c8cb54cf4..914f12a1546c0 100644
--- a/pkgs/development/python-modules/proton-client/default.nix
+++ b/pkgs/development/python-modules/proton-client/default.nix
@@ -56,5 +56,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/ProtonMail/proton-python-client";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ wolfangaukang ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/development/python-modules/protonvpn-nm-lib/0001-Patching-GIRepository.patch b/pkgs/development/python-modules/protonvpn-nm-lib/0001-Patching-GIRepository.patch
new file mode 100644
index 0000000000000..bb34dff0b5a68
--- /dev/null
+++ b/pkgs/development/python-modules/protonvpn-nm-lib/0001-Patching-GIRepository.patch
@@ -0,0 +1,22 @@
+From 2867f022aad754fe54d95222b3ae52f6e7f14c2f Mon Sep 17 00:00:00 2001
+From: "P. R. d. O" <d.ol.rod@tutanota.com>
+Date: Wed, 27 Apr 2022 21:49:12 -0600
+Subject: [PATCH] Patching GIRepository
+
+---
+ protonvpn_nm_lib/__init__.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/protonvpn_nm_lib/__init__.py b/protonvpn_nm_lib/__init__.py
+index e69de29..00b95f4 100644
+--- a/protonvpn_nm_lib/__init__.py
++++ b/protonvpn_nm_lib/__init__.py
+@@ -0,0 +1,5 @@
++import gi
++gi.require_version('GIRepository', '2.0')
++from gi.repository import GIRepository
++repo = GIRepository.Repository.get_default()
++repo.prepend_search_path('@networkmanager_path@')
+-- 
+2.35.1
+
diff --git a/pkgs/development/python-modules/protonvpn-nm-lib/default.nix b/pkgs/development/python-modules/protonvpn-nm-lib/default.nix
index 9f12f220cfe9c..31247cbc1996a 100644
--- a/pkgs/development/python-modules/protonvpn-nm-lib/default.nix
+++ b/pkgs/development/python-modules/protonvpn-nm-lib/default.nix
@@ -2,6 +2,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , pythonOlder
+, substituteAll
 , distro
 , jinja2
 , keyring
@@ -9,18 +10,19 @@
 , pygobject3
 , pyxdg
 , systemd
+, networkmanager
 }:
 
 buildPythonPackage rec {
   pname = "protonvpn-nm-lib";
-  version = "3.8.0";
+  version = "3.9.0";
   disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "ProtonVPN";
     repo = pname;
     rev = version;
-    sha256 = "sha256-fAaP9c66LcbZgezadGPUt400YRnrnFoBvpzlc1zxuc4=";
+    sha256 = "sha256-yV3xeIyPc2DJj5DOa5PA1MHt00bjJ/Y9zZK77s/XRAA=";
   };
 
   propagatedBuildInputs = [
@@ -33,7 +35,15 @@ buildPythonPackage rec {
     systemd
   ];
 
-  # Project has a dummy test.
+  patches = [
+    (substituteAll {
+      src = ./0001-Patching-GIRepository.patch;
+      networkmanager_path = "${networkmanager}/lib/girepository-1.0";
+    })
+  ];
+
+  # Checks cannot be run in the sandbox
+  # "Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory"
   doCheck = false;
 
   pythonImportsCheck = [ "protonvpn_nm_lib" ];
@@ -43,5 +53,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/ProtonVPN/protonvpn-nm-lib";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ wolfangaukang ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/development/python-modules/prox-tv/default.nix b/pkgs/development/python-modules/prox-tv/default.nix
index 1af942b926752..1202d45efa4a6 100644
--- a/pkgs/development/python-modules/prox-tv/default.nix
+++ b/pkgs/development/python-modules/prox-tv/default.nix
@@ -6,6 +6,7 @@
 , fetchFromGitHub
 , nose
 , numpy
+, stdenv
 }:
 
 buildPythonPackage {
@@ -28,6 +29,11 @@ buildPythonPackage {
     cffi
   ];
 
+  # this test is known to fail on darwin
+  checkPhase = ''
+    nosetests --exclude=test_tvp_1d ${lib.optionalString stdenv.isDarwin " --exclude=test_tv2_1d"}
+  '';
+
   propagatedNativeBuildInputs = [ cffi ];
 
   buildInputs = [ blas lapack ];
diff --git a/pkgs/development/python-modules/proxmoxer/default.nix b/pkgs/development/python-modules/proxmoxer/default.nix
index 33b233bd60969..9684fe84ba0fc 100644
--- a/pkgs/development/python-modules/proxmoxer/default.nix
+++ b/pkgs/development/python-modules/proxmoxer/default.nix
@@ -11,14 +11,16 @@
 
 buildPythonPackage rec {
   pname = "proxmoxer";
-  version = "1.3.0";
-  disabled = pythonOlder "3.6";
+  version = "1.3.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
-    rev = version;
-    sha256 = "sha256-3EpId20WVVjXA/wxwy1peyHPcXdiT3fprABkcNBpZtE=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-FY0JLDBoKmh85VoKh3UuPPRbMAIjs3l/fZM4owniH1c=";
   };
 
   propagatedBuildInputs = [
@@ -32,9 +34,14 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
-  # Tests require openssh_wrapper which is outdated and not available
-  pytestFlagsArray = [ "tests/paramiko_tests.py" ];
-  pythonImportsCheck = [ "proxmoxer" ];
+  pytestFlagsArray = [
+    # Tests require openssh_wrapper which is outdated and not available
+    "tests/paramiko_tests.py"
+  ];
+
+  pythonImportsCheck = [
+    "proxmoxer"
+  ];
 
   meta = with lib; {
     description = "Python wrapper for Proxmox API v2";
diff --git a/pkgs/development/python-modules/pure-pcapy3/default.nix b/pkgs/development/python-modules/pure-pcapy3/default.nix
index 636cbaff71cce..56b8da5db2328 100644
--- a/pkgs/development/python-modules/pure-pcapy3/default.nix
+++ b/pkgs/development/python-modules/pure-pcapy3/default.nix
@@ -1,17 +1,28 @@
-{ lib, buildPythonPackage, fetchPypi }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "pure-pcapy3";
   version = "1.0.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "14panfklap6wwi9avw46gvd7wg9mkv9xbixvbvmi1m2adpqlb7mr";
+    hash = "sha256-uZ5F8W1K1BDrXrvH1dOeNT1+2n6G8K1S5NxcRaez6pI=";
   };
 
+  pythonImportsCheck = [
+    "pure_pcapy"
+  ];
+
   meta = with lib; {
-    description = "Pure Python reimplementation of pcapy. This package is API compatible and a drop-in replacement.";
-    homepage = "https://bitbucket.org/viraptor/pure-pcapy";
+    description = "Reimplementation of pcapy";
+    homepage = "https://github.com/rcloran/pure-pcapy-3";
     license = licenses.bsd2;
     maintainers = with maintainers; [ etu ];
   };
diff --git a/pkgs/development/python-modules/puremagic/default.nix b/pkgs/development/python-modules/puremagic/default.nix
index e5d91f38fa2f0..aac505dd8f39a 100644
--- a/pkgs/development/python-modules/puremagic/default.nix
+++ b/pkgs/development/python-modules/puremagic/default.nix
@@ -6,14 +6,14 @@
 
 buildPythonPackage rec {
   pname = "puremagic";
-  version = "1.12";
+  version = "1.14";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-jAuuwImSExc2KjD6yi6WeMkdXpfOAE3Gp8HGaeBUeDg=";
+    sha256 = "sha256-PV3ybMfsmuu/hCoJEVovqF3FnqZBT6VoVyxEd115bLw=";
   };
 
   # test data not included on pypi
diff --git a/pkgs/development/python-modules/pushbullet/default.nix b/pkgs/development/python-modules/pushbullet/default.nix
index 92338d92531b9..e697683b9b847 100644
--- a/pkgs/development/python-modules/pushbullet/default.nix
+++ b/pkgs/development/python-modules/pushbullet/default.nix
@@ -3,7 +3,7 @@
 , fetchPypi
 , requests
 , websocket-client
-, python_magic
+, python-magic
 , cryptography
 , pytestCheckHook
 }:
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     sha256 = "917883e1af4a0c979ce46076b391e0243eb8fe0a81c086544bcfa10f53e5ae64";
   };
 
-  propagatedBuildInputs = [ cryptography requests websocket-client python_magic ];
+  propagatedBuildInputs = [ cryptography requests websocket-client python-magic ];
 
   preCheck = ''
     export PUSHBULLET_API_KEY=""
diff --git a/pkgs/development/python-modules/pweave/default.nix b/pkgs/development/python-modules/pweave/default.nix
index b97d51496521c..c9e2ff020f827 100644
--- a/pkgs/development/python-modules/pweave/default.nix
+++ b/pkgs/development/python-modules/pweave/default.nix
@@ -7,6 +7,7 @@
 , nbconvert
 , markdown
 , isPy3k
+, ipykernel
 }:
 
 buildPythonPackage rec {
@@ -21,7 +22,7 @@ buildPythonPackage rec {
   disabled = !isPy3k;
 
   buildInputs = [ mock pkgs.glibcLocales ];
-  propagatedBuildInputs = [ matplotlib nbconvert markdown ];
+  propagatedBuildInputs = [ ipykernel matplotlib nbconvert markdown ];
 
   # fails due to trying to run CSS as test
   doCheck = false;
diff --git a/pkgs/development/python-modules/py-canary/default.nix b/pkgs/development/python-modules/py-canary/default.nix
index 531624781b40f..6685d245833f3 100644
--- a/pkgs/development/python-modules/py-canary/default.nix
+++ b/pkgs/development/python-modules/py-canary/default.nix
@@ -10,14 +10,16 @@
 
 buildPythonPackage rec {
   pname = "py-canary";
-  version = "0.5.1";
+  version = "0.5.2";
+  format = "setuptools";
+
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "snjoetw";
     repo = pname;
-    rev = version;
-    sha256 = "0j743cc0wv7im3anx1vvdm79zyvw67swhc3zwwc1r8626dgnmxjr";
+    rev = "refs/tags/${version}";
+    hash = "sha256-PE31J82Uc6mErnh7nQ1pkIjnMbuCnlYEX2R0azknMHQ=";
   };
 
   propagatedBuildInputs = [
@@ -30,7 +32,9 @@ buildPythonPackage rec {
     requests-mock
   ];
 
-  pythonImportsCheck = [ "canary" ];
+  pythonImportsCheck = [
+    "canary"
+  ];
 
   meta = with lib; {
     description = "Python package for Canary Security Camera";
diff --git a/pkgs/development/python-modules/py-deprecate/default.nix b/pkgs/development/python-modules/py-deprecate/default.nix
new file mode 100644
index 0000000000000..ff921789bbfd5
--- /dev/null
+++ b/pkgs/development/python-modules/py-deprecate/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, scikit-learn
+, pytorch
+}:
+
+let
+  pname = "py-deprecate";
+  version = "0.3.2";
+in
+buildPythonPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "Borda";
+    repo = "pyDeprecate";
+    rev = "v${version}";
+    hash = "sha256-84RmQvLxwtLPQk3hX7Q6eeJeejhrO3t+mc95W1E85Fg=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+    scikit-learn
+  ];
+
+  pythonImportsCheck = [ "deprecate" ];
+
+  meta = with lib; {
+    description = "A module for marking deprecated functions or classes and re-routing to the new successors' instance. Used by torchmetrics";
+    homepage = "https://borda.github.io/pyDeprecate/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [
+      SomeoneSerge
+    ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/py-desmume/default.nix b/pkgs/development/python-modules/py-desmume/default.nix
index e9cff7eb8243a..0c700151f694e 100644
--- a/pkgs/development/python-modules/py-desmume/default.nix
+++ b/pkgs/development/python-modules/py-desmume/default.nix
@@ -3,29 +3,18 @@
 , alsa-lib, soundtouch, openal
 }:
 
-let
-  desmume = fetchFromGitHub {
-    owner = "SkyTemple";
-    repo = "desmume";
-    rev = "8e7af8ada883b7e91344985236f7c7c04ee795d7";
-    sha256 = "0svmv2rch9q347gbpbws4agymas8n014gh1ssaf91wx7jwn53842";
-  };
-in
 buildPythonPackage rec {
   pname = "py-desmume";
-  version = "0.0.3.post2";
+  version = "0.0.4.post2";
 
   src = fetchFromGitHub {
     owner = "SkyTemple";
     repo = pname;
     rev = version;
-    sha256 = "1chsg70k8kqnlasn88b04ww3yl0lay1bjxvz6lhp6s2cvsxv03x1";
+    sha256 = "sha256-a819+K/Ovnz53ViDKpUGGjeblWvrAO5ozt/tizdLKCY=";
+    fetchSubmodules = true;
   };
 
-  postPatch = ''
-    cp -R --no-preserve=mode ${desmume} __build_desmume
-  '';
-
   buildInputs = [ GitPython libpcap SDL2 alsa-lib soundtouch openal ];
   nativeBuildInputs = [ meson ninja pkg-config ];
   propagatedBuildInputs = [ pillow pygobject3 ];
diff --git a/pkgs/development/python-modules/py-nextbusnext/default.nix b/pkgs/development/python-modules/py-nextbusnext/default.nix
new file mode 100644
index 0000000000000..3b6d24d6168d5
--- /dev/null
+++ b/pkgs/development/python-modules/py-nextbusnext/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "py-nextbusnext";
+  version = "0.1.5";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ViViDboarder";
+    repo = "py_nextbus";
+    rev = "v${version}";
+    hash = "sha256-uUHA8v5iTISmPaTgk0RvcLLRM34f3JXUjZClKGXdMoI=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "py_nextbus" ];
+
+  meta = {
+    description = "Minimalistic Python client for the NextBus public API";
+    homepage = "https://github.com/ViViDboarder/py_nextbus";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/py3exiv2/default.nix b/pkgs/development/python-modules/py3exiv2/default.nix
index ef056d296b2e0..60a8ee7f17f94 100644
--- a/pkgs/development/python-modules/py3exiv2/default.nix
+++ b/pkgs/development/python-modules/py3exiv2/default.nix
@@ -1,24 +1,46 @@
-{ lib, buildPythonPackage, isPy3k, fetchPypi, stdenv, exiv2, boost, libcxx }:
+{ lib
+, stdenv
+, boost
+, buildPythonPackage
+, exiv2
+, fetchPypi
+, libcxx
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "py3exiv2";
-  version = "0.9.3";
-  disabled = !(isPy3k);
+  version = "0.11.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "838836e58ca22557d83d1f0ef918bcce899b4c2666340b924b940dcdebf1d18c";
+    hash = "sha256-ZgDaa4lxmdTaZhkblgRfPMxfVwENp2s6xdKSuD/MqEQ=";
   };
 
-  buildInputs = [ exiv2 boost ];
+  buildInputs = [
+    boost
+    exiv2
+  ];
+
+  # Work around Python distutils compiling C++ with $CC (see issue #26709)
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin [
+    "-I${lib.getDev libcxx}/include/c++/v1"
+  ];
+
+  pythonImportsCheck = [
+    "pyexiv2"
+  ];
 
-  # work around python distutils compiling C++ with $CC (see issue #26709)
-  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${lib.getDev libcxx}/include/c++/v1";
+  # Tests are not shipped
+  doCheck = false;
 
   meta = with lib; {
+    description = "Python binding to the library exiv2";
     homepage = "https://launchpad.net/py3exiv2";
-    description = "A Python3 binding to the library exiv2";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ vinymeuh ];
     platforms = with platforms; linux ++ darwin;
   };
diff --git a/pkgs/development/python-modules/pyTelegramBotAPI/default.nix b/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
index 36f25fce9d14a..13678edc8656a 100644
--- a/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
+++ b/pkgs/development/python-modules/pyTelegramBotAPI/default.nix
@@ -8,14 +8,14 @@
 
 buildPythonPackage rec {
   pname = "pyTelegramBotAPI";
-  version = "4.5.0";
+  version = "4.5.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-Jonbb26MbK/LKztFkB7IlaHQm98DPYn4lYK4ikDPpaE=";
+    hash = "sha256-ClzdkvH1uz1qh/q3prfn8n0eosY3y3mUscbb4EKbmJQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyahocorasick/default.nix b/pkgs/development/python-modules/pyahocorasick/default.nix
index 56e5636622b81..fd2c6de2c25c7 100644
--- a/pkgs/development/python-modules/pyahocorasick/default.nix
+++ b/pkgs/development/python-modules/pyahocorasick/default.nix
@@ -3,31 +3,30 @@
 , fetchFromGitHub
 , fetchpatch
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "pyahocorasick";
-  version = "1.4.1";
+  version = "2.0.0b1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "WojciechMula";
     repo = pname;
     rev = version;
-    sha256 = "13x3718if28l50474xrz1b9709kvnvdg3nzm6y8bh7mc9a4zyss5";
+    hash = "sha256-APpL99kOwzIQjePvRDeJ0FDm1kjBi6083JMKuBqtaRk=";
   };
 
-  patches = [
-    # Use proper temporary directory on Hydra
-    (fetchpatch {
-      url = "https://github.com/WojciechMula/pyahocorasick/commit/b6549e06f3cced7ffdf4d1b587cd7de12041f495.patch";
-      sha256 = "sha256-v3J/0aIPOnBhLlJ18r/l7O0MckqLOCtcmqIS9ZegaSI=";
-    })
+  checkInputs = [
+    pytestCheckHook
   ];
 
-  checkInputs = [ pytestCheckHook ];
-
-  pytestFlagsArray = [ "unittests.py" ];
-  pythonImportsCheck = [ "ahocorasick" ];
+  pythonImportsCheck = [
+    "ahocorasick"
+  ];
 
   meta = with lib; {
     description = "Python module implementing Aho-Corasick algorithm";
diff --git a/pkgs/development/python-modules/pyarrow/default.nix b/pkgs/development/python-modules/pyarrow/default.nix
index cfe63a34d85aa..141d90a5a971f 100644
--- a/pkgs/development/python-modules/pyarrow/default.nix
+++ b/pkgs/development/python-modules/pyarrow/default.nix
@@ -47,8 +47,10 @@ buildPythonPackage rec {
 
   PYARROW_WITH_DATASET = zero_or_one true;
   PYARROW_WITH_FLIGHT = zero_or_one _arrow-cpp.enableFlight;
-  PYARROW_WITH_PARQUET = zero_or_one true;
   PYARROW_WITH_HDFS = zero_or_one true;
+  PYARROW_WITH_PARQUET = zero_or_one true;
+  PYARROW_WITH_PLASMA = zero_or_one (!stdenv.isDarwin);
+  PYARROW_WITH_S3 = zero_or_one _arrow-cpp.enableS3;
 
   PYARROW_CMAKE_OPTIONS = [
     "-DCMAKE_INSTALL_RPATH=${ARROW_HOME}/lib"
@@ -73,6 +75,11 @@ buildPythonPackage rec {
     # enabled in nixpkgs.
     # Upstream Issue: https://issues.apache.org/jira/browse/ARROW-11393
     "--deselect=pyarrow/tests/test_memory.py::test_env_var"
+    # these tests require access to s3 via the internet
+    "--deselect=pyarrow/tests/test_fs.py::test_resolve_s3_region"
+    "--deselect=pyarrow/tests/test_fs.py::test_s3_real_aws"
+    "--deselect=pyarrow/tests/test_fs.py::test_s3_real_aws_region_selection"
+    "--deselect=pyarrow/tests/test_fs.py::test_s3_options"
   ] ++ lib.optionals stdenv.isDarwin [
     # Requires loopback networking
     "--deselect=pyarrow/tests/test_ipc.py::test_socket_"
@@ -84,16 +91,17 @@ buildPythonPackage rec {
     rm -r pyarrow/!(tests)
   '';
 
-  pythonImportsCheck = map (module: "pyarrow.${module}") [
+  pythonImportsCheck = [ "pyarrow" ] ++ map (module: "pyarrow.${module}") ([
     "compute"
     "csv"
     "dataset"
+    "feather"
     "flight"
     "fs"
     "hdfs"
     "json"
     "parquet"
-  ];
+  ] ++ lib.optionals (!stdenv.isDarwin) [ "plasma" ]);
 
   meta = with lib; {
     description = "A cross-language development platform for in-memory data";
diff --git a/pkgs/development/python-modules/pyautogui/default.nix b/pkgs/development/python-modules/pyautogui/default.nix
index 08ab81ba93d35..a7b35bc5710eb 100644
--- a/pkgs/development/python-modules/pyautogui/default.nix
+++ b/pkgs/development/python-modules/pyautogui/default.nix
@@ -1,14 +1,10 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, python3Packages
-, pkgs
-, fetchzip
 , mouseinfo
 , pygetwindow
 , pymsgbox
 , pyperclip
-, pyrect
 , pyscreeze
 , pytweening
 , tkinter
diff --git a/pkgs/development/python-modules/pychromecast/default.nix b/pkgs/development/python-modules/pychromecast/default.nix
index 32462707cb6ed..f547b2d160fd7 100644
--- a/pkgs/development/python-modules/pychromecast/default.nix
+++ b/pkgs/development/python-modules/pychromecast/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "pychromecast";
-  version = "11.0.0";
+  version = "12.1.2";
   format = "setuptools";
 
   disabled = !isPy3k;
@@ -18,7 +18,7 @@ buildPythonPackage rec {
   src = fetchPypi {
     pname = "PyChromecast";
     inherit version;
-    sha256 = "sha256-FRcjsXgRAFK2c7h2WhIMhdFurowi11V13O6+K+HrHvY=";
+    sha256 = "sha256-a+Ym5bovb/rvvBPdzthOi2Cp7xsBL3EDn8D3oLy0vaY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pycryptodome-test-vectors/default.nix b/pkgs/development/python-modules/pycryptodome-test-vectors/default.nix
index 6e7f71cee3061..f6a2b715ad916 100644
--- a/pkgs/development/python-modules/pycryptodome-test-vectors/default.nix
+++ b/pkgs/development/python-modules/pycryptodome-test-vectors/default.nix
@@ -5,12 +5,12 @@
 
 buildPythonPackage rec {
   pname = "pycryptodome-test-vectors";
-  version = "1.0.7";
+  version = "1.0.8";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-GfzFM3S4yk0V2zTaQ+rkljyHdvC0ETUNSccZImqoLIU=";
+    hash = "sha256-3BTh7as4CikvVfUx2xBZlUOaq/dAQNNFHpuRxWg/5N0=";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/pycurl/default.nix b/pkgs/development/python-modules/pycurl/default.nix
index e7f3b87ad0c3c..4b0e215f22c1a 100644
--- a/pkgs/development/python-modules/pycurl/default.nix
+++ b/pkgs/development/python-modules/pycurl/default.nix
@@ -2,6 +2,7 @@
 , buildPythonPackage
 , isPyPy
 , fetchPypi
+, fetchpatch
 , pythonOlder
 , curl
 , openssl
@@ -20,6 +21,16 @@ buildPythonPackage rec {
     sha256 = "sha256-qGOtGP9Hj1VFkkBXiHza5CLhsnRuQWdGFfaHSY6luIo=";
   };
 
+  patches = [
+    # Pull upstream patch for curl-3.83:
+    #  https://github.com/pycurl/pycurl/pull/753
+    (fetchpatch {
+      name = "curl-3.83.patch";
+      url = "https://github.com/pycurl/pycurl/commit/d47c68b1364f8a1a45ab8c584c291d44b762f7b1.patch";
+      sha256 = "sha256-/lGq7O7ZyytzBAxWJPigcWdvypM7OHLBcp9ItmX7z1g=";
+    })
+  ];
+
   preConfigure = ''
     substituteInPlace setup.py --replace '--static-libs' '--libs'
     export PYCURL_SSL_LIBRARY=openssl
diff --git a/pkgs/development/python-modules/pydeck/default.nix b/pkgs/development/python-modules/pydeck/default.nix
index 6626ee19d9200..9ca7638538a59 100644
--- a/pkgs/development/python-modules/pydeck/default.nix
+++ b/pkgs/development/python-modules/pydeck/default.nix
@@ -1,11 +1,33 @@
-{ lib, buildPythonPackage, fetchPypi, ipykernel, ipywidgets, pythonOlder, pytestCheckHook, pandas }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, fetchpatch
+, ipykernel
+, ipywidgets
+, pythonOlder
+, pytestCheckHook
+, pandas
+, jinja2
+, numpy
+, traitlets
+}:
 
 buildPythonPackage rec {
   pname = "pydeck";
   version = "0.7.1";
+  format = "pyproject";
 
   disabled = pythonOlder "3.7";
 
+  patches = [
+    # fixes build with latest setuptools
+    (fetchpatch {
+      url = "https://github.com/visgl/deck.gl/commit/9e68f73b28aa3bf0f2a887a4d8ccd2dc35677039.patch";
+      sha256 = "sha256-YVVoVbVdY5nV+17OwYIs9AwKGyzgKZHi655f4BLcdMU=";
+      stripLen = 2;
+    })
+  ];
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e";
@@ -14,12 +36,16 @@ buildPythonPackage rec {
   pythonImportsCheck = [ "pydeck" ];
 
   checkInputs = [ pytestCheckHook pandas ];
+
   # tries to start a jupyter server
   disabledTests = [ "test_nbconvert" ];
 
   propagatedBuildInputs = [
     ipykernel
     ipywidgets
+    jinja2
+    numpy
+    traitlets
   ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/pydeconz/default.nix b/pkgs/development/python-modules/pydeconz/default.nix
index 8d37521f3266c..965b4ecf62026 100644
--- a/pkgs/development/python-modules/pydeconz/default.nix
+++ b/pkgs/development/python-modules/pydeconz/default.nix
@@ -1,6 +1,7 @@
 { lib
 , aiohttp
 , aioresponses
+, async-timeout
 , buildPythonPackage
 , fetchFromGitHub
 , pytest-aiohttp
@@ -10,20 +11,21 @@
 
 buildPythonPackage rec {
   pname = "pydeconz";
-  version = "87";
+  version = "92";
   format = "setuptools";
 
-  disabled = pythonOlder "3.7";
+  disabled = pythonOlder "3.9";
 
   src = fetchFromGitHub {
     owner = "Kane610";
     repo = "deconz";
-    rev = "v${version}";
-    sha256 = "sha256-scNTHbUL8TOhkUJyib4cgL8A4gZ73asmFLi8aGw3sX8=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-qA7AgiiRBq1ekBcQDC8LlLnZLthA0QFZpxNUZdrMMIA=";
   };
 
   propagatedBuildInputs = [
     aiohttp
+    async-timeout
   ];
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/pydeps/default.nix b/pkgs/development/python-modules/pydeps/default.nix
index 9cfd0fe3c9cf7..cc2b726a64a93 100644
--- a/pkgs/development/python-modules/pydeps/default.nix
+++ b/pkgs/development/python-modules/pydeps/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "pydeps";
-  version = "1.10.17";
+  version = "1.10.18";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "thebjorn";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-V0LgHFvGvJqDHmyXJNb0sJjRuqGGDZpV467XDmdFg5k=";
+    hash = "sha256-AKpaGXUaKCVk1C8GqtWayZEU2xbz3eqbUenjZCtsAUY=";
   };
 
   buildInputs = [
diff --git a/pkgs/development/python-modules/pydicom/default.nix b/pkgs/development/python-modules/pydicom/default.nix
index 5c7d5ab92ab47..9310d0cf5553c 100644
--- a/pkgs/development/python-modules/pydicom/default.nix
+++ b/pkgs/development/python-modules/pydicom/default.nix
@@ -11,22 +11,22 @@
 
 let
   pname = "pydicom";
-  version = "2.2.2";
+  version = "2.3.0";
 
   src = fetchFromGitHub {
-    owner = "${pname}";
-    repo = "${pname}";
+    owner = "pydicom";
+    repo = "pydicom";
     rev = "v${version}";
-    sha256 = "sha256-p5hJAUsactv6UEvbVaF+zk4iapx98eYkC9Zo+lzFATA=";
+    hash = "sha256-CAQWaBkzecJ1VXQ5BnAUjmBMjh0I8y+gT7I4P4o2gqI=";
   };
 
   # Pydicom needs pydicom-data to run some tests. If these files aren't downloaded
   # before the package creation, it'll try to download during the checkPhase.
   test_data = fetchFromGitHub {
-    owner = "${pname}";
-    repo = "${pname}-data";
+    owner = "pydicom";
+    repo = "pydicom-data";
     rev = "bbb723879690bb77e077a6d57657930998e92bd5";
-    sha256 = "sha256-dCI1temvpNWiWJYVfQZKy/YJ4ad5B0e9hEKHJnEeqzk=";
+    hash = "sha256-dCI1temvpNWiWJYVfQZKy/YJ4ad5B0e9hEKHJnEeqzk=";
   };
 
 in
@@ -34,6 +34,8 @@ buildPythonPackage {
   inherit pname version src;
   disabled = pythonOlder "3.6";
 
+  format = "setuptools";
+
   propagatedBuildInputs = [
     numpy
     pillow
@@ -53,8 +55,8 @@ buildPythonPackage {
     ln -s ${test_data}/data_store/data $HOME/.pydicom/data
   '';
 
-  # This test try to remove a dicom inside $HOME/.pydicom/data/ and download it again.
   disabledTests = [
+    # tries to remove a dicom inside $HOME/.pydicom/data/ and download it again
     "test_fetch_data_files"
   ] ++ lib.optionals stdenv.isAarch64 [
     # https://github.com/pydicom/pydicom/issues/1386
diff --git a/pkgs/development/python-modules/pydyf/default.nix b/pkgs/development/python-modules/pydyf/default.nix
index 346a6f6e39b59..4cf44e3c67eb6 100644
--- a/pkgs/development/python-modules/pydyf/default.nix
+++ b/pkgs/development/python-modules/pydyf/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, fetchpatch
 , fetchPypi
 , isPy3k
 , pytestCheckHook
@@ -19,6 +20,15 @@ buildPythonPackage rec {
     sha256 = "sha256-Hi9d5IF09QXeAlp9HnzwG73ZQiyoq5RReCvwDuF4YCw=";
   };
 
+  patches = [
+    # Fix tests for Ghostscript 9.56
+    # Remove after v0.1.3 has been released
+    (fetchpatch {
+      url = "https://github.com/CourtBouillon/pydyf/commit/d4c34823f1d15368753c9c26f7acc7a24fc2d979.patch";
+      sha256 = "sha256-2hHZW/q5CbStbpSJYbm3b23qKXANEb5jbPGQ83uHC+Q=";
+    })
+  ];
+
   postPatch = ''
     substituteInPlace pyproject.toml \
       --replace "--isort --flake8 --cov --no-cov-on-fail" ""
diff --git a/pkgs/development/python-modules/pyeapi/default.nix b/pkgs/development/python-modules/pyeapi/default.nix
index a31123492d423..aa9e0983b7e36 100644
--- a/pkgs/development/python-modules/pyeapi/default.nix
+++ b/pkgs/development/python-modules/pyeapi/default.nix
@@ -1,10 +1,11 @@
 { lib
 , buildPythonPackage
-, pythonAtLeast
 , fetchFromGitHub
+, fetchpatch
+, mock
 , netaddr
 , pytestCheckHook
-, mock
+, pythonOlder
 }:
 
 buildPythonPackage rec {
@@ -12,8 +13,7 @@ buildPythonPackage rec {
   version = "0.8.4";
   format = "pyproject";
 
-  # https://github.com/arista-eosplus/pyeapi/issues/189
-  disabled = pythonAtLeast "3.10";
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "arista-eosplus";
@@ -22,21 +22,49 @@ buildPythonPackage rec {
     sha256 = "13chya6wix5jb82k67gr44bjx35gcdwz80nsvpv0gvzs6shn4d7b";
   };
 
-  propagatedBuildInputs = [ netaddr ];
+  propagatedBuildInputs = [
+    netaddr
+  ];
 
   checkInputs = [
     mock
     pytestCheckHook
   ];
 
-  pytestFlagsArray = [ "test/unit" ];
+  patches = [
+    # Fix usage of collection, https://github.com/arista-eosplus/pyeapi/pull/223
+    (fetchpatch {
+      name = "fix-collection-usage.patch";
+      url = "https://github.com/arista-eosplus/pyeapi/commit/81754f57eb095703cc474f527a0915360af76f68.patch";
+      sha256 = "sha256-ZNBTPRNmXCFVJeRAJxzIHmCOXZiGwU6t4ekSupU3BX8=";
+    })
+    (fetchpatch {
+      name = "fix-collection-usage-2.patch";
+      url = "https://github.com/arista-eosplus/pyeapi/commit/cc9c584e4a3167e3c1624cccb6bc0d9c9bcdbc1c.patch";
+      sha256 = "sha256-EY0i1Skm1llEQAAzvrb2yelhhLBkqKAFJB5ObAIxAYo=";
+      excludes = [
+        ".github/workflows/ci.yml"
+      ];
+    })
+    (fetchpatch {
+      name = "fix-collection-usage-3.patch";
+      url = "https://github.com/arista-eosplus/pyeapi/commit/dc35ab076687ea71665ae9524480b05a4e893909.patch";
+      sha256 = "sha256-xPaYULCPTxiQGB9Im/qLet+XebW9wq+TAfrxcgQxcoE=";
+    })
+  ];
 
-  pythonImportsCheck = [ "pyeapi" ];
+  pytestFlagsArray = [
+    "test/unit"
+  ];
+
+  pythonImportsCheck = [
+    "pyeapi"
+  ];
 
   meta = with lib; {
     description = "Client for Arista eAPI";
     homepage = "https://github.com/arista-eosplus/pyeapi";
     license = licenses.bsd3;
-    maintainers = [ maintainers.astro ];
+    maintainers = with maintainers; [ astro ];
   };
 }
diff --git a/pkgs/development/python-modules/pyevilgenius/default.nix b/pkgs/development/python-modules/pyevilgenius/default.nix
index 28bb1a2c4c0a2..b59f2ad4fe9eb 100644
--- a/pkgs/development/python-modules/pyevilgenius/default.nix
+++ b/pkgs/development/python-modules/pyevilgenius/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "pyevilgenius";
-  version = "1.0.0";
+  version = "2.0.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "home-assistant-libs";
     repo = pname;
     rev = version;
-    sha256 = "06xnl93sqklg7gx0z50vm79xwww0yyw05c1yynajc9aijfi8cmi3";
+    sha256 = "sha256-wjC32oq/lW3Z4XB+4SILRKIOuCgBKk1gruOo4uc/4/o=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyglet/default.nix b/pkgs/development/python-modules/pyglet/default.nix
index db436983f3afc..029061b801082 100644
--- a/pkgs/development/python-modules/pyglet/default.nix
+++ b/pkgs/development/python-modules/pyglet/default.nix
@@ -18,13 +18,13 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.5.23";
+  version = "1.5.24";
   pname = "pyglet";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-3ukgIDzzBhWcUDurti84eHJocIl39clF0oM3WUt5fEY=";
+    sha256 = "sha256-W0pNXlrVSUbjFJLqxn9ykuUaZXckRkGidxgPkKAZKo4=";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/pygtfs/default.nix b/pkgs/development/python-modules/pygtfs/default.nix
index 735990c094489..6bd6fedb64a43 100644
--- a/pkgs/development/python-modules/pygtfs/default.nix
+++ b/pkgs/development/python-modules/pygtfs/default.nix
@@ -4,6 +4,7 @@
 , fetchPypi
 , nose
 , pytz
+, pythonOlder
 , setuptools-scm
 , six
 , sqlalchemy
@@ -11,11 +12,14 @@
 
 buildPythonPackage rec {
   pname = "pygtfs";
-  version = "0.1.6";
+  version = "0.1.7";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0nx2idgza07kmvj7pcgpj3pqhw53v5rq63paw2ly51cjas2fv5pr";
+    hash = "sha256-sGJwtf8DVIrE4hcU3IksnyAAt8yf67UBJIiVILDSsv8=";
   };
 
   nativeBuildInputs = [
@@ -33,7 +37,9 @@ buildPythonPackage rec {
     nose
   ];
 
-  pythonImportsCheck = [ "pygtfs" ];
+  pythonImportsCheck = [
+    "pygtfs"
+  ];
 
   meta = with lib; {
     description = "Python module for GTFS";
diff --git a/pkgs/development/python-modules/pyicu/default.nix b/pkgs/development/python-modules/pyicu/default.nix
index 02226feff2ced..255231f8a4969 100644
--- a/pkgs/development/python-modules/pyicu/default.nix
+++ b/pkgs/development/python-modules/pyicu/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "PyICU";
-  version = "2.8.1";
+  version = "2.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-8LlUmof4e6fEE/E2edE3Jx4LN/HzmwEJrOOCV9TRSNY=";
+    sha256 = "sha256-PCnWzmVUYVcReho0ejA+zfzxp1ke1nn8iM3vQQiEWHg=";
   };
 
   nativeBuildInputs = [ icu ]; # for icu-config, but should be replaced with pkg-config
diff --git a/pkgs/development/python-modules/pyinfra/default.nix b/pkgs/development/python-modules/pyinfra/default.nix
index 130486a55f171..41e3c95a0410f 100644
--- a/pkgs/development/python-modules/pyinfra/default.nix
+++ b/pkgs/development/python-modules/pyinfra/default.nix
@@ -1,30 +1,33 @@
 { lib
 , buildPythonPackage
-, fetchPypi
-, pythonOlder
-, gevent
 , click
 , colorama
 , configparser
 , distro
+, fetchFromGitHub
+, gevent
 , jinja2
 , paramiko
+, pytestCheckHook
 , python-dateutil
+, pythonOlder
 , pywinrm
+, pyyaml
 , setuptools
-, six
 }:
 
 buildPythonPackage rec {
   pname = "pyinfra";
-  version = "2.0.1";
+  version = "2.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "sha256-157NtpA85FS27Ln1Xsvq5/qumSsr0WSDOhG0UwMUnRE=";
+  src = fetchFromGitHub {
+    owner = "Fizzadar";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-frjPxSATvXgeACT4kThoiPu04Ez8bs8FIPdf5PVuiSg=";
   };
 
   propagatedBuildInputs = [
@@ -37,16 +40,23 @@ buildPythonPackage rec {
     paramiko
     python-dateutil
     pywinrm
+    pyyaml
     setuptools
-    six
   ];
 
-  doCheck = false;
+  checkInputs = [
+    pytestCheckHook
+  ];
 
   pythonImportsCheck = [
     "pyinfra"
   ];
 
+  disabledTests = [
+    # Test requires SSH binary
+    "test_load_ssh_config"
+  ];
+
   meta = with lib; {
     description = "Python-based infrastructure automation";
     longDescription = ''
diff --git a/pkgs/development/python-modules/pyinsteon/default.nix b/pkgs/development/python-modules/pyinsteon/default.nix
index 0dc1c5be49c25..ed28f1c75226b 100644
--- a/pkgs/development/python-modules/pyinsteon/default.nix
+++ b/pkgs/development/python-modules/pyinsteon/default.nix
@@ -16,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "pyinsteon";
-  version = "1.0.16";
+  version = "1.1.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -24,8 +24,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
-    rev = version;
-    hash = "sha256-V0niLQAplN/uZ0YeN6g8uax3U/d0LUT4aXxe3ENXIHc=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-YoDCvYpbw06MXx371SNarrtQ0t4xlhwm1CBbl524P7c=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pykeepass/default.nix b/pkgs/development/python-modules/pykeepass/default.nix
index cb893c98ac928..27470b66a6244 100644
--- a/pkgs/development/python-modules/pykeepass/default.nix
+++ b/pkgs/development/python-modules/pykeepass/default.nix
@@ -1,6 +1,6 @@
 { lib, fetchFromGitHub, buildPythonPackage
 , lxml, pycryptodomex, construct
-, argon2_cffi, python-dateutil, future
+, argon2-cffi, python-dateutil, future
 , python
 }:
 
@@ -21,10 +21,10 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     lxml pycryptodomex construct
-    argon2_cffi python-dateutil future
+    argon2-cffi python-dateutil future
   ];
 
-  propagatedNativeBuildInputs = [ argon2_cffi ];
+  propagatedNativeBuildInputs = [ argon2-cffi ];
 
   checkPhase = ''
     ${python.interpreter} -m unittest tests.tests
diff --git a/pkgs/development/python-modules/pykulersky/default.nix b/pkgs/development/python-modules/pykulersky/default.nix
index 520f1fea2698b..83a5b58c7f1cb 100644
--- a/pkgs/development/python-modules/pykulersky/default.nix
+++ b/pkgs/development/python-modules/pykulersky/default.nix
@@ -11,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "pykulersky";
-  version = "0.5.3";
+  version = "0.5.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -20,7 +20,7 @@ buildPythonPackage rec {
     owner = "emlove";
     repo = pname;
     rev = version;
-    sha256 = "sha256-l3obfs5zo5DqArsDml8EZ+/uzab35Jjsuzw6U1XFJ3k=";
+    sha256 = "sha256-voD4tR+k5TKGjLXFK94GJy4+wUoP2cSFc5BWkCiinOg=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pylint-django/default.nix b/pkgs/development/python-modules/pylint-django/default.nix
index 61d49bd3ba0db..ca26f11ccb3b5 100644
--- a/pkgs/development/python-modules/pylint-django/default.nix
+++ b/pkgs/development/python-modules/pylint-django/default.nix
@@ -1,24 +1,25 @@
 { lib
 , buildPythonPackage
-, coverage
 , django
 , factory_boy
 , fetchFromGitHub
-, isPy3k
 , pylint-plugin-utils
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "pylint-django";
-  version = "2.5.2";
-  disabled = !isPy3k;
+  version = "2.5.3";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "PyCQA";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-VgGdV1T154LauclGo6jpLPUrYn5vTOWwvO4IXQ9se7c=";
+    hash = "sha256-5xEXjNMkOetRM9NDz0S4DsC6v39YQi34s2s+Fs56hYU=";
   };
 
   propagatedBuildInputs = [
@@ -27,7 +28,6 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    coverage
     factory_boy
     pytestCheckHook
   ];
@@ -38,6 +38,7 @@ buildPythonPackage rec {
     "external_factory_boy_noerror"
     "func_noerror_foreign_key_attributes"
     "func_noerror_foreign_key_key_cls_unbound"
+    "test_everything"
   ];
 
   pythonImportsCheck = [
diff --git a/pkgs/development/python-modules/pylint-plugin-utils/default.nix b/pkgs/development/python-modules/pylint-plugin-utils/default.nix
index f2bbef2cc8c14..46c12f0d0d07c 100644
--- a/pkgs/development/python-modules/pylint-plugin-utils/default.nix
+++ b/pkgs/development/python-modules/pylint-plugin-utils/default.nix
@@ -1,39 +1,46 @@
-{ buildPythonPackage
+{ lib
+, buildPythonPackage
 , fetchFromGitHub
-, isPy3k
-, lib
-
-# pythonPackages
 , pylint
+, pytestCheckHook
+, pythonOlder
 , toml
 }:
 
 buildPythonPackage rec {
   pname = "pylint-plugin-utils";
-  version = "0.6";
-  disabled = !isPy3k;
+  version = "0.7";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "PyCQA";
     repo = pname;
     rev = version;
-    sha256 = "1zapmbczxs1phrwbd0yvpfxhljd2pyv4pi9rwggaq38lcnc325s7";
+    hash = "sha256-uDsSSUWdlzuQz6umoYLbIotOYNEnLQu041ZZVMRd2ww=";
   };
 
   propagatedBuildInputs = [
-    pylint toml
+    pylint
+    toml
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "pylint_plugin_utils"
   ];
 
-  checkPhase = ''
-    python tests.py
-  '';
+  # https://github.com/PyCQA/pylint-plugin-utils/issues/26
+  doCheck = false;
 
   meta = with lib; {
     description = "Utilities and helpers for writing Pylint plugins";
     homepage = "https://github.com/PyCQA/pylint-plugin-utils";
-    license = licenses.gpl2;
-    maintainers = with maintainers; [
-      kamadorueda
-    ];
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ kamadorueda ];
   };
 }
diff --git a/pkgs/development/python-modules/pylint/default.nix b/pkgs/development/python-modules/pylint/default.nix
index dda915bb7ef33..263632e86546c 100644
--- a/pkgs/development/python-modules/pylint/default.nix
+++ b/pkgs/development/python-modules/pylint/default.nix
@@ -87,7 +87,16 @@ buildPythonPackage rec {
   meta = with lib; {
     homepage = "https://pylint.pycqa.org/";
     description = "A bug and style checker for Python";
+    longDescription = ''
+      Pylint is a Python static code analysis tool which looks for programming errors,
+      helps enforcing a coding standard, sniffs for code smells and offers simple
+      refactoring suggestions.
+      Pylint is shipped with following additional commands:
+      - pyreverse: an UML diagram generator
+      - symilar: an independent similarities checker
+      - epylint: Emacs and Flymake compatible Pylint
+    '';
     license = licenses.gpl1Plus;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ totoroot ];
   };
 }
diff --git a/pkgs/development/python-modules/pylsp-mypy/default.nix b/pkgs/development/python-modules/pylsp-mypy/default.nix
index a4725c4781c6b..c855127079773 100644
--- a/pkgs/development/python-modules/pylsp-mypy/default.nix
+++ b/pkgs/development/python-modules/pylsp-mypy/default.nix
@@ -22,6 +22,7 @@ buildPythonPackage rec {
 
   disabledTests = [
     "test_multiple_workspaces"
+    "test_option_overrides_dmypy"
   ];
 
   checkInputs = [ pytestCheckHook mock ];
diff --git a/pkgs/development/python-modules/pymbolic/default.nix b/pkgs/development/python-modules/pymbolic/default.nix
index 4faf04d289ee8..9d6d799fc32e4 100644
--- a/pkgs/development/python-modules/pymbolic/default.nix
+++ b/pkgs/development/python-modules/pymbolic/default.nix
@@ -1,43 +1,32 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, matchpy
 , pytools
-, pytest
-, six
-, sympy
-, pexpect
-, symengine
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "pymbolic";
-  version = "2021.1";
+  version = "2022.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "67d08ef95568408901e59f79591ba41fd3f2caaecb42b7497c38fc82fd60358c";
+    sha256 = "sha256-tS9FHdC5gD4D3jMgrzt85XIwcAYcbSMcACFvbaQlkBI=";
   };
 
-  postConfigure = ''
-    substituteInPlace setup.py \
-      --replace "\"pytest>=2.3\"," ""
-  '';
-
-  checkInputs = [ sympy pexpect symengine pytest ];
   propagatedBuildInputs = [
     pytools
-    six
   ];
 
-  # too many tests fail
-  doCheck = false;
-  checkPhase = ''
-    pytest test
-  '';
+  checkInputs = [
+    matchpy
+    pytestCheckHook
+  ];
 
   meta = with lib; {
     description = "A package for symbolic computation";
-    homepage = "https://mathema.tician.de/software/pymbolic";
+    homepage = "https://documen.tician.de/pymbolic/";
     license = licenses.mit;
     maintainers = [ maintainers.costrouc ];
   };
diff --git a/pkgs/development/python-modules/pymyq/default.nix b/pkgs/development/python-modules/pymyq/default.nix
index 5f151aa46e23e..94ff699507e1b 100644
--- a/pkgs/development/python-modules/pymyq/default.nix
+++ b/pkgs/development/python-modules/pymyq/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "pymyq";
-  version = "3.1.4";
+  version = "3.1.5";
   disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = "arraylabs";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-B8CnyM0nQr8HWnD5toMd8A57j/UtnQ2aWys0netOAtA=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-/2eWB4rtHPptfc8Tm0CGk0UB+Hq1EmNhWmdrpPiUJcw=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pynest2d/default.nix b/pkgs/development/python-modules/pynest2d/default.nix
index 9be7072a89fb3..dd290ad5782a3 100644
--- a/pkgs/development/python-modules/pynest2d/default.nix
+++ b/pkgs/development/python-modules/pynest2d/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchFromGitHub, python3, cmake
+{ lib, buildPythonPackage, fetchFromGitHub, python, cmake
 , libnest2d, sip_4, clipper }:
 
 buildPythonPackage rec {
@@ -19,7 +19,7 @@ buildPythonPackage rec {
   CLIPPER_PATH = "${clipper.out}";
 
   postPatch = ''
-     sed -i 's#''${Python3_SITEARCH}#${placeholder "out"}/${python3.sitePackages}#' cmake/SIPMacros.cmake
+     sed -i 's#''${Python3_SITEARCH}#${placeholder "out"}/${python.sitePackages}#' cmake/SIPMacros.cmake
    '';
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/pynetgear/default.nix b/pkgs/development/python-modules/pynetgear/default.nix
index 1eabc9daaee79..454c684076b5e 100644
--- a/pkgs/development/python-modules/pynetgear/default.nix
+++ b/pkgs/development/python-modules/pynetgear/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "pynetgear";
-  version = "0.9.4";
+  version = "0.10.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -16,7 +16,7 @@ buildPythonPackage rec {
     owner = "MatMaul";
     repo = pname;
     rev = "refs/tags/${version}";
-    sha256 = "sha256-/oxwUukYq/a0WeO/XhkMW3Jj7I1icZZUDwh1mdbGi08=";
+    sha256 = "sha256-l+hfE1YdSoMWLonSWKX0809M0OCYxpcvPd4gV9mS4DI=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pynws/default.nix b/pkgs/development/python-modules/pynws/default.nix
index df258cad930b8..eb19d273459bb 100644
--- a/pkgs/development/python-modules/pynws/default.nix
+++ b/pkgs/development/python-modules/pynws/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "pynws";
-  version = "1.3.2";
+  version = "1.4.1";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "MatthewFlamm";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0d2x3vlm444aar4wbdg48xzpgwng5m7i2d7h1z0pb6c514747sd1";
+    sha256 = "sha256-hAUD92wlQZ0BZ++e/KdIOgTzavmUkrH3esDhI3mbl5Y=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyomo/default.nix b/pkgs/development/python-modules/pyomo/default.nix
index 105f78b5824ff..3a9a80d57812d 100644
--- a/pkgs/development/python-modules/pyomo/default.nix
+++ b/pkgs/development/python-modules/pyomo/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "pyomo";
-  version = "6.4.0";
+  version = "6.4.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -17,8 +17,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     repo = "pyomo";
     owner = "pyomo";
-    rev = version;
-    hash = "sha256-FdUhne5Dn5hTIXMce1G6Zu6nx+AuP/JdK0a5fCE3hg8=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-LwlUib/CeVCCmgpTHtYHcFyxk9Esx1zhZ3yGHeGpugY=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyopenssl/default.nix b/pkgs/development/python-modules/pyopenssl/default.nix
index d629d97637fa7..1b847100a955a 100644
--- a/pkgs/development/python-modules/pyopenssl/default.nix
+++ b/pkgs/development/python-modules/pyopenssl/default.nix
@@ -74,5 +74,7 @@ buildPythonPackage rec {
     homepage = "https://github.com/pyca/pyopenssl";
     license = licenses.asl20;
     maintainers = with maintainers; [ SuperSandro2000 ];
+    # https://github.com/pyca/pyopenssl/issues/873
+    broken = stdenv.isDarwin && stdenv.isAarch64;
   };
 }
diff --git a/pkgs/development/python-modules/pypiserver/default.nix b/pkgs/development/python-modules/pypiserver/default.nix
index d1c6fee942cea..ae7a98cfbe8a0 100644
--- a/pkgs/development/python-modules/pypiserver/default.nix
+++ b/pkgs/development/python-modules/pypiserver/default.nix
@@ -1,15 +1,23 @@
-{ buildPythonPackage, fetchFromGitHub, lib, passlib, pytestCheckHook, setuptools
-, setuptools-git, twine, webtest }:
+{ buildPythonPackage
+, fetchFromGitHub
+, lib
+, passlib
+, pytestCheckHook
+, setuptools
+, setuptools-git
+, twine
+, webtest
+}:
 
 buildPythonPackage rec {
   pname = "pypiserver";
-  version = "1.4.2";
+  version = "1.5.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "1z5rsmqgin98m6ihy1ww42fxxr6jb4hzldn8vlc9ssv7sawdz8vz";
+    sha256 = "sha256-BK5vQsaWIMOnUqyeofAWJC1nQJPsTvmzl9i2893JCDI=";
   };
 
   nativeBuildInputs = [ setuptools-git ];
@@ -20,13 +28,23 @@ buildPythonPackage rec {
     export HOME=$TMPDIR
   '';
 
-  checkInputs = [ passlib pytestCheckHook twine webtest ];
+  checkInputs = [
+    passlib
+    pytestCheckHook
+    twine
+    webtest
+  ];
 
-  # These tests try to use the network
   disabledTests = [
-    "test_pipInstall_openOk"
-    "test_pipInstall_authedOk"
+    # fails to install the package
     "test_hash_algos"
+    "test_pip_install_authed_succeeds"
+    "test_pip_install_open_succeeds"
+  ];
+
+  disabledTestPaths = [
+    # requires docker service running
+    "docker/test_docker.py"
   ];
 
   pythonImportsCheck = [ "pypiserver" ];
@@ -35,6 +53,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/pypiserver/pypiserver";
     description = "Minimal PyPI server for use with pip/easy_install";
     license = with licenses; [ mit zlib ];
-    maintainers = [ maintainers.austinbutler ];
+    maintainers = with maintainers; [ austinbutler SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/pyrainbird/default.nix b/pkgs/development/python-modules/pyrainbird/default.nix
new file mode 100644
index 0000000000000..74f0ed630a26e
--- /dev/null
+++ b/pkgs/development/python-modules/pyrainbird/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, parameterized
+, pycryptodome
+, pytestCheckHook
+, pythonOlder
+, pyyaml
+, requests
+, responses
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "pyrainbird";
+  version = "0.4.3";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "jbarrancos";
+    repo = pname;
+    rev = version;
+    hash = "sha256-uRHknWvoPKPu3B5MbSEUlWqBKwAbNMwsgXuf6PZxhkU=";
+  };
+
+  propagatedBuildInputs = [
+    pycryptodome
+    pyyaml
+    requests
+    setuptools
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    parameterized
+    responses
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace "datetime" ""
+    substituteInPlace pytest.ini \
+      --replace "--cov=pyrainbird --cov-report=term-missing --pep8 --flakes --mccabe" ""
+  '';
+
+  pythonImportsCheck = [
+    "pyrainbird"
+  ];
+
+  meta = with lib; {
+    description = "Module to interact with Rainbird controllers";
+    homepage = "https://github.com/jbarrancos/pyrainbird/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/pyrogram/default.nix b/pkgs/development/python-modules/pyrogram/default.nix
index 4ef9493eeaa06..37e6467c4a793 100644
--- a/pkgs/development/python-modules/pyrogram/default.nix
+++ b/pkgs/development/python-modules/pyrogram/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "pyrogram";
-  version = "2.0.14";
+  version = "2.0.23";
 
   disabled = pythonOlder "3.7";
 
@@ -20,7 +20,7 @@ buildPythonPackage rec {
     owner = "pyrogram";
     repo = "pyrogram";
     rev = "v${version}";
-    hash = "sha256-uPScRNbN0XjdfokTNgzCdiVNRucDzNPR/60/IHEDUrg=";
+    hash = "sha256-+qJfqC6jLfrPwXl6zR7b21jY/s9leWeBxVgMa1IDRg4=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pysabnzbd/default.nix b/pkgs/development/python-modules/pysabnzbd/default.nix
new file mode 100644
index 0000000000000..e77b8cd681889
--- /dev/null
+++ b/pkgs/development/python-modules/pysabnzbd/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, aiohttp
+}:
+
+buildPythonPackage rec {
+  pname = "pysabnzbd";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jeradM";
+    repo = "pysabnzbd";
+    rev = "8e6cd1869c8cc99a4560ea1b178f0a1efd89e460"; # tag is missing
+    hash = "sha256-Ubl+kdcjMm1A7pa3Q5G+fFBwPIxA375Ci04/vVyUl+A=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  # upstream has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "pysabnzbd" ];
+
+  meta = {
+    description = "Python wrapper for SABnzbd API";
+    homepage = "https://github.com/jeradM/pysabnzbd";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/pyscf/default.nix b/pkgs/development/python-modules/pyscf/default.nix
index d08289d7573d5..5b2f3941b2b40 100644
--- a/pkgs/development/python-modules/pyscf/default.nix
+++ b/pkgs/development/python-modules/pyscf/default.nix
@@ -1,5 +1,4 @@
 { buildPythonPackage
-, python3
 , lib
 , fetchFromGitHub
 , cmake
diff --git a/pkgs/development/python-modules/pyskyqremote/default.nix b/pkgs/development/python-modules/pyskyqremote/default.nix
index e7e52991f6e84..2a3c7166f0cd3 100644
--- a/pkgs/development/python-modules/pyskyqremote/default.nix
+++ b/pkgs/development/python-modules/pyskyqremote/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "pyskyqremote";
-  version = "0.3.6";
+  version = "0.3.7";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
     owner = "RogerSelwyn";
     repo = "skyq_remote";
     rev = "refs/tags/${version}";
-    sha256 = "sha256-CCbLRb8eoMuYH3it2onfiUzHLW6sirePR/lqATpp4K0=";
+    sha256 = "sha256-VdoAtY+uZ4M6UNjYplqxx8S11eyKzqypW7IYCXOO2kQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pysnow/default.nix b/pkgs/development/python-modules/pysnow/default.nix
index 5baa9e9032159..36e45d9d8695f 100644
--- a/pkgs/development/python-modules/pysnow/default.nix
+++ b/pkgs/development/python-modules/pysnow/default.nix
@@ -6,7 +6,7 @@
 , httpretty
 , ijson
 , poetry-core
-, python_magic
+, python-magic
 , pytz
 , pytestCheckHook
 , requests-oauthlib
@@ -32,7 +32,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     brotli
     ijson
-    python_magic
+    python-magic
     pytz
     requests-oauthlib
   ];
diff --git a/pkgs/development/python-modules/pytest-cases/default.nix b/pkgs/development/python-modules/pytest-cases/default.nix
index 80e31e8effaec..96a434ecc5c60 100644
--- a/pkgs/development/python-modules/pytest-cases/default.nix
+++ b/pkgs/development/python-modules/pytest-cases/default.nix
@@ -10,14 +10,14 @@
 
 buildPythonPackage rec {
   pname = "pytest-cases";
-  version = "3.6.11";
+  version = "3.6.12";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-9rcXPoGxR3sxX3tFbv1O/T7kfrKnIB2XV1mJvSH5WQ4=";
+    sha256 = "sha256-pZ7GGqc+Nd71V+3I2LYVMYbaLBPG5+Ze+d7Mb5CONCI=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/python-engineio/default.nix b/pkgs/development/python-modules/python-engineio/default.nix
index da92963875769..9ddbc92125f27 100644
--- a/pkgs/development/python-modules/python-engineio/default.nix
+++ b/pkgs/development/python-modules/python-engineio/default.nix
@@ -16,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "python-engineio";
-  version = "4.3.1";
+  version = "4.3.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -25,7 +25,7 @@ buildPythonPackage rec {
     owner = "miguelgrinberg";
     repo = "python-engineio";
     rev = "v${version}";
-    sha256 = "sha256-8595zivZmff0agFiQd5Qyd/T3BDxYcsb4RjA5AWXVNM=";
+    sha256 = "sha256-RXIFfd4eeRLaDPe6+8jhIN2TI1yz/uDfnvWT95euaIo=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/python-lsp-black/default.nix b/pkgs/development/python-modules/python-lsp-black/default.nix
index dbd51166a22c5..ee66ea262c63b 100644
--- a/pkgs/development/python-modules/python-lsp-black/default.nix
+++ b/pkgs/development/python-modules/python-lsp-black/default.nix
@@ -1,27 +1,28 @@
 { lib
-, black
+, pythonOlder
 , buildPythonPackage
 , fetchFromGitHub
 , pytestCheckHook
+, black
 , python-lsp-server
-, pythonOlder
+, toml
 }:
 
 buildPythonPackage rec {
   pname = "python-lsp-black";
-  version = "1.1.0";
+  version = "1.2.1";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "python-lsp";
     repo = "python-lsp-black";
     rev = "v${version}";
-    sha256 = "sha256-WIQf1oz3b1PLIcXfQsu4hQ58nfp7l3J7zkcWNT6RbUY=";
+    sha256 = "sha256-qNA6Bj1VI0YEtRuvcMQZGWakQNNrJ2PqhozrLmQHPAg=";
   };
 
   checkInputs = [ pytestCheckHook ];
 
-  propagatedBuildInputs = [ black python-lsp-server ];
+  propagatedBuildInputs = [ black python-lsp-server toml ];
 
   meta = with lib; {
     homepage = "https://github.com/python-lsp/python-lsp-black";
diff --git a/pkgs/development/python-modules/python-lsp-server/default.nix b/pkgs/development/python-modules/python-lsp-server/default.nix
index 313524351658a..aeb2d7567790d 100644
--- a/pkgs/development/python-modules/python-lsp-server/default.nix
+++ b/pkgs/development/python-modules/python-lsp-server/default.nix
@@ -20,6 +20,7 @@
 , pythonOlder
 , rope
 , setuptools
+, setuptools-scm
 , stdenv
 , ujson
 , yapf
@@ -36,7 +37,8 @@
 
 buildPythonPackage rec {
   pname = "python-lsp-server";
-  version = "1.3.3";
+  version = "1.4.1";
+  format = "pyproject";
 
   disabled = pythonOlder "3.7";
 
@@ -44,13 +46,18 @@ buildPythonPackage rec {
     owner = "python-lsp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-F8f9NAjPWkm01D/KwFH0oA6nQ3EF4ZVCCckZTL4A35Y=";
+    sha256 = "sha256-rEfjxHw2NIVIa8RepxLPiXkRFhcGWLzm6w43n60zkFE=";
   };
 
   postPatch = ''
     substituteInPlace setup.cfg \
       --replace "--cov-report html --cov-report term --junitxml=pytest.xml" "" \
-      --replace "--cov pylsp --cov test" ""
+      --replace "--cov pylsp --cov test" "" \
+      --replace "mccabe>=0.6.0,<0.7.0" "mccabe"
+  '';
+
+  preBuild = ''
+    export SETUPTOOLS_SCM_PRETEND_VERSION=${version}
   '';
 
   propagatedBuildInputs = [
@@ -58,6 +65,7 @@ buildPythonPackage rec {
     pluggy
     python-lsp-jsonrpc
     setuptools
+    setuptools-scm
     ujson
   ] ++ lib.optional withAutopep8 autopep8
   ++ lib.optional withFlake8 flake8
@@ -79,10 +87,7 @@ buildPythonPackage rec {
   # pyqt5 is broken on aarch64-darwin
   ++ lib.optionals (!stdenv.isDarwin || !stdenv.isAarch64) [ pyqt5 ];
 
-  disabledTests = [
-    # pytlint output changed
-    "test_lint_free_pylint"
-  ] ++ lib.optional (!withPycodestyle) "test_workspace_loads_pycodestyle_config"
+  disabledTests = lib.optional (!withPycodestyle) "test_workspace_loads_pycodestyle_config"
   # pyqt5 is broken on aarch64-darwin
   ++ lib.optional (stdenv.isDarwin && stdenv.isAarch64) "test_pyqt_completion";
 
diff --git a/pkgs/development/python-modules/python-magic/default.nix b/pkgs/development/python-modules/python-magic/default.nix
index 381ea67138487..a9fa50a11c699 100644
--- a/pkgs/development/python-modules/python-magic/default.nix
+++ b/pkgs/development/python-modules/python-magic/default.nix
@@ -36,6 +36,6 @@ buildPythonPackage rec {
     description = "A python interface to the libmagic file type identification library";
     homepage = "https://github.com/ahupp/python-magic";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/python-memcached/default.nix b/pkgs/development/python-modules/python-memcached/default.nix
new file mode 100644
index 0000000000000..1f69062a64e91
--- /dev/null
+++ b/pkgs/development/python-modules/python-memcached/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, six
+, mock
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "python-memcached";
+  version = "1.59";
+
+  src = fetchFromGitHub {
+    owner = "linsomniac";
+    repo = "python-memcached";
+    rev = version;
+    hash = "sha256-tHqkwNloPTXOrEGtuDLu1cTw4SKJ4auv8UUbqdNp698=";
+  };
+
+  propagatedBuildInputs = [
+    six
+  ];
+
+  checkInputs = [
+    mock
+    pytestCheckHook
+  ];
+
+  # all tests fail
+  doCheck = false;
+
+  pythonImportsCheck = [ "memcache" ];
+
+  meta = with lib; {
+    description = "Pure python memcached client";
+    homepage = "https://github.com/linsomniac/python-memcached";
+    license = licenses.psfl;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/python-rabbitair/default.nix b/pkgs/development/python-modules/python-rabbitair/default.nix
new file mode 100644
index 0000000000000..7ebc98426d99d
--- /dev/null
+++ b/pkgs/development/python-modules/python-rabbitair/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, buildPythonPackage
+, cryptography
+, fetchFromGitHub
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+, typing-extensions
+, zeroconf
+}:
+
+buildPythonPackage rec {
+  pname = "python-rabbitair";
+  version = "0.0.8";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "rabbit-air";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-CGr7NvnGRNTiKq5BpB/zmfgyd/2ggTbO0nj+Q+MavTs=";
+  };
+
+  propagatedBuildInputs = [
+    cryptography
+    zeroconf
+  ] ++ lib.optionals (pythonOlder "3.8") [
+    typing-extensions
+  ];
+
+  checkInputs = [
+    pytest-asyncio
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "rabbitair"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "test_info"
+    "test_no_response"
+    "test_protocol_error"
+    "test_sequential_requests"
+    "test_set_state"
+    "test_state_a2"
+    "test_state_a3"
+    "test_zeroconf"
+  ];
+
+  meta = with lib; {
+    description = "Module for the control of Rabbit Air air purifiers";
+    homepage = "https://github.com/rabbit-air/python-rabbitair";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/python-socketio/default.nix b/pkgs/development/python-modules/python-socketio/default.nix
index e41942317f993..2e35def271025 100644
--- a/pkgs/development/python-modules/python-socketio/default.nix
+++ b/pkgs/development/python-modules/python-socketio/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "python-socketio";
-  version = "5.5.2";
+  version = "5.6.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "miguelgrinberg";
     repo = "python-socketio";
     rev = "v${version}";
-    sha256 = "sha256-ZTjh9gtnJwFG2qWH6FBrvLHKsEuTjkcKL6j6Mdos6zo=";
+    sha256 = "sha256-zsTSz2RHtr4LqqPCkvHcaAw7RvfkHTNDm83OS+SgMUU=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/python-sql/default.nix b/pkgs/development/python-modules/python-sql/default.nix
index a32dcfa5f0037..91012839d0538 100644
--- a/pkgs/development/python-modules/python-sql/default.nix
+++ b/pkgs/development/python-modules/python-sql/default.nix
@@ -1,18 +1,34 @@
-{ lib, fetchPypi, buildPythonPackage }:
+{ lib
+, fetchPypi
+, buildPythonPackage
+, pytestCheckHook
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "python-sql";
-  version = "1.3.0";
+  version = "1.4.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9d603a6273f2f5966bab7ce77e1f50e88818d5237ac85e566e2dc84ebfabd176";
+    hash = "sha256-b+dkCC9IiR2Ffqfm+kJfpU8TUx3fa4nyTAmOZGrRtLY=";
   };
 
-  meta = {
-    homepage = "https://python-sql.tryton.org/";
-    description = "A library to write SQL queries in a pythonic way";
-    maintainers = with lib.maintainers; [ johbo ];
-    license = lib.licenses.bsd3;
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "sql"
+  ];
+
+  meta = with lib; {
+    description = "Library to write SQL queries in a pythonic way";
+    homepage = "https://pypi.org/project/python-sql/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ johbo ];
   };
 }
diff --git a/pkgs/development/python-modules/python-trovo/default.nix b/pkgs/development/python-modules/python-trovo/default.nix
index d7fa18cfba3ef..b2f58f99f6447 100644
--- a/pkgs/development/python-modules/python-trovo/default.nix
+++ b/pkgs/development/python-modules/python-trovo/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonPackage rec {
   pname = "python-trovo";
-  version = "0.1.5";
+  version = "0.1.6";
 
   disabled = pythonOlder "3.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-JUJax9nk4NqpMMrbDmQhcy22GIqPha+K4tudQ98PvlE=";
+    sha256 = "sha256-g1RDHSNGbGT1G2ej7A8WzyR17FaNPySfsAuKbHddmtQ=";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/pkgs/development/python-modules/pytomorrowio/default.nix b/pkgs/development/python-modules/pytomorrowio/default.nix
index 2c695fc7e05a6..abc90f2a6c7f4 100644
--- a/pkgs/development/python-modules/pytomorrowio/default.nix
+++ b/pkgs/development/python-modules/pytomorrowio/default.nix
@@ -3,19 +3,20 @@
 , pythonOlder
 , fetchPypi
 , aiohttp
+, pytest-aiohttp
 , pytest-asyncio
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "pytomorrowio";
-  version = "0.2.1";
+  version = "0.3.3";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "aabb41436fb5834b687d73b334d95be07a18d5943d27a1fd06271b749558ba0e";
+    sha256 = "0d4f81dc90aefa26da18b927473cb7b08b093f7732301983ef5f0b1ca1181c62";
   };
 
   propagatedBuildInputs = [
@@ -23,6 +24,7 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    pytest-aiohttp
     pytest-asyncio
     pytestCheckHook
   ];
diff --git a/pkgs/development/python-modules/pytorch-lightning/default.nix b/pkgs/development/python-modules/pytorch-lightning/default.nix
index d3c9a96551591..0b562f4b5a26d 100644
--- a/pkgs/development/python-modules/pytorch-lightning/default.nix
+++ b/pkgs/development/python-modules/pytorch-lightning/default.nix
@@ -3,15 +3,18 @@
 , fetchFromGitHub
 , isPy27
 , future
+, fsspec
+, packaging
 , pytestCheckHook
 , pytorch
 , pyyaml
 , tensorboard
+, torchmetrics
 , tqdm }:
 
 buildPythonPackage rec {
   pname = "pytorch-lightning";
-  version = "1.5.10";
+  version = "1.6.3";
 
   disabled = isPy27;
 
@@ -19,14 +22,17 @@ buildPythonPackage rec {
     owner = "PyTorchLightning";
     repo = pname;
     rev = version;
-    sha256 = "sha256-GP6/VZuRv8dS5wKQW7RbtOSa2vV9Af2Jp+ioEW3bIgc=";
+    hash = "sha256-MEUFrj84y5lQfwbC9s9fJNOKo+Djeh+E/eDc8KeX7V4=";
   };
 
   propagatedBuildInputs = [
+    packaging
     future
+    fsspec
     pytorch
     pyyaml
     tensorboard
+    torchmetrics
     tqdm
   ];
 
diff --git a/pkgs/development/python-modules/pytube/default.nix b/pkgs/development/python-modules/pytube/default.nix
index d00d26f1bae29..c9ee34c05c69c 100644
--- a/pkgs/development/python-modules/pytube/default.nix
+++ b/pkgs/development/python-modules/pytube/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "pytube";
-  version = "12.0.0";
+  version = "12.1.0";
 
   disabled = pythonOlder "3.6";
 
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "pytube";
     repo = "pytube";
     rev = "v${version}";
-    hash = "sha256-1zoLd4J7aCR5omMpCZhlttWDu7mYyKCypH3JEB4VGXg=";
+    hash = "sha256-o4kfZLkEs+XYor2sS2lfuDZkPfHrB+rDoxroc4f55gc=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/pyupgrade/default.nix b/pkgs/development/python-modules/pyupgrade/default.nix
index e2c48948b9784..ffd7a89dbb0ce 100644
--- a/pkgs/development/python-modules/pyupgrade/default.nix
+++ b/pkgs/development/python-modules/pyupgrade/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "pyupgrade";
-  version = "2.32.0";
+  version = "2.32.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "asottile";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-VSGi93R8O0LGKFBkWMclje64suOqq/Gf2vE2OHXLP5Q=";
+    sha256 = "sha256-fjahaMetgZaH+IzdyaZSkVbasgc0bqQL+1ae0OJriT0=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/pyvesync/default.nix b/pkgs/development/python-modules/pyvesync/default.nix
index 45404c107fb1b..f1421e8c98069 100644
--- a/pkgs/development/python-modules/pyvesync/default.nix
+++ b/pkgs/development/python-modules/pyvesync/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "pyvesync";
-  version = "2.0.2";
+  version = "2.0.3";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-SsSzwuJvDbQ1AzF+q5bjOnFaR6M2UFixtlmk6sgjKOg=";
+    sha256 = "sha256-/hPDCqTeqEzxfqv8B5wdDzmzzNuXYqOVHX32N/J6nmU=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyvex/default.nix b/pkgs/development/python-modules/pyvex/default.nix
index 799271371c7b1..682bc0d80ac71 100644
--- a/pkgs/development/python-modules/pyvex/default.nix
+++ b/pkgs/development/python-modules/pyvex/default.nix
@@ -12,14 +12,14 @@
 
 buildPythonPackage rec {
   pname = "pyvex";
-  version = "9.2.1";
+  version = "9.2.3";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-b6LZJmAyxklvZxvane19dK/kQfbLPjkk29RydiWMZCY=";
+    hash = "sha256-uGZlWDTDczBiNCd4D4y6Umz44G8Zn3Zr8/R7Kn+4aS8=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyvips/default.nix b/pkgs/development/python-modules/pyvips/default.nix
index 3974767856677..4742143edad1f 100644
--- a/pkgs/development/python-modules/pyvips/default.nix
+++ b/pkgs/development/python-modules/pyvips/default.nix
@@ -1,18 +1,26 @@
-{ buildPythonPackage, fetchFromGitHub, pytestCheckHook, glib, vips, cffi
-, pkgconfig, lib }:
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, glib
+, vips
+, cffi
+, pkgconfig  # from pythonPackages
+, pkg-config  # from pkgs
+, lib }:
 
 buildPythonPackage rec {
   pname = "pyvips";
-  version = "2.1.16";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "libvips";
     repo = "pyvips";
     rev = "v${version}";
-    sha256 = "sha256-8CeQbx3f2i0lEU0wxPeUwHlUGtzOztzTOdFNjIDy8s0=";
+    sha256 = "sha256-qMVoVzqXALhPWVKLzu+VqihHPN7J+pMhKnXdb+ow0zw=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkgconfig pkg-config ];
 
   buildInputs = [ glib vips ];
 
@@ -20,6 +28,14 @@ buildPythonPackage rec {
 
   checkInputs = [ pytestCheckHook ];
 
+  postPatch = ''
+    substituteInPlace pyvips/__init__.py \
+      --replace 'libvips.so.42' '${lib.getLib vips}/lib/libvips${stdenv.hostPlatform.extensions.sharedLibrary}' \
+      --replace 'libvips.42.dylib' '${lib.getLib vips}/lib/libvips${stdenv.hostPlatform.extensions.sharedLibrary}' \
+      --replace 'libgobject-2.0.so.0' '${glib.out}/lib/libgobject-2.0${stdenv.hostPlatform.extensions.sharedLibrary}' \
+      --replace 'libgobject-2.0.dylib' '${glib.out}/lib/libgobject-2.0${stdenv.hostPlatform.extensions.sharedLibrary}' \
+  '';
+
   pythonImportsCheck = [ "pyvips" ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/pyzerproc/default.nix b/pkgs/development/python-modules/pyzerproc/default.nix
index 7f726d8ae7f8d..bc90068e66ea6 100644
--- a/pkgs/development/python-modules/pyzerproc/default.nix
+++ b/pkgs/development/python-modules/pyzerproc/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "pyzerproc";
-  version = "0.4.10";
+  version = "0.4.11";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "emlove";
     repo = pname;
     rev = version;
-    sha256 = "sha256-sfxyHpJzYYwxLsvfJpqI6cC/CKS7Jx0vXSLL3QD9qV4=";
+    sha256 = "sha256-FNiq/dbh5PMTxnKCKDSHEvllehAEUYvWZS+OyP3lSW8=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/qcs-api-client/default.nix b/pkgs/development/python-modules/qcs-api-client/default.nix
index 41412e16f8fcf..92aaabb4e1ab0 100644
--- a/pkgs/development/python-modules/qcs-api-client/default.nix
+++ b/pkgs/development/python-modules/qcs-api-client/default.nix
@@ -20,7 +20,7 @@
 
 buildPythonPackage rec {
   pname = "qcs-api-client";
-  version = "0.20.10";
+  version = "0.20.12";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -29,7 +29,7 @@ buildPythonPackage rec {
     owner = "rigetti";
     repo = "qcs-api-client-python";
     rev = "v${version}";
-    hash = "sha256-pBC8pFrk6iNYPS3/LKaVo+ds2okN56bxzvffEfs6SrU=";
+    hash = "sha256-4462T2WIBdWjtd51YfslYZOcJg9f0nrSOKTi2ed6WvI=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/qnapstats/default.nix b/pkgs/development/python-modules/qnapstats/default.nix
new file mode 100644
index 0000000000000..2eeb4e81d28eb
--- /dev/null
+++ b/pkgs/development/python-modules/qnapstats/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, requests
+, xmltodict
+, responses
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "qnapstats";
+  version = "0.4.0";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "colinodell";
+    repo = "python-qnapstats";
+    rev = version;
+    hash = "sha256-Tzi2QG1Xw12fLVfV49SPJKdz5VdJ4hQMuCHH8gxcOBE=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    xmltodict
+  ];
+
+  checkInputs = [
+    responses
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    ${python.interpreter} tests/test-models.py
+
+    runHook postCheck
+  '';
+
+  pythonImportsCheck = [ "qnapstats" ];
+
+  meta = {
+    description = "Python API for obtaining QNAP NAS system stats";
+    homepage = "https://github.com/colinodell/python-qnapstats";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/qstylizer/default.nix b/pkgs/development/python-modules/qstylizer/default.nix
new file mode 100644
index 0000000000000..768e5f7d007e9
--- /dev/null
+++ b/pkgs/development/python-modules/qstylizer/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, inflection
+, pbr
+, tinycss2
+, pytestCheckHook
+, pytest-mock
+}:
+
+buildPythonPackage rec {
+  pname = "qstylizer";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "blambright";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-iEMxBpS9gOPubd9O8zpVmR5B7+UZJFkPuOtikO1a9v0=";
+  };
+
+  nativeBuildInputs = [
+    pbr
+  ];
+
+  propagatedBuildInputs = [
+    inflection
+    tinycss2
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    pytest-mock
+  ];
+
+  preBuild = ''
+    export PBR_VERSION=${version}
+  '';
+
+  meta = with lib; {
+    description = "Qt stylesheet generation utility for PyQt/PySide ";
+    homepage = "https://github.com/blambright/qstylizer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ drewrisinger ];
+  };
+}
diff --git a/pkgs/development/python-modules/raincloudy/default.nix b/pkgs/development/python-modules/raincloudy/default.nix
new file mode 100644
index 0000000000000..860f9461e4438
--- /dev/null
+++ b/pkgs/development/python-modules/raincloudy/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, beautifulsoup4
+, buildPythonPackage
+, fetchFromGitHub
+, html5lib
+, pytestCheckHook
+, pythonOlder
+, requests
+, requests-mock
+, urllib3
+}:
+
+buildPythonPackage rec {
+  pname = "raincloudy";
+  version = "1.1.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "vanstinator";
+    repo = pname;
+    rev = version;
+    hash = "sha256-c6tux0DZY56a4BpuiMXtaqm8+JKNDiyMxrFUju3cp2Y=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    beautifulsoup4
+    urllib3
+    html5lib
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    requests-mock
+  ];
+
+  postPatch = ''
+    # https://github.com/vanstinator/raincloudy/pull/60
+    substituteInPlace setup.py \
+      --replace "bs4" "beautifulsoup4" \
+      --replace "html5lib==1.0.1" "html5lib"
+  '';
+
+  pythonImportsCheck = [
+    "raincloudy"
+  ];
+
+  disabledTests = [
+    # Test requires network access
+    "test_attributes"
+  ];
+
+  meta = with lib; {
+    description = "Module to interact with Melnor RainCloud Smart Garden Watering Irrigation Timer";
+    homepage = "https://github.com/vanstinator/raincloudy";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/relatorio/default.nix b/pkgs/development/python-modules/relatorio/default.nix
index 597eb37c7560c..86e53cde95d50 100644
--- a/pkgs/development/python-modules/relatorio/default.nix
+++ b/pkgs/development/python-modules/relatorio/default.nix
@@ -1,24 +1,48 @@
-{ lib, fetchPypi, buildPythonPackage, genshi, lxml, python_magic }:
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, genshi
+, lxml
+, pyyaml
+, python-magic
+, pytestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "relatorio";
-  version = "0.10.0";
+  version = "0.10.1";
+
+  disabled = pythonOlder "3.5";
+
+  format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6b9390eab696bdf569639ff58794fb9ef8ff19f94feea5b505a6ba06d0cfd026";
+    sha256 = "a0c72302d50d5dfa433ddab191672eec1dde1c6ed26330a378b720e5a3012e23";
   };
 
   propagatedBuildInputs = [
     genshi
     lxml
-    python_magic
   ];
 
+  passthru.extras-require = {
+    chart = [ /* pycha */ pyyaml ];
+    fodt = [ python-magic ];
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ] ++ passthru.extras-require.fodt;
+
+  pythonImportsCheck = [ "relatorio" ];
+
   meta = {
     homepage = "https://relatorio.tryton.org/";
+    changelog = "https://hg.tryton.org/relatorio/file/${version}/CHANGELOG";
     description = "A templating library able to output odt and pdf files";
     maintainers = with lib.maintainers; [ johbo ];
-    license = lib.licenses.gpl3;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/development/python-modules/reportengine/default.nix b/pkgs/development/python-modules/reportengine/default.nix
new file mode 100644
index 0000000000000..6168f62d463d4
--- /dev/null
+++ b/pkgs/development/python-modules/reportengine/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, flit
+, jinja2
+, ruamel-yaml
+, matplotlib
+, pandas
+, pandoc
+, pygments
+, blessings
+, curio
+, hypothesis
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "reportengine";
+  version = "0.30.dev0";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "eb612994b7f364e872301b4569b544648e95e587d803284ddb5610efc8f2170f";
+  };
+
+  nativeBuildInputs = [ flit ];
+
+  propagatedBuildInputs = [
+    jinja2
+    ruamel-yaml
+    matplotlib
+    pandas
+    pygments
+    blessings
+    curio
+  ];
+
+  checkInputs = [
+    hypothesis
+    pandoc
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "reportengine" ];
+
+  meta = with lib; {
+    description = "A framework for declarative data analysis";
+    homepage = "https://github.com/NNPDF/reportengine/";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ veprbl ];
+  };
+}
diff --git a/pkgs/development/python-modules/requests-aws4auth/default.nix b/pkgs/development/python-modules/requests-aws4auth/default.nix
index d2de7dff212f3..c38309f6d8d93 100644
--- a/pkgs/development/python-modules/requests-aws4auth/default.nix
+++ b/pkgs/development/python-modules/requests-aws4auth/default.nix
@@ -24,14 +24,17 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    httpx
     requests
     six
   ];
 
+  passthru.extras-require = {
+    httpx = [ httpx ];
+  };
+
   checkInputs = [
     pytestCheckHook
-  ];
+  ] ++ passthru.extras-require.httpx;
 
   pythonImportsCheck = [
     "requests_aws4auth"
diff --git a/pkgs/development/python-modules/rethinkdb/default.nix b/pkgs/development/python-modules/rethinkdb/default.nix
index 2c6123df5f266..c9c61e34d8e68 100644
--- a/pkgs/development/python-modules/rethinkdb/default.nix
+++ b/pkgs/development/python-modules/rethinkdb/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "rethinkdb";
-  version = "2.4.8";
+  version = "2.4.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9f75a72bcd899ab0f6b0677873b89fba99c512bc7895eb5fbc1dc9a228b8aaee";
+    sha256 = "sha256-dV8I9xdTWlXAUSj2vmwoJI+pr/JningWqrh+H59YFcE=";
   };
 
   propagatedBuildInputs = [ six setuptools ];
diff --git a/pkgs/development/python-modules/rflink/default.nix b/pkgs/development/python-modules/rflink/default.nix
index c33d44f628fbc..fa6f44ef616e0 100644
--- a/pkgs/development/python-modules/rflink/default.nix
+++ b/pkgs/development/python-modules/rflink/default.nix
@@ -8,6 +8,7 @@
 , pyserial-asyncio
 , setuptools
 , pytestCheckHook
+, pythonAtLeast
 }:
 
 buildPythonPackage rec {
@@ -34,6 +35,11 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
+  disabledTestPaths = lib.optionals (pythonAtLeast "3.10") [
+    # https://github.com/aequitas/python-rflink/issues/65
+    "tests/test_proxy.py"
+  ];
+
   postPatch = ''
     substituteInPlace setup.py \
       --replace "version=version_from_git()" "version='${version}'"
diff --git a/pkgs/development/python-modules/rich/default.nix b/pkgs/development/python-modules/rich/default.nix
index addc12b3637a4..4def2f46317f6 100644
--- a/pkgs/development/python-modules/rich/default.nix
+++ b/pkgs/development/python-modules/rich/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "rich";
-  version = "12.2.0";
+  version = "12.3.0";
   format = "pyproject";
   disabled = pythonOlder "3.6";
 
@@ -20,7 +20,7 @@ buildPythonPackage rec {
     owner = "Textualize";
     repo = pname;
     rev = "v${version}";
-    sha256 = "02zypmnc9sijlipki0riywh82piamd3hlrl5xbg2bxlldnlnwx1d";
+    sha256 = "sha256-/BPJcFjUldbTa/M3i9jGGU7apbrTcWbF+yrrFuLXcHY=";
   };
 
   nativeBuildInputs = [ poetry-core ];
diff --git a/pkgs/development/python-modules/sanic/default.nix b/pkgs/development/python-modules/sanic/default.nix
index 91d8c564315c1..228bf2a562418 100644
--- a/pkgs/development/python-modules/sanic/default.nix
+++ b/pkgs/development/python-modules/sanic/default.nix
@@ -28,7 +28,7 @@ buildPythonPackage rec {
   format = "setuptools";
 
   disabled = pythonOlder "3.7" ||
-    pythonAtLeast "3.10";  # see GHSA-7p79-6x2v-5h88
+    pythonAtLeast "3.10"; # see GHSA-7p79-6x2v-5h88
 
   src = fetchFromGitHub {
     owner = "sanic-org";
@@ -125,6 +125,13 @@ buildPythonPackage rec {
     "test_raw_headers"
     # noisy_exceptions sometimes missing from sanic stdout
     "test_noisy_exceptions"
+  ] ++ lib.optionals (stdenv.hostPlatform.system == "aarch64-linux") [
+    # test fail on aarch64
+    "test_tls_wrong_options"
+    "test_cookie_expires"
+    "test_gunicorn_worker"
+    "test_gunicorn_worker_no_logs"
+    "test_gunicorn_worker_with_logs"
   ];
 
   disabledTestPaths = [
diff --git a/pkgs/development/python-modules/scancode-toolkit/default.nix b/pkgs/development/python-modules/scancode-toolkit/default.nix
index a5fdf3d547edc..40c52962e51d4 100644
--- a/pkgs/development/python-modules/scancode-toolkit/default.nix
+++ b/pkgs/development/python-modules/scancode-toolkit/default.nix
@@ -8,8 +8,9 @@
 , click
 , colorama
 , commoncode
+, container-inspector
 , debian-inspector
-, dparse
+, dparse2
 , extractcode
 , extractcode-7z
 , extractcode-libarchive
@@ -32,7 +33,8 @@
 , packaging
 , parameter-expansion-patched
 , pefile
-, pkginfo
+, pip-requirements-parser
+, pkginfo2
 , pluggy
 , plugincode
 , publicsuffix2
@@ -58,13 +60,13 @@
 
 buildPythonPackage rec {
   pname = "scancode-toolkit";
-  version = "30.1.0";
+  version = "31.0.0b4";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-UYQf+cBi2FmyZxIbQJo7vLjPuoePIMC8FugvoG1Ebj0=";
+    hash = "sha256-sPFHaIbbWw/wk3Q1PBDj5O4il9ntigoyanecg938a9A=";
   };
 
   dontConfigure = true;
@@ -78,8 +80,9 @@ buildPythonPackage rec {
     click
     colorama
     commoncode
+    container-inspector
     debian-inspector
-    dparse
+    dparse2
     extractcode
     extractcode-7z
     extractcode-libarchive
@@ -88,6 +91,7 @@ buildPythonPackage rec {
     ftfy
     gemfileparser
     html5lib
+    importlib-metadata
     intbitset
     jaraco_functools
     javaproperties
@@ -100,7 +104,8 @@ buildPythonPackage rec {
     packaging
     parameter-expansion-patched
     pefile
-    pkginfo
+    pip-requirements-parser
+    pkginfo2
     pluggy
     plugincode
     publicsuffix2
@@ -118,9 +123,8 @@ buildPythonPackage rec {
     typecode-libmagic
     urlpy
     xmltodict
-    zipp
   ] ++ lib.optionals (pythonOlder "3.9") [
-    importlib-metadata
+    zipp
   ] ++ lib.optionals (pythonOlder "3.7") [
     typing
   ];
@@ -134,7 +138,8 @@ buildPythonPackage rec {
       --replace "pdfminer.six >= 20200101" "pdfminer.six" \
       --replace "pluggy >= 0.12.0, < 1.0" "pluggy" \
       --replace "pygmars >= 0.7.0" "pygmars" \
-      --replace "license_expression >= 21.6.14" "license_expression"
+      --replace "license_expression >= 21.6.14" "license_expression" \
+      --replace "intbitset >= 2.3.0,  < 3.0" "intbitset"
   '';
 
   # Importing scancode needs a writeable home, and preCheck happens in between
diff --git a/pkgs/development/python-modules/scikit-bio/default.nix b/pkgs/development/python-modules/scikit-bio/default.nix
index d2c32fc138afe..e86b384f9c4a5 100644
--- a/pkgs/development/python-modules/scikit-bio/default.nix
+++ b/pkgs/development/python-modules/scikit-bio/default.nix
@@ -5,6 +5,7 @@
 , lockfile
 , cachecontrol
 , decorator
+, h5py
 , ipython
 , matplotlib
 , natsort
@@ -19,18 +20,18 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.5.6";
+  version = "0.5.7";
   pname = "scikit-bio";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "48b73ec53ce0ff2c2e3e05f3cfcf93527c1525a8d3e9dd4ae317b4219c37f0ea";
+    sha256 = "sha256-Y0PKDGIeL8xdHAQsi+MgBmTFMllWqDvqdRzxvMddHak=";
   };
 
-  buildInputs = [ cython ];
+  nativeBuildInputs = [ cython ];
   checkInputs = [ coverage ];
-  propagatedBuildInputs = [ lockfile cachecontrol decorator ipython matplotlib natsort numpy pandas scipy hdmedians scikit-learn ];
+  propagatedBuildInputs = [ lockfile cachecontrol decorator ipython matplotlib natsort numpy pandas scipy h5py hdmedians scikit-learn ];
 
   # cython package not included for tests
   doCheck = false;
diff --git a/pkgs/development/python-modules/scipy/default.nix b/pkgs/development/python-modules/scipy/default.nix
index 85708822cc2bb..d92dcc60f89df 100644
--- a/pkgs/development/python-modules/scipy/default.nix
+++ b/pkgs/development/python-modules/scipy/default.nix
@@ -35,7 +35,7 @@ buildPythonPackage rec {
     rm scipy/linalg/tests/test_lapack.py
   '';
 
-  doCheck = true;
+  doCheck = !(stdenv.isx86_64 && stdenv.isDarwin);
 
   preConfigure = ''
     sed -i '0,/from numpy.distutils.core/s//import setuptools;from numpy.distutils.core/' setup.py
diff --git a/pkgs/development/python-modules/scmrepo/default.nix b/pkgs/development/python-modules/scmrepo/default.nix
index 5b80bb00dd63a..cfb84743ff3ab 100644
--- a/pkgs/development/python-modules/scmrepo/default.nix
+++ b/pkgs/development/python-modules/scmrepo/default.nix
@@ -14,7 +14,7 @@
 
 buildPythonPackage rec {
   pname = "scmrepo";
-  version = "0.0.20";
+  version = "0.0.22";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -23,7 +23,7 @@ buildPythonPackage rec {
     owner = "iterative";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-3gNHWncP9laevuX3EcnmNJ825eQehoLp75WJ5V5/R9w=";
+    hash = "sha256-hV0BusvuJUEGfmue7OHR3YYmpBcFTgbQE7UuHmTUBo0=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/scrapy/default.nix b/pkgs/development/python-modules/scrapy/default.nix
index 073059aec6261..70feaa7108e2d 100644
--- a/pkgs/development/python-modules/scrapy/default.nix
+++ b/pkgs/development/python-modules/scrapy/default.nix
@@ -31,6 +31,8 @@
 buildPythonPackage rec {
   pname = "scrapy";
   version = "2.6.1";
+  format = "setuptools";
+
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
@@ -92,6 +94,7 @@ buildPythonPackage rec {
     "test_nested_xpath"
     "test_flavor_detection"
     # Requires network access
+    "AnonymousFTPTestCase"
     "FTPFeedStorageTest"
     "FeedExportTest"
     "test_custom_asyncio_loop_enabled_true"
@@ -99,6 +102,7 @@ buildPythonPackage rec {
     "test_custom_loop_asyncio_deferred_signal"
     "FileFeedStoragePreFeedOptionsTest"  # https://github.com/scrapy/scrapy/issues/5157
     "test_timeout_download_from_spider_nodata_rcvd"
+    "test_timeout_download_from_spider_server_hangs"
     # Fails with AssertionError
     "test_peek_fifo"
     "test_peek_one_element"
diff --git a/pkgs/development/python-modules/sdds/default.nix b/pkgs/development/python-modules/sdds/default.nix
new file mode 100644
index 0000000000000..3003dddce6de1
--- /dev/null
+++ b/pkgs/development/python-modules/sdds/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, numpy
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "sdds";
+  version = "0.2.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "pylhc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JcxcF0tDigZz3upzE7rPDynCH45dnLk/zpS0a2dOwRU=";
+  };
+
+  propagatedBuildInputs = [ numpy ];
+
+  pythonImportsCheck = [ "sdds" ];
+  checkInputs = [ pytestCheckHook ];
+
+  meta = with lib; {
+    description = "Python 3 package to handle SDDS files";
+    homepage = "https://pylhc.github.io/sdds/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ veprbl ];
+  };
+}
diff --git a/pkgs/development/python-modules/sentry-sdk/default.nix b/pkgs/development/python-modules/sentry-sdk/default.nix
index 4cd80fbed8096..1a6c5c1418d0b 100644
--- a/pkgs/development/python-modules/sentry-sdk/default.nix
+++ b/pkgs/development/python-modules/sentry-sdk/default.nix
@@ -37,11 +37,12 @@
 , trytond
 , urllib3
 , werkzeug
+, multidict
 }:
 
 buildPythonPackage rec {
   pname = "sentry-sdk";
-  version = "1.5.10";
+  version = "1.5.12";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -50,7 +51,7 @@ buildPythonPackage rec {
     owner = "getsentry";
     repo = "sentry-python";
     rev = version;
-    hash = "sha256-f5V2fMvPpyz+pU08Owzxq9xI48ZeZpH5SmUXtshqMm0=";
+    hash = "sha256-8M0FWfvaGp74Fb+qJlhyiJPUVHN2ZdEleZf27d+bftE=";
   };
 
   propagatedBuildInputs = [
@@ -88,6 +89,7 @@ buildPythonPackage rec {
     tornado
     trytond
     werkzeug
+    multidict
   ];
 
   doCheck = !stdenv.isDarwin;
diff --git a/pkgs/development/python-modules/setupmeta/default.nix b/pkgs/development/python-modules/setupmeta/default.nix
index d24c8263e9a14..298a2a8915d6b 100644
--- a/pkgs/development/python-modules/setupmeta/default.nix
+++ b/pkgs/development/python-modules/setupmeta/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "setupmeta";
-  version = "3.3.0";
+  version = "3.3.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "codrsquad";
     repo = pname;
     rev = "v${version}";
-    sha256 = "21hABRiY8CTKkpFjePgBAtjs4/G5eFS3aPNMCBC41CY=";
+    sha256 = "sha256-3QUI3AjouuGa9sWXH97GSvpimVsws3q5Xgq6lls/wBU=";
   };
 
   preBuild = ''
diff --git a/pkgs/development/python-modules/setuptools-rust/default.nix b/pkgs/development/python-modules/setuptools-rust/default.nix
index 24c60839fe0bd..10f46fecf6f48 100644
--- a/pkgs/development/python-modules/setuptools-rust/default.nix
+++ b/pkgs/development/python-modules/setuptools-rust/default.nix
@@ -12,12 +12,12 @@
 
 buildPythonPackage rec {
   pname = "setuptools-rust";
-  version = "1.2.0";
+  version = "1.3.0";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-CkraR56Mfj2L18tW4aKazCsruYwjJQUbDNy1fX8Fbeg=";
+    sha256 = "sha256-lYxb9Ktkg9Wdq4iFOBIYccxQBjVKQvsPvVCs8Dyq0d4=";
   };
 
   nativeBuildInputs = [ setuptools-scm ];
diff --git a/pkgs/development/python-modules/shapely/default.nix b/pkgs/development/python-modules/shapely/default.nix
index 8d5d0d2aa4f5b..49f5dcc822b60 100644
--- a/pkgs/development/python-modules/shapely/default.nix
+++ b/pkgs/development/python-modules/shapely/default.nix
@@ -12,12 +12,12 @@
 
 buildPythonPackage rec {
   pname = "Shapely";
-  version = "1.8.1.post1";
+  version = "1.8.2";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-k/8G/wX74r6EO5PHsa2CkuVuZlugG0cI91rop1eXLp8=";
+    sha256 = "sha256-Vyr51QBv1eMhPjfuVIkSsDQfsmck1tyKTjlQwQGX67Y=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/shapely/library-paths.patch b/pkgs/development/python-modules/shapely/library-paths.patch
index 484af67ef68cc..d095eada9d6e1 100644
--- a/pkgs/development/python-modules/shapely/library-paths.patch
+++ b/pkgs/development/python-modules/shapely/library-paths.patch
@@ -1,201 +1,31 @@
 diff --git a/shapely/geos.py b/shapely/geos.py
-index 13ab835..1abdb5e 100644
+index 88c5f53..1ccd6e4 100644
 --- a/shapely/geos.py
 +++ b/shapely/geos.py
-@@ -55,174 +55,21 @@ def load_dll(libname, fallbacks=None, mode=DEFAULT_MODE):
-             "Could not find lib {} or load any of its variants {}.".format(
-                 libname, fallbacks or []))
+@@ -96,6 +96,7 @@ if sys.platform.startswith('linux'):
+         alt_paths = [
+             'libgeos_c.so.1',
+             'libgeos_c.so',
++            '@libgeos_c@',
+         ]
+         _lgeos = load_dll('geos_c', fallbacks=alt_paths)
  
--_lgeos = None
- def exists_conda_env():
-     """Does this module exist in a conda environment?"""
-     return os.path.exists(os.path.join(sys.prefix, 'conda-meta'))
+@@ -160,6 +161,7 @@ elif sys.platform == 'darwin':
+             "/usr/local/lib/libgeos_c.dylib",
+             # homebrew Apple Silicon
+             "/opt/homebrew/lib/libgeos_c.dylib",
++            "@libgeos_c@",
+         ]
+         _lgeos = load_dll('geos_c', fallbacks=alt_paths)
  
--
--if sys.platform.startswith('linux'):
--    # Test to see if we have a wheel repaired by auditwheel which contains its
--    # own libgeos_c. Note: auditwheel 3.1 changed the location of libs.
--    geos_whl_so = glob.glob(
--        os.path.abspath(os.path.join(os.path.dirname(__file__), ".libs/libgeos*.so*"))
--    ) or glob.glob(
--        os.path.abspath(
--            os.path.join(
--                os.path.dirname(__file__), "..", "Shapely.libs", "libgeos*.so*"
--            )
--        )
--    )
--
--    if len(geos_whl_so) > 0:
--        # We have observed problems with CDLL of libgeos_c not automatically
--        # loading the sibling c++ library since the change made by auditwheel
--        # 3.1, so we explicitly load them both.
--        geos_whl_so = sorted(geos_whl_so)
--        CDLL(geos_whl_so[0])
--        _lgeos = CDLL(geos_whl_so[-1])
--        LOG.debug("Found GEOS DLL: %r, using it.", _lgeos)
--
--    elif hasattr(sys, 'frozen'):
--        geos_pyinstaller_so = glob.glob(os.path.join(sys.prefix, 'libgeos_c-*.so.*'))
--        if len(geos_pyinstaller_so) >= 1:
--            _lgeos = CDLL(geos_pyinstaller_so[0])
--            LOG.debug("Found GEOS DLL: %r, using it.", _lgeos)
--    elif exists_conda_env():
--        # conda package.
--        _lgeos = CDLL(os.path.join(sys.prefix, 'lib', 'libgeos_c.so'))
--    else:
--        alt_paths = [
--            'libgeos_c.so.1',
--            'libgeos_c.so',
--        ]
--        _lgeos = load_dll('geos_c', fallbacks=alt_paths)
--
-+_lgeos = CDLL('@libgeos_c@')
-+if sys.platform == 'darwin':
-     # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen
-     # manpage says, "If filename is NULL, then the returned handle is for the
-     # main program". This way we can let the linker do the work to figure out
-     # which libc Python is actually using.
-     free = CDLL(None).free
--    free.argtypes = [c_void_p]
--    free.restype = None
--
--elif sys.platform == 'darwin':
--    # Test to see if we have a delocated wheel with a GEOS dylib.
--    dylib_path = os.path.abspath(
--        os.path.join(os.path.dirname(__file__), ".dylibs/*.dylib")
--    )
--    LOG.debug("Formed path for globbing: dylib_path=%r", dylib_path)
--
--    geos_whl_dylib = glob.glob(dylib_path)
--    LOG.debug("Globbed: geos_whl_dylib=%r", geos_whl_dylib)
--
--    if len(geos_whl_dylib) > 0:
--        handle = CDLL(None)
--        if hasattr(handle, "initGEOS_r"):
--            LOG.debug("GEOS already loaded")
--            _lgeos = handle
--        else:
--            geos_whl_dylib = sorted(geos_whl_dylib)
--            CDLL(geos_whl_dylib[0])
--            _lgeos = CDLL(geos_whl_dylib[-1])
--            LOG.debug("Found GEOS DLL: %r, using it.", _lgeos)
--
--    elif exists_conda_env():
--        # conda package.
--        _lgeos = CDLL(os.path.join(sys.prefix, 'lib', 'libgeos_c.dylib'))
--    else:
--        if hasattr(sys, 'frozen'):
--            try:
--                # .app file from py2app
--                alt_paths = [os.path.join(
--                    os.environ['RESOURCEPATH'], '..', 'Frameworks',
--                    'libgeos_c.dylib')]
--            except KeyError:
--                alt_paths = [
--                    # binary from pyinstaller
--                    os.path.join(sys.executable, 'libgeos_c.dylib'),
--                    # .app from cx_Freeze
--                    os.path.join(os.path.dirname(sys.executable), 'libgeos_c.1.dylib')]
--                if hasattr(sys, '_MEIPASS'):
--                    alt_paths.append(
--                        os.path.join(sys._MEIPASS, 'libgeos_c.1.dylib'))
--        else:
--            alt_paths = [
--                # The Framework build from Kyng Chaos
--                "/Library/Frameworks/GEOS.framework/Versions/Current/GEOS",
--                # macports
--                '/opt/local/lib/libgeos_c.dylib',
--                # homebrew Intel
--                '/usr/local/lib/libgeos_c.dylib',
--                # homebrew Apple Silicon
--                '/opt/homebrew/lib/libgeos_c.dylib',
--            ]
--        _lgeos = load_dll('geos_c', fallbacks=alt_paths)
--
--    free = CDLL(None).free
--    free.argtypes = [c_void_p]
--    free.restype = None
--
--elif sys.platform == 'win32':
--    _conda_dll_path = os.path.join(sys.prefix, 'Library', 'bin', 'geos_c.dll')
--    if exists_conda_env() and os.path.exists(_conda_dll_path):
--        _lgeos = CDLL(_conda_dll_path)
--    else:
--        geos_whl_dll = glob.glob(
--            os.path.abspath(
--                os.path.join(
--                    os.path.dirname(__file__), "..", "Shapely.libs", "geos*.dll"
--                )
--            )
--        )
--
--        if len(geos_whl_dll) > 0:
--            geos_whl_dll = sorted(geos_whl_dll)
--            # CDLL(geos_whl_so[0])
--            _lgeos = CDLL(geos_whl_dll[-1])
--            LOG.debug("Found GEOS DLL: %r, using it.", _lgeos)
--        else:
--            try:
--                egg_dlls = os.path.abspath(
--                    os.path.join(os.path.dirname(__file__), "DLLs")
--                )
--                if hasattr(sys, "_MEIPASS"):
--                    wininst_dlls = sys._MEIPASS
--                elif hasattr(sys, "frozen"):
--                    wininst_dlls = os.path.normpath(
--                        os.path.abspath(sys.executable + "../../DLLS")
--                    )
--                else:
--                    wininst_dlls = os.path.abspath(os.__file__ + "../../../DLLs")
--                original_path = os.environ["PATH"]
--                os.environ["PATH"] = "%s;%s;%s" % (
--                    egg_dlls,
--                    wininst_dlls,
--                    original_path,
--                )
--                _lgeos = load_dll("geos_c.dll")
--
--            except (ImportError, WindowsError, OSError):
--                raise
--
--        def free(m):
--            try:
--                cdll.msvcrt.free(m)
--            except WindowsError:
--                # XXX: See http://trac.gispython.org/projects/PCL/ticket/149
--                pass
--
--elif sys.platform == 'sunos5':
--    _lgeos = load_dll('geos_c', fallbacks=['libgeos_c.so.1', 'libgeos_c.so'])
--    free.restype = None
--    free.argtypes = [c_void_p]
--    free.restype = None
--
--else:  # other *nix systems
--    _lgeos = load_dll('geos_c', fallbacks=['libgeos_c.so.1', 'libgeos_c.so'])
--    free = CDLL(None).free
--    free.argtypes = [c_void_p]
--    free.restype = None
-+else:
-+    free = CDLL('@libc@').free
-+free.argtypes = [c_void_p]
-+free.restype = None
- 
- 
- def _geos_version():
 diff --git a/tests/test_dlls.py b/tests/test_dlls.py
-index c71da8e..fae9da6 100644
+index c71da8e..c36262c 100644
 --- a/tests/test_dlls.py
 +++ b/tests/test_dlls.py
-@@ -12,10 +12,4 @@ class LoadingTestCase(unittest.TestCase):
-     @unittest.skipIf(sys.platform == "win32", "FIXME: adapt test for win32")
-     def test_fallbacks(self):
-         load_dll('geos_c', fallbacks=[
--            os.path.join(sys.prefix, "lib", "libgeos_c.dylib"), # anaconda (Mac OS X)
--            '/opt/local/lib/libgeos_c.dylib',     # MacPorts
--            '/usr/local/lib/libgeos_c.dylib',     # homebrew (Mac OS X)
--            '/opt/homebrew/lib/libgeos_c.dylib',  # homebrew (macOS)
--            os.path.join(sys.prefix, "lib", "libgeos_c.so"), # anaconda (Linux)
--            'libgeos_c.so.1',
+@@ -18,4 +18,5 @@ class LoadingTestCase(unittest.TestCase):
+             '/opt/homebrew/lib/libgeos_c.dylib',  # homebrew (macOS)
+             os.path.join(sys.prefix, "lib", "libgeos_c.so"), # anaconda (Linux)
+             'libgeos_c.so.1',
 -            'libgeos_c.so'])
++            'libgeos_c.so',
 +            '@libgeos_c@'])
diff --git a/pkgs/development/python-modules/shiv/default.nix b/pkgs/development/python-modules/shiv/default.nix
index 14cb688be4643..ab873da47a7be 100644
--- a/pkgs/development/python-modules/shiv/default.nix
+++ b/pkgs/development/python-modules/shiv/default.nix
@@ -25,6 +25,19 @@ buildPythonPackage rec {
 
   checkInputs = [ pytestCheckHook ];
 
+  disabledTests = [
+    # AssertionError
+    "test_hello_world"
+    "test_extend_pythonpath"
+    "test_multiple_site_packages"
+    "test_no_entrypoint"
+    "test_results_are_binary_identical_with_env_and_build_id"
+    "test_preamble"
+    "test_preamble_no_pip"
+    "test_alternate_root"
+    "test_alternate_root_environment_variable"
+  ];
+
   meta = with lib; {
     description = "Command line utility for building fully self contained Python zipapps";
     homepage = "https://github.com/linkedin/shiv";
diff --git a/pkgs/development/python-modules/signedjson/default.nix b/pkgs/development/python-modules/signedjson/default.nix
index 8409d9702e7f8..c7604126c7a39 100644
--- a/pkgs/development/python-modules/signedjson/default.nix
+++ b/pkgs/development/python-modules/signedjson/default.nix
@@ -1,40 +1,53 @@
 { lib
 , buildPythonPackage
-, fetchPypi
-, fetchpatch
 , canonicaljson
-, unpaddedbase64
-, pynacl
-, typing-extensions
-, setuptools-scm
+, fetchPypi
 , importlib-metadata
+, pynacl
+, pytestCheckHook
 , pythonOlder
+, setuptools-scm
+, typing-extensions
+, unpaddedbase64
 }:
 
 buildPythonPackage rec {
   pname = "signedjson";
-  version = "1.1.1";
+  version = "1.1.4";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m";
+    hash = "sha256-zZHFavU/Fp7wMsYunEoyktwViGaTMxjQWS40Yts9ZJI=";
   };
 
-  patches = [
-    # Do not require importlib_metadata on python 3.8
-    (fetchpatch {
-      url = "https://github.com/matrix-org/python-signedjson/commit/c40c83f844fee3c1c7b0c5d1508f87052334b4e5.patch";
-      sha256 = "109f135zn9azg5h1ljw3v94kpvnzmlqz1aiknpl5hsqfa3imjca1";
-    })
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = [
+    canonicaljson
+    unpaddedbase64
+    pynacl
+  ] ++ lib.optionals (pythonOlder "3.8") [
+    importlib-metadata
+    typing-extensions
+  ];
+
+  checkInputs = [
+    pytestCheckHook
   ];
 
-  nativeBuildInputs = [ setuptools-scm ];
-  propagatedBuildInputs = [ canonicaljson unpaddedbase64 pynacl typing-extensions ]
-    ++ lib.optionals (pythonOlder "3.8") [ importlib-metadata ];
+  pythonImportsCheck = [
+    "signedjson"
+  ];
 
   meta = with lib; {
-    homepage = "https://pypi.org/project/signedjson/";
     description = "Sign JSON with Ed25519 signatures";
+    homepage = "https://github.com/matrix-org/python-signedjson";
     license = licenses.asl20;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/development/python-modules/simplisafe-python/default.nix b/pkgs/development/python-modules/simplisafe-python/default.nix
index ec3cf592786de..720129a13faa4 100644
--- a/pkgs/development/python-modules/simplisafe-python/default.nix
+++ b/pkgs/development/python-modules/simplisafe-python/default.nix
@@ -3,6 +3,7 @@
 , aresponses
 , asynctest
 , backoff
+, beautifulsoup4
 , buildPythonPackage
 , docutils
 , fetchFromGitHub
@@ -19,7 +20,7 @@
 
 buildPythonPackage rec {
   pname = "simplisafe-python";
-  version = "2022.03.3";
+  version = "2022.05.1";
   format = "pyproject";
 
   disabled = pythonOlder "3.8";
@@ -27,8 +28,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "bachya";
     repo = pname;
-    rev = version;
-    sha256 = "sha256-19+p39uZO9pSDzH6YkS9ZDVA4zyl9oJ325yTQ5+SQcw=";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-tYExqOIJPJN8Lss6y0oelkrDuQCpNtFrsFRCxnbUNvU=";
   };
 
   nativeBuildInputs = [
@@ -38,6 +39,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [
     aiohttp
     backoff
+    beautifulsoup4
     docutils
     pytz
     voluptuous
@@ -62,6 +64,8 @@ buildPythonPackage rec {
     # simplipy/api.py:253: InvalidCredentialsError
     "test_request_error_failed_retry"
     "test_update_error"
+    # ClientConnectorError: Cannot connect to host auth.simplisafe.com:443 ssl:default [Temporary failure in name resolution]
+    "test_client_async_from_refresh_token_unknown_error"
   ];
 
   disabledTestPaths = [
diff --git a/pkgs/development/python-modules/sjcl/default.nix b/pkgs/development/python-modules/sjcl/default.nix
new file mode 100644
index 0000000000000..41da6669b54f7
--- /dev/null
+++ b/pkgs/development/python-modules/sjcl/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, pycryptodome
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "sjcl";
+  version = "0.2.1";
+
+  format = "setuptools";
+
+  # PyPi release is missing tests
+  src = fetchFromGitHub {
+    owner = "berlincode";
+    repo = pname;
+    # commit from: 2018-08-16, because there aren't any tags on git
+    rev = "e8bdad312fa99c89c74f8651a1240afba8a9f3bd";
+    sha256 = "1v8rc55v28v8cl7nxcavj34am005wi63zcvwnbc6pyfbv4ss30ab";
+  };
+
+  propagatedBuildInputs = [ pycryptodome ];
+
+  checkPhase = ''
+    runHook preCheck
+    ${python.interpreter} -m unittest discover
+    runHook postCheck
+  '';
+
+  pythonImportsCheck = [
+    "sjcl"
+  ];
+
+  meta = with lib; {
+    description = "Decrypt and encrypt messages compatible to the \"Stanford Javascript Crypto Library (SJCL)\" message format. This is a wrapper around pycrypto.";
+    homepage = "https://github.com/berlincode/sjcl";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ binsky ];
+  };
+}
diff --git a/pkgs/development/python-modules/skia-pathops/default.nix b/pkgs/development/python-modules/skia-pathops/default.nix
new file mode 100644
index 0000000000000..53d1fb1227d7f
--- /dev/null
+++ b/pkgs/development/python-modules/skia-pathops/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, cython
+, ninja
+, setuptools-scm
+, setuptools
+, fetchPypi
+, gn
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "skia-pathops";
+  version = "0.7.2";
+
+  src = fetchPypi {
+    pname = "skia-pathops";
+    inherit version;
+    extension = "zip";
+    sha256 = "sha256-Gdhcmv77oVr5KxPIiJlk935jgvWPQsYEC0AZ6yjLppA=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "build_cmd = [sys.executable, build_skia_py, build_dir]" \
+        'build_cmd = [sys.executable, build_skia_py, "--no-fetch-gn", "--no-virtualenv", "--gn-path", "${gn}/bin/gn", build_dir]'
+  '';
+
+  nativeBuildInputs = [ cython ninja setuptools-scm ];
+
+  propagatedBuildInputs = [ setuptools ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "pathops" ];
+
+  meta = {
+    description = "Python access to operations on paths using the Skia library";
+    homepage = "https://skia.org/dev/present/pathops";
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.BarinovMaxim ];
+  };
+}
diff --git a/pkgs/development/python-modules/skytemple-files/default.nix b/pkgs/development/python-modules/skytemple-files/default.nix
index 7893cfb2e8180..2f43d04ba1681 100644
--- a/pkgs/development/python-modules/skytemple-files/default.nix
+++ b/pkgs/development/python-modules/skytemple-files/default.nix
@@ -1,16 +1,16 @@
-{ lib, buildPythonPackage, fetchFromGitHub, appdirs, dungeon-eos, explorerscript
+{ stdenv, lib, buildPythonPackage, fetchFromGitHub, appdirs, dungeon-eos, explorerscript
 , ndspy, pillow, setuptools, skytemple-rust, tilequant, armips
 }:
 
 buildPythonPackage rec {
   pname = "skytemple-files";
-  version = "1.3.3";
+  version = "1.3.9";
 
   src = fetchFromGitHub {
     owner = "SkyTemple";
     repo = pname;
     rev = version;
-    sha256 = "01j6khn60mdmz32xkpqrzwdqibmpdpi2wvwzxgdnaim9sq0fdqws";
+    sha256 = "sha256-Z/jbr9o0WKPjkAsfZzxuwAKKdwYV3rLGkUMlMgyC5s0=";
     fetchSubmodules = true;
   };
 
@@ -31,5 +31,6 @@ buildPythonPackage rec {
     description = "Python library to edit the ROM of Pokémon Mystery Dungeon Explorers of Sky";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ xfix marius851000 ];
+    broken = stdenv.isDarwin; # pyobjc is missing
   };
 }
diff --git a/pkgs/development/python-modules/skytemple-rust/default.nix b/pkgs/development/python-modules/skytemple-rust/default.nix
index 793e22690e4a9..6066407dafd48 100644
--- a/pkgs/development/python-modules/skytemple-rust/default.nix
+++ b/pkgs/development/python-modules/skytemple-rust/default.nix
@@ -1,25 +1,34 @@
-{ lib, stdenv, buildPythonPackage, fetchFromGitHub, libiconv, rustPlatform, setuptools-rust }:
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, libiconv
+, Foundation
+, rustPlatform
+, setuptools-rust }:
 
 buildPythonPackage rec {
   pname = "skytemple-rust";
-  version = "unstable-2021-08-11";
+  version = "1.3.7";
 
   src = fetchFromGitHub {
     owner = "SkyTemple";
     repo = pname;
-    rev = "e306e5edc096cb3fef25585d9ca5a2817543f1cd";
-    sha256 = "0ja231gsy9i1z6jsaywawz93rnyjhldngi5i787nhnf88zrwx9ml";
+    rev = version;
+    sha256 = "sha256-rC7KA79va8gZpMKJQ7s3xYdbopNqmWdRYDCbaWaxsR0=";
   };
 
   cargoDeps = rustPlatform.fetchCargoTarball {
     inherit src;
     name = "${pname}-${version}";
-    sha256 = "0gjvfblyv72m0nqv90m7qvbdnazsh5ind1pxwqz83vm4zjh9a873";
+    sha256 = "sha256-lXPCxRbaqUC5EfyeBPtJDuGADYOA+DWMaOZRwXppP8E=";
   };
 
-  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Foundation ];
   nativeBuildInputs = [ setuptools-rust ] ++ (with rustPlatform; [ cargoSetupHook rust.cargo rust.rustc ]);
 
+  GETTEXT_SYSTEM = true;
+
   doCheck = false; # there are no tests
   pythonImportsCheck = [ "skytemple_rust" ];
 
diff --git a/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix b/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix
index bb91bad3ff1d8..8ca4a45b37108 100644
--- a/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix
+++ b/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix
@@ -5,13 +5,13 @@
 
 buildPythonPackage rec {
   pname = "skytemple-ssb-debugger";
-  version = "1.3.0";
+  version = "1.3.8.post2";
 
   src = fetchFromGitHub {
     owner = "SkyTemple";
     repo = pname;
     rev = version;
-    sha256 = "12v0071125m8xjcp2hxm9qvs0qw4hdhkx8r3gbl0plm22vl3fk0d";
+    sha256 = "sha256-dd0qsSNBwxuSopjz2PLqEFddZpvMgeJIjBXY5P6OAow=";
   };
 
   buildInputs = [ gobject-introspection gtk3 gtksourceview3 ];
diff --git a/pkgs/development/python-modules/slack-sdk/default.nix b/pkgs/development/python-modules/slack-sdk/default.nix
index 09682a2a3d0ed..7e80ad35c5c5b 100644
--- a/pkgs/development/python-modules/slack-sdk/default.nix
+++ b/pkgs/development/python-modules/slack-sdk/default.nix
@@ -20,7 +20,7 @@
 
 buildPythonPackage rec {
   pname = "slack-sdk";
-  version = "3.15.2";
+  version = "3.16.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -28,8 +28,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "slackapi";
     repo = "python-slack-sdk";
-    rev = "v${version}";
-    sha256 = "sha256-lhdh4Eo7yIsukXoKI6Ss793fYmAu91O1UElmxV9xAc4=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-XTt2R0JypbDGJtiWqFzmui7UVLK4/U46co7LcHkSbWo=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/slicer/default.nix b/pkgs/development/python-modules/slicer/default.nix
index 89fb4e5dc728a..2033c94fefc1a 100644
--- a/pkgs/development/python-modules/slicer/default.nix
+++ b/pkgs/development/python-modules/slicer/default.nix
@@ -20,6 +20,12 @@ buildPythonPackage rec {
 
   checkInputs = [ pytestCheckHook pandas pytorch scipy ];
 
+  disabledTests = [
+    # IndexError: too many indices for array
+    "test_slicer_sparse"
+    "test_operations_2d"
+  ];
+
   meta = with lib; {
     description = "Wraps tensor-like objects and provides a uniform slicing interface via __getitem__";
     homepage = "https://github.com/interpretml/slicer";
diff --git a/pkgs/development/python-modules/snapcast/default.nix b/pkgs/development/python-modules/snapcast/default.nix
index 95d162b7f3200..7e7491fe8b6d5 100644
--- a/pkgs/development/python-modules/snapcast/default.nix
+++ b/pkgs/development/python-modules/snapcast/default.nix
@@ -2,20 +2,22 @@
 , buildPythonPackage
 , construct
 , fetchFromGitHub
-, isPy3k
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "snapcast";
-  version = "2.1.3";
-  disabled = !isPy3k;
+  version = "2.2.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "happyleavesaoc";
     repo = "python-snapcast";
-    rev = version;
-    sha256 = "1jigdccdd7bffszim942mxcwxyznfjx7y3r5yklz3psl7zgbzd6c";
+    rev = "refs/tags/${version}";
+    hash = "sha256-H41X5bfRRu+uE7eUsmUkONm6hugNs43+O7MvVPH0e+8=";
   };
 
   propagatedBuildInputs = [
@@ -26,7 +28,9 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
-  pythonImportsCheck = [ "snapcast" ];
+  pythonImportsCheck = [
+    "snapcast"
+  ];
 
   meta = with lib; {
     description = "Control Snapcast, a multi-room synchronous audio solution";
diff --git a/pkgs/development/python-modules/snowflake-connector-python/default.nix b/pkgs/development/python-modules/snowflake-connector-python/default.nix
index e4b5d9ee67752..743a7e77afda0 100644
--- a/pkgs/development/python-modules/snowflake-connector-python/default.nix
+++ b/pkgs/development/python-modules/snowflake-connector-python/default.nix
@@ -24,12 +24,12 @@
 
 buildPythonPackage rec {
   pname = "snowflake-connector-python";
-  version = "2.7.6";
+  version = "2.7.7";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-MxYo4MoCdkSSuDteR3A72FcRWuKTRrct4y1/t8nsVIs=";
+    sha256 = "sha256-OZL/ClHY8yatR0AJVyomBq7AjBwQwm5f9UnmdlL8IFw=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/spglib/default.nix b/pkgs/development/python-modules/spglib/default.nix
index a54fa65d08b74..d317f11dea425 100644
--- a/pkgs/development/python-modules/spglib/default.nix
+++ b/pkgs/development/python-modules/spglib/default.nix
@@ -1,23 +1,31 @@
-{ lib, buildPythonPackage, fetchPypi, numpy, nose, pyyaml }:
+{ lib, buildPythonPackage, fetchPypi, numpy, pytest, pyyaml }:
 
 buildPythonPackage rec {
   pname = "spglib";
-  version = "1.16.3";
+  version = "1.16.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ff1420967d64c2d4f0d747886116a6836d9b473454cdd73d560dbfe973a8a038";
+    sha256 = "sha256-Lqzv1TzGRLqakMRoH9bJNLa92BjBE9fzGZBOB41dq5M=";
   };
 
   propagatedBuildInputs = [ numpy ];
 
-  checkInputs = [ nose pyyaml ];
+  checkInputs = [ pytest pyyaml ];
+
+  # pytestCheckHook doesn't work
+  # ImportError: cannot import name '_spglib' from partially initialized module 'spglib'
+  checkPhase = ''
+    pytest
+  '';
+
+  pythonImportsCheck = [ "spglib" ];
 
   meta = with lib; {
     description = "Python bindings for C library for finding and handling crystal symmetries";
-    homepage = "https://atztogo.github.io/spglib";
+    homepage = "https://spglib.github.io/spglib/";
+    changelog = "https://github.com/spglib/spglib/raw/v${version}/ChangeLog";
     license = licenses.bsd3;
     maintainers = with maintainers; [ psyanticy ];
   };
 }
-
diff --git a/pkgs/development/python-modules/sphinx-better-theme/default.nix b/pkgs/development/python-modules/sphinx-better-theme/default.nix
new file mode 100644
index 0000000000000..8227eca47d844
--- /dev/null
+++ b/pkgs/development/python-modules/sphinx-better-theme/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildPythonPackage, fetchFromGitHub, sphinxHook }:
+
+buildPythonPackage rec {
+  pname = "sphinx-better-theme";
+  version = "0.1.5";
+  outputs = [ "out" "doc" ];
+
+  src = fetchFromGitHub {
+    owner = "irskep";
+    repo = "sphinx-better-theme";
+    rev = "v${version}";
+    sha256 = "07lhfmsjcfzcchsjzh6kxdq5s47j2a6lb5wv3m1kmv2hcm3gvddh";
+  };
+
+  nativeBuildInputs = [ sphinxHook ];
+
+  pythonImportsCheck = [ "better" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/irskep/sphinx-better-theme";
+    description = "Better Sphinx Theme";
+    longDescription = ''
+      This is a modified version of the default Sphinx theme with the following
+      goals:
+
+      1. Remove frivolous colors, especially hard-coded ones
+      2. Improve readability by limiting width and using more whitespace
+      3. Encourage visual customization through CSS, not themeconf
+      4. Use semantic markup
+
+      v0.1 meets goals one and two. Goal three is partially complete; it's simple to
+      add your own CSS file without creating a whole new theme.
+      you'd like something changed.
+
+      To use the theme, set ``html_theme_path`` to contain
+      ``better.better_theme_path``, and set ``html_theme`` to ``'better'``::
+
+          from better import better_theme_path
+          html_theme_path = [better_theme_path]
+          html_theme = 'better'
+    '';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/pkgs/development/python-modules/spyder-kernels/default.nix b/pkgs/development/python-modules/spyder-kernels/default.nix
index 95d54e404471a..2d4328ba3e16e 100644
--- a/pkgs/development/python-modules/spyder-kernels/default.nix
+++ b/pkgs/development/python-modules/spyder-kernels/default.nix
@@ -18,6 +18,10 @@ buildPythonPackage rec {
     pyzmq
   ];
 
+  postPatch = ''
+    substituteInPlace setup.py --replace "ipython>=7.31.1,<8" "ipython"
+  '';
+
   # No tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/spyder/default.nix b/pkgs/development/python-modules/spyder/default.nix
index c117cb4990f8b..eaca9e6c7f408 100644
--- a/pkgs/development/python-modules/spyder/default.nix
+++ b/pkgs/development/python-modules/spyder/default.nix
@@ -1,16 +1,54 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27, makeDesktopItem, intervaltree,
-  jedi, pycodestyle, psutil, rope, numpy, scipy, matplotlib, pylint,
-  keyring, numpydoc, qtconsole, qtawesome, nbconvert, mccabe, pyopengl,
-  cloudpickle, pygments, spyder-kernels, qtpy, pyzmq, chardet, qdarkstyle,
-  watchdog, python-language-server, pyqtwebengine, atomicwrites, pyxdg,
-  diff-match-patch, three-merge, pyls-black, pyls-spyder, flake8, textdistance
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, makeDesktopItem
+, atomicwrites
+, chardet
+, cloudpickle
+, cookiecutter
+, diff-match-patch
+, flake8
+, intervaltree
+, jedi
+, jellyfish
+, keyring
+, matplotlib
+, mccabe
+, nbconvert
+, numpy
+, numpydoc
+, psutil
+, pygments
+, pylint
+, pyls-spyder
+, pyopengl
+, pyqtwebengine
+, python-lsp-black
+, python-lsp-server
+, pyxdg
+, pyzmq
+, pycodestyle
+, qdarkstyle
+, qstylizer
+, qtawesome
+, qtconsole
+, qtpy
+, rope
+, Rtree
+, scipy
+, spyder-kernels
+, textdistance
+, three-merge
+, watchdog
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "spyder";
   version = "5.3.0";
 
-  disabled = isPy27;
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
@@ -20,11 +58,44 @@ buildPythonPackage rec {
   nativeBuildInputs = [ pyqtwebengine.wrapQtAppsHook ];
 
   propagatedBuildInputs = [
-    intervaltree jedi pycodestyle psutil rope numpy scipy matplotlib pylint keyring
-    numpydoc qtconsole qtawesome nbconvert mccabe pyopengl cloudpickle spyder-kernels
-    pygments qtpy pyzmq chardet pyqtwebengine qdarkstyle watchdog python-language-server
-    atomicwrites pyxdg diff-match-patch three-merge pyls-black pyls-spyder
-    flake8 textdistance
+    atomicwrites
+    chardet
+    cloudpickle
+    cookiecutter
+    diff-match-patch
+    flake8
+    intervaltree
+    jedi
+    jellyfish
+    keyring
+    matplotlib
+    mccabe
+    nbconvert
+    numpy
+    numpydoc
+    psutil
+    pygments
+    pylint
+    pyls-spyder
+    pyopengl
+    pyqtwebengine
+    python-lsp-black
+    python-lsp-server
+    pyxdg
+    pyzmq
+    pycodestyle
+    qdarkstyle
+    qstylizer
+    qtawesome
+    qtconsole
+    qtpy
+    rope
+    Rtree
+    scipy
+    spyder-kernels
+    textdistance
+    three-merge
+    watchdog
   ];
 
   # There is no test for spyder
@@ -44,13 +115,8 @@ buildPythonPackage rec {
     # remove dependency on pyqtwebengine
     # this is still part of the pyqt 5.11 version we have in nixpkgs
     sed -i /pyqtwebengine/d setup.py
-    # The major version bump in watchdog is due to changes in supported
-    # platforms, not API break.
-    # https://github.com/gorakhargosh/watchdog/issues/761#issuecomment-777001518
     substituteInPlace setup.py \
-      --replace "pyqt5<5.13" "pyqt5" \
-      --replace "parso==0.7.0" "parso" \
-      --replace "watchdog>=0.10.3,<2.0.0" "watchdog>=0.10.3,<3.0.0"
+      --replace "ipython>=7.31.1,<8.0.0" "ipython"
   '';
 
   postInstall = ''
diff --git a/pkgs/development/python-modules/sqlalchemy-mixins/default.nix b/pkgs/development/python-modules/sqlalchemy-mixins/default.nix
index 85a03482a323d..c979fc58b1961 100644
--- a/pkgs/development/python-modules/sqlalchemy-mixins/default.nix
+++ b/pkgs/development/python-modules/sqlalchemy-mixins/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "sqlalchemy-mixins";
-  version = "1.5.1";
+  version = "1.5.3";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -18,8 +18,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "absent1706";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-HZiv7F0/UatgY3KlILgzywrK5NJE/tDe6B8/smeYwlM=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-GmMxya6aJ7MMqQ3KSqO3f/cbwgWvQYhEVXtGi6fhP1M=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/sqlite-utils/default.nix b/pkgs/development/python-modules/sqlite-utils/default.nix
index b3621802a0978..d7f07eea073ce 100644
--- a/pkgs/development/python-modules/sqlite-utils/default.nix
+++ b/pkgs/development/python-modules/sqlite-utils/default.nix
@@ -14,16 +14,21 @@
 
 buildPythonPackage rec {
   pname = "sqlite-utils";
-  version = "3.26";
+  version = "3.26.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-G2Fy9PEYtq0dIWhsgV4HZa5y+wLxcI3CYSgDL6ijkdo=";
+    hash = "sha256-GK/036zijOSi9IWZSFifXrexY8dyo6cfwWyaF06x82c=";
   };
 
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "click-default-group-wheel" "click-default-group"
+  '';
+
   propagatedBuildInputs = [
     click
     click-default-group
@@ -45,6 +50,6 @@ buildPythonPackage rec {
     description = "Python CLI utility and library for manipulating SQLite databases";
     homepage = "https://github.com/simonw/sqlite-utils";
     license = licenses.asl20;
-    maintainers = with maintainers; [ meatcar ];
+    maintainers = with maintainers; [ meatcar techknowlogick ];
   };
 }
diff --git a/pkgs/development/python-modules/sqlmap/default.nix b/pkgs/development/python-modules/sqlmap/default.nix
index 6313f413c6ab7..257c7c276153e 100644
--- a/pkgs/development/python-modules/sqlmap/default.nix
+++ b/pkgs/development/python-modules/sqlmap/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "sqlmap";
-  version = "1.6.4";
+  version = "1.6.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-6RKJ5a8Yl+SnWgdfrTIwY0m1JyY6W9fhZk6pTZiBVx8=";
+    sha256 = "sha256-EdiLTzjRigJLsslWSymLNajvUDimBt4d4EBugxVYueg=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/ssh-mitm/default.nix b/pkgs/development/python-modules/ssh-mitm/default.nix
new file mode 100644
index 0000000000000..6973db343f618
--- /dev/null
+++ b/pkgs/development/python-modules/ssh-mitm/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, colored
+, enhancements
+, packaging
+, paramiko
+, pytz
+, pyyaml
+, requests
+, rich
+, sshpubkeys
+, typeguard
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "ssh-mitm";
+  version = "2.0.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-1Vx68ISsT2Vrzy3YBqDqcGEHXHzdKR8jTtBH9SNXT2s=";
+  };
+
+  propagatedBuildInputs = [
+    colored
+    enhancements
+    packaging
+    paramiko
+    pytz
+    pyyaml
+    requests
+    rich
+    sshpubkeys
+    typeguard
+  ];
+
+  # Module has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "sshmitm"
+  ];
+
+  meta = with lib; {
+    description = "Tool for SSH security audits";
+    homepage = "https://github.com/ssh-mitm/ssh-mitm";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/stripe/default.nix b/pkgs/development/python-modules/stripe/default.nix
index 27c3f84331ad2..3e21c225ed853 100644
--- a/pkgs/development/python-modules/stripe/default.nix
+++ b/pkgs/development/python-modules/stripe/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "stripe";
-  version = "2.74.0";
+  version = "3.0.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-+o7StcJBv9peiYTWBnIfnDUqodiG3sVQJBbKBOALktA=";
+    hash = "sha256-/rQA1woPv6VN9+Y3bI+bh2Ud7Zd81qAu4yxmGmB+JZo=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/superqt/default.nix b/pkgs/development/python-modules/superqt/default.nix
index af600f623423c..1386706a33179 100644
--- a/pkgs/development/python-modules/superqt/default.nix
+++ b/pkgs/development/python-modules/superqt/default.nix
@@ -11,13 +11,13 @@
 
 buildPythonPackage rec {
   pname = "superqt";
-  version = "0.3.1";
+  version = "0.3.2";
 
   src = fetchFromGitHub {
     owner = "napari";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-DPjJxOgybNvZ3YvYHr48fmx59Puck61Dzm2G4M9qKo4=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-P1uKQaYgXVTE7DK5w4Ct4aJyfdQ6jUPfaTOcYkpo9pc=";
   };
   format = "pyproject";
   nativeBuildInputs = [ setuptools-scm ];
diff --git a/pkgs/development/python-modules/tempest/default.nix b/pkgs/development/python-modules/tempest/default.nix
index 39f7a82cd9ec8..5a88c7e1222be 100644
--- a/pkgs/development/python-modules/tempest/default.nix
+++ b/pkgs/development/python-modules/tempest/default.nix
@@ -24,7 +24,7 @@
 , hacking
 , oslotest
 , bash
-, python3
+, python
 }:
 
 buildPythonApplication rec {
@@ -76,8 +76,8 @@ buildPythonApplication rec {
     # Tests expect these applications available as such.
     mkdir -p bin
     export PATH="$PWD/bin:$PATH"
-    printf '#!${bash}/bin/bash\nexec ${python3.interpreter} -m tempest.cmd.main "$@"\n' > bin/tempest
-    printf '#!${bash}/bin/bash\nexec ${python3.interpreter} -m tempest.cmd.subunit_describe_calls "$@"\n' > bin/subunit-describe-calls
+    printf '#!${bash}/bin/bash\nexec ${python.interpreter} -m tempest.cmd.main "$@"\n' > bin/tempest
+    printf '#!${bash}/bin/bash\nexec ${python.interpreter} -m tempest.cmd.subunit_describe_calls "$@"\n' > bin/subunit-describe-calls
     chmod +x bin/*
 
     stestr --test-path tempest/tests run -e <(echo "
diff --git a/pkgs/development/python-modules/tensorflow-metadata/default.nix b/pkgs/development/python-modules/tensorflow-metadata/default.nix
index b39f1211d0cac..bdf6cc08aa64f 100644
--- a/pkgs/development/python-modules/tensorflow-metadata/default.nix
+++ b/pkgs/development/python-modules/tensorflow-metadata/default.nix
@@ -8,13 +8,13 @@
 
 buildPythonPackage rec {
   pname = "tensorflow-metadata";
-  version = "1.7.0";
+  version = "1.8.0";
 
   src = fetchFromGitHub {
     owner = "tensorflow";
     repo = "metadata";
-    rev = "v${version}";
-    sha256 = "sha256-CQlLEVNcD9u2pojz8r1eLzYzc9i2hjdZfzfYSQ/8Q4k=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-IaLr6XYEy1EcyWi5GWzDFa7TeVZ59v8Wj5qkNdVbOqw=";
   };
 
   patches = [
diff --git a/pkgs/development/python-modules/tesla-powerwall/default.nix b/pkgs/development/python-modules/tesla-powerwall/default.nix
new file mode 100644
index 0000000000000..a2a7b48937455
--- /dev/null
+++ b/pkgs/development/python-modules/tesla-powerwall/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, requests
+, pytestCheckHook
+, responses
+}:
+
+buildPythonPackage rec {
+  pname = "tesla-powerwall";
+  version = "0.3.17";
+
+  format = "setuptools";
+
+  src = fetchPypi {
+    pname = "tesla_powerwall";
+    inherit version;
+    sha256 = "09351e408e8e3cc03414944c1a487ef2178300829559e80835026acb84330cfd";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    responses
+  ];
+
+  pytestFlagsArray = [
+    "tests/unit"
+  ];
+
+  pythonImportsCheck = [ "tesla_powerwall" ];
+
+  meta = {
+    description = "API for Tesla Powerwall";
+    homepage = "https://github.com/jrester/tesla_powerwall";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/testtools/default.nix b/pkgs/development/python-modules/testtools/default.nix
index 84900ad5477e9..430d0374ef20d 100644
--- a/pkgs/development/python-modules/testtools/default.nix
+++ b/pkgs/development/python-modules/testtools/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, pythonRelaxDepsHook
 , pbr
 , python-mimeparse
 , extras
@@ -20,15 +21,13 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ pbr python-mimeparse extras ];
   buildInputs = [ traceback2 ];
+  nativeBuildInputs = [ pythonRelaxDepsHook ];
 
   # testscenarios has a circular dependency on testtools
   doCheck = false;
   checkInputs = [ testscenarios ];
 
-  # testtools 2.0.0 and up has a circular run-time dependency on futures
-  postPatch = ''
-    substituteInPlace requirements.txt --replace "fixtures>=1.3.0" ""
-  '';
+  pythonRemoveDeps = [ "fixtures" ];
 
   meta = {
     description = "A set of extensions to the Python standard library's unit testing framework";
diff --git a/pkgs/development/python-modules/textual/default.nix b/pkgs/development/python-modules/textual/default.nix
index e14c64730a23a..5806b28e34903 100644
--- a/pkgs/development/python-modules/textual/default.nix
+++ b/pkgs/development/python-modules/textual/default.nix
@@ -1,38 +1,34 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, fetchpatch
 , poetry-core
 , rich
 , typing-extensions
 , pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "textual";
-  version = "0.1.15";
+  version = "0.1.18";
   format = "pyproject";
 
+  disabled = pythonOlder "3.7";
+
   src = fetchFromGitHub {
     owner = "Textualize";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1jmjais0yq8dwi9yikgrxdw4rwp8aq1981nhfxn0v97jb07i4cj6";
+    sha256 = "sha256-XVmbt8r5HL8r64ISdJozmM+9HuyvqbpdejWICzFnfiw=";
   };
 
-  patches = [
-    (fetchpatch {
-      # v0.1.15 git tag has 0.1.14 in pyproject.toml
-      name = "version.patch";
-      url = "https://github.com/Textualize/textual/commit/1b8d7d184e10889002425641222702afba508aea.patch";
-      sha256 = "1nfqp5f8ba3fg0ar3lghrlqypbjbsaywxaz3iiff8fy8j2wgsppp";
-    })
+  nativeBuildInputs = [
+    poetry-core
   ];
 
-  nativeBuildInputs = [ poetry-core ];
-
   propagatedBuildInputs = [
     rich
+  ] ++ lib.optionals (pythonOlder "3.9") [
     typing-extensions
   ];
 
@@ -40,7 +36,14 @@ buildPythonPackage rec {
     pytestCheckHook
   ];
 
-  pythonImportsCheck = [ "textual" ];
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'rich = "^12.3.0"' 'rich = "*"'
+  '';
+
+  pythonImportsCheck = [
+    "textual"
+  ];
 
   meta = with lib; {
     description = "TUI framework for Python inspired by modern web development";
diff --git a/pkgs/development/python-modules/timetagger/default.nix b/pkgs/development/python-modules/timetagger/default.nix
index 806687361585f..2158cac9fa3b2 100644
--- a/pkgs/development/python-modules/timetagger/default.nix
+++ b/pkgs/development/python-modules/timetagger/default.nix
@@ -1,13 +1,18 @@
 { lib
-, python3Packages
+, buildPythonPackage
 , fetchFromGitHub
+, asgineer
+, itemdb
+, jinja2
+, markdown
+, pscript
+, pyjwt
+, uvicorn
 , pytestCheckHook
 , requests
-, pytest
-, pythonOlder
 }:
 
-python3Packages.buildPythonPackage rec {
+buildPythonPackage rec {
   pname = "timetagger";
   version = "22.4.2";
 
@@ -18,7 +23,7 @@ python3Packages.buildPythonPackage rec {
     sha256 = "sha256-CWY+5O4Y1dvKQNy1Cclqj4+U6q5vVVj9hZq41MYqXKs=";
   };
 
-  propagatedBuildInputs = with python3Packages; [
+  propagatedBuildInputs = [
     asgineer
     itemdb
     jinja2
@@ -35,12 +40,8 @@ python3Packages.buildPythonPackage rec {
   checkInputs = [
     pytestCheckHook
     requests
-    pytest
   ];
 
-  # fails with `No module named pytest` on python version 3.10
-  doCheck = pythonOlder "3.10";
-
   meta = with lib; {
     homepage = "https://timetagger.app";
     license = licenses.gpl3Only;
diff --git a/pkgs/development/python-modules/tldextract/default.nix b/pkgs/development/python-modules/tldextract/default.nix
index 139f58660c4cd..fe32af2671336 100644
--- a/pkgs/development/python-modules/tldextract/default.nix
+++ b/pkgs/development/python-modules/tldextract/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname   = "tldextract";
-  version = "3.2.1";
+  version = "3.3.0";
   format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-rJMEzfgLCcN+6pZXmeDZrAqhzLZTH65Uiqvgm68aJUk=";
+    hash = "sha256-rc0kq/Ic40UEF81aAPI7fldVTOiugnM03RK/y7YnTPE=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/torchmetrics/default.nix b/pkgs/development/python-modules/torchmetrics/default.nix
new file mode 100644
index 0000000000000..ddccb4d78657a
--- /dev/null
+++ b/pkgs/development/python-modules/torchmetrics/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, cloudpickle
+, scikit-learn
+, scikitimage
+, packaging
+, psutil
+, py-deprecate
+, pytorch
+, pytestCheckHook
+, torchmetrics
+, pytorch-lightning
+}:
+
+let
+  pname = "torchmetrics";
+  version = "0.8.1";
+in
+buildPythonPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "PyTorchLightning";
+    repo = "metrics";
+    rev = "v${version}";
+    hash = "sha256-AryEhYAeC97dO2pgHoz0Y9F//DVdX6RfCa80gI56iz4=";
+  };
+
+  propagatedBuildInputs = [
+    packaging
+    py-deprecate
+  ];
+
+  # Let the user bring their own instance
+  buildInputs = [
+    pytorch
+  ];
+
+  checkInputs = [
+    pytorch-lightning
+    scikit-learn
+    scikitimage
+    cloudpickle
+    psutil
+    pytestCheckHook
+  ];
+
+  # A cyclic dependency in: integrations/test_lightning.py
+  doCheck = false;
+  passthru.tests.check = torchmetrics.overridePythonAttrs (_: {
+    doCheck = true;
+  });
+
+  disabledTestPaths = [
+    # These require too many "leftpad-level" dependencies
+    "tests/text"
+    "tests/audio"
+    "tests/image"
+
+    # A few non-deterministic things like test_check_compute_groups_is_faster
+    "tests/bases/test_collections.py"
+  ];
+
+  pythonImportsCheck = [
+    "torchmetrics"
+  ];
+
+  meta = with lib; {
+    description = "Machine learning metrics for distributed, scalable PyTorch applications (used in pytorch-lightning)";
+    homepage = "https://torchmetrics.readthedocs.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [
+      SomeoneSerge
+    ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/total-connect-client/default.nix b/pkgs/development/python-modules/total-connect-client/default.nix
index 7846525f65fd7..2f093200bf35a 100644
--- a/pkgs/development/python-modules/total-connect-client/default.nix
+++ b/pkgs/development/python-modules/total-connect-client/default.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "total-connect-client";
-  version = "2022.2.1";
+  version = "2022.5";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "craigjmidwinter";
     repo = "total-connect-client";
     rev = version;
-    hash = "sha256-1/uqOxaJqrT+E+0ikNZX9AfIRRbpBSjh2nINrqGWxbY=";
+    hash = "sha256-S+xki1Bj+wvKhbl2vRRa8gULyxTsH4fyypkrHj3JwH0=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/treq/default.nix b/pkgs/development/python-modules/treq/default.nix
index f566fda6f8ab1..1902a578ec2bb 100644
--- a/pkgs/development/python-modules/treq/default.nix
+++ b/pkgs/development/python-modules/treq/default.nix
@@ -1,5 +1,10 @@
-{ lib, fetchPypi, buildPythonPackage, service-identity, requests, six
-, mock, twisted, incremental, pep8, httpbin
+{ lib
+, fetchPypi
+, buildPythonPackage
+, requests
+, twisted
+, incremental
+, httpbin
 }:
 
 buildPythonPackage rec {
@@ -13,44 +18,23 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     requests
-    six
     incremental
-    service-identity
     twisted
-  ]
-    # twisted [tls] requirements (we should find a way to list "extras")
-    ++ twisted.extras.tls;
+  ] ++ twisted.extras-require.tls;
 
   checkInputs = [
-    pep8
-    mock
     httpbin
+    twisted
   ];
 
-  postPatch = ''
-    rm -fv src/treq/test/test_treq_integration.py
-  '';
-
-  # XXX tox tries to install coverage despite it is installed
-  #postBuild = ''
-  #  # build documentation and install in $out
-  #  tox -e docs
-  #  mkdir -pv $out/docs
-  #  cp -rv docs/* $out/docs/
-  #'';
-
   checkPhase = ''
-    pep8 --ignore=E902 treq
     trial treq
   '';
 
-  # Failing tests https://github.com/twisted/treq/issues/208
-  doCheck = false;
-
   meta = with lib; {
     homepage = "https://github.com/twisted/treq";
-    description = "A requests-like API built on top of twisted.web's Agent";
+    description = "Requests-like API built on top of twisted.web's Agent";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/trimesh/default.nix b/pkgs/development/python-modules/trimesh/default.nix
index c3a6a4af9e58d..315678b874efa 100644
--- a/pkgs/development/python-modules/trimesh/default.nix
+++ b/pkgs/development/python-modules/trimesh/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "trimesh";
-  version = "3.11.2";
+  version = "3.12.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-7booFScN2qNqldPdBmxH1pTUz2+u7JMmPmX0tJojaeI=";
+    sha256 = "sha256-RcRFF5vIMOQsPXbd2g8DSnOrWnpLLNe3Sa8PqAdwFvU=";
   };
 
   propagatedBuildInputs = [ numpy ];
diff --git a/pkgs/development/python-modules/trytond/default.nix b/pkgs/development/python-modules/trytond/default.nix
index c2509c662d3d8..431342cf02d54 100644
--- a/pkgs/development/python-modules/trytond/default.nix
+++ b/pkgs/development/python-modules/trytond/default.nix
@@ -1,9 +1,8 @@
 { lib
-, buildPythonApplication
-, fetchpatch
+, buildPythonPackage
 , fetchPypi
 , pythonOlder
-, mock
+, defusedxml
 , lxml
 , relatorio
 , genshi
@@ -13,44 +12,30 @@
 , werkzeug
 , wrapt
 , passlib
-, pillow
-, bcrypt
 , pydot
 , python-Levenshtein
-, simplejson
 , html2text
-, psycopg2
-, withPostgresql ? true
+, weasyprint
+, gevent
+, pillow
+, withPostgresql ? true, psycopg2
+, python
 }:
 
-buildPythonApplication rec {
+buildPythonPackage rec {
   pname = "trytond";
-  version = "6.2.6";
+  version = "6.4.0";
   format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-Sof6A9lxU70YnCbboJr56CAdTL0cRbaRNxdvG5Tnqnw=";
+    sha256 = "3c04d75c2a779b88b8c7ab6dd252cf4fc51f9546bf42760d10dbd1a17f61b288";
   };
 
-  patches = [
-    (fetchpatch {
-      # werkzeug 2.1 compatibility for the tests
-      url = "https://github.com/tryton/trytond/commit/86a50ca06cf0d79404dbd731141ed29f8e9fcb9d.patch";
-      hash = "sha256-xY5Sdhkd0lEgscV7NHwX2YWxobWqQFElY5BJvDT+we8=";
-    })
-  ];
-
-  # Tells the tests which database to use
-  DB_NAME = ":memory:";
-
-  buildInputs = [
-    mock
-  ];
-
   propagatedBuildInputs = [
+    defusedxml
     lxml
     relatorio
     genshi
@@ -59,20 +44,29 @@ buildPythonApplication rec {
     python-sql
     werkzeug
     wrapt
-    pillow
     passlib
 
     # extra dependencies
-    bcrypt
     pydot
     python-Levenshtein
-    simplejson
     html2text
-  ] ++ lib.optional withPostgresql psycopg2;
+    weasyprint
+    gevent
+    pillow
+  ] ++ relatorio.extras-require.fodt
+    ++ passlib.extras-require.bcrypt
+    ++ passlib.extras-require.argon2
+    ++ lib.optional withPostgresql psycopg2;
+
+  checkPhase = ''
+    runHook preCheck
 
-  # If unset, trytond will try to mkdir /homeless-shelter
-  preCheck = ''
     export HOME=$(mktemp -d)
+    export TRYTOND_DATABASE_URI="sqlite://"
+    export DB_NAME=":memory:";
+    ${python.interpreter} -m unittest discover -s trytond.tests
+
+    runHook postCheck
   '';
 
   meta = with lib; {
@@ -86,6 +80,7 @@ buildPythonApplication rec {
       modularity, scalability and security.
     '';
     homepage = "http://www.tryton.org/";
+    changelog = "https://hg.tryton.org/trytond/file/${version}/CHANGELOG";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ udono johbo ];
   };
diff --git a/pkgs/development/python-modules/ttp-templates/default.nix b/pkgs/development/python-modules/ttp-templates/default.nix
new file mode 100644
index 0000000000000..46db94782be5c
--- /dev/null
+++ b/pkgs/development/python-modules/ttp-templates/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, netmiko
+, pytestCheckHook
+, python
+, pythonOlder
+, ttp
+}:
+
+buildPythonPackage rec {
+  pname = "ttp-templates";
+  version = "0.1.3";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "dmulyalin";
+    repo = "ttp_templates";
+    rev = version;
+    hash = "sha256-Qx+z/srYgD67FjXzYrc8xtA99n8shWK7yWj/r/ETN2U=";
+  };
+
+  propagatedBuildInputs = [
+    ttp
+  ];
+
+  checkInputs = [
+    netmiko
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "ttp_templates"
+  ];
+
+  pytestFlagsArray = [
+    # The other tests requires data which is no part of the source
+    "test/test_ttp_templates_methods.py"
+    "test/test_yang_openconfig_lldp.py"
+  ];
+
+  meta = with lib; {
+    description = "Template Text Parser Templates collections";
+    homepage = "https://github.com/dmulyalin/ttp_templates";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/tubeup/default.nix b/pkgs/development/python-modules/tubeup/default.nix
index e11aaa7d55596..46a8df82dff8e 100644
--- a/pkgs/development/python-modules/tubeup/default.nix
+++ b/pkgs/development/python-modules/tubeup/default.nix
@@ -9,13 +9,13 @@
 
 buildPythonPackage rec {
   pname = "tubeup";
-  version = "0.0.28";
+  version = "0.0.30";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-+RvDwOHL+zwpM/nOWWS7pZIFEOx+jMrgt3FLYSshANo=";
+    sha256 = "sha256-xN3H3l4ANT7/tXg+oGScvE0Atf6h9CVbODaWybe8a9o=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/tweepy/default.nix b/pkgs/development/python-modules/tweepy/default.nix
index a2c815b45e258..bcb6fbd3b06e0 100644
--- a/pkgs/development/python-modules/tweepy/default.nix
+++ b/pkgs/development/python-modules/tweepy/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "tweepy";
-  version = "4.8.0";
+  version = "4.9.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -20,8 +20,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
-    rev = "v${version}";
-    hash = "sha256-RaM2JN2WOHyZY+AxzgQLvhXg6UnevDbSFSR4jFLsYrc=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-BMRRunPRDW5J/7KU+pr2Uv9Qa6oHBwkA7tsGa5YdzLw=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/twisted/default.nix b/pkgs/development/python-modules/twisted/default.nix
index 02a993fdf1398..8bc03b1e5cf97 100644
--- a/pkgs/development/python-modules/twisted/default.nix
+++ b/pkgs/development/python-modules/twisted/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , buildPythonPackage
+, pythonOlder
 , fetchPypi
 , python
 , zope_interface
@@ -14,11 +15,24 @@
 , setuptools
 , idna
 , typing-extensions
+, pyasn1
+, cryptography
+, appdirs
+, bcrypt
+, pynacl
+, pyserial
+, h2
+, priority
+, contextvars
 }:
 buildPythonPackage rec {
   pname = "Twisted";
   version = "22.4.0";
 
+  disabled = pythonOlder "3.6";
+
+  format = "setuptools";
+
   src = fetchPypi {
     inherit pname version;
     extension = "tar.gz";
@@ -27,7 +41,14 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ zope_interface incremental automat constantly hyperlink pyhamcrest attrs setuptools typing-extensions ];
 
-  passthru.extras.tls = [ pyopenssl service-identity idna ];
+  passthru.extras-require = rec {
+    tls = [ pyopenssl service-identity idna ];
+    conch = [ pyasn1 cryptography appdirs bcrypt ];
+    conch_nacl = conch ++ [ pynacl ];
+    serial = [ pyserial ];
+    http2 = [ h2 priority ];
+    contextvars = lib.optionals (pythonOlder "3.7") [ contextvars ];
+  };
 
   # Patch t.p._inotify to point to libc. Without this,
   # twisted.python.runtime.platform.supportsINotify() == False
diff --git a/pkgs/development/python-modules/txaio/default.nix b/pkgs/development/python-modules/txaio/default.nix
index 23c24f3e514a7..02cf7c0fda6af 100644
--- a/pkgs/development/python-modules/txaio/default.nix
+++ b/pkgs/development/python-modules/txaio/default.nix
@@ -5,7 +5,6 @@
 , pytest-asyncio
 , pytestCheckHook
 , pythonOlder
-, six
 , twisted
 , zope_interface
 }:
@@ -21,7 +20,6 @@ buildPythonPackage rec {
   };
 
   propagatedBuildInputs = [
-    six
     twisted
     zope_interface
   ];
diff --git a/pkgs/development/python-modules/txtorcon/default.nix b/pkgs/development/python-modules/txtorcon/default.nix
index 167e090fca064..7196e88e8dd93 100644
--- a/pkgs/development/python-modules/txtorcon/default.nix
+++ b/pkgs/development/python-modules/txtorcon/default.nix
@@ -13,7 +13,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     incremental twisted automat zope_interface
-  ] ++ twisted.extras.tls
+  ] ++ twisted.extras-require.tls
   ++ lib.optionals (!isPy3k) [ ipaddress ];
 
   checkInputs = [ pytestCheckHook mock lsof GeoIP ];
diff --git a/pkgs/development/python-modules/typecode/default.nix b/pkgs/development/python-modules/typecode/default.nix
index 16ee927e849b0..7b3a01a53a8ac 100644
--- a/pkgs/development/python-modules/typecode/default.nix
+++ b/pkgs/development/python-modules/typecode/default.nix
@@ -10,16 +10,19 @@
 , typecode-libmagic
 , pytestCheckHook
 , pytest-xdist
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "typecode";
-  version = "21.6.1";
+  version = "30.0.0";
   format = "setuptools";
 
+  disabled = pythonOlder "3.7";
+
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d3a82859df5607c900972e08e1bca31e3fe2daed37afd1b8231cad2ef613d8d6";
+    hash = "sha256-pRGLU/xzQQqDZMIsrq1Fy7VgGIpFjnHtpmO+yL7t4g8=";
   };
 
   dontConfigure = true;
diff --git a/pkgs/development/python-modules/types-dateutil/default.nix b/pkgs/development/python-modules/types-dateutil/default.nix
index 8e52c5b6e0144..e8cf1edbde5ff 100644
--- a/pkgs/development/python-modules/types-dateutil/default.nix
+++ b/pkgs/development/python-modules/types-dateutil/default.nix
@@ -5,12 +5,12 @@
 
 buildPythonPackage rec {
   pname = "types-python-dateutil";
-  version = "2.8.14";
+  version = "2.8.15";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-Nnwf+hpSpLKlNMmzC0CwHyt/LqR6l/2CH2x20ceuMSk=";
+    sha256 = "sha256-fbHk7UkWvRKMvuPuze4OBsxWhNoqHN/Vf5hUHN++CGE=";
   };
 
   pythonImportsCheck = [ "dateutil-stubs" ];
diff --git a/pkgs/development/python-modules/types-pytz/default.nix b/pkgs/development/python-modules/types-pytz/default.nix
index d3ac7e4932bb1..bbbd791301815 100644
--- a/pkgs/development/python-modules/types-pytz/default.nix
+++ b/pkgs/development/python-modules/types-pytz/default.nix
@@ -5,12 +5,12 @@
 
 buildPythonPackage rec {
   pname = "types-pytz";
-  version = "2021.3.7";
+  version = "2021.3.8";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-EdW6BiaBZ5U8zEo+7hksJLQtANKu9FbBYKh5iJPLIIE=";
+    sha256 = "sha256-QSU6OivwKLaj8XtYdJppLZVa8PdOl13pT29NLTzQHb0=";
   };
 
   # Modules doesn't have tests
diff --git a/pkgs/development/python-modules/types-tabulate/default.nix b/pkgs/development/python-modules/types-tabulate/default.nix
index 5da6ea016801d..c8f49386543a4 100644
--- a/pkgs/development/python-modules/types-tabulate/default.nix
+++ b/pkgs/development/python-modules/types-tabulate/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "types-tabulate";
-  version = "0.8.8";
+  version = "0.8.9";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-CzGcfhDdVh98FfVt7DR8MZP9hl9Ovl/x7LAg6vp5O8M=";
+    hash = "sha256-L8P6T+GFOsmHz1Do1FmeP+RG3VMGT+hqRqQHqY6fwE8=";
   };
 
   # Module doesn't have tests
diff --git a/pkgs/development/python-modules/types-toml/default.nix b/pkgs/development/python-modules/types-toml/default.nix
index ed965cbb8c489..5b1482440ea95 100644
--- a/pkgs/development/python-modules/types-toml/default.nix
+++ b/pkgs/development/python-modules/types-toml/default.nix
@@ -5,12 +5,12 @@
 
 buildPythonPackage rec {
   pname = "types-toml";
-  version = "0.10.6";
+  version = "0.10.7";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-aus+17+oaTgVUcd07WqRQuPu2YqD76UQipYy6v1W3NM=";
+    sha256 = "sha256-pWf+JhSxd9U3rZmmYa3Jv8jFWkb5XmY3Ck7S3RcTNfk=";
   };
 
   # Module doesn't have tests
diff --git a/pkgs/development/python-modules/uasiren/default.nix b/pkgs/development/python-modules/uasiren/default.nix
new file mode 100644
index 0000000000000..49ab9906c51bd
--- /dev/null
+++ b/pkgs/development/python-modules/uasiren/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+
+# build time
+, setuptools-scm
+
+# propagates
+, aiohttp
+
+# tests
+, pytestCheckHook
+}:
+
+let
+  pname = "uasiren";
+  version = "0.0.1";
+in
+
+buildPythonPackage {
+  inherit pname version;
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "PaulAnnekov";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NHrnG5Vhz+JZgcTJyfIgGz0Ye+3dFVv2zLCCqw2++oM=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "uasiren"
+    "uasiren.client"
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/PaulAnnekov/uasiren/releases/tag/v${version}";
+    description = "Implements siren.pp.ua API - public wrapper for api.ukrainealarm.com API that returns info about Ukraine air-raid alarms";
+    homepage = "https://github.com/PaulAnnekov/uasiren";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/ufo2ft/default.nix b/pkgs/development/python-modules/ufo2ft/default.nix
index 8f700107bceb6..b1e5ea7905a01 100644
--- a/pkgs/development/python-modules/ufo2ft/default.nix
+++ b/pkgs/development/python-modules/ufo2ft/default.nix
@@ -12,13 +12,13 @@
 
 buildPythonPackage rec {
   pname = "ufo2ft";
-  version = "2.26.0";
+  version = "2.27.0";
 
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-1WQAs1ypWtLObgBzPtqtvHjkKnDWohu3PbI3bF7B0Sg=";
+    sha256 = "r5bE4M/blt5TKzP43MpijwYY6ll3aasszmGksY5WTTE=";
   };
 
   patches = [
diff --git a/pkgs/development/python-modules/ufoLib2/default.nix b/pkgs/development/python-modules/ufoLib2/default.nix
index 21894203d1ad9..fab42e5169b82 100644
--- a/pkgs/development/python-modules/ufoLib2/default.nix
+++ b/pkgs/development/python-modules/ufoLib2/default.nix
@@ -5,6 +5,7 @@
 , fonttools
 , pytestCheckHook
 , fs
+, setuptools-scm
 }:
 
 buildPythonPackage rec {
@@ -25,6 +26,8 @@ buildPythonPackage rec {
     fs
   ];
 
+  nativeBuildInputs = [ setuptools-scm ];
+
   checkInputs = [
     pytestCheckHook
   ];
diff --git a/pkgs/development/python-modules/uharfbuzz/default.nix b/pkgs/development/python-modules/uharfbuzz/default.nix
index f39aa12152a14..f545acb976132 100644
--- a/pkgs/development/python-modules/uharfbuzz/default.nix
+++ b/pkgs/development/python-modules/uharfbuzz/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchFromGitHub
 , pythonOlder
@@ -41,5 +42,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/harfbuzz/uharfbuzz";
     license = licenses.asl20;
     maintainers = with maintainers; [ wolfangaukang ];
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/pkgs/development/python-modules/ujson/default.nix b/pkgs/development/python-modules/ujson/default.nix
index 0d7faf93f9344..987347c869510 100644
--- a/pkgs/development/python-modules/ujson/default.nix
+++ b/pkgs/development/python-modules/ujson/default.nix
@@ -10,7 +10,7 @@
 buildPythonPackage rec {
   pname = "ujson";
   version = "5.1.0";
-  disabled = isPyPy || pythonOlder "3.5";
+  disabled = isPyPy || pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
@@ -28,9 +28,9 @@ buildPythonPackage rec {
   pythonImportsCheck = [ "ujson" ];
 
   meta = with lib; {
-    description = "Ultra fast JSON encoder and decoder for Python";
-    homepage = "https://pypi.python.org/pypi/ujson";
+    description = "Ultra fast JSON encoder and decoder";
+    homepage = "https://github.com/ultrajson/ultrajson";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/ukrainealarm/default.nix b/pkgs/development/python-modules/ukrainealarm/default.nix
new file mode 100644
index 0000000000000..00854ded31673
--- /dev/null
+++ b/pkgs/development/python-modules/ukrainealarm/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+
+# build time
+, setuptools-scm
+
+# propagates
+, aiohttp
+
+# tests
+, pytestCheckHook
+}:
+
+let
+  pname = "ukrainealarm";
+  version = "0.0.1";
+in
+
+buildPythonPackage {
+  inherit pname version;
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "PaulAnnekov";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-0gsxXQiSkJIM/I0VYsjdCCB3NjPr6QJbD/rBkGrwtW8=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "ukrainealarm"
+    "ukrainealarm.client"
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/PaulAnnekov/ukrainealarm/releases/tag/v${version}";
+    description = "Implements api.ukrainealarm.com API that returns info about Ukraine air raid alarms";
+    homepage = "https://github.com/PaulAnnekov/ukrainealarm";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/urwid/default.nix b/pkgs/development/python-modules/urwid/default.nix
index 3df7f6703a79b..57e64ba97a894 100644
--- a/pkgs/development/python-modules/urwid/default.nix
+++ b/pkgs/development/python-modules/urwid/default.nix
@@ -2,7 +2,6 @@
 , buildPythonPackage
 , fetchPypi
 , isPy3k
-, isPy27
 , glibcLocales
 }:
 
@@ -11,8 +10,6 @@ buildPythonPackage rec {
   version = "2.1.2";
   format = "setuptools";
 
-  disabled = isPy27;
-
   src = fetchPypi {
     inherit pname version;
     sha256 = "588bee9c1cb208d0906a9f73c613d2bd32c3ed3702012f51efe318a3f2127eae";
@@ -33,6 +30,6 @@ buildPythonPackage rec {
     description = "A full-featured console (xterm et al.) user interface library";
     homepage = "https://urwid.org/";
     license = licenses.lgpl21Plus;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/validobj/default.nix b/pkgs/development/python-modules/validobj/default.nix
new file mode 100644
index 0000000000000..2cf21522d4b35
--- /dev/null
+++ b/pkgs/development/python-modules/validobj/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, flit
+, hypothesis
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "validobj";
+  version = "0.5.1";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "430b0b56931a2cebdb857a9fe9da2467c06a3b4db37b728e7f1a8706e8887705";
+  };
+
+  nativeBuildInputs = [ flit ];
+
+  checkInputs = [ hypothesis pytestCheckHook ];
+
+  pythonImportsCheck = [ "validobj" ];
+
+  meta = with lib; {
+    description = "Validobj is library that takes semistructured data (for example JSON and YAML configuration files) and converts it to more structured Python objects";
+    homepage = "https://github.com/Zaharid/validobj";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ veprbl ];
+  };
+}
diff --git a/pkgs/development/python-modules/vallox-websocket-api/default.nix b/pkgs/development/python-modules/vallox-websocket-api/default.nix
new file mode 100644
index 0000000000000..53af2f0dd9fcd
--- /dev/null
+++ b/pkgs/development/python-modules/vallox-websocket-api/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, construct
+, websockets
+, asynctest
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "vallox-websocket-api";
+  version = "2.11.0";
+
+  disabled = pythonOlder "3.6";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "yozik04";
+    repo = "vallox_websocket_api";
+    rev = version;
+    hash = "sha256-wZiPrPl9ESp43PFdRPvqB2nOg+ogfaArunZOR3Q9cvs=";
+  };
+
+  propagatedBuildInputs = [
+    construct
+    websockets
+  ];
+
+  checkInputs = [
+    asynctest
+    pytestCheckHook
+  ];
+
+  meta = {
+    description = "Async API for Vallox ventilation units";
+    homepage = "https://github.com/yozik04/vallox_websocket_api";
+    license = lib.licenses.lgpl3Only;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/voluptuous/default.nix b/pkgs/development/python-modules/voluptuous/default.nix
index d2e221d6e3903..4212de031be84 100644
--- a/pkgs/development/python-modules/voluptuous/default.nix
+++ b/pkgs/development/python-modules/voluptuous/default.nix
@@ -1,27 +1,31 @@
 { lib
 , buildPythonPackage
-, fetchPypi
-, nose
+, fetchFromGitHub
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
   pname = "voluptuous";
-  version = "0.13.0";
+  version = "0.13.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "sha256-yuakUmtDS2QoFrNKAOEYbVpfXgyUirlNKpGOAeWHQGY=";
+  src = fetchFromGitHub {
+    owner = "alecthomas";
+    repo = pname;
+    rev = version;
+    hash = "sha256-cz3Bd+/yPh+VOHxzi/W+gbDh/H5Nl/n4jvxDOirmAVk=";
   };
 
   checkInputs = [
-    nose
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    nosetests
-  '';
+  pythonImportsCheck = [
+    "voluptuous"
+  ];
 
-  pythonImportsCheck = [ "voluptuous" ];
+  pytestFlagsArray = [
+    "voluptuous/tests/"
+  ];
 
   meta = with lib; {
     description = "Python data validation library";
diff --git a/pkgs/development/python-modules/wandb/default.nix b/pkgs/development/python-modules/wandb/default.nix
index f31708baef8b6..615b4e64aa4cd 100644
--- a/pkgs/development/python-modules/wandb/default.nix
+++ b/pkgs/development/python-modules/wandb/default.nix
@@ -12,6 +12,7 @@
 , jsonref
 , jsonschema
 , matplotlib
+, nbclient
 , nbformat
 , pandas
 , pathtools
@@ -36,7 +37,7 @@
 
 buildPythonPackage rec {
   pname = "wandb";
-  version = "0.12.15";
+  version = "0.12.16";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -45,7 +46,7 @@ buildPythonPackage rec {
     owner = pname;
     repo = "client";
     rev = "v${version}";
-    hash = "sha256-Fq+JwUEZP1QDFKYVyiR8DUU0GQV6fK50FW78qaWh+Mo=";
+    hash = "sha256-ZY7nTj93piTEeHhW+H+nQ+ws2dDmmY6u3p7uz296PbA=";
   };
 
   # setuptools is necessary since pkg_resources is required at runtime.
@@ -66,6 +67,20 @@ buildPythonPackage rec {
     shortuuid
   ];
 
+  # wandb expects git to be in PATH. See https://gist.github.com/samuela/57aeee710e41ab2bf361b7ed8fbbeabf
+  # for the error message, and an example usage here: https://github.com/wandb/client/blob/d5f655b7ca7e3eac2f3a67a84bc5c2a664a31baf/wandb/sdk/internal/meta.py#L128.
+  # See https://github.com/NixOS/nixpkgs/pull/164176#discussion_r828801621 as to
+  # why we don't put it in propagatedBuildInputs. Note that this is difficult to
+  # test offline due to https://github.com/wandb/client/issues/3519.
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s ${git}/bin/git $out/bin/git
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
   checkInputs = [
     azure-core
     bokeh
@@ -73,6 +88,7 @@ buildPythonPackage rec {
     jsonref
     jsonschema
     matplotlib
+    nbclient
     nbformat
     pandas
     pydantic
@@ -83,16 +99,6 @@ buildPythonPackage rec {
     tqdm
   ];
 
-  # wandb expects git to be in PATH. See https://gist.github.com/samuela/57aeee710e41ab2bf361b7ed8fbbeabf
-  # for the error message, and an example usage here: https://github.com/wandb/client/blob/d5f655b7ca7e3eac2f3a67a84bc5c2a664a31baf/wandb/sdk/internal/meta.py#L128.
-  # See https://github.com/NixOS/nixpkgs/pull/164176#discussion_r828801621 as to
-  # why we don't put it in propagatedBuildInputs. Note that this is difficult to
-  # test offline due to https://github.com/wandb/client/issues/3519.
-  postInstall = ''
-    mkdir -p $out/bin
-    ln -s ${git}/bin/git $out/bin/git
-  '';
-
   disabledTestPaths = [
     # Tests that try to get chatty over sockets or spin up servers, not possible in the nix build environment.
     "tests/test_cli.py"
diff --git a/pkgs/development/python-modules/weasyprint/default.nix b/pkgs/development/python-modules/weasyprint/default.nix
index a1a7470b8b5d6..ce9432ee296aa 100644
--- a/pkgs/development/python-modules/weasyprint/default.nix
+++ b/pkgs/development/python-modules/weasyprint/default.nix
@@ -48,6 +48,12 @@ buildPythonPackage rec {
       pangocairo = "${pango.out}/lib/libpangocairo-1.0${stdenv.hostPlatform.extensions.sharedLibrary}";
       harfbuzz = "${harfbuzz.out}/lib/libharfbuzz${stdenv.hostPlatform.extensions.sharedLibrary}";
     })
+    # Disable tests for new Ghostscript
+    # Remove when next version is released
+    (fetchpatch {
+      url = "https://github.com/Kozea/WeasyPrint/commit/e544398b00d76bc0317ea7e2abe40dc46b380910.patch";
+      sha256 = "sha256-oQO3j9Mo1x98WaLPROxsOn0qkeYRJrCx5QWWKoHvabE=";
+    })
   ];
 
   nativeBuildInputs = [
@@ -80,6 +86,8 @@ buildPythonPackage rec {
     # sensitive to sandbox environments
     "test_tab_size"
     "test_tabulation_character"
+    "test_linear_gradients_5"
+    "test_linear_gradients_12"
   ];
 
   FONTCONFIG_FILE = "${fontconfig.out}/etc/fonts/fonts.conf";
diff --git a/pkgs/development/python-modules/webssh/default.nix b/pkgs/development/python-modules/webssh/default.nix
index ff26a9f1711e5..db21f16f424b7 100644
--- a/pkgs/development/python-modules/webssh/default.nix
+++ b/pkgs/development/python-modules/webssh/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "webssh";
-  version = "1.5.3";
+  version = "1.6.0";
   format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-Au6PE8jYm8LkEp0B1ymW//ZkrkcV0BauwufQmrHLEU4=";
+    hash = "sha256-yqjwahh2METXD83geTGt5sUL+vmxbrYxj4KtwTxbD94=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/weconnect-mqtt/default.nix b/pkgs/development/python-modules/weconnect-mqtt/default.nix
index 646702befbb37..29736366f6742 100644
--- a/pkgs/development/python-modules/weconnect-mqtt/default.nix
+++ b/pkgs/development/python-modules/weconnect-mqtt/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "weconnect-mqtt";
-  version = "0.33.0";
+  version = "0.34.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "tillsteinbach";
     repo = "WeConnect-mqtt";
     rev = "v${version}";
-    sha256 = "sha256-m8T1ngTcqwrel4EW8jvXg7RH+TtYyZRvIR33kzgda7E=";
+    sha256 = "sha256-Gj+hXgGkOqKnZ4W2iZ9P6JN3lYMoREMSF/wfGwLL/tc=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/weconnect/default.nix b/pkgs/development/python-modules/weconnect/default.nix
index 1dab5c8c92808..906d240c9e754 100644
--- a/pkgs/development/python-modules/weconnect/default.nix
+++ b/pkgs/development/python-modules/weconnect/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "weconnect";
-  version = "0.39.0";
+  version = "0.40.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "tillsteinbach";
     repo = "WeConnect-python";
     rev = "v${version}";
-    sha256 = "sha256-O5Dh0RWvSXCIF0savyNG5XDhGqCTJZHQpJM4VEX+S9w=";
+    sha256 = "sha256-NXINATb8/yDPnpwQEbPhuazdTlsZqv7BUPzedIg0IV4=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/werkzeug/1.nix b/pkgs/development/python-modules/werkzeug/1.nix
deleted file mode 100644
index ae7ce1f2b90a7..0000000000000
--- a/pkgs/development/python-modules/werkzeug/1.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi
-, itsdangerous, hypothesis
-, pytestCheckHook, requests
-, pytest-timeout
-, isPy3k
- }:
-
-buildPythonPackage rec {
-  pname = "Werkzeug";
-  version = "1.0.1";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c";
-  };
-
-  propagatedBuildInputs = [ itsdangerous ];
-  checkInputs = [ pytestCheckHook requests hypothesis pytest-timeout ];
-
-  postPatch = ''
-    # ResourceWarning causes tests to fail
-    rm tests/test_routing.py
-  '';
-
-  disabledTests = [
-    "test_save_to_pathlib_dst"
-    "test_cookie_maxsize"
-    "test_cookie_samesite_attribute"
-    "test_cookie_samesite_invalid"
-    "test_range_parsing"
-    "test_content_range_parsing"
-    "test_http_date_lt_1000"
-    "test_best_match_works"
-    "test_date_to_unix"
-    "test_easteregg"
-
-    # Seems to be a problematic test-case:
-    #
-    # > warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
-    # E pytest.PytestUnraisableExceptionWarning: Exception ignored in: <_io.FileIO [closed]>
-    # E
-    # E Traceback (most recent call last):
-    # E   File "/nix/store/cwv8aj4vsqvimzljw5dxsxy663vjgibj-python3.9-Werkzeug-1.0.1/lib/python3.9/site-packages/werkzeug/formparser.py", line 318, in parse_multipart_headers
-    # E     return Headers(result)
-    # E ResourceWarning: unclosed file <_io.FileIO name=11 mode='rb+' closefd=True>
-    "test_basic_routing"
-    "test_merge_slashes_match"
-    "test_merge_slashes_build"
-    "TestMultiPart"
-    "TestHTTPUtility"
-  ] ++ lib.optionals stdenv.isDarwin [
-    "test_get_machine_id"
-  ];
-
-  meta = with lib; {
-    homepage = "https://palletsprojects.com/p/werkzeug/";
-    description = "A WSGI utility library for Python";
-    license = licenses.bsd3;
-    maintainers = [ ];
-  };
-}
-
diff --git a/pkgs/development/python-modules/whispers/default.nix b/pkgs/development/python-modules/whispers/default.nix
new file mode 100644
index 0000000000000..02a1b050f914d
--- /dev/null
+++ b/pkgs/development/python-modules/whispers/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, astroid
+, beautifulsoup4
+, buildPythonPackage
+, fetchFromGitHub
+, jproperties
+, luhn
+, lxml
+, pytest-mock
+, pytestCheckHook
+, python-Levenshtein
+, pythonOlder
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "whispers";
+  version = "1.5.3";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "Skyscanner";
+    repo = pname;
+    rev = version;
+    hash = "sha256-jruUGyoZCyMu015QKtlvfx5WRMfxo/eYUue9wUIWb6o=";
+  };
+
+  propagatedBuildInputs = [
+    astroid
+    beautifulsoup4
+    jproperties
+    luhn
+    lxml
+    python-Levenshtein
+    pyyaml
+  ];
+
+  checkInputs = [
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"pytest-runner"' ""
+  '';
+
+  preCheck = ''
+    # Some tests need the binary available in PATH
+    export PATH=$out/bin:$PATH
+  '';
+
+  pythonImportsCheck = [
+    "whispers"
+  ];
+
+  meta = with lib; {
+    description = "Tool to identify hardcoded secrets in static structured text";
+    homepage = "https://github.com/Skyscanner/whispers";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/widgetsnbextension/default.nix b/pkgs/development/python-modules/widgetsnbextension/default.nix
index 5b4f535563c22..563e792850d50 100644
--- a/pkgs/development/python-modules/widgetsnbextension/default.nix
+++ b/pkgs/development/python-modules/widgetsnbextension/default.nix
@@ -8,13 +8,20 @@
 buildPythonPackage rec {
   pname = "widgetsnbextension";
   version = "3.6.0";
+  format = "setuptools";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-6Ep6n8ubrz1XEG4YSnOJqPjrk1v3QaXrnWCqGMwCmoA=";
+    hash = "sha256-6Ep6n8ubrz1XEG4YSnOJqPjrk1v3QaXrnWCqGMwCmoA=";
   };
 
-  propagatedBuildInputs = [ notebook ];
+  # setup.py claims to require notebook, but the source doesn't have any imports
+  # in it.
+  postPatch = ''
+    substituteInPlace setup.py --replace "'notebook>=4.4.1'," ""
+  '';
+
+  propagatedBuildInputs = [ ];
 
   # No tests in archive
   doCheck = false;
diff --git a/pkgs/development/python-modules/xdot/default.nix b/pkgs/development/python-modules/xdot/default.nix
index fa24256b6a007..a07235006c9a0 100644
--- a/pkgs/development/python-modules/xdot/default.nix
+++ b/pkgs/development/python-modules/xdot/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, isPy3k, python3, xvfb-run
+{ lib, buildPythonPackage, fetchPypi, isPy3k, python, xvfb-run
 , wrapGAppsHook, gobject-introspection, pygobject3, graphviz, gtk3, numpy }:
 
 buildPythonPackage rec {
@@ -20,7 +20,7 @@ buildPythonPackage rec {
   '';
 
   checkPhase = ''
-    xvfb-run -s '-screen 0 800x600x24' ${python3.interpreter} nix_run_setup test
+    xvfb-run -s '-screen 0 800x600x24' ${python.interpreter} nix_run_setup test
   '';
 
   # https://github.com/NixOS/nixpkgs/pull/107872#issuecomment-752175866
diff --git a/pkgs/development/python-modules/xknx/default.nix b/pkgs/development/python-modules/xknx/default.nix
index efb944c4a71d6..315ba9416d540 100644
--- a/pkgs/development/python-modules/xknx/default.nix
+++ b/pkgs/development/python-modules/xknx/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "xknx";
-  version = "0.21.1";
+  version = "0.21.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "XKNX";
     repo = pname;
     rev = "refs/tags/${version}";
-    sha256 = "sha256-QNy/jUh/kIj6sabWnmC5L00ikBTrVmOEp6mFBya29WM=";
+    sha256 = "sha256-GEjrqqmlGA6wG5x89AZXd8FLvrKEzCLmVhhZ7FxDB+w=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/xmltodict/default.nix b/pkgs/development/python-modules/xmltodict/default.nix
index 5e0733b6256e7..e0a9f4c5d73e8 100644
--- a/pkgs/development/python-modules/xmltodict/default.nix
+++ b/pkgs/development/python-modules/xmltodict/default.nix
@@ -22,6 +22,6 @@ buildPythonPackage rec {
     description = "Makes working with XML feel like you are working with JSON";
     homepage = "https://github.com/martinblech/xmltodict";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/development/python-modules/yalexs/default.nix b/pkgs/development/python-modules/yalexs/default.nix
index 2eb38dd0784ec..3e93a01b57ba9 100644
--- a/pkgs/development/python-modules/yalexs/default.nix
+++ b/pkgs/development/python-modules/yalexs/default.nix
@@ -17,7 +17,7 @@
 
 buildPythonPackage rec {
   pname = "yalexs";
-  version = "1.1.23";
+  version = "1.1.25";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -26,7 +26,7 @@ buildPythonPackage rec {
     owner = "bdraco";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-CnAVkwCOADBNY0cUvq9Dt6JR+fIr4LiZVMzJIIFqzG0=";
+    sha256 = "sha256-O7M9Shh8jp2fTaVQPM8mgh1pkv75wn22PFpxJVenbAo=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/yte/default.nix b/pkgs/development/python-modules/yte/default.nix
index 7a7132a83266a..8783e890e7641 100644
--- a/pkgs/development/python-modules/yte/default.nix
+++ b/pkgs/development/python-modules/yte/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, dpath
 , fetchFromGitHub
 , plac
 , poetry-core
@@ -10,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "yte";
-  version = "1.2.2";
+  version = "1.4.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -18,8 +19,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "koesterlab";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-x0CmPiV/6zTnawPW9lgrZ9NsUhmK8fhafwqOP9o3Mdc=";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-G3TjIs/EeCqpNuFdb/WZ7PaPtnUdTvbH41OtRypfptg=";
   };
 
   nativeBuildInputs = [
@@ -27,6 +28,7 @@ buildPythonPackage rec {
   ];
 
   propagatedBuildInputs = [
+    dpath
     plac
     pyyaml
   ];
diff --git a/pkgs/development/python-modules/ytmusicapi/default.nix b/pkgs/development/python-modules/ytmusicapi/default.nix
index fdee7ace495a8..6331438a95886 100644
--- a/pkgs/development/python-modules/ytmusicapi/default.nix
+++ b/pkgs/development/python-modules/ytmusicapi/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "ytmusicapi";
-  version = "0.21.0";
+  version = "0.22.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-JstIHc61TFQEgRHr54N4Doq6ML0EcIcDGTEJ/tbrC2A=";
+    hash = "sha256-CZ4uoW4UHn5C+MckQXysTdydaApn99b0UCnF5RPb7DI=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/zeroconf/default.nix b/pkgs/development/python-modules/zeroconf/default.nix
index e9eba02ac90f2..5fa96494cc16b 100644
--- a/pkgs/development/python-modules/zeroconf/default.nix
+++ b/pkgs/development/python-modules/zeroconf/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "zeroconf";
-  version = "0.38.5";
+  version = "0.38.6";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "jstasiak";
     repo = "python-zeroconf";
     rev = version;
-    hash = "sha256-QmmVxrvBPEwsmD/XJZClNQj4PUX+7X+75ZWSOO4/C24=";
+    hash = "sha256-P5yAXh/5J5/giOZTOuk9ay3PF8MNxPOJgtoWeX7xxFk=";
   };
 
   propagatedBuildInputs = [
@@ -39,6 +39,8 @@ buildPythonPackage rec {
     "test_launch_and_close_v4_v6"
     "test_launch_and_close_v6_only"
     "test_integration_with_listener_ipv6"
+    # Starting with 0.38.6: AssertionError: assert [('add', '_ht..._tcp.local.')]
+    "test_service_browser_expire_callbacks"
   ] ++ lib.optionals stdenv.isDarwin [
     "test_lots_of_names"
   ];
diff --git a/pkgs/development/python-modules/zigpy/default.nix b/pkgs/development/python-modules/zigpy/default.nix
index a10e9ae65c791..da0ae7872dae7 100644
--- a/pkgs/development/python-modules/zigpy/default.nix
+++ b/pkgs/development/python-modules/zigpy/default.nix
@@ -4,6 +4,7 @@
 , asynctest
 , buildPythonPackage
 , crccheck
+, cryptography
 , fetchFromGitHub
 , pycryptodome
 , pytest-aiohttp
@@ -15,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "zigpy";
-  version = "0.44.2";
+  version = "0.45.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -24,13 +25,14 @@ buildPythonPackage rec {
     owner = "zigpy";
     repo = "zigpy";
     rev = version;
-    sha256 = "sha256-E6SeuVu5UdWL5Tx39UQymNhABltR+qVHANYWuCh+h6I=";
+    sha256 = "sha256-85Bi8qjbUKLXFW7VGOxzelMa1gY9giGeQRmOeoZ1idE=";
   };
 
   propagatedBuildInputs = [
     aiohttp
     aiosqlite
     crccheck
+    cryptography
     pycryptodome
     voluptuous
   ];
diff --git a/pkgs/development/python-modules/zimports/default.nix b/pkgs/development/python-modules/zimports/default.nix
index dc9a618924058..20e23afcfc016 100644
--- a/pkgs/development/python-modules/zimports/default.nix
+++ b/pkgs/development/python-modules/zimports/default.nix
@@ -6,22 +6,24 @@
 , pyflakes
 , tomli
 , setuptools
-, mock
+, pytestCheckHook
+, pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "zimports";
-  version = "0.5.0";
+  version = "0.6.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "sqlalchemyorg";
     repo = "zimports";
-    rev = "v${version}";
-    sha256 = "sha256-O8MHUt9yswL9fK9pEddkvnNS2E4vWA/S1BTs1OD1VbU=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-qm5mA8pCSLbkupGBo+ppHSW6uy1j/FfV3idvGQGhjqU=";
   };
 
-  disabled = !isPy3k;
-
   propagatedBuildInputs = [
     flake8-import-order
     pyflakes
@@ -30,14 +32,12 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
-    mock
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    runHook preInstallCheck
-    PYTHONPATH= $out/bin/zimports --help >/dev/null
-    runHook postInstallCheck
-  '';
+  pythonImportsCheck = [
+    "zimports"
+  ];
 
   meta = with lib; {
     description = "Python import rewriter";
diff --git a/pkgs/development/python-modules/zope_event/default.nix b/pkgs/development/python-modules/zope_event/default.nix
index 2ebf6e017b5f4..118a3a2c44a3d 100644
--- a/pkgs/development/python-modules/zope_event/default.nix
+++ b/pkgs/development/python-modules/zope_event/default.nix
@@ -14,7 +14,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "An event publishing system";
-    homepage = "https://pypi.python.org/pypi/zope.event";
+    homepage = "https://pypi.org/project/zope.event/";
     license = licenses.zpl20;
     maintainers = with maintainers; [ goibhniu ];
   };
diff --git a/pkgs/development/python-modules/zope_lifecycleevent/default.nix b/pkgs/development/python-modules/zope_lifecycleevent/default.nix
index 1b3e288ba255b..7b3852239e8f9 100644
--- a/pkgs/development/python-modules/zope_lifecycleevent/default.nix
+++ b/pkgs/development/python-modules/zope_lifecycleevent/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "zope.lifecycleevent";
-  version = "4.3";
+  version = "4.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7ec39087cc1524e55557e7d9dc6295eb1b95b09b125e293c0e2dd068574f0aee";
+    sha256 = "sha256-9ahU6J/5fe6ke/vqN4u77yeJ0uDMkKHB2lfZChzmfLU=";
   };
 
   propagatedBuildInputs = [ zope_event zope_component ];
diff --git a/pkgs/development/python-modules/zwave-js-server-python/default.nix b/pkgs/development/python-modules/zwave-js-server-python/default.nix
index 028e30f4cb740..d0f938c6a8bf2 100644
--- a/pkgs/development/python-modules/zwave-js-server-python/default.nix
+++ b/pkgs/development/python-modules/zwave-js-server-python/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "zwave-js-server-python";
-  version = "0.35.3";
+  version = "0.36.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "home-assistant-libs";
     repo = pname;
     rev = version;
-    sha256 = "sha256-vM5GEqq32VdC5UjGVlnrN8/LRcCHHkJFzEbaA2Snte8=";
+    sha256 = "sha256-XVFOx0f5lBh5i7q8XEb4qd0Lu09jEEYKyJUJBqXwirc=";
   };
 
   propagatedBuildInputs = [