diff --git a/neutron_lib/db/model_base.py b/neutron_lib/db/model_base.py index de70d6b86..06a7f79ef 100644 --- a/neutron_lib/db/model_base.py +++ b/neutron_lib/db/model_base.py @@ -110,4 +110,10 @@ class NeutronBaseV2(_NeutronBase): return cls.__name__.lower() + 's' -BASEV2 = declarative.declarative_base(cls=NeutronBaseV2) +try: + # SQLAlchemy 2.0 + class BASEV2(orm.DeclarativeBase, NeutronBaseV2): + pass +except AttributeError: + # SQLAlchemy < 2.0 + BASEV2 = declarative.declarative_base(cls=NeutronBaseV2) diff --git a/neutron_lib/tests/unit/db/test_standard_attr.py b/neutron_lib/tests/unit/db/test_standard_attr.py index 13a699e50..e6ad5ab82 100644 --- a/neutron_lib/tests/unit/db/test_standard_attr.py +++ b/neutron_lib/tests/unit/db/test_standard_attr.py @@ -15,6 +15,7 @@ import gc from sqlalchemy.ext import declarative +from sqlalchemy import orm import testtools from neutron_lib.db import standard_attr @@ -29,8 +30,17 @@ class StandardAttrTestCase(base.BaseTestCase): def _make_decl_base(self): # construct a new base so we don't interfere with the main # base used in the sql test fixtures - return declarative.declarative_base( - cls=standard_attr.model_base.NeutronBaseV2) + try: + # SQLAlchemy 2.0 + class BaseV2(orm.DeclarativeBase, + standard_attr.model_base.NeutronBaseV2): + pass + + return BaseV2 + except AttributeError: + # SQLAlchemy < 2.0 + return declarative.declarative_base( + cls=standard_attr.model_base.NeutronBaseV2) def test_standard_attr_resource_model_map(self): rs_map = standard_attr.get_standard_attr_resource_model_map() diff --git a/neutron_lib/tests/unit/db/test_utils.py b/neutron_lib/tests/unit/db/test_utils.py index 6d61c6a51..0c40c1d27 100644 --- a/neutron_lib/tests/unit/db/test_utils.py +++ b/neutron_lib/tests/unit/db/test_utils.py @@ -26,14 +26,23 @@ from neutron_lib import exceptions as n_exc from neutron_lib.tests import _base as base -class FakePort(declarative.declarative_base(cls=models.ModelBase)): +try: + # SQLAlchemy 2.0 + class ModelBaseV2(orm.DeclarativeBase, models.ModelBase): + pass +except AttributeError: + # SQLAlchemy < 2.0 + ModelBaseV2 = declarative.declarative_base(cls=models.ModelBase) + + +class FakePort(ModelBaseV2): __tablename__ = 'fakeports' port_id = sa.Column(sa.String(36), primary_key=True) name = sa.Column(sa.String(64)) status = sa.Column(sa.String(16), nullable=False) -class FakeRouter(declarative.declarative_base(cls=models.ModelBase)): +class FakeRouter(ModelBaseV2): __tablename__ = 'fakerouters' router_id = sa.Column(sa.String(36), primary_key=True) gw_port_id = sa.Column(sa.String(36), sa.ForeignKey(FakePort.port_id))