Coverage for manila/api/v2/share_access_metadata.py: 96%
50 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 2018 Huawei Corporation.
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.
16"""The share access rule metadata api."""
18import webob
20from manila.api.openstack import wsgi
21from manila.api.views import share_accesses as share_access_views
22from manila import db
23from manila import exception
24from manila.i18n import _
25from manila import share
28class ShareAccessMetadataController(wsgi.Controller):
29 """The Share access rule metadata API V2 controller."""
31 resource_name = 'share_access_metadata'
32 _view_builder_class = share_access_views.ViewBuilder
34 def __init__(self):
35 super(ShareAccessMetadataController, self).__init__()
36 self.share_api = share.API()
38 @wsgi.Controller.api_version('2.45')
39 @wsgi.Controller.authorize
40 def update(self, req, access_id, body=None):
41 context = req.environ['manila.context']
42 if not self.is_valid_body(body, 'metadata'):
43 raise webob.exc.HTTPBadRequest()
45 metadata = body['metadata']
46 md = self._update_share_access_metadata(context, access_id, metadata)
47 return self._view_builder.view_metadata(req, md)
49 @wsgi.Controller.api_version('2.45')
50 @wsgi.Controller.authorize
51 @wsgi.response(200)
52 def delete(self, req, access_id, key):
53 """Deletes an existing access metadata."""
54 context = req.environ['manila.context']
55 self._assert_access_exists(context, access_id)
56 try:
57 db.share_access_metadata_delete(context, access_id, key)
58 except exception.ShareAccessMetadataNotFound as error:
59 raise webob.exc.HTTPNotFound(explanation=error.msg)
61 def _update_share_access_metadata(self, context, access_id, metadata):
62 self._assert_access_exists(context, access_id)
63 try:
64 return self.share_api.update_share_access_metadata(
65 context, access_id, metadata)
66 except (ValueError, AttributeError):
67 msg = _("Malformed request body")
68 raise webob.exc.HTTPBadRequest(explanation=msg)
70 except exception.InvalidMetadata as error:
71 raise webob.exc.HTTPBadRequest(explanation=error.msg)
73 except exception.InvalidMetadataSize as error:
74 raise webob.exc.HTTPBadRequest(explanation=error.msg)
76 def _assert_access_exists(self, context, access_id):
77 try:
78 self.share_api.access_get(context, access_id)
79 except exception.NotFound as ex:
80 raise webob.exc.HTTPNotFound(explanation=ex.msg)
83def create_resource():
84 return wsgi.Resource(ShareAccessMetadataController())