Merge pull request #19 from TimSimpsonR/pep8-and-import-fix
Pep8 and import fix
This commit is contained in:
commit
f5b910a2f9
106
reddwarf/common/models.py
Normal file
106
reddwarf/common/models.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
# Copyright 2010-2011 OpenStack LLC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http: //www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
"""Model classes that form the core of instances functionality."""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from reddwarf.common import config
|
||||||
|
from novaclient.v1_1.client import Client
|
||||||
|
|
||||||
|
CONFIG = config.Config
|
||||||
|
LOG = logging.getLogger('reddwarf.database.models')
|
||||||
|
|
||||||
|
|
||||||
|
class ModelBase(object):
|
||||||
|
|
||||||
|
_data_fields = []
|
||||||
|
_auto_generated_attrs = []
|
||||||
|
|
||||||
|
def _validate(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def data(self, **options):
|
||||||
|
data_fields = self._data_fields + self._auto_generated_attrs
|
||||||
|
return dict([(field, self[field]) for field in data_fields])
|
||||||
|
|
||||||
|
def is_valid(self):
|
||||||
|
self.errors = {}
|
||||||
|
# self._validate_columns_type()
|
||||||
|
# self._before_validate()
|
||||||
|
# self._validate()
|
||||||
|
return self.errors == {}
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
if not hasattr(other, 'id'):
|
||||||
|
return False
|
||||||
|
return type(other) == type(self) and other.id == self.id
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
return not self == other
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return self.id.__hash__()
|
||||||
|
|
||||||
|
|
||||||
|
class NovaRemoteModelBase(ModelBase):
|
||||||
|
|
||||||
|
# This should be set by the remote model during init time
|
||||||
|
# The data() method will be using this
|
||||||
|
_data_object = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_client(cls, context):
|
||||||
|
# Quite annoying but due to a paste config loading bug.
|
||||||
|
# TODO(hub-cap): talk to the openstack-common people about this
|
||||||
|
PROXY_ADMIN_USER = CONFIG.get('reddwarf_proxy_admin_user', 'admin')
|
||||||
|
PROXY_ADMIN_PASS = CONFIG.get('reddwarf_proxy_admin_pass',
|
||||||
|
'3de4922d8b6ac5a1aad9')
|
||||||
|
PROXY_ADMIN_TENANT_NAME = CONFIG.get(
|
||||||
|
'reddwarf_proxy_admin_tenant_name',
|
||||||
|
'admin')
|
||||||
|
PROXY_AUTH_URL = CONFIG.get('reddwarf_auth_url',
|
||||||
|
'http://0.0.0.0:5000/v2.0')
|
||||||
|
REGION_NAME = CONFIG.get('nova_region_name', 'RegionOne')
|
||||||
|
SERVICE_TYPE = CONFIG.get('nova_service_type', 'compute')
|
||||||
|
SERVICE_NAME = CONFIG.get('nova_service_name', 'Compute Service')
|
||||||
|
|
||||||
|
#TODO(cp16net) need to fix this proxy_tenant_id
|
||||||
|
client = Client(PROXY_ADMIN_USER, PROXY_ADMIN_PASS,
|
||||||
|
PROXY_ADMIN_TENANT_NAME, PROXY_AUTH_URL,
|
||||||
|
proxy_tenant_id="reddwarf",
|
||||||
|
proxy_token=context.auth_tok,
|
||||||
|
region_name=REGION_NAME,
|
||||||
|
service_type=SERVICE_TYPE,
|
||||||
|
service_name=SERVICE_NAME)
|
||||||
|
client.authenticate()
|
||||||
|
return client
|
||||||
|
|
||||||
|
def _data_item(self, data_object):
|
||||||
|
data_fields = self._data_fields + self._auto_generated_attrs
|
||||||
|
return dict([(field, getattr(data_object, field))
|
||||||
|
for field in data_fields])
|
||||||
|
|
||||||
|
# data magic that will allow for a list of _data_object or a single item
|
||||||
|
# if the object is a list, it will turn it into a list of hash's again
|
||||||
|
def data(self, **options):
|
||||||
|
if self._data_object is None:
|
||||||
|
raise LookupError("data object is None")
|
||||||
|
if isinstance(self._data_object, list):
|
||||||
|
return [self._data_item(item) for item in self._data_object]
|
||||||
|
else:
|
||||||
|
return self._data_item(self._data_object)
|
@ -21,7 +21,6 @@ from sqlalchemy import create_engine
|
|||||||
from sqlalchemy import MetaData
|
from sqlalchemy import MetaData
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
||||||
from reddwarf import instance
|
|
||||||
from reddwarf.common import config
|
from reddwarf.common import config
|
||||||
from reddwarf.db.sqlalchemy import mappers
|
from reddwarf.db.sqlalchemy import mappers
|
||||||
|
|
||||||
@ -33,6 +32,7 @@ LOG = logging.getLogger('reddwarf.db.sqlalchemy.session')
|
|||||||
|
|
||||||
|
|
||||||
def configure_db(options, models_mapper=None):
|
def configure_db(options, models_mapper=None):
|
||||||
|
from reddwarf.instance import models
|
||||||
configure_sqlalchemy_log(options)
|
configure_sqlalchemy_log(options)
|
||||||
global _ENGINE
|
global _ENGINE
|
||||||
if not _ENGINE:
|
if not _ENGINE:
|
||||||
@ -40,7 +40,7 @@ def configure_db(options, models_mapper=None):
|
|||||||
if models_mapper:
|
if models_mapper:
|
||||||
models_mapper.map(_ENGINE)
|
models_mapper.map(_ENGINE)
|
||||||
else:
|
else:
|
||||||
mappers.map(_ENGINE, instance.models.persisted_models())
|
mappers.map(_ENGINE, models.persisted_models())
|
||||||
|
|
||||||
|
|
||||||
def configure_sqlalchemy_log(options):
|
def configure_sqlalchemy_log(options):
|
||||||
|
@ -26,99 +26,15 @@ from reddwarf.common import config
|
|||||||
from reddwarf.common import exception as rd_exceptions
|
from reddwarf.common import exception as rd_exceptions
|
||||||
from reddwarf.common import utils
|
from reddwarf.common import utils
|
||||||
from novaclient.v1_1.client import Client
|
from novaclient.v1_1.client import Client
|
||||||
|
from reddwarf.common.models import ModelBase
|
||||||
from novaclient import exceptions as nova_exceptions
|
from novaclient import exceptions as nova_exceptions
|
||||||
|
from reddwarf.common.models import NovaRemoteModelBase
|
||||||
|
|
||||||
CONFIG = config.Config
|
CONFIG = config.Config
|
||||||
LOG = logging.getLogger('reddwarf.database.models')
|
LOG = logging.getLogger('reddwarf.database.models')
|
||||||
|
|
||||||
|
|
||||||
class ModelBase(object):
|
class Instance(NovaRemoteModelBase):
|
||||||
|
|
||||||
_data_fields = []
|
|
||||||
_auto_generated_attrs = []
|
|
||||||
|
|
||||||
def _validate(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def data(self, **options):
|
|
||||||
data_fields = self._data_fields + self._auto_generated_attrs
|
|
||||||
return dict([(field, self[field]) for field in data_fields])
|
|
||||||
|
|
||||||
def is_valid(self):
|
|
||||||
self.errors = {}
|
|
||||||
# self._validate_columns_type()
|
|
||||||
# self._before_validate()
|
|
||||||
# self._validate()
|
|
||||||
return self.errors == {}
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
setattr(self, key, value)
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
return getattr(self, key)
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
if not hasattr(other, 'id'):
|
|
||||||
return False
|
|
||||||
return type(other) == type(self) and other.id == self.id
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
return not self == other
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
return self.id.__hash__()
|
|
||||||
|
|
||||||
|
|
||||||
class RemoteModelBase(ModelBase):
|
|
||||||
|
|
||||||
# This should be set by the remote model during init time
|
|
||||||
# The data() method will be using this
|
|
||||||
_data_object = None
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_client(cls, context):
|
|
||||||
# Quite annoying but due to a paste config loading bug.
|
|
||||||
# TODO(hub-cap): talk to the openstack-common people about this
|
|
||||||
PROXY_ADMIN_USER = CONFIG.get('reddwarf_proxy_admin_user', 'admin')
|
|
||||||
PROXY_ADMIN_PASS = CONFIG.get('reddwarf_proxy_admin_pass',
|
|
||||||
'3de4922d8b6ac5a1aad9')
|
|
||||||
PROXY_ADMIN_TENANT_NAME = CONFIG.get(
|
|
||||||
'reddwarf_proxy_admin_tenant_name',
|
|
||||||
'admin')
|
|
||||||
PROXY_AUTH_URL = CONFIG.get('reddwarf_auth_url',
|
|
||||||
'http://0.0.0.0:5000/v2.0')
|
|
||||||
REGION_NAME = CONFIG.get('nova_region_name', 'RegionOne')
|
|
||||||
SERVICE_TYPE = CONFIG.get('nova_service_type', 'compute')
|
|
||||||
SERVICE_NAME = CONFIG.get('nova_service_name', 'Compute Service')
|
|
||||||
|
|
||||||
#TODO(cp16net) need to fix this proxy_tenant_id
|
|
||||||
client = Client(PROXY_ADMIN_USER, PROXY_ADMIN_PASS,
|
|
||||||
PROXY_ADMIN_TENANT_NAME, PROXY_AUTH_URL,
|
|
||||||
proxy_tenant_id='reddwarf',
|
|
||||||
proxy_token=context.auth_tok,
|
|
||||||
region_name=REGION_NAME,
|
|
||||||
service_type=SERVICE_TYPE,
|
|
||||||
service_name=SERVICE_NAME)
|
|
||||||
client.authenticate()
|
|
||||||
return client
|
|
||||||
|
|
||||||
def data_item(self, data_object):
|
|
||||||
data_fields = self._data_fields + self._auto_generated_attrs
|
|
||||||
return dict([(field, getattr(data_object, field))
|
|
||||||
for field in data_fields])
|
|
||||||
|
|
||||||
# data magic that will allow for a list of _data_object or a single item
|
|
||||||
# if the object is a list, it will turn it into a list of hash's again
|
|
||||||
def data(self, **options):
|
|
||||||
if self._data_object is None:
|
|
||||||
raise LookupError("data object is None")
|
|
||||||
if isinstance(self._data_object, list):
|
|
||||||
return [self.data_item(item) for item in self._data_object]
|
|
||||||
else:
|
|
||||||
return self.data_item(self._data_object)
|
|
||||||
|
|
||||||
|
|
||||||
class Instance(RemoteModelBase):
|
|
||||||
|
|
||||||
_data_fields = ['name', 'status', 'id', 'created', 'updated',
|
_data_fields = ['name', 'status', 'id', 'created', 'updated',
|
||||||
'flavor', 'links', 'addresses']
|
'flavor', 'links', 'addresses']
|
||||||
|
@ -138,7 +138,6 @@ class InstanceController(BaseController):
|
|||||||
image_id,
|
image_id,
|
||||||
body).data()
|
body).data()
|
||||||
|
|
||||||
|
|
||||||
# Now wait for the response from the create to do additional work
|
# Now wait for the response from the create to do additional work
|
||||||
#TODO(cp16net): need to set the return code correctly
|
#TODO(cp16net): need to set the return code correctly
|
||||||
return wsgi.Result(views.InstanceView(server).data(), 201)
|
return wsgi.Result(views.InstanceView(server).data(), 201)
|
||||||
|
@ -63,8 +63,9 @@ class TestInstance(tests.BaseTest):
|
|||||||
servers = self.mock.CreateMock(novaclient.v1_1.servers.ServerManager)
|
servers = self.mock.CreateMock(novaclient.v1_1.servers.ServerManager)
|
||||||
servers.get(mox.IgnoreArg()).AndReturn(self.FAKE_SERVER)
|
servers.get(mox.IgnoreArg()).AndReturn(self.FAKE_SERVER)
|
||||||
client.servers = servers
|
client.servers = servers
|
||||||
self.mock.StubOutWithMock(models.RemoteModelBase, 'get_client')
|
self.mock.StubOutWithMock(models.NovaRemoteModelBase, 'get_client')
|
||||||
models.RemoteModelBase.get_client(mox.IgnoreArg()).AndReturn(client)
|
models.NovaRemoteModelBase.get_client(mox.IgnoreArg()). \
|
||||||
|
AndReturn(client)
|
||||||
self.mock.ReplayAll()
|
self.mock.ReplayAll()
|
||||||
|
|
||||||
def test_create_instance_data(self):
|
def test_create_instance_data(self):
|
||||||
|
@ -117,8 +117,9 @@ class TestInstanceController(ControllerTestBase):
|
|||||||
mox.IgnoreArg(),
|
mox.IgnoreArg(),
|
||||||
mox.IgnoreArg()).AndReturn(self.FAKE_SERVER)
|
mox.IgnoreArg()).AndReturn(self.FAKE_SERVER)
|
||||||
client.servers = servers
|
client.servers = servers
|
||||||
self.mock.StubOutWithMock(models.RemoteModelBase, 'get_client')
|
self.mock.StubOutWithMock(models.NovaRemoteModelBase, 'get_client')
|
||||||
models.RemoteModelBase.get_client(mox.IgnoreArg()).AndReturn(client)
|
models.NovaRemoteModelBase.get_client(mox.IgnoreArg()). \
|
||||||
|
AndReturn(client)
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.mock.StubOutWithMock(models.Instance, 'data')
|
self.mock.StubOutWithMock(models.Instance, 'data')
|
||||||
|
Loading…
Reference in New Issue
Block a user