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

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. 

15 

16"""The share access rule metadata api.""" 

17 

18import webob 

19 

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 

26 

27 

28class ShareAccessMetadataController(wsgi.Controller): 

29 """The Share access rule metadata API V2 controller.""" 

30 

31 resource_name = 'share_access_metadata' 

32 _view_builder_class = share_access_views.ViewBuilder 

33 

34 def __init__(self): 

35 super(ShareAccessMetadataController, self).__init__() 

36 self.share_api = share.API() 

37 

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

44 

45 metadata = body['metadata'] 

46 md = self._update_share_access_metadata(context, access_id, metadata) 

47 return self._view_builder.view_metadata(req, md) 

48 

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) 

60 

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) 

69 

70 except exception.InvalidMetadata as error: 

71 raise webob.exc.HTTPBadRequest(explanation=error.msg) 

72 

73 except exception.InvalidMetadataSize as error: 

74 raise webob.exc.HTTPBadRequest(explanation=error.msg) 

75 

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) 

81 

82 

83def create_resource(): 

84 return wsgi.Resource(ShareAccessMetadataController())