-
Notifications
You must be signed in to change notification settings - Fork 673
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable ECDSA algorithms supported by PyJWT #520
Enable ECDSA algorithms supported by PyJWT #520
Conversation
… more algorithms This way new algorithms can be added to the basic test set simply by adding their backends to TestTokenBackend.backends.
This PR simply uses the default algorithms which can be a security vulnerability; PyJWT doesn't have a good track record of following semver so I'm very worried about stability. The addition of elliptic is great, so please add the algorithm itself rather than blindly trusting whatever algorithms are given in that import. |
Enable the algorithms and add basic tests for them. Also convert the ALLOWED_ALGORITHMS constant to a set for a minor style cleanup.
61c6949
to
37fb06c
Compare
for more information, see https://pre-commit.ci
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM @2ykwang if it LGTY, then you can merge. Tho Just a little curious if a test was accidentally deleted; it didn't seem like it but there were lots of changes (which were smart!)
"ES256", | ||
"ES384", | ||
"ES512", | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please leave this as a tuple
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Andrew-Chen-Wang there doesn't seem to be any problem with using set. what do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
backwards compatibility, lower memory usage, not sure why you need a set for elements already unique
"ES256", | ||
"ES384", | ||
"ES512", | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Andrew-Chen-Wang there doesn't seem to be any problem with using set. what do you think?
LGTM Thanks for your contribution @vainu-arto |
* Fix ES locale translation error (jazzband#499) * chore: test on Django 4.0 (jazzband#495) * chore: test on Django 4.0 * Remove Django 3.1 support from trove * Remove Django 3.1 from tox * Remove 3.1 reference in tox.ini Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * Stop deleting blacklist on user delete (jazzband#516) * OutstandingToken user on_delete should be null * Add test to verify that deleting a User doesn't remove tokens from the blacklist This is a rather unexpected default behavior. Deleting a User means that their blacklisted tokens become live again. * Add migration for cascading User deletion to SET_NULL instead of DELETE * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#498) updates: - [github.com/pre-commit/pre-commit-hooks: v4.0.1 → v4.1.0](pre-commit/pre-commit-hooks@v4.0.1...v4.1.0) - [github.com/asottile/yesqa: v1.2.3 → v1.3.0](asottile/yesqa@v1.2.3...v1.3.0) - [github.com/pycqa/isort: 5.9.3 → 5.10.1](PyCQA/isort@5.9.3...5.10.1) - [github.com/psf/black: 21.9b0 → 21.12b0](psf/black@21.9b0...21.12b0) - [github.com/pre-commit/pre-commit-hooks: v4.0.1 → v4.1.0](pre-commit/pre-commit-hooks@v4.0.1...v4.1.0) - [github.com/asottile/pyupgrade: v2.28.0 → v2.31.0](asottile/pyupgrade@v2.28.0...v2.31.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Enable ECDSA algorithms supported by PyJWT (jazzband#520) * Parameterize some tests to reduce duplication and make it easy to add more algorithms This way new algorithms can be added to the basic test set simply by adding their backends to TestTokenBackend.backends. * Enable ECDSA algorithms supported by PyJWT Enable the algorithms and add basic tests for them. Also convert the ALLOWED_ALGORITHMS constant to a set for a minor style cleanup. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Simplify using custom token classes in serializers (jazzband#517) For most cases this could be done by overriding get_token, which is simple enough. The exception was TokenRefreshSerializer.validate where the entire method needed to be copy-pasted to allow using a custom replacement for RefreshToken. The other cases are changed the same way mainly for consistency. * [pre-commit.ci] pre-commit autoupdate (jazzband#524) updates: - [github.com/psf/black: 21.12b0 → 22.1.0](psf/black@21.12b0...22.1.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Make the token serializer configurable (jazzband#521) * Update translation files (jazzband#526) * Add default __getattr__ behavior to models.TokenUser (jazzband#528) * Add default __getattr__ behavior to models.TokenUser to allow getting custom claims defined in serializers * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Allow overriding access token class (jazzband#529) * Maintain compatibility with serializer_class overrides (jazzband#530) * Consider leeway when checking expiry (jazzband#458) * Add locale checker to CI (jazzband#456) * Add locale checker to CI * Just pip install Django * Add gettext package to OS * Add sudo to apt-get * Use @2ykwang 's updated script * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Only update on push to master * To avoid pain points of PRs and histories being split * Trying to use Andrew's username for pushing to see if that works * Use separate workflow file Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update CHANGELOG.md for v5.1.0 (jazzband#527) * Update CHANGELOG.md for v5.0.1 * Update CHANGELOG.md * Remove looking for maintainers in README since Jazzband Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * Fix i18n CI (jazzband#538) * Open PR on i18n (jazzband#539) * fix small typo (jazzband#540) * Setup initial PyJWT 1.7.1 support (jazzband#536) * Fix release locale checker (jazzband#541) * Update locale files (jazzband#542) * [pre-commit.ci] pre-commit autoupdate (jazzband#545) updates: - [github.com/asottile/pyupgrade: v2.31.0 → v2.31.1](asottile/pyupgrade@v2.31.0...v2.31.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Remove the JWTTokenUserAuthentication from the Experimental Features jazzband#546 (jazzband#547) * Change from git protocol to https protocol (jazzband#555) * [pre-commit.ci] pre-commit autoupdate (jazzband#551) updates: - [github.com/psf/black: 22.1.0 → 22.3.0](psf/black@22.1.0...22.3.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix leeway type error (jazzband#554) * Fix lewway type error * Add test case * Update Korean translation * Add type hints * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix translation revert POT-Creation-Date * update translation Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#557) * Add info on TokenBlacklistView to the docs (jazzband#558) * chore(ci): add informational Codecov status checks (jazzband#559) * Update JWTStatelessUserAuthentication docs (jazzband#561) * Allow none jti claim token type claim (jazzband#567) * Allow customizing token JSON encoding (jazzband#568) * Allow specifying custom JSONEncoder for TokenBackend * Make TokenBackend JSONEncoder configurable * [pre-commit.ci] pre-commit autoupdate (jazzband#571) updates: - [github.com/asottile/pyupgrade: v2.32.0 → v2.32.1](asottile/pyupgrade@v2.32.0...v2.32.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update CHANGELOG to 5.2.0 (jazzband#573) * Locale update (jazzband#574) * update & correct supported versions in docs (jazzband#576) * update & correct supported versions in docs * Add DRF supported version Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * Add Swedish translations (jazzband#579) * Fixed issue jazzband#543 (jazzband#586) * Allow optional installation of the 'cryptography' package (jazzband#543) * Update docs (jazzband#543) * Update docs (jazzband#543) * Update docs/getting_started.rst Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * fix for code-block (jazzband#543) * another fix for code-block (jazzband#543) * fix: removed extra line (jazzband#543) Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#587) updates: - [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](pre-commit/pre-commit-hooks@v4.2.0...v4.3.0) - [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](pre-commit/pre-commit-hooks@v4.2.0...v4.3.0) - [github.com/asottile/pyupgrade: v2.32.1 → v2.34.0](asottile/pyupgrade@v2.32.1...v2.34.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#589) updates: - [github.com/psf/black: 22.3.0 → 22.6.0](psf/black@22.3.0...22.6.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#590) * removed some unwanted files * removed some unwanted files * code lint Co-authored-by: Marc Salat <marcs14@gmail.com> Co-authored-by: Christofer Bertonha <christoferbertonha@gmail.com> Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Co-authored-by: vainu-arto <70135394+vainu-arto@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: yeongkwang <immutable000@gmail.com> Co-authored-by: Oscar Y Chen <oscar.y.chen@gmail.com> Co-authored-by: totycro <malli@gmx.at> Co-authored-by: Byron Motoche <37427699+byrpatrick@users.noreply.github.com> Co-authored-by: Vladimir <44180334+inti7ary@users.noreply.github.com> Co-authored-by: Tom Hu <88201630+thomasrockhu-codecov@users.noreply.github.com> Co-authored-by: Dennis Dinwiddie <51653728+denniskeends@users.noreply.github.com> Co-authored-by: abdurrahman <32853027+asaah18@users.noreply.github.com> Co-authored-by: Pasindu Prabhashitha <63661350+PasinduPrabhashitha@users.noreply.github.com> Co-authored-by: Armenak Baburyan <1723973+armenak-baburyan@users.noreply.github.com>
* Fix ES locale translation error (jazzband#499) * chore: test on Django 4.0 (jazzband#495) * chore: test on Django 4.0 * Remove Django 3.1 support from trove * Remove Django 3.1 from tox * Remove 3.1 reference in tox.ini Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * Stop deleting blacklist on user delete (jazzband#516) * OutstandingToken user on_delete should be null * Add test to verify that deleting a User doesn't remove tokens from the blacklist This is a rather unexpected default behavior. Deleting a User means that their blacklisted tokens become live again. * Add migration for cascading User deletion to SET_NULL instead of DELETE * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#498) updates: - [github.com/pre-commit/pre-commit-hooks: v4.0.1 → v4.1.0](pre-commit/pre-commit-hooks@v4.0.1...v4.1.0) - [github.com/asottile/yesqa: v1.2.3 → v1.3.0](asottile/yesqa@v1.2.3...v1.3.0) - [github.com/pycqa/isort: 5.9.3 → 5.10.1](PyCQA/isort@5.9.3...5.10.1) - [github.com/psf/black: 21.9b0 → 21.12b0](psf/black@21.9b0...21.12b0) - [github.com/pre-commit/pre-commit-hooks: v4.0.1 → v4.1.0](pre-commit/pre-commit-hooks@v4.0.1...v4.1.0) - [github.com/asottile/pyupgrade: v2.28.0 → v2.31.0](asottile/pyupgrade@v2.28.0...v2.31.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Enable ECDSA algorithms supported by PyJWT (jazzband#520) * Parameterize some tests to reduce duplication and make it easy to add more algorithms This way new algorithms can be added to the basic test set simply by adding their backends to TestTokenBackend.backends. * Enable ECDSA algorithms supported by PyJWT Enable the algorithms and add basic tests for them. Also convert the ALLOWED_ALGORITHMS constant to a set for a minor style cleanup. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Simplify using custom token classes in serializers (jazzband#517) For most cases this could be done by overriding get_token, which is simple enough. The exception was TokenRefreshSerializer.validate where the entire method needed to be copy-pasted to allow using a custom replacement for RefreshToken. The other cases are changed the same way mainly for consistency. * [pre-commit.ci] pre-commit autoupdate (jazzband#524) updates: - [github.com/psf/black: 21.12b0 → 22.1.0](psf/black@21.12b0...22.1.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Make the token serializer configurable (jazzband#521) * Update translation files (jazzband#526) * Add default __getattr__ behavior to models.TokenUser (jazzband#528) * Add default __getattr__ behavior to models.TokenUser to allow getting custom claims defined in serializers * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Allow overriding access token class (jazzband#529) * Maintain compatibility with serializer_class overrides (jazzband#530) * Consider leeway when checking expiry (jazzband#458) * Add locale checker to CI (jazzband#456) * Add locale checker to CI * Just pip install Django * Add gettext package to OS * Add sudo to apt-get * Use @2ykwang 's updated script * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Only update on push to master * To avoid pain points of PRs and histories being split * Trying to use Andrew's username for pushing to see if that works * Use separate workflow file Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update CHANGELOG.md for v5.1.0 (jazzband#527) * Update CHANGELOG.md for v5.0.1 * Update CHANGELOG.md * Remove looking for maintainers in README since Jazzband Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * Fix i18n CI (jazzband#538) * Open PR on i18n (jazzband#539) * fix small typo (jazzband#540) * Setup initial PyJWT 1.7.1 support (jazzband#536) * Fix release locale checker (jazzband#541) * Update locale files (jazzband#542) * [pre-commit.ci] pre-commit autoupdate (jazzband#545) updates: - [github.com/asottile/pyupgrade: v2.31.0 → v2.31.1](asottile/pyupgrade@v2.31.0...v2.31.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Remove the JWTTokenUserAuthentication from the Experimental Features jazzband#546 (jazzband#547) * Change from git protocol to https protocol (jazzband#555) * [pre-commit.ci] pre-commit autoupdate (jazzband#551) updates: - [github.com/psf/black: 22.1.0 → 22.3.0](psf/black@22.1.0...22.3.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix leeway type error (jazzband#554) * Fix lewway type error * Add test case * Update Korean translation * Add type hints * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix translation revert POT-Creation-Date * update translation Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#557) * Add info on TokenBlacklistView to the docs (jazzband#558) * chore(ci): add informational Codecov status checks (jazzband#559) * Update JWTStatelessUserAuthentication docs (jazzband#561) * Allow none jti claim token type claim (jazzband#567) * Allow customizing token JSON encoding (jazzband#568) * Allow specifying custom JSONEncoder for TokenBackend * Make TokenBackend JSONEncoder configurable * [pre-commit.ci] pre-commit autoupdate (jazzband#571) updates: - [github.com/asottile/pyupgrade: v2.32.0 → v2.32.1](asottile/pyupgrade@v2.32.0...v2.32.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update CHANGELOG to 5.2.0 (jazzband#573) * Locale update (jazzband#574) * update & correct supported versions in docs (jazzband#576) * update & correct supported versions in docs * Add DRF supported version Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * Add Swedish translations (jazzband#579) * Fixed issue jazzband#543 (jazzband#586) * Allow optional installation of the 'cryptography' package (jazzband#543) * Update docs (jazzband#543) * Update docs (jazzband#543) * Update docs/getting_started.rst Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * fix for code-block (jazzband#543) * another fix for code-block (jazzband#543) * fix: removed extra line (jazzband#543) Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#587) updates: - [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](pre-commit/pre-commit-hooks@v4.2.0...v4.3.0) - [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](pre-commit/pre-commit-hooks@v4.2.0...v4.3.0) - [github.com/asottile/pyupgrade: v2.32.1 → v2.34.0](asottile/pyupgrade@v2.32.1...v2.34.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#589) updates: - [github.com/psf/black: 22.3.0 → 22.6.0](psf/black@22.3.0...22.6.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#590) * [pre-commit.ci] pre-commit autoupdate (jazzband#594) updates: - [github.com/asottile/pyupgrade: v2.37.1 → v2.37.2](asottile/pyupgrade@v2.37.1...v2.37.2) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#597) updates: - [github.com/asottile/pyupgrade: v2.37.2 → v2.37.3](asottile/pyupgrade@v2.37.2...v2.37.3) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] pre-commit autoupdate (jazzband#601) updates: - [github.com/asottile/yesqa: v1.3.0 → v1.4.0](asottile/yesqa@v1.3.0...v1.4.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix uncaught exception with JWK (jazzband#600) * Fix uncaught exception with JWK * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Allow tests to run on older JWT versions Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Test on Django 4.1 (jazzband#604) * [pre-commit.ci] pre-commit autoupdate (jazzband#609) * Add v5.2.1 changes (jazzband#611) * use non-deprecated UTC timezone (jazzband#606) RemovedInDjango50Warning * Added Romanian translations (jazzband#591) * Added Romanian translations * Changed some translations according to the grammatical rules of the Romanian language * Changed some translations according to the advices of: https://github.com/marcellefter https://github.com/uoxiu Co-authored-by: Daniel Cuznetov <daniel.cuznetov@ebs-integrator.com> * allow verification skipping (jazzband#605) * allow verify skip verification if VERIFYING_KEY is not set * Update settings.py * Update authentication.py * Update settings.py * Update authentication.py * [pre-commit.ci] pre-commit autoupdate (jazzband#619) * [pre-commit.ci] pre-commit autoupdate (jazzband#620) * Update locale files (jazzband#624) * Revert 605 (jazzband#629) * [pre-commit.ci] pre-commit autoupdate (jazzband#630) * [Docs] Fix typo in blacklist_app.rst (jazzband#593) * Fix typo in blacklist_app.rst `TokenBlackListView` -> `TokenBlacklistView` * Append CHANGELOG Co-authored-by: Andrew-Chen-Wang <acwangpython@gmail.com> Co-authored-by: Marc Salat <marcs14@gmail.com> Co-authored-by: Christofer Bertonha <christoferbertonha@gmail.com> Co-authored-by: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Co-authored-by: vainu-arto <70135394+vainu-arto@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: yeongkwang <immutable000@gmail.com> Co-authored-by: Oscar Y Chen <oscar.y.chen@gmail.com> Co-authored-by: totycro <malli@gmx.at> Co-authored-by: Byron Motoche <37427699+byrpatrick@users.noreply.github.com> Co-authored-by: Vladimir <44180334+inti7ary@users.noreply.github.com> Co-authored-by: Tom Hu <88201630+thomasrockhu-codecov@users.noreply.github.com> Co-authored-by: Dennis Dinwiddie <51653728+denniskeends@users.noreply.github.com> Co-authored-by: abdurrahman <32853027+asaah18@users.noreply.github.com> Co-authored-by: Pasindu Prabhashitha <63661350+PasinduPrabhashitha@users.noreply.github.com> Co-authored-by: Armenak Baburyan <1723973+armenak-baburyan@users.noreply.github.com> Co-authored-by: Jeremy Mayeres <1524722+jerr0328@users.noreply.github.com> Co-authored-by: Benedikt S. Vogler <developer@benediktsvogler.com> Co-authored-by: Daniel Cuzneţov <danielcuznetov04@gmail.com> Co-authored-by: Daniel Cuznetov <daniel.cuznetov@ebs-integrator.com> Co-authored-by: Domenico <dom.dinicola@gmail.com> Co-authored-by: Boseong Choi <31615733+cbscsm@users.noreply.github.com> Co-authored-by: Andrew-Chen-Wang <acwangpython@gmail.com>
This PR aims to supersede the stalled #460, it has the same basic change but with a few tests added.