Use abstract base class for catalog driver

Use the abc module for managing abstract base classes in the driver
layer and add missing methods to concrete classes.

bp abstract-base-class-drivers

Change-Id: If66b9bd3ebcfc3a59151b52a46407a36d2a9352b
This commit is contained in:
Doug Hellmann 2013-10-06 12:46:44 -04:00
parent c0f6653a13
commit 8c1899cc8f
4 changed files with 26 additions and 5 deletions

View File

@ -17,6 +17,7 @@
from keystone import catalog
from keystone.common import kvs
from keystone import exception
class Catalog(kvs.Base, catalog.Driver):
@ -84,3 +85,6 @@ class Catalog(kvs.Base, catalog.Driver):
def _create_catalog(self, user_id, tenant_id, data):
self.db.set('catalog-%s-%s' % (tenant_id, user_id), data)
return data
def get_v3_catalog(self, user_id, tenant_id, metadata=None):
raise exception.NotImplemented()

View File

@ -19,6 +19,7 @@ import os.path
from keystone.catalog.backends import kvs
from keystone.catalog import core
from keystone import config
from keystone import exception
from keystone.openstack.common import log as logging
@ -120,3 +121,6 @@ class TemplatedCatalog(kvs.Catalog):
o[region][service][k] = core.format_url(v, d)
return o
def get_v3_catalog(self, user_id, tenant_id, metadata=None):
raise exception.NotImplemented()

View File

@ -17,6 +17,10 @@
"""Main entry point into the Catalog service."""
import abc
import six
from keystone.common import dependency
from keystone.common import manager
from keystone import config
@ -102,8 +106,11 @@ class Manager(manager.Manager):
raise exception.NotFound('Catalog not found for user and tenant')
@six.add_metaclass(abc.ABCMeta)
class Driver(object):
"""Interface description for an Catalog driver."""
@abc.abstractmethod
def create_service(self, service_id, service_ref):
"""Creates a new service.
@ -112,6 +119,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def list_services(self):
"""List all services.
@ -120,6 +128,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def get_service(self, service_id):
"""Get service by id.
@ -129,6 +138,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def update_service(self, service_id):
"""Update service by id.
@ -138,6 +148,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def delete_service(self, service_id):
"""Deletes an existing service.
@ -146,6 +157,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def create_endpoint(self, endpoint_id, endpoint_ref):
"""Creates a new endpoint for a service.
@ -155,6 +167,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def get_endpoint(self, endpoint_id):
"""Get endpoint by id.
@ -164,6 +177,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def list_endpoints(self):
"""List all endpoints.
@ -172,6 +186,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def update_endpoint(self, endpoint_id, endpoint_ref):
"""Get endpoint by id.
@ -182,6 +197,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def delete_endpoint(self, endpoint_id):
"""Deletes an endpoint for a service.
@ -190,6 +206,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def get_catalog(self, user_id, tenant_id, metadata=None):
"""Retrieve and format the current service catalog.
@ -214,6 +231,7 @@ class Driver(object):
"""
raise exception.NotImplemented()
@abc.abstractmethod
def get_v3_catalog(self, user_id, tenant_id, metadata=None):
"""Retrieve and format the current V3 service catalog.

View File

@ -17,7 +17,6 @@
import inspect
import testtools
from keystone import catalog
from keystone.contrib import endpoint_filter
from keystone.contrib import oauth1
from keystone import exception
@ -51,10 +50,6 @@ class TestDrivers(testtools.TestCase):
if name[0] != '_' and callable(method):
self.assertMethodNotImplemented(method)
def test_catalog_driver_unimplemented(self):
interface = catalog.Driver()
self.assertInterfaceNotImplemented(interface)
def test_policy_driver_unimplemented(self):
interface = policy.Driver()
self.assertInterfaceNotImplemented(interface)