feat: Refactor endpoint listing into blueprint
- Moved endpoint listing and searching routes (`list_endpoints`, `search_endpoints`) and helper function (`get_routes`) from `app.py` into a new blueprint at `routes/endpoints.py`. - Added `/endpoints` URL prefix to the blueprint. - Registered the new `endpoints_bp` blueprint in `app.py`. - Removed the original endpoint route definitions and helper function from `app.py`. - Updated `url_for` calls in relevant templates (`endpoints.html`, `base.html`) to reference the new blueprint endpoints (e.g., `endpoints.list_endpoints`). - Updated `templates/changelog/changelog.html` to document this refactoring. ```
This commit is contained in:
49
app.py
49
app.py
@@ -11,6 +11,7 @@ from routes.calendar import calendar_bp # Import the new calendar blueprint
|
||||
from routes.notes import notes_bp # Import the new notes blueprint
|
||||
from routes.workout import workout_bp # Import the new workout blueprint
|
||||
from routes.sql_explorer import sql_explorer_bp # Import the new SQL explorer blueprint
|
||||
from routes.endpoints import endpoints_bp # Import the new endpoints blueprint
|
||||
from extensions import db
|
||||
from utils import convert_str_to_date, generate_plot
|
||||
from flask_htmx import HTMX
|
||||
@@ -42,6 +43,7 @@ app.register_blueprint(calendar_bp) # Register the calendar blueprint
|
||||
app.register_blueprint(notes_bp) # Register the notes blueprint
|
||||
app.register_blueprint(workout_bp) # Register the workout blueprint
|
||||
app.register_blueprint(sql_explorer_bp) # Register the SQL explorer blueprint (prefix defined in blueprint file)
|
||||
app.register_blueprint(endpoints_bp) # Register the endpoints blueprint (prefix defined in blueprint file)
|
||||
|
||||
@app.after_request
|
||||
def response_minify(response):
|
||||
@@ -308,53 +310,6 @@ def delete_exercise(exercise_id):
|
||||
db.exercises.delete_exercise(exercise_id)
|
||||
return ""
|
||||
|
||||
def get_routes():
|
||||
routes = []
|
||||
for rule in app.url_map.iter_rules():
|
||||
if rule.endpoint == 'static':
|
||||
continue
|
||||
methods = ', '.join(sorted(rule.methods - {'HEAD', 'OPTIONS'}))
|
||||
route_info = {
|
||||
'endpoint': rule.endpoint,
|
||||
'url': rule.rule,
|
||||
'methods': methods,
|
||||
'view_func': app.view_functions[rule.endpoint].__name__,
|
||||
'doc': app.view_functions[rule.endpoint].__doc__
|
||||
}
|
||||
routes.append(route_info)
|
||||
return routes
|
||||
|
||||
@app.route('/endpoints')
|
||||
def list_endpoints():
|
||||
"""
|
||||
Lists all API endpoints available in the Flask application.
|
||||
|
||||
This endpoint retrieves all registered routes, excluding static routes,
|
||||
and displays their details such as endpoint name, URL, allowed HTTP methods,
|
||||
view function name, and a brief description.
|
||||
"""
|
||||
routes = get_routes()
|
||||
|
||||
if htmx:
|
||||
return render_block(app.jinja_env, 'endpoints.html', 'content', routes=routes)
|
||||
return render_template('endpoints.html', routes=routes)
|
||||
|
||||
@app.route('/endpoints/search')
|
||||
def search_endpoints():
|
||||
routes = get_routes()
|
||||
search = request.args.get('search', '').lower()
|
||||
if search:
|
||||
routes = [
|
||||
route for route in routes
|
||||
if search in route['endpoint'].lower()
|
||||
or search in route['url'].lower()
|
||||
or search in route['methods'].lower()
|
||||
or search in route['view_func'].lower()
|
||||
or (route['doc'] and search in route['doc'].lower())
|
||||
]
|
||||
|
||||
return render_template('partials/endpoints_table.html', routes=routes)
|
||||
|
||||
@app.teardown_appcontext
|
||||
def closeConnection(exception):
|
||||
db.close_connection()
|
||||
|
||||
Reference in New Issue
Block a user