1# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. 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 cinder.api import common 17 18 19class ViewBuilder(common.ViewBuilder): 20 """Model transfer API responses as a python dictionary.""" 21 22 _collection_name = "os-volume-transfer" 23 24 def __init__(self): 25 """Initialize view builder.""" 26 super(ViewBuilder, self).__init__() 27 28 def summary_list(self, request, transfers, origin_transfer_count): 29 """Show a list of transfers without many details.""" 30 return self._list_view(self.summary, request, transfers, 31 origin_transfer_count) 32 33 def detail_list(self, request, transfers, origin_transfer_count): 34 """Detailed view of a list of transfers .""" 35 return self._list_view(self.detail, request, transfers, 36 origin_transfer_count) 37 38 def summary(self, request, transfer): 39 """Generic, non-detailed view of a transfer.""" 40 return { 41 'transfer': { 42 'id': transfer['id'], 43 'volume_id': transfer.get('volume_id'), 44 'name': transfer['display_name'], 45 'links': self._get_links(request, 46 transfer['id']), 47 }, 48 } 49 50 def detail(self, request, transfer): 51 """Detailed view of a single transfer.""" 52 return { 53 'transfer': { 54 'id': transfer.get('id'), 55 'created_at': transfer.get('created_at'), 56 'name': transfer.get('display_name'), 57 'volume_id': transfer.get('volume_id'), 58 'links': self._get_links(request, transfer['id']) 59 } 60 } 61 62 def create(self, request, transfer): 63 """Detailed view of a single transfer when created.""" 64 return { 65 'transfer': { 66 'id': transfer.get('id'), 67 'created_at': transfer.get('created_at'), 68 'name': transfer.get('display_name'), 69 'volume_id': transfer.get('volume_id'), 70 'auth_key': transfer.get('auth_key'), 71 'links': self._get_links(request, transfer['id']) 72 } 73 } 74 75 def _list_view(self, func, request, transfers, origin_transfer_count): 76 """Provide a view for a list of transfers.""" 77 transfers_list = [func(request, transfer)['transfer'] for transfer in 78 transfers] 79 transfers_links = self._get_collection_links(request, 80 transfers, 81 self._collection_name, 82 origin_transfer_count) 83 transfers_dict = dict(transfers=transfers_list) 84 85 if transfers_links: 86 transfers_dict['transfers_links'] = transfers_links 87 88 return transfers_dict 89