oslo.db/oslo_db/tests/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
..
__init__.py Remove oslo namespace package 2015-06-21 20:54:10 +00:00
test_enginefacade.py Remove implicit RequestContext decoration 2015-06-25 10:04:27 +00:00
test_exc_filters.py Switch from MySQL-python to PyMySQL 2015-06-18 15:42:23 +03:00
test_handle_error.py Move files out of the namespace package 2014-12-24 13:28:48 +02:00
test_migrate_cli.py Refactor database migration manager to use given engine 2015-01-27 19:12:16 +00:00
test_migration_common.py Sanity check after migration 2015-04-10 15:25:56 +03:00
test_migrations.py Organize provisioning to use testresources 2015-02-04 12:49:01 +02:00
test_models.py Fix sqlalchemy.ModelBase.__contains__() behaviour 2015-06-26 19:02:53 +03:00
test_options.py Update Oslo imports to remove namespace package 2015-01-21 18:23:56 -05:00
test_provision.py Remove oslo namespace package 2015-06-21 20:54:10 +00:00
test_sqlalchemy.py Switch from MySQL-python to PyMySQL 2015-06-18 15:42:23 +03:00
test_update_match.py Implement generic update-on-match feature 2015-03-05 14:06:59 +00:00
test_utils.py Switch from MySQL-python to PyMySQL 2015-06-18 15:42:23 +03:00