oslo.db/oslo_db/sqlalchemy
Victor Stinner 2e79681670 Fix sqlalchemy.ModelBase.__contains__() behaviour
Currently, sqlalchemy.ModelBase.__contains__() catches any exception,
and by doing that, it hides real bugs. For example, a Nova unit test
raises the following error, but __contains__() simply returns False:

    sqlalchemy.orm.exc.DetachedInstanceError: Parent instance
    <InstanceExtra at 0x7fea635bc5f8> is not bound to a Session;
    deferred load operation of attribute 'pci_requests' cannot proceed

On Python 3, hasattr() calls getattr(): it returns True if getattr()
succeeds, False if getattr() raises an AttributeError, or passes
through the exception, if getattr() failed for a different reason.

On Python 2, hasattr() also calls getattr(), but it catches *any*
exception.

This change replaces hasattr() with getattr(), and it only catches
AttributeError as Python 3, so passes through sqlalchemy exceptions.

Add an unit test to test the new behaviour.

Closes-Bug: #1469225

Change-Id: If9c3ccc03f1dc9746936b0b83ea132508491e577
2015-06-26 19:02:53 +03:00
..
compat Remove pre-SQLAlchemy-0.9.7 compat utilities 2015-04-28 10:56:05 -04:00
migration_cli Refactor database migration manager to use given engine 2015-01-27 19:12:16 +00:00
__init__.py Move files out of the namespace package 2014-12-24 13:28:48 +02:00
enginefacade.py Remove implicit RequestContext decoration 2015-06-25 10:04:27 +00:00
engines.py Implement new oslo.db.sqlalchemy.enginefacade module 2015-06-04 11:43:39 -04:00
exc_filters.py Merge "exc_filters: support for ForeignKey error on delete" 2015-04-10 13:58:09 +00:00
migration.py Sanity check after migration 2015-04-10 15:25:56 +03:00
models.py Fix sqlalchemy.ModelBase.__contains__() behaviour 2015-06-26 19:02:53 +03:00
orm.py Implement new oslo.db.sqlalchemy.enginefacade module 2015-06-04 11:43:39 -04:00
provision.py Switch from MySQL-python to PyMySQL 2015-06-18 15:42:23 +03:00
session.py Drop use of 'oslo' namespace package 2015-06-18 22:18:36 +00:00
test_base.py Drop use of 'oslo' namespace package 2015-06-18 22:18:36 +00:00
test_migrations.py Organize provisioning to use testresources 2015-02-04 12:49:01 +02:00
update_match.py Implement generic update-on-match feature 2015-03-05 14:06:59 +00:00
utils.py Remove oslo namespace package 2015-06-21 20:54:10 +00:00