diff --git a/flask_classy.py b/flask_classy.py index e0c5ccd..be47434 100644 --- a/flask_classy.py +++ b/flask_classy.py @@ -249,6 +249,9 @@ def build_rule(cls, rule, method=None): result = "/%s" % "/".join(rule_parts) return re.sub(r'(/)\1+', r'\1', result) + @classmethod + def get_class_suffix(cls): + return "View" @classmethod def get_route_base(cls): @@ -259,8 +262,9 @@ 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() + suffix = cls.get_class_suffix() + if cls.__name__.endswith(suffix): + route_base = cls.__name__[:-len(suffix)].lower() else: route_base = cls.__name__.lower() diff --git a/test_classy/test_route_base.py b/test_classy/test_route_base.py index 158028c..c3fd924 100644 --- a/test_classy/test_route_base.py +++ b/test_classy/test_route_base.py @@ -1,12 +1,18 @@ from flask import Flask -from .view_classes import BasicView, RouteBaseView +from .view_classes import BasicView, RouteBaseView, ModifiedSuffixAPI from nose.tools import * app = Flask('route_base') RouteBaseView.register(app, route_base="/rb_test2/") +ModifiedSuffixAPI.register(app) def test_route_base_override(): client = app.test_client() resp = client.get('/rb_test2/') eq_(b"Index", resp.data) + +def test_modified_suffix(): + client = app.test_client() + resp = client.get('/modifiedsuffix/') + eq_(b"Modified Suffix", resp.data) diff --git a/test_classy/view_classes.py b/test_classy/view_classes.py index 5ad1e3a..d9a3672 100644 --- a/test_classy/view_classes.py +++ b/test_classy/view_classes.py @@ -149,6 +149,15 @@ def after_request(self, name, response): def index(self): return "Index" +class ModifiedSuffixAPI(FlaskView): + + @classmethod + def get_class_suffix(cls): + return "API" + + def index(self): + return "Modified Suffix" + class VariedMethodsView(FlaskView): def index(self):