-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update master for release v0.16.0 (#153)
* @ #135 | update for the next version iteration * @ #134 | allow releases/vX.Y.Z and releases/X.Y.Z to be published as docs * Compatibility with werkzeug 2.2 (#145) Compatibility with Flask>=2.2 * Initialize base_args as class field Only include actual rule args in base_args * Fix compatibility with Werkzeug 2.2 werkzeug.routing.parse_rule was considered an internal detail and has been removed during a refactor. We can now rely on werkzeug.routing.Rule which has a `arguments` field that contains the information we need. However, this field is not populated until the Rule has been added to a Map and this Map has been bound. So, we use a dummy map and bind it to the empty string just to get the arguments field ready for our use. * Rework test matrix, pass more exhaustive requirements to pip - EOL python versions and alpha flask have been removed from test matrix - Add python 3.10 - Only test "branches" of flask and not all bugfix releases * Fix test_base_args The tested view has a route_base with no declared arguments, so we shouldn't expect the base_args to have a nonzero length. * Rewrite test_rule_options This test file mostly tests the same behavior over and over: that the options given to `FlaskView.register`, such as `strict_slashes`, are passed along to `Flask.add_url_rule`. It did this by testing the behavior of the view when calling its endpoints with or without the trailing slash, expecting it to return the same response. However, werkzeug never guaranteed this behavior. The only documented behavior tunable by this option is: "If strict_slashes is enabled (the default), visiting a branch URL without a trailing slash will redirect to the URL with a slash appended." So, with the reimplementation of the routing in werkzeug 2.2, this behavior is lost. Instead of testing the behavior of the view, let's mock `add_url_rule` and check that it's called with `strict_slashes` as `False`. * Fix test_blueprints Flask >=2.2 raises an error when trying to apply changes to an app which has already serviced requests. For this specific test, we can redefine the app. * Pass rule_options to add_url_rules when adding a @route-ed rule * Remove nose which is deprecated, use pytest * docs: add changelog entry and bump version (#151) Signed-off-by: F.N. Claessen <[email protected]> --------- Signed-off-by: F.N. Claessen <[email protected]> Co-authored-by: hoatle <[email protected]> Co-authored-by: Jérôme Tamba <[email protected]>
- Loading branch information
1 parent
167e093
commit ba31582
Showing
33 changed files
with
414 additions
and
520 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,12 @@ | ||
2023-08-28 F.N. Claessen <[email protected]> | ||
----------------------------------------- | ||
|
||
Version: 0.16.0 | ||
|
||
- Tasks: | ||
* Compatibility with werkzeug 2.2 #145 | ||
|
||
|
||
2021-12-25 Hoat Le <[email protected]> | ||
-------------------------------------- | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,5 @@ | ||
# test | ||
nose | ||
tox | ||
pytest | ||
|
||
# code style, coverage | ||
coverage | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +0,0 @@ | ||
import nose | ||
|
||
|
||
if __name__ == "__main__": | ||
# nose.run() | ||
nose.run(env={ | ||
'NOSE_INCLUDE_EXE': True, | ||
'NOSE_VERBOSE': 2 | ||
}) | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,7 +6,6 @@ | |
from marshmallow import Schema, fields | ||
from webargs.flaskparser import use_args | ||
from webargs import fields | ||
from nose.tools import eq_ | ||
|
||
# we'll make a list to hold some quotes for our app | ||
quotes = [ | ||
|
@@ -138,69 +137,68 @@ def put(self, args, id): | |
|
||
def test_users_post(): | ||
resp = client.post('users/', headers=input_headers, data=json.dumps({'email':'[email protected]'})) | ||
eq_(resp.status_code, 200) | ||
eq_("[email protected]", resp.data.decode('ascii')) | ||
assert resp.status_code == 200 | ||
assert "[email protected]" == resp.data.decode('ascii') | ||
|
||
def test_users_put(): | ||
resp = client.put('users/1/', headers=input_headers, data=json.dumps({'email':'[email protected]'})) | ||
eq_(resp.status_code, 200) | ||
eq_("[email protected]", resp.data.decode('ascii')) | ||
assert resp.status_code == 200 | ||
assert "[email protected]" == resp.data.decode('ascii') | ||
|
||
def test_users_patch(): | ||
resp = client.patch('users/1/', headers=input_headers, data=json.dumps({'email':'[email protected]'})) | ||
eq_(resp.status_code, 200) | ||
eq_("[email protected]", resp.data.decode('ascii')) | ||
assert resp.status_code == 200 | ||
assert "[email protected]" == resp.data.decode('ascii') | ||
|
||
def test_quotes_index(): | ||
resp = client.get("/quotes/") | ||
num = len(str(resp.data).split("<br>")) | ||
eq_(3, num) | ||
assert 3 == num | ||
resp = client.get("/quotes") | ||
eq_(resp.status_code, 308) | ||
assert resp.status_code == 308 | ||
|
||
|
||
def test_quotes_get(): | ||
resp = client.get("/quotes/0/") | ||
eq_(quotes[0], resp.data.decode('ascii')) | ||
assert quotes[0] == resp.data.decode('ascii') | ||
|
||
|
||
def test_quotes_put(): | ||
resp = client.put("/quotes/1/", | ||
headers=input_headers, | ||
data=json.dumps(input_data)) | ||
eq_(input_data["text"], resp.data.decode('ascii')) | ||
assert input_data["text"] == resp.data.decode('ascii') | ||
|
||
def test_quotes_factory(): | ||
resp = client.patch("/quotes/1/", | ||
headers=input_headers, | ||
data=json.dumps(input_data)) | ||
eq_(input_data["text"], resp.data.decode('ascii')) | ||
assert input_data["text"] == resp.data.decode('ascii') | ||
|
||
def test_quotes2_index(): | ||
resp = client.get("/quotes-2/") | ||
num = len(str(resp.data).split("<br>")) | ||
eq_(3, num) | ||
assert 3 == num | ||
resp = client.get("/quotes-2") | ||
eq_(resp.status_code, 308) | ||
assert resp.status_code == 308 | ||
|
||
|
||
def test_quotes2_get(): | ||
resp = client.get("/quotes-2/0/") | ||
eq_(quotes[0], resp.data.decode('ascii')) | ||
eq_(UglyNameView.base_args.count(UglyNameView.route_base), 1) | ||
assert quotes[0] == resp.data.decode('ascii') | ||
assert UglyNameView.base_args.count(UglyNameView.route_base) == 0 | ||
|
||
|
||
def test_quotes2_put(): | ||
resp = client.put("/quotes-2/1/", | ||
headers=input_headers, | ||
data=json.dumps(input_data)) | ||
eq_(input_data["text"], resp.data.decode('ascii')) | ||
eq_(UglyNameView.base_args.count(UglyNameView.route_base), 1) | ||
assert input_data["text"] == resp.data.decode('ascii') | ||
assert UglyNameView.base_args.count(UglyNameView.route_base) == 0 | ||
|
||
# see: https://github.com/teracyhq/flask-classful/pull/56#issuecomment-328985183 | ||
def test_unique_elements(): | ||
client.put("/quotes-2/1/", | ||
headers=input_headers, | ||
data=json.dumps(input_data)) | ||
eq_(UglyNameView.base_args.count(UglyNameView.route_base), 1) | ||
|
||
assert UglyNameView.base_args.count(UglyNameView.route_base) == 0 |
Oops, something went wrong.