From 77efdaab8976721141e7b99411c24ed5008f8164 Mon Sep 17 00:00:00 2001 From: Andrew Roberts Date: Fri, 7 Mar 2014 16:43:11 -0500 Subject: [PATCH 1/2] factored special_methods out to a class-level attribute for ease of patching --- flask_classy.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/flask_classy.py b/flask_classy.py index 440b0c3..4ace196 100644 --- a/flask_classy.py +++ b/flask_classy.py @@ -65,6 +65,14 @@ class FlaskView(_FlaskViewBase): route_base = None route_prefix = None trailing_slash = True + special_methods = { + "get": ["GET"], + "put": ["PUT"], + "patch": ["PATCH"], + "post": ["POST"], + "delete": ["DELETE"], + "index": ["GET"], + } @classmethod def register(cls, app, route_base=None, subdomain=None, route_prefix=None, @@ -111,7 +119,6 @@ def register(cls, app, route_base=None, subdomain=None, route_prefix=None, members = get_interesting_members(FlaskView, cls) - special_methods = ["get", "put", "patch", "post", "delete", "index"] for name, value in members: proxy = cls.make_proxy_method(name) @@ -135,11 +142,8 @@ def register(cls, app, route_base=None, subdomain=None, route_prefix=None, app.add_url_rule(rule, endpoint, proxy, subdomain=subdomain, **options) - elif name in special_methods: - if name in ["get", "index"]: - methods = ["GET"] - else: - methods = [name.upper()] + elif name in cls.special_methods: + methods = cls.special_methods[name] rule = cls.build_rule("/", value) if not cls.trailing_slash: From 646e2f55d42db4bb48244a96699b231893d6fdf5 Mon Sep 17 00:00:00 2001 From: Andrew Roberts Date: Mon, 30 Jun 2014 15:18:59 -0400 Subject: [PATCH 2/2] externalized default view route base generation --- flask_classy.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/flask_classy.py b/flask_classy.py index 4ace196..1d4e169 100644 --- a/flask_classy.py +++ b/flask_classy.py @@ -279,13 +279,17 @@ def get_route_base(cls): base_rule = parse_rule(route_base) cls.base_args = [r[2] for r in base_rule] else: - if cls.__name__.endswith("View"): - route_base = cls.__name__[:-4].lower() - else: - route_base = cls.__name__.lower() + route_base = cls.default_route_base() return route_base.strip("/") + @classmethod + def default_route_base(cls): + if cls.__name__.endswith("View"): + return cls.__name__[:-4].lower() + else: + return cls.__name__.lower() + @classmethod def build_route_name(cls, method_name):