From a362db23b473b717df5fbf18afaf677de87277bd Mon Sep 17 00:00:00 2001 From: Devi Date: Wed, 29 Jul 2015 12:34:03 +0530 Subject: [PATCH 1/2] add 'as_view' in FlaskResource, which is required for creating custom end points without this, using `FlaskResource.as_view` results in "TypeError: _wrapper() takes at least 1 argument (0 given)" --- restless/fl.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/restless/fl.py b/restless/fl.py index 851e596..188d73e 100644 --- a/restless/fl.py +++ b/restless/fl.py @@ -37,6 +37,19 @@ def _wrapper(*args, **kwargs): return _wrapper + @classmethod + def as_view(cls, route, *init_args, **init_kwargs): + # Overridden here, because Flask uses a global ``request`` object + # rather than passing it to each view. + def _wrapper(*args, **kwargs): + # Make a new instance so that no state potentially leaks between + # instances. + inst = cls(*init_args, **init_kwargs) + inst.request = request + return inst.handle(route, *args, **kwargs) + + return _wrapper + def request_body(self): return self.request.data From c26db8abf6629c20f7d7804a81a4ec450f24337b Mon Sep 17 00:00:00 2001 From: Devi Date: Wed, 29 Jul 2015 14:52:59 +0530 Subject: [PATCH 2/2] 'add_url_rules' takes the primary key name and its type and passes on to Flask --- restless/fl.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/restless/fl.py b/restless/fl.py index 188d73e..48a8262 100644 --- a/restless/fl.py +++ b/restless/fl.py @@ -89,7 +89,7 @@ def build_endpoint_name(cls, name, endpoint_prefix=None): return '_'.join([endpoint_prefix, name]) @classmethod - def add_url_rules(cls, app, rule_prefix, endpoint_prefix=None): + def add_url_rules(cls, app, rule_prefix, endpoint_prefix=None, pk='pk', pk_type='int'): """ A convenience method for hooking up the URLs. @@ -111,14 +111,17 @@ def add_url_rules(cls, app, rule_prefix, endpoint_prefix=None): """ methods = ['GET', 'POST', 'PUT', 'DELETE'] + collection_rule = rule_prefix app.add_url_rule( - rule_prefix, + collection_rule, endpoint=cls.build_endpoint_name('list', endpoint_prefix), view_func=cls.as_list(), methods=methods ) + + instance_rule = '{}<{}:{}>/'.format(rule_prefix, pk_type, pk) app.add_url_rule( - rule_prefix + '/', + instance_rule, endpoint=cls.build_endpoint_name('detail', endpoint_prefix), view_func=cls.as_detail(), methods=methods