Coverage for manila/api/views/share_group_snapshots.py: 64%

36 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2026-02-18 22:19 +0000

1# Copyright 2015 Alex Meade 

2# All Rights Reserved. 

3# 

4# Licensed under the Apache License, Version 2.0 (the "License"); you may 

5# not use this file except in compliance with the License. You may obtain 

6# a copy of the License at 

7# 

8# http://www.apache.org/licenses/LICENSE-2.0 

9# 

10# Unless required by applicable law or agreed to in writing, software 

11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

13# License for the specific language governing permissions and limitations 

14# under the License. 

15 

16from manila.api import common 

17 

18 

19class ShareGroupSnapshotViewBuilder(common.ViewBuilder): 

20 """Model a share group snapshot API response as a python dictionary.""" 

21 

22 _collection_name = "share_group_snapshot" 

23 

24 def summary_list(self, request, group_snaps): 

25 """Show a list of share_group_snapshots without many details.""" 

26 return self._list_view(self.summary, request, group_snaps) 

27 

28 def detail_list(self, request, group_snaps): 

29 """Detailed view of a list of share_group_snapshots.""" 

30 return self._list_view(self.detail, request, group_snaps) 

31 

32 def member_list(self, request, members): 

33 members_list = [] 

34 for member in members: 

35 member_dict = { 

36 'id': member.get('id'), 

37 'created_at': member.get('created_at'), 

38 'size': member.get('size'), 

39 'share_protocol': member.get('share_proto'), 

40 'project_id': member.get('project_id'), 

41 'share_group_snapshot_id': member.get( 

42 'share_group_snapshot_id'), 

43 'share_id': member.get('share_instance', {}).get('share_id'), 

44 # TODO(vponomaryov): add 'provider_location' key in Pike. 

45 } 

46 members_list.append(member_dict) 

47 

48 members_links = self._get_collection_links( 

49 request, members, "share_group_snapshot_id") 

50 members_dict = {"share_group_snapshot_members": members_list} 

51 

52 if members_links: 

53 members_dict["share_group_snapshot_members_links"] = members_links 

54 

55 return members_dict 

56 

57 def summary(self, request, share_group_snap): 

58 """Generic, non-detailed view of a share group snapshot.""" 

59 return { 

60 'share_group_snapshot': { 

61 'id': share_group_snap.get('id'), 

62 'name': share_group_snap.get('name'), 

63 'links': self._get_links(request, share_group_snap['id']), 

64 } 

65 } 

66 

67 def detail(self, request, share_group_snap): 

68 """Detailed view of a single share group snapshot.""" 

69 

70 members = self._format_member_list( 

71 share_group_snap.get('share_group_snapshot_members', [])) 

72 

73 share_group_snap_dict = { 

74 'id': share_group_snap.get('id'), 

75 'name': share_group_snap.get('name'), 

76 'created_at': share_group_snap.get('created_at'), 

77 'status': share_group_snap.get('status'), 

78 'description': share_group_snap.get('description'), 

79 'project_id': share_group_snap.get('project_id'), 

80 'share_group_id': share_group_snap.get('share_group_id'), 

81 'members': members, 

82 'links': self._get_links(request, share_group_snap['id']), 

83 } 

84 return {'share_group_snapshot': share_group_snap_dict} 

85 

86 def _format_member_list(self, members): 

87 members_list = [] 

88 for member in members: 88 ↛ 89line 88 didn't jump to line 89 because the loop on line 88 never started

89 member_dict = { 

90 'id': member.get('id'), 

91 'size': member.get('size'), 

92 'share_id': member.get('share_instance', {}).get('share_id'), 

93 } 

94 members_list.append(member_dict) 

95 

96 return members_list 

97 

98 def _list_view(self, func, request, snaps): 

99 """Provide a view for a list of share group snapshots.""" 

100 snap_list = [func(request, snap)["share_group_snapshot"] 

101 for snap in snaps] 

102 snaps_links = self._get_collection_links(request, 

103 snaps, 

104 self._collection_name) 

105 snaps_dict = {"share_group_snapshots": snap_list} 

106 

107 if snaps_links: 

108 snaps_dict["share_group_snapshot_links"] = snaps_links 

109 

110 return snaps_dict