Reputation: 66320
I have setup Flask restful like this:
api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
'/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
endpoint="api.ftrecord")
I would like to redirect internally to the endpoint api.ftrecord
.
But the moment I try to do this:
base_url = flask.url_for('api.ftrecord')
I get an exception.
File "/Users/hooman/workspace/F11A/src/lib/werkzeug/routing.py", line 1620, in build
raise BuildError(endpoint, values, method)
BuildError: ('api.ftrecord', {}, None)
What am I missing please?
Upvotes: 18
Views: 14334
Reputation: 31
api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
'/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
endpoint="api.ftrecord")
with app.test_request_context():
base_url = flask.url_for('api.ftrecord')
I met the same error. By using 'with app.test_request_context():', it works.
Upvotes: 3
Reputation: 41
I had this problem today. Here's the pull request that added the functionality (11 months ago):
https://github.com/twilio/flask-restful/pull/110
You can see his example usage there.
In my resources file, I do not have access to the app context. So I had to do this:
from flask.ext import restful
from flask import current_app
api = restful.Api
print api.url_for(api(current_app), UserResource, user_id=user.id, _external=True)
Hope that helps.
Upvotes: 3
Reputation: 1121186
You'll need to specify a value for the ios_sync_timestamp
part of your URL:
flask.url_for('api.ftrecord', ios_sync_timestamp='some value')
or you could use Api.url_for()
, which takes a resource:
api.url_for(FTRecordsAPI, ios_sync_timestamp='some value')
Upvotes: 20