From dbadb827971accebd9dcd78848247ef7303d465e Mon Sep 17 00:00:00 2001 From: Deimos Date: Tue, 20 Nov 2018 16:14:46 -0700 Subject: [PATCH] Routes: use route_prefix_context context manager Pyramid 1.10 adds config.route_prefix_context(), which can be used like this to organize routes under a prefix a little more easily. In the next release it should also be possible to move the route for the prefix itself inside the context manager with an empty pattern and an inherit_slash=True argument. See https://github.com/Pylons/pyramid/pull/3420 --- tildes/tildes/routes.py | 168 +++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 99 deletions(-) diff --git a/tildes/tildes/routes.py b/tildes/tildes/routes.py index 6d9b697..4d0b1dd 100644 --- a/tildes/tildes/routes.py +++ b/tildes/tildes/routes.py @@ -31,57 +31,50 @@ def includeme(config: Configurator) -> None: config.add_route("register", "/register") config.add_route("group", "/~{group_path}", factory=group_by_path) - config.add_route("new_topic", "/~{group_path}/new_topic", factory=group_by_path) + with config.route_prefix_context("/~{group_path}"): + config.add_route("new_topic", "/new_topic", factory=group_by_path) - config.add_route("group_topics", "/~{group_path}/topics", factory=group_by_path) + config.add_route("group_topics", "/topics", factory=group_by_path) - config.add_route( - "topic", "/~{group_path}/{topic_id36}*title", factory=topic_by_id36 - ) + config.add_route("topic", "/{topic_id36}*title", factory=topic_by_id36) config.add_route("user", "/user/{username}", factory=user_by_username) + with config.route_prefix_context("/user/{username}"): + config.add_route("new_message", "/new_message", factory=user_by_username) + config.add_route("user_messages", "/messages", factory=user_by_username) config.add_route("notifications", "/notifications", factory=LoggedInFactory) - config.add_route( - "notifications_unread", "/notifications/unread", factory=LoggedInFactory - ) + with config.route_prefix_context("/notifications"): + config.add_route("notifications_unread", "/unread", factory=LoggedInFactory) config.add_route("messages", "/messages", factory=LoggedInFactory) - config.add_route("messages_sent", "/messages/sent", factory=LoggedInFactory) - config.add_route("messages_unread", "/messages/unread", factory=LoggedInFactory) - config.add_route( - "message_conversation", - "/messages/conversations/{conversation_id36}", - factory=message_conversation_by_id36, - ) - config.add_route( - "new_message", "/user/{username}/new_message", factory=user_by_username - ) - config.add_route( - "user_messages", "/user/{username}/messages", factory=user_by_username - ) + with config.route_prefix_context("/messages"): + config.add_route("messages_sent", "/sent", factory=LoggedInFactory) + config.add_route("messages_unread", "/unread", factory=LoggedInFactory) + config.add_route( + "message_conversation", + "/conversations/{conversation_id36}", + factory=message_conversation_by_id36, + ) config.add_route("settings", "/settings", factory=LoggedInFactory) - config.add_route( - "settings_account_recovery", - "/settings/account_recovery", - factory=LoggedInFactory, - ) - config.add_route( - "settings_two_factor", "/settings/two_factor", factory=LoggedInFactory - ) - config.add_route( - "settings_two_factor_qr_code", - "/settings/two_factor/qr_code", - factory=LoggedInFactory, - ) - config.add_route( - "settings_comment_visits", "/settings/comment_visits", factory=LoggedInFactory - ) - config.add_route("settings_filters", "/settings/filters", factory=LoggedInFactory) - config.add_route( - "settings_password_change", "/settings/password_change", factory=LoggedInFactory - ) + with config.route_prefix_context("/settings"): + config.add_route( + "settings_account_recovery", "/account_recovery", factory=LoggedInFactory + ) + config.add_route("settings_two_factor", "/two_factor", factory=LoggedInFactory) + config.add_route( + "settings_two_factor_qr_code", + "/two_factor/qr_code", + factory=LoggedInFactory, + ) + config.add_route( + "settings_comment_visits", "/comment_visits", factory=LoggedInFactory + ) + config.add_route("settings_filters", "/filters", factory=LoggedInFactory) + config.add_route( + "settings_password_change", "/password_change", factory=LoggedInFactory + ) config.add_route("bookmarks", "/bookmarks", factory=LoggedInFactory) @@ -93,64 +86,44 @@ def includeme(config: Configurator) -> None: # Route for Stripe donation processing page (POSTed to from docs site) config.add_route("donate_stripe", "/donate_stripe") - add_intercooler_routes(config) + # Add all intercooler routes under the /api/web path + with config.route_prefix_context("/api/web"): + add_intercooler_routes(config) def add_intercooler_routes(config: Configurator) -> None: """Set up all routes for the (internal-use) Intercooler API endpoints.""" def add_ic_route(name: str, path: str, **kwargs: Any) -> None: - """Add route with intercooler name prefix, base path, header check.""" + """Add route with intercooler name prefix and header check.""" name = "ic_" + name - path = "/api/web" + path config.add_route(name, path, header="X-IC-Request:true", **kwargs) - add_ic_route( - "group_subscribe", "/group/{group_path}/subscribe", factory=group_by_path - ) - add_ic_route( - "group_user_settings", - "/group/{group_path}/user_settings", - factory=group_by_path, - ) + with config.route_prefix_context("/group/{group_path}"): + add_ic_route("group_subscribe", "/subscribe", factory=group_by_path) + add_ic_route("group_user_settings", "/user_settings", factory=group_by_path) add_ic_route("topic", "/topics/{topic_id36}", factory=topic_by_id36) - add_ic_route( - "topic_comments", "/topics/{topic_id36}/comments", factory=topic_by_id36 - ) - add_ic_route("topic_group", "/topics/{topic_id36}/group", factory=topic_by_id36) - add_ic_route("topic_lock", "/topics/{topic_id36}/lock", factory=topic_by_id36) - add_ic_route("topic_remove", "/topics/{topic_id36}/remove", factory=topic_by_id36) - add_ic_route("topic_title", "/topics/{topic_id36}/title", factory=topic_by_id36) - add_ic_route("topic_vote", "/topics/{topic_id36}/vote", factory=topic_by_id36) - add_ic_route("topic_tags", "/topics/{topic_id36}/tags", factory=topic_by_id36) - add_ic_route( - "topic_bookmark", "/topics/{topic_id36}/bookmark", factory=topic_by_id36 - ) + with config.route_prefix_context("/topics/{topic_id36}"): + add_ic_route("topic_comments", "/comments", factory=topic_by_id36) + add_ic_route("topic_group", "/group", factory=topic_by_id36) + add_ic_route("topic_lock", "/lock", factory=topic_by_id36) + add_ic_route("topic_remove", "/remove", factory=topic_by_id36) + add_ic_route("topic_title", "/title", factory=topic_by_id36) + add_ic_route("topic_vote", "/vote", factory=topic_by_id36) + add_ic_route("topic_tags", "/tags", factory=topic_by_id36) + add_ic_route("topic_bookmark", "/bookmark", factory=topic_by_id36) add_ic_route("comment", "/comments/{comment_id36}", factory=comment_by_id36) - add_ic_route( - "comment_remove", "/comments/{comment_id36}/remove", factory=comment_by_id36 - ) - add_ic_route( - "comment_replies", "/comments/{comment_id36}/replies", factory=comment_by_id36 - ) - add_ic_route( - "comment_vote", "/comments/{comment_id36}/vote", factory=comment_by_id36 - ) - add_ic_route( - "comment_label", - "/comments/{comment_id36}/labels/{name}", - factory=comment_by_id36, - ) - add_ic_route( - "comment_bookmark", "/comments/{comment_id36}/bookmark", factory=comment_by_id36 - ) - add_ic_route( - "comment_mark_read", - "/comments/{comment_id36}/mark_read", - factory=notification_by_comment_id36, - ) + with config.route_prefix_context("/comments/{comment_id36}"): + add_ic_route("comment_remove", "/remove", factory=comment_by_id36) + add_ic_route("comment_replies", "/replies", factory=comment_by_id36) + add_ic_route("comment_vote", "/vote", factory=comment_by_id36) + add_ic_route("comment_label", "/labels/{name}", factory=comment_by_id36) + add_ic_route("comment_bookmark", "/bookmark", factory=comment_by_id36) + add_ic_route( + "comment_mark_read", "/mark_read", factory=notification_by_comment_id36 + ) add_ic_route( "message_conversation_replies", @@ -159,19 +132,16 @@ def add_intercooler_routes(config: Configurator) -> None: ) add_ic_route("user", "/user/{username}", factory=user_by_username) - add_ic_route( - "user_filtered_topic_tags", - "/user/{username}/filtered_topic_tags", - factory=user_by_username, - ) - add_ic_route( - "user_invite_code", "/user/{username}/invite_code", factory=user_by_username - ) - add_ic_route( - "user_default_listing_options", - "/user/{username}/default_listing_options", - factory=user_by_username, - ) + with config.route_prefix_context("/user/{username}"): + add_ic_route( + "user_filtered_topic_tags", "/filtered_topic_tags", factory=user_by_username + ) + add_ic_route("user_invite_code", "/invite_code", factory=user_by_username) + add_ic_route( + "user_default_listing_options", + "/default_listing_options", + factory=user_by_username, + ) class LoggedInFactory: