diff options
author | Eric Windisch <eric@cloudscaling.com> | 2013-01-17 15:38:02 -0500 |
---|---|---|
committer | Mark McLoughlin <markmc@redhat.com> | 2013-02-05 10:13:04 +0000 |
commit | cd0c765ced2823c05b16126d6ba6a823bb66fe7d (patch) | |
tree | 31b3e5535d39db7afaefa12a89d74b68b7885ced /nova/db/sqlalchemy/models.py | |
parent | 47bbf12a6c9705e5abca29a1d44b753c8506505d (diff) | |
download | nova-cd0c765ced2823c05b16126d6ba6a823bb66fe7d.tar.gz nova-cd0c765ced2823c05b16126d6ba6a823bb66fe7d.tar.xz nova-cd0c765ced2823c05b16126d6ba6a823bb66fe7d.zip |
Use oslo database code
Bring in the new database code from oslo.
Uses get_session() from oslo as well as changing NovaBase to derive from
a common class.
Remove test_sqlalchemy.py now that this code is test in oslo.
Implements blueprint db-common.
Change-Id: I090754981c871250dd981cbbe1a08e7181440120
Diffstat (limited to 'nova/db/sqlalchemy/models.py')
-rw-r--r-- | nova/db/sqlalchemy/models.py | 72 |
1 files changed, 3 insertions, 69 deletions
diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py index b4c680ac0..78629e6c9 100644 --- a/nova/db/sqlalchemy/models.py +++ b/nova/db/sqlalchemy/models.py @@ -26,9 +26,9 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import ForeignKey, DateTime, Boolean, Text, Float from sqlalchemy.orm import relationship, backref, object_mapper -from nova.db.sqlalchemy.session import get_session from nova.db.sqlalchemy import types from nova.openstack.common import cfg +from nova.openstack.common.db.sqlalchemy import models from nova.openstack.common import timeutils @@ -36,74 +36,8 @@ CONF = cfg.CONF BASE = declarative_base() -class NovaBase(object): - """Base class for Nova Models.""" - __table_initialized__ = False - created_at = Column(DateTime, default=timeutils.utcnow) - updated_at = Column(DateTime, onupdate=timeutils.utcnow) - deleted_at = Column(DateTime) - deleted = Column(Integer, default=0) - metadata = None - - def save(self, session=None): - """Save this object.""" - if not session: - session = get_session() - # NOTE(boris-42): This part of code should be look like: - # sesssion.add(self) - # session.flush() - # But there is a bug in sqlalchemy and eventlet that - # raises NoneType exception if there is no running - # transaction and rollback is called. As long as - # sqlalchemy has this bug we have to create transaction - # explicity. - with session.begin(subtransactions=True): - session.add(self) - session.flush() - - def soft_delete(self, session=None): - """Mark this object as deleted.""" - self.deleted = self.id - self.deleted_at = timeutils.utcnow() - self.save(session=session) - - def __setitem__(self, key, value): - setattr(self, key, value) - - def __getitem__(self, key): - return getattr(self, key) - - def get(self, key, default=None): - return getattr(self, key, default) - - def __iter__(self): - columns = dict(object_mapper(self).columns).keys() - # NOTE(russellb): Allow models to specify other keys that can be looked - # up, beyond the actual db columns. An example would be the 'name' - # property for an Instance. - if hasattr(self, '_extra_keys'): - columns.extend(self._extra_keys()) - self._i = iter(columns) - return self - - def next(self): - n = self._i.next() - return n, getattr(self, n) - - def update(self, values): - """Make the model object behave like a dict.""" - for k, v in values.iteritems(): - setattr(self, k, v) - - def iteritems(self): - """Make the model object behave like a dict. - - Includes attributes from joins.""" - local = dict(self) - joined = dict([(k, v) for k, v in self.__dict__.iteritems() - if not k[0] == '_']) - local.update(joined) - return local.iteritems() +class NovaBase(models.SoftDeleteMixin, models.ModelBase): + pass class Service(BASE, NovaBase): |