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

1from collections import defaultdict 

2from typing import Optional 

3 

4 

5class Link: 

6 instances: dict[tuple[str, str], dict[str, dict]] = defaultdict(dict) 

7 

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() 

23 

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 

29 

30 

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) 

53 

54Link( 

55 "buyer", 

56 "post_project_note", 

57 "get_project_notes", 

58 {"project_id": "$response.path.id"}, 

59) 

60 

61Link("vendor", "post_user", "get_user", {"targetUser": "$response.body#/id"}) 

62 

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) 

73 

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"}) 

82 

83Link("buyer", "post_category", "delete_category", {"category_id": "$response.body#/id"}) 

84 

85Link("buyer", "post_category", "put_category", {"category_id": "$response.body#/id"}) 

86 

87Link( 

88 "buyer", 

89 "get_categories", 

90 "delete_category", 

91 {"category_id": "$response.body#/0/id"}, 

92) 

93 

94Link("buyer", "get_categories", "get_category", {"category_id": "$response.body#/0/id"})