|
# retoor <retoor@molodetz.nl>
|
|
|
|
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,
|
|
"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)
|