Change api.service to use a class, fix validations in api

Change-Id: Ib5a957a82238b18548ff470ea9c2905b389d026e
This commit is contained in:
Yuriy Taraday 2013-10-28 18:14:02 +04:00
parent dfbaa5a410
commit dfeacfa37e
3 changed files with 64 additions and 47 deletions

View File

@ -19,53 +19,50 @@ from climate.openstack.common import log as logging
LOG = logging.getLogger(__name__)
## Leases operations
class API(object):
def get_leases():
"""List all existing leases."""
pass
## Leases operations
def get_leases():
"""List all existing leases."""
pass
def create_lease(data):
"""Create new lease.
def create_lease(data):
"""Create new lease.
:param data: New lease characteristics.
:type data: dict
"""
pass
:param data: New lease characteristics.
:type data: dict
"""
pass
def get_lease(lease_id):
"""Get lease by its ID.
def get_lease(lease_id):
"""Get lease by its ID.
:param lease_id: ID of the lease in Climate DB.
:type lease_id: str
"""
pass
:param lease_id: ID of the lease in Climate DB.
:type lease_id: str
"""
pass
def update_lease(lease_id, data):
"""Update lease. Only name changing and prolonging may be proceeded.
:param lease_id: ID of the lease in Climate DB.
:type lease_id: str
:param data: New lease characteristics.
:type data: dict
"""
pass
def update_lease(lease_id, data):
"""Update lease. Only name changing and prolonging may be proceeded.
def delete_lease(lease_id):
"""Delete specified lease.
:param lease_id: ID of the lease in Climate DB.
:type lease_id: str
:param data: New lease characteristics.
:type data: dict
"""
pass
:param lease_id: ID of the lease in Climate DB.
:type lease_id: str
"""
pass
## Plugins operations
def delete_lease(lease_id):
"""Delete specified lease.
:param lease_id: ID of the lease in Climate DB.
:type lease_id: str
"""
pass
## Plugins operations
def get_plugins():
"""List all possible plugins."""
pass
def get_plugins():
"""List all possible plugins."""
pass

View File

@ -17,10 +17,12 @@ from climate.api import service
from climate.api import utils as api_utils
from climate.api import validation
from climate.openstack.common import log as logging
from climate import utils
LOG = logging.getLogger(__name__)
rest = api_utils.Rest('v1_0', __name__)
_api = utils.LazyProxy(service.API)
## Leases operations
@ -28,34 +30,34 @@ rest = api_utils.Rest('v1_0', __name__)
@rest.get('/leases')
def leases_list():
"""List all existing leases."""
return api_utils.render(leases=service.get_leases())
return api_utils.render(leases=_api.get_leases())
@rest.post('/leases')
def leases_create(data):
"""Create new lease."""
return api_utils.render(lease=service.create_lease(data))
return api_utils.render(lease=_api.create_lease(data))
@rest.get('/leases/<lease_id>')
@validation.check_exists(service.get_lease, 'lease_id')
@validation.check_exists(_api.get_lease, lease_id='lease_id')
def leases_get(lease_id):
"""Get lease by its ID."""
return api_utils.render(lease=service.get_lease(lease_id))
return api_utils.render(lease=_api.get_lease(lease_id))
@rest.put('/leases/<lease_id>')
@validation.check_exists(service.get_lease, 'lease_id')
@validation.check_exists(_api.get_lease, lease_id='lease_id')
def leases_update(lease_id, data):
"""Update lease. Only name changing and prolonging may be proceeded."""
return api_utils.render(lease=service.update_lease(lease_id, data))
return api_utils.render(lease=_api.update_lease(lease_id, data))
@rest.delete('/leases/<lease_id>')
@validation.check_exists(service.get_lease, 'lease_id')
@validation.check_exists(_api.get_lease, lease_id='lease_id')
def leases_delete(lease_id):
"""Delete specified lease."""
service.delete_lease(lease_id)
_api.delete_lease(lease_id)
return api_utils.render()
@ -64,4 +66,4 @@ def leases_delete(lease_id):
@rest.get('/plugins')
def plugins_list():
"""List all possible plugins."""
return api_utils.render(plugins=service.get_plugins())
return api_utils.render(plugins=_api.get_plugins())

View File

@ -12,3 +12,21 @@
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import functools
class LazyProxy(object):
def __init__(self, klass, *args, **kwargs):
self.klass = klass
self.args = args
self.kwargs = kwargs
self.instance = None
def __getattr__(self, name):
return functools.partial(self.__run_method, name)
def __run_method(self, __name, *args, **kwargs):
if self.instance is None:
self.instance = self.klass(*self.args, **self.kwargs)
return getattr(self.instance, __name)(*args, **kwargs)