Skip to content

Instantly share code, notes, and snippets.

@danielkraic
Created June 6, 2017 20:04
Show Gist options
  • Save danielkraic/884ed2e0c2013b43c14a507ea0b5a2fc to your computer and use it in GitHub Desktop.
Save danielkraic/884ed2e0c2013b43c14a507ea0b5a2fc to your computer and use it in GitHub Desktop.
flask deprecated_route
# deprecated_route.py
registered_deprecated_routes = set()
register_deprecated_routes = True
def is_deprecated(route):
return route in registered_deprecated_routes
def register(app, rule, **options):
def decorator(f):
if register_deprecated_routes:
registered_deprecated_routes.add(rule)
endpoint = options.pop('endpoint', None)
app.add_url_rule(rule, endpoint, f, **options)
return f
return decorator
# app.py
from flask import Flask, jsonify, Blueprint
import deprecated_route
api = Blueprint('api', __name__)
deprecated_route.register_deprecated_routes = True
@deprecated_route.register(api, '/f1')
@api.route('/v1/f1')
def f1():
return jsonify(f='f1')
@deprecated_route.register(api, '/f2/<a1>/<a2>', methods=['POST'])
@api.route('/v1/f2/<a1>/<a2>', methods=['POST'])
def f2(a1, a2):
return jsonify(f='f2', a1=a1, a2=a2)
@api.route('/f3/<a1>', methods=['GET', 'POST'])
@api.route('/v1/f3/<a1>', methods=['GET', 'POST'])
def f3(a1):
return jsonify(f='f3', a1=a1)
if __name__ == '__main__':
app = Flask(__name__)
app.register_blueprint(api)
routes = [rule.rule for rule in app.url_map.iter_rules()]
for r in sorted(routes):
print('{}: {}'.format(deprecated_route.is_deprecated(r), r))
app.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment