Coverage for postrfp/web/ext/apilinks.py: 100%
32 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-22 21:34 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-22 21:34 +0000
1from collections import defaultdict
2from typing import Optional
5class Link:
6 instances: dict[tuple[str, str], dict[str, dict]] = defaultdict(dict)
8 def __init__(
9 self,
10 api: str,
11 source_operation: str,
12 target_operation: str,
13 parameters: dict,
14 description: Optional[str] = None,
15 ) -> None:
16 self.api = api
17 self.source_operation = source_operation
18 self.target_operation = target_operation
19 self.parameters = parameters
20 self.description = description
21 link_key = (api, self.source_operation)
22 Link.instances[link_key][self.target_operation] = self.as_dict()
24 def as_dict(self) -> dict:
25 d = {"operationId": self.target_operation, "parameters": self.parameters}
26 if self.description:
27 d["description"] = self.description
28 return d
31Link("buyer", "post_project", "get_project", {"project_id": "$response.body#/id"})
32Link("buyer", "post_project", "delete_project", {"project_id": "$response.body#/id"})
33Link(
34 "buyer", "post_project", "put_project_publish", {"project_id": "$response.body#/id"}
35)
36Link("buyer", "post_project", "put_project", {"project_id": "$response.body#/id"})
37Link(
38 "buyer",
39 "post_project_issue",
40 "get_project_issue",
41 {"project_id": "$response.path.id", "issue_id": "$response.body#/id"},
42)
43Link(
44 "buyer",
45 "put_project",
46 "get_project",
47 {"project_id": "$response.path.project_id"},
48 description=(
49 "The path element project_id can be used to fetch the updated "
50 "project at /project/{project_id}"
51 ),
52)
54Link(
55 "buyer",
56 "post_project_note",
57 "get_project_notes",
58 {"project_id": "$response.path.id"},
59)
61Link("vendor", "post_user", "get_user", {"targetUser": "$response.body#/id"})
63Link(
64 "buyer",
65 "post_category",
66 "get_category",
67 {"category_id": "$response.body#/id"},
68 description=(
69 "The id field of the JSON document returned in the body can be"
70 " used to fetch the new category at /category/{category_id}"
71 ),
72)
74Link(
75 "buyer",
76 "post_project",
77 "post_project_section_excel",
78 {"project_id": "$response.body#/id", "section_id": "$response.body#/section_id"},
79 description="Add questions to a new Project by uploading an Excel xlsx file.",
80)
81Link("buyer", "post_category", "get_category", {"category_id": "$response.body#/id"})
83Link("buyer", "post_category", "delete_category", {"category_id": "$response.body#/id"})
85Link("buyer", "post_category", "put_category", {"category_id": "$response.body#/id"})
87Link(
88 "buyer",
89 "get_categories",
90 "delete_category",
91 {"category_id": "$response.body#/0/id"},
92)
94Link("buyer", "get_categories", "get_category", {"category_id": "$response.body#/0/id"})