[sqlalchemy-20] Use sqlalchemy.orm.DeclarativeBase

``declarative_base()`` is superseded by ``DeclarativeBase`` class.
More information in [1].

[1]https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html#step-one-orm-declarative-base-is-superseded-by-orm-declarativebase

Closes-Bug: #2051171
Change-Id: I5ddf9573572e52fe87bbfde9732c5af9ce398188
This commit is contained in:
Rodolfo Alonso Hernandez
2024-01-20 02:00:01 +00:00
parent c69701eb73
commit 7909696a90
3 changed files with 30 additions and 5 deletions

View File

@@ -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)

View File

@@ -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()

View File

@@ -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))