# retoor from devplacepy import schemas from devplacepy.docs_examples import schema_example, action_example from ._shared import NON_BODY_ENDPOINTS def _classify(ep): if ep["id"] in _PAGE_RESPONSES or ep["id"] in _ACTION_RESPONSES: return "negotiable" if ep.get("ajax"): return "ajax" if ep["id"] in NON_BODY_ENDPOINTS: return "none" return "json" _PAGE_RESPONSES = { "auth-signup": schemas.AuthPageOut, "auth-login": schemas.AuthPageOut, "auth-forgot-password": schemas.AuthPageOut, "auth-reset-password": schemas.AuthPageOut, "home": schemas.LandingOut, "feed-list": schemas.FeedOut, "posts-detail": schemas.PostDetailOut, "projects-list": schemas.ProjectsOut, "projects-detail": schemas.ProjectDetailOut, "gists-list": schemas.GistsOut, "gists-detail": schemas.GistDetailOut, "news-list": schemas.NewsListOut, "news-detail": schemas.NewsDetailOut, "profile-detail": schemas.ProfileOut, "leaderboard": schemas.LeaderboardOut, "messages-inbox": schemas.MessagesOut, "notifications-list": schemas.NotificationsOut, "issues-list": schemas.IssuesOut, "issues-detail": schemas.IssueDetailOut, "issues-attachments-list": schemas.IssueAttachmentsOut, "bookmarks-saved": schemas.SavedOut, "notes-saved": schemas.NotesOut, "admin-users": schemas.AdminUsersOut, "admin-news-list": schemas.AdminNewsOut, "admin-settings-get": schemas.AdminSettingsOut, "admin-audit-log": schemas.AuditLogOut, "admin-audit-event": schemas.AuditEventOut, "admin-bots-monitor": schemas.AdminBotsOut, "containers-admin-edit-page": schemas.AdminContainerEditOut, } _ACTION_RESPONSES = { "auth-signup-post": ("/feed", {"username": "alice"}), "auth-login-post": ("/feed", None), "auth-forgot-password-post": ("/auth/forgot-password?sent=1", None), "auth-reset-password-post": ("/auth/login", None), "auth-logout": ("/", None), "posts-create": ( "/posts/POST_SLUG", {"uid": "POST_UID", "slug": "POST_SLUG", "url": "/posts/POST_SLUG"}, ), "posts-edit": ( "/posts/POST_SLUG", {"uid": "POST_UID", "slug": "POST_SLUG", "url": "/posts/POST_SLUG"}, ), "posts-delete": ("/feed", None), "comments-create": ( "/posts/POST_SLUG#comment-COMMENT_UID", {"uid": "COMMENT_UID", "url": "/posts/POST_SLUG#comment-COMMENT_UID"}, ), "comments-delete": ( "/posts/POST_SLUG", {"deleted_uid": "COMMENT_UID", "target_type": "post", "target_uid": "TARGET_UID"}, ), "projects-create": ( "/projects/PROJECT_SLUG", {"uid": "PROJECT_UID", "slug": "PROJECT_SLUG", "url": "/projects/PROJECT_SLUG"}, ), "projects-delete": ("/projects", None), "gists-create": ( "/gists/GIST_SLUG", {"uid": "GIST_UID", "slug": "GIST_SLUG", "url": "/gists/GIST_SLUG"}, ), "gists-edit": ( "/gists/GIST_SLUG", {"uid": "GIST_UID", "slug": "GIST_SLUG", "url": "/gists/GIST_SLUG"}, ), "gists-delete": ("/gists", None), "profile-update": ("/profile/YOUR_USERNAME", None), "profile-customization-global": ( "/profile/YOUR_USERNAME", {"url": "/profile/YOUR_USERNAME", "cust_disable_global": True}, ), "profile-customization-pagetype": ( "/profile/YOUR_USERNAME", {"url": "/profile/YOUR_USERNAME", "cust_disable_pagetype": True}, ), "follow-user": ("/profile/bob_test", None), "unfollow-user": ("/profile/bob_test", None), "messages-send": ("/messages?with_uid=RECEIVER_UID", {"uid": "MESSAGE_UID"}), "notifications-open": ("/posts/POST_SLUG#comment-COMMENT_UID", None), "notifications-mark-read": ("/notifications", None), "notifications-mark-all-read": ("/notifications", None), "issues-comment": ("/issues/12", {"comment_id": 1}), "issues-status": ("/issues/12", {"state": "closed"}), "admin-user-role": ("/admin/users", None), "admin-user-password": ("/admin/users", None), "admin-user-toggle": ("/admin/users", None), "admin-news-toggle": ("/admin/news", None), "admin-news-publish": ("/admin/news", None), "admin-news-landing": ("/admin/news", None), "admin-news-delete": ("/admin/news", None), "admin-settings": ("/admin/settings", None), } def _apply_negotiated_responses(groups): for group in groups: for ep in group.get("endpoints", []) or []: if ep.get("sample_response") is None: if ep["id"] in _PAGE_RESPONSES: ep["sample_response"] = schema_example(_PAGE_RESPONSES[ep["id"]]) elif ep["id"] in _ACTION_RESPONSES: redirect, data = _ACTION_RESPONSES[ep["id"]] ep["sample_response"] = action_example(redirect, data) ep["negotiation"] = _classify(ep)