Coverage for manila/api/v1/router.py: 100%

61 statements  

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

1# Copyright 2011 OpenStack LLC. 

2# Copyright 2011 United States Government as represented by the 

3# Administrator of the National Aeronautics and Space Administration. 

4# All Rights Reserved. 

5# 

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

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

8# a copy of the License at 

9# 

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

11# 

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

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

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

15# License for the specific language governing permissions and limitations 

16# under the License. 

17 

18""" 

19WSGI middleware for OpenStack Share API v1. 

20""" 

21 

22from manila.api import extensions 

23import manila.api.openstack 

24from manila.api.v1 import share_metadata 

25from manila.api.v1 import share_servers 

26from manila.api.v1 import share_snapshots 

27from manila.api.v1 import shares 

28from manila.api.v2 import availability_zones 

29from manila.api.v2 import limits 

30from manila.api.v2 import quota_class_sets 

31from manila.api.v2 import quota_sets 

32from manila.api.v2 import scheduler_stats 

33from manila.api.v2 import security_service 

34from manila.api.v2 import services 

35from manila.api.v2 import share_manage 

36from manila.api.v2 import share_networks 

37from manila.api.v2 import share_types 

38from manila.api.v2 import share_types_extra_specs 

39from manila.api.v2 import share_unmanage 

40from manila.api import versions 

41 

42 

43class APIRouter(manila.api.openstack.APIRouter): 

44 """Route API requests. 

45 

46 Routes requests on the OpenStack API to the appropriate controller 

47 and method. 

48 """ 

49 ExtensionManager = extensions.ExtensionManager 

50 

51 def _setup_routes(self, mapper): 

52 self.resources['versions'] = versions.create_resource() 

53 mapper.connect("versions", "/", 

54 controller=self.resources['versions'], 

55 action='index') 

56 

57 mapper.redirect("", "/") 

58 

59 self.resources["availability_zones"] = ( 

60 availability_zones.create_resource_legacy()) 

61 mapper.resource("availability-zone", 

62 "os-availability-zone", 

63 controller=self.resources["availability_zones"]) 

64 

65 self.resources["services"] = services.create_resource_legacy() 

66 mapper.resource("service", 

67 "os-services", 

68 controller=self.resources["services"]) 

69 

70 self.resources["quota_sets"] = quota_sets.create_resource_legacy() 

71 mapper.resource("quota-set", 

72 "os-quota-sets", 

73 controller=self.resources["quota_sets"], 

74 member={'defaults': 'GET'}) 

75 

76 self.resources["quota_class_sets"] = ( 

77 quota_class_sets.create_resource_legacy()) 

78 mapper.resource("quota-class-set", 

79 "os-quota-class-sets", 

80 controller=self.resources["quota_class_sets"]) 

81 

82 self.resources["share_manage"] = share_manage.create_resource() 

83 mapper.resource("share_manage", 

84 "os-share-manage", 

85 controller=self.resources["share_manage"]) 

86 

87 self.resources["share_unmanage"] = share_unmanage.create_resource() 

88 mapper.resource("share_unmanage", 

89 "os-share-unmanage", 

90 controller=self.resources["share_unmanage"], 

91 member={'unmanage': 'POST'}) 

92 

93 self.resources['shares'] = shares.create_resource() 

94 mapper.resource("share", "shares", 

95 controller=self.resources['shares'], 

96 collection={'detail': 'GET'}, 

97 member={'action': 'POST'}) 

98 

99 self.resources['snapshots'] = share_snapshots.create_resource() 

100 mapper.resource("snapshot", "snapshots", 

101 controller=self.resources['snapshots'], 

102 collection={'detail': 'GET'}, 

103 member={'action': 'POST'}) 

104 

105 self.resources['share_metadata'] = share_metadata.create_resource() 

106 share_metadata_controller = self.resources['share_metadata'] 

107 

108 mapper.resource("share_metadata", "metadata", 

109 controller=share_metadata_controller, 

110 parent_resource=dict(member_name='share', 

111 collection_name='shares')) 

112 

113 mapper.connect("metadata", 

114 "/{project_id}/shares/{share_id}/metadata", 

115 controller=share_metadata_controller, 

116 action='update_all', 

117 conditions={"method": ['PUT']}) 

118 

119 self.resources['limits'] = limits.create_resource() 

120 mapper.resource("limit", "limits", 

121 controller=self.resources['limits']) 

122 

123 self.resources["security_services"] = ( 

124 security_service.create_resource()) 

125 mapper.resource("security-service", "security-services", 

126 controller=self.resources['security_services'], 

127 collection={'detail': 'GET'}) 

128 

129 self.resources['share_networks'] = share_networks.create_resource() 

130 mapper.resource(share_networks.RESOURCE_NAME, 

131 'share-networks', 

132 controller=self.resources['share_networks'], 

133 collection={'detail': 'GET'}, 

134 member={'action': 'POST'}) 

135 

136 self.resources['share_servers'] = share_servers.create_resource() 

137 mapper.resource('share_server', 

138 'share-servers', 

139 controller=self.resources['share_servers']) 

140 mapper.connect('details', 

141 '/{project_id}/share-servers/{id}/details', 

142 controller=self.resources['share_servers'], 

143 action='details', 

144 conditions={"method": ['GET']}) 

145 

146 self.resources['types'] = share_types.create_resource() 

147 mapper.resource("type", "types", 

148 controller=self.resources['types'], 

149 collection={'detail': 'GET', 'default': 'GET'}, 

150 member={'action': 'POST', 

151 'os-share-type-access': 'GET'}) 

152 

153 self.resources['extra_specs'] = ( 

154 share_types_extra_specs.create_resource()) 

155 mapper.resource('extra_spec', 'extra_specs', 

156 controller=self.resources['extra_specs'], 

157 parent_resource=dict(member_name='type', 

158 collection_name='types')) 

159 

160 self.resources['scheduler_stats'] = scheduler_stats.create_resource() 

161 mapper.connect('pools', '/{project_id}/scheduler-stats/pools', 

162 controller=self.resources['scheduler_stats'], 

163 action='pools_index', 

164 conditions={'method': ['GET']}) 

165 mapper.connect('pools', '/{project_id}/scheduler-stats/pools/detail', 

166 controller=self.resources['scheduler_stats'], 

167 action='pools_detail', 

168 conditions={'method': ['GET']})