~ubuntu-branches/ubuntu/wily/keystone/wily

« back to all changes in this revision

Viewing changes to keystone/common/sql/core.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short, Chuck Short, James Page, Adam Gandelman
  • Date: 2013-09-09 18:02:41 UTC
  • mfrom: (1.1.36)
  • Revision ID: package-import@ubuntu.com-20130909180241-5pizm6rcauhg4x93
Tags: 1:2013.2~b3-0ubuntu1
[ Chuck Short ]
* New upstream release. 
* debian/control: Add python-oslo.sphinx as a build dependency.
* debian/control: Add python-babel as a build dependency.
* debian/control: Add python-dogpile.cache as a build dependency.
* debian/control: Add python-oauth2 as a build dependency. 
* debian/patches/sql_connection.patch: Refreshed

[ James Page ]
* d/patches/fix-ubuntu-tests.patch: Fixup for new tests location.
* d/patches/ubuntu-test-overrides.patch: Override testing defaults
  using patches.
* d/rules: Rework for patching approach for test_overrides.conf.
* d/tests/test_overrides.conf: Dropped - no longer required.
* d/control: Add python-netaddr to BD's.

[ Adam Gandelman ]
* debian/control: Add python-testtools to Build-Depends.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import sqlalchemy.pool
27
27
from sqlalchemy import types as sql_types
28
28
 
29
 
from keystone.common import logging
30
29
from keystone import config
31
30
from keystone import exception
 
31
from keystone.openstack.common.db.sqlalchemy import models
32
32
from keystone.openstack.common import jsonutils
 
33
from keystone.openstack.common import log as logging
33
34
 
34
35
 
35
36
LOG = logging.getLogger(__name__)
45
46
 
46
47
# For exporting to other modules
47
48
Column = sql.Column
 
49
Index = sql.Index
48
50
String = sql.String
49
51
ForeignKey = sql.ForeignKey
50
52
DateTime = sql.DateTime
54
56
Boolean = sql.Boolean
55
57
Text = sql.Text
56
58
UniqueConstraint = sql.UniqueConstraint
 
59
relationship = sql.orm.relationship
 
60
joinedload = sql.orm.joinedload
57
61
 
58
62
 
59
63
def initialize_decorator(init):
146
150
        return jsonutils.loads(value)
147
151
 
148
152
 
149
 
class DictBase(object):
 
153
class DictBase(models.ModelBase):
150
154
    attributes = []
151
155
 
152
156
    @classmethod
175
179
 
176
180
        return d
177
181
 
178
 
    def __setitem__(self, key, value):
179
 
        setattr(self, key, value)
180
 
 
181
182
    def __getitem__(self, key):
 
183
        if key in self.extra:
 
184
            return self.extra[key]
182
185
        return getattr(self, key)
183
186
 
184
 
    def get(self, key, default=None):
185
 
        return getattr(self, key, default)
186
 
 
187
 
    def __iter__(self):
188
 
        self._i = iter(sqlalchemy.orm.object_mapper(self).columns)
189
 
        return self
190
 
 
191
 
    def next(self):
192
 
        n = self._i.next().name
193
 
        return n
194
 
 
195
 
    def update(self, values):
196
 
        """Make the model object behave like a dict."""
197
 
        for k, v in values.iteritems():
198
 
            setattr(self, k, v)
199
 
 
200
 
    def iteritems(self):
201
 
        """Make the model object behave like a dict.
202
 
 
203
 
        Includes attributes from joins.
204
 
 
205
 
        """
206
 
        return dict([(k, getattr(self, k)) for k in self])
207
 
        #local = dict(self)
208
 
        #joined = dict([(k, v) for k, v in self.__dict__.iteritems()
209
 
        #               if not k[0] == '_'])
210
 
        #local.update(joined)
211
 
        #return local.iteritems()
212
 
 
213
187
 
214
188
def mysql_on_checkout(dbapi_conn, connection_rec, connection_proxy):
215
189
    """Ensures that MySQL connections checked out of the pool are alive.
243
217
 
244
218
    def get_session(self, autocommit=True, expire_on_commit=False):
245
219
        """Return a SQLAlchemy session."""
246
 
        self._engine = self._engine or self.get_engine()
247
 
        self._sessionmaker = self._sessionmaker or self.get_sessionmaker(
248
 
            self._engine)
 
220
        if not self._engine:
 
221
            self._engine = self.get_engine()
 
222
            self._sessionmaker = self.get_sessionmaker(self._engine)
 
223
            register_global_engine_callback(self.clear_engine)
249
224
        return self._sessionmaker(autocommit=autocommit,
250
225
                                  expire_on_commit=expire_on_commit)
251
226
 
300
275
            autocommit=autocommit,
301
276
            expire_on_commit=expire_on_commit)
302
277
 
 
278
    def clear_engine(self):
 
279
        self._engine = None
 
280
        self._sessionmaker = None
 
281
 
303
282
 
304
283
def handle_conflicts(type='object'):
305
284
    """Converts IntegrityError into HTTP 409 Conflict."""