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
« 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.
16from manila.api import common
19class ShareGroupSnapshotViewBuilder(common.ViewBuilder):
20 """Model a share group snapshot API response as a python dictionary."""
22 _collection_name = "share_group_snapshot"
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)
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)
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)
48 members_links = self._get_collection_links(
49 request, members, "share_group_snapshot_id")
50 members_dict = {"share_group_snapshot_members": members_list}
52 if members_links:
53 members_dict["share_group_snapshot_members_links"] = members_links
55 return members_dict
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 }
67 def detail(self, request, share_group_snap):
68 """Detailed view of a single share group snapshot."""
70 members = self._format_member_list(
71 share_group_snap.get('share_group_snapshot_members', []))
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}
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)
96 return members_list
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}
107 if snaps_links:
108 snaps_dict["share_group_snapshot_links"] = snaps_links
110 return snaps_dict