from ... import Unicode
from ... import UnicodeText
from ... import util
-from ...ext.declarative import declarative_base
+from ...orm import declarative_base
from ...orm import Session
from ...util import u
#
r"Calling the mapper\(\) function directly outside of a "
"declarative registry",
- r"The ``declarative_base\(\)`` function is now available ",
- r"The ``has_inherited_table\(\)`` function is now available",
- r"The ``bind`` argument to declarative_base is deprecated and will "
- "be removed in SQLAlchemy 2.0.",
#
# ORM Query
#
from sqlalchemy.orm import clear_mappers
from sqlalchemy.orm import configure_mappers
from sqlalchemy.orm import create_session
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import join as orm_join
from sqlalchemy.orm import joinedload
from sqlalchemy.orm import Load
@testing.provide_metadata
def test_optimized_get(self):
- from sqlalchemy.ext.declarative import declarative_base
-
Base = declarative_base(metadata=self.metadata)
class Employee(Base):
from sqlalchemy.dialects.postgresql import TSRANGE
from sqlalchemy.dialects.postgresql import TSTZRANGE
from sqlalchemy.exc import CompileError
-from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import Session
from sqlalchemy.sql import operators
from sqlalchemy.sql import sqltypes
import sqlalchemy as sa
+from sqlalchemy import inspect
+from sqlalchemy.ext import declarative as legacy_decl
from sqlalchemy.ext.declarative import instrument_declarative
from sqlalchemy.orm import Mapper
+from sqlalchemy.testing import eq_
from sqlalchemy.testing import expect_deprecated_20
from sqlalchemy.testing import fixtures
from sqlalchemy.testing import is_
+from sqlalchemy.testing import is_false
from sqlalchemy.testing import is_true
mapper = sa.inspect(Foo)
is_true(isinstance(mapper, Mapper))
is_(mapper.class_, Foo)
+
+
+class DeprecatedImportsTest(fixtures.TestBase):
+ def _expect_warning(self, name):
+ return expect_deprecated_20(
+ r"The ``%s\(\)`` function is now available as "
+ r"sqlalchemy.orm.%s\(\)" % (name, name)
+ )
+
+ def test_declarative_base(self):
+ with self._expect_warning("declarative_base"):
+ Base = legacy_decl.declarative_base()
+
+ class Foo(Base):
+ __tablename__ = "foo"
+ id = sa.Column(sa.Integer, primary_key=True)
+
+ assert inspect(Foo).mapper
+
+ def test_as_declarative(self):
+ with self._expect_warning("as_declarative"):
+
+ @legacy_decl.as_declarative()
+ class Base(object):
+ pass
+
+ class Foo(Base):
+ __tablename__ = "foo"
+ id = sa.Column(sa.Integer, primary_key=True)
+
+ assert inspect(Foo).mapper
+
+ def test_has_inherited_table(self, registry):
+ @registry.mapped
+ class Foo(object):
+ __tablename__ = "foo"
+ id = sa.Column(sa.Integer, primary_key=True)
+
+ @registry.mapped
+ class Bar(Foo):
+ __tablename__ = "bar"
+ id = sa.Column(sa.ForeignKey("foo.id"), primary_key=True)
+
+ with self._expect_warning("has_inherited_table"):
+ is_true(legacy_decl.has_inherited_table(Bar))
+
+ with self._expect_warning("has_inherited_table"):
+ is_false(legacy_decl.has_inherited_table(Foo))
+
+ def test_synonym_for(self, registry):
+ with self._expect_warning("synonym_for"):
+
+ @registry.mapped
+ class Foo(object):
+ __tablename__ = "foo"
+ id = sa.Column(sa.Integer, primary_key=True)
+
+ @legacy_decl.synonym_for("id")
+ @property
+ def id_prop(self):
+ return self.id
+
+ f1 = Foo(id=5)
+ eq_(f1.id_prop, 5)
from sqlalchemy import select
from sqlalchemy import String
from sqlalchemy import testing
-from sqlalchemy.ext import declarative as decl
from sqlalchemy.ext.declarative import AbstractConcreteBase
from sqlalchemy.ext.declarative import ConcreteBase
-from sqlalchemy.ext.declarative import declared_attr
-from sqlalchemy.ext.declarative import has_inherited_table
from sqlalchemy.orm import clear_mappers
from sqlalchemy.orm import close_all_sessions
from sqlalchemy.orm import configure_mappers
+from sqlalchemy.orm import declarative_base
+from sqlalchemy.orm import declared_attr
from sqlalchemy.orm import exc as orm_exc
+from sqlalchemy.orm import has_inherited_table
from sqlalchemy.orm import polymorphic_union
from sqlalchemy.orm import relationship
from sqlalchemy.orm import Session
def setup_test(self):
global Base
- Base = decl.declarative_base(testing.db)
+ Base = declarative_base()
def teardown_test(self):
close_all_sessions()
}
Base.metadata.create_all(testing.db)
- sess = Session()
+ sess = fixture_session()
sess.add(Engineer(name="d"))
sess.commit()
__mapper_args__ = {"polymorphic_identity": "c", "concrete": True}
Base.metadata.create_all(testing.db)
- sess = Session()
- sess.add_all(
- [
- A(
- data="a1",
- collection=set(
- [
- B(data="a1b1", b_data="a1b1"),
- C(data="a1b2", c_data="a1c1"),
- B(data="a1b2", b_data="a1b2"),
- C(data="a1c2", c_data="a1c2"),
- ]
+ with Session(testing.db) as sess:
+ sess.add_all(
+ [
+ A(
+ data="a1",
+ collection=set(
+ [
+ B(data="a1b1", b_data="a1b1"),
+ C(data="a1b2", c_data="a1c1"),
+ B(data="a1b2", b_data="a1b2"),
+ C(data="a1c2", c_data="a1c2"),
+ ]
+ ),
),
- ),
- A(
- data="a2",
- collection=set(
- [
- B(data="a2b1", b_data="a2b1"),
- C(data="a2c1", c_data="a2c1"),
- B(data="a2b2", b_data="a2b2"),
- C(data="a2c2", c_data="a2c2"),
- ]
+ A(
+ data="a2",
+ collection=set(
+ [
+ B(data="a2b1", b_data="a2b1"),
+ C(data="a2c1", c_data="a2c1"),
+ B(data="a2b2", b_data="a2b2"),
+ C(data="a2c2", c_data="a2c2"),
+ ]
+ ),
),
- ),
- ]
- )
- sess.commit()
- sess.expunge_all()
+ ]
+ )
+ sess.commit()
- eq_(
- sess.query(A).filter_by(data="a2").all(),
- [
- A(
- data="a2",
- collection=set(
- [
- B(data="a2b1", b_data="a2b1"),
- B(data="a2b2", b_data="a2b2"),
- C(data="a2c1", c_data="a2c1"),
- C(data="a2c2", c_data="a2c2"),
- ]
- ),
- )
- ],
- )
+ with Session(testing.db) as sess:
+ eq_(
+ sess.query(A).filter_by(data="a2").all(),
+ [
+ A(
+ data="a2",
+ collection=set(
+ [
+ B(data="a2b1", b_data="a2b1"),
+ B(data="a2b2", b_data="a2b2"),
+ C(data="a2c1", c_data="a2c1"),
+ C(data="a2c2", c_data="a2c2"),
+ ]
+ ),
+ )
+ ],
+ )
self.assert_compile(
sess.query(A).join(A.collection),
from sqlalchemy.engine import default
from sqlalchemy.ext.associationproxy import _AssociationList
from sqlalchemy.ext.associationproxy import association_proxy
-from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import aliased
from sqlalchemy.orm import clear_mappers
from sqlalchemy.orm import collections
from sqlalchemy.orm import composite
from sqlalchemy.orm import configure_mappers
+from sqlalchemy.orm import declarative_base
+from sqlalchemy.orm import declared_attr
from sqlalchemy.orm import mapper
from sqlalchemy.orm import relationship
from sqlalchemy.orm import Session
from sqlalchemy import String
from sqlalchemy import testing
from sqlalchemy.ext import hybrid
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import aliased
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import Session
from sqlalchemy.orm import synonym
from sqlalchemy import Integer
from sqlalchemy import testing
from sqlalchemy import Text
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.indexable import index_property
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import Session
from sqlalchemy.sql.sqltypes import ARRAY
from sqlalchemy.sql.sqltypes import JSON
from sqlalchemy.orm import attributes
from sqlalchemy.orm import column_property
from sqlalchemy.orm import composite
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import mapper
from sqlalchemy.orm.instrumentation import ClassManager
from sqlalchemy.orm.mapper import Mapper
@classmethod
def define_tables(cls, metadata):
import json
- from sqlalchemy.ext.declarative import declarative_base
class JSONEncodedDict(TypeDecorator):
impl = VARCHAR(50)
@classmethod
def define_tables(cls, metadata):
- from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.sqltypes import ARRAY
MutableList = cls._type_fixture()
global Base
if self.base_style == "dynamic":
- Base = declarative_base(testing.db)
+ Base = declarative_base()
elif self.base_style == "explicit":
- mapper_registry = registry(_bind=testing.db)
+ mapper_registry = registry()
class Base(with_metaclass(DeclarativeMeta)):
__abstract__ = True
("dynamic",), ("explicit",), argnames="base_style", id_="s"
)
class DeclarativeTest(DeclarativeTestBase):
+ def test_unbound_declarative_base(self):
+ Base = declarative_base()
+
+ class User(Base):
+ __tablename__ = "user"
+ id = Column(Integer, primary_key=True)
+
+ s = Session()
+
+ with testing.expect_raises(exc.UnboundExecutionError):
+ s.get_bind(User)
+
+ def test_unbound_cls_registry(self):
+ reg = registry()
+
+ Base = reg.generate_base()
+
+ class User(Base):
+ __tablename__ = "user"
+ id = Column(Integer, primary_key=True)
+
+ s = Session()
+
+ with testing.expect_raises(exc.UnboundExecutionError):
+ s.get_bind(User)
+
def test_basic(self):
class User(Base, fixtures.ComparableEntity):
__tablename__ = "users"
def test_shared_class_registry(self):
reg = {}
- Base1 = declarative_base(testing.db, class_registry=reg)
- Base2 = declarative_base(testing.db, class_registry=reg)
+ Base1 = declarative_base(class_registry=reg)
+ Base2 = declarative_base(class_registry=reg)
class A(Base1):
__tablename__ = "a"
--- /dev/null
+from sqlalchemy import Integer
+from sqlalchemy import testing
+from sqlalchemy.orm import declarative_base
+from sqlalchemy.orm import registry
+from sqlalchemy.orm import Session
+from sqlalchemy.testing import fixtures
+from sqlalchemy.testing import is_
+from sqlalchemy.testing.schema import Column
+
+
+class BoundMetadataDeclarativeTest(fixtures.MappedTest):
+ def test_bound_declarative_base(self):
+ with testing.expect_deprecated(
+ "The ``bind`` argument to declarative_base"
+ ):
+ Base = declarative_base(testing.db)
+
+ class User(Base):
+ __tablename__ = "user"
+ id = Column(Integer, primary_key=True)
+
+ s = Session()
+
+ is_(s.get_bind(User), testing.db)
+
+ def test_bound_cls_registry_base(self):
+ reg = registry(_bind=testing.db)
+
+ Base = reg.generate_base()
+
+ class User(Base):
+ __tablename__ = "user"
+ id = Column(Integer, primary_key=True)
+
+ s = Session()
+
+ is_(s.get_bind(User), testing.db)
+
+ def test_bound_cls_registry_decorated(self):
+ reg = registry(_bind=testing.db)
+
+ @reg.mapped
+ class User(object):
+ __tablename__ = "user"
+ id = Column(Integer, primary_key=True)
+
+ s = Session()
+
+ is_(s.get_bind(User), testing.db)
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import testing
-from sqlalchemy.ext import declarative as decl
-from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import class_mapper
from sqlalchemy.orm import clear_mappers
from sqlalchemy.orm import close_all_sessions
from sqlalchemy.orm import configure_mappers
+from sqlalchemy.orm import declarative_base
+from sqlalchemy.orm import declared_attr
from sqlalchemy.orm import deferred
from sqlalchemy.orm import mapper
from sqlalchemy.orm import relationship
class DeclarativeTestBase(fixtures.TestBase, testing.AssertsExecutionResults):
def setup_test(self):
global Base
- Base = decl.declarative_base(testing.db)
+ Base = declarative_base()
def teardown_test(self):
close_all_sessions()
from sqlalchemy import table
from sqlalchemy import testing
from sqlalchemy import util
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import attributes
from sqlalchemy.orm import class_mapper
from sqlalchemy.orm import clear_mappers
from sqlalchemy.orm import column_property
from sqlalchemy.orm import composite
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import deferred
from sqlalchemy.orm import exc as orm_exc
from sqlalchemy.orm import joinedload
from sqlalchemy import text
from sqlalchemy import util
from sqlalchemy.orm import attributes
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import instrumentation
from sqlalchemy.orm import mapper
from sqlalchemy.orm import relationship
"""test that uncompiled attribute usage works with
column_mapped_collection"""
- from sqlalchemy.ext.declarative import declarative_base
-
BaseObject = declarative_base()
class Foo(BaseObject):
from sqlalchemy import func
from sqlalchemy import Integer
from sqlalchemy import String
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import aliased
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import descriptor_props
from sqlalchemy.orm.interfaces import PropComparator
from sqlalchemy.orm.properties import ColumnProperty
from sqlalchemy import String
from sqlalchemy import testing
from sqlalchemy import update
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import attributes
from sqlalchemy.orm import class_mapper
from sqlalchemy.orm import configure_mappers
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import deferred
from sqlalchemy.orm import events
from sqlalchemy.orm import EXT_SKIP
from sqlalchemy import union
from sqlalchemy import util
from sqlalchemy.engine import default
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import aliased
from sqlalchemy.orm import backref
from sqlalchemy.orm import clear_mappers
from sqlalchemy.orm import column_property
from sqlalchemy.orm import configure_mappers
from sqlalchemy.orm import contains_eager
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import joinedload
from sqlalchemy.orm import mapper
from sqlalchemy.orm import relationship
@testing.requires.pep520
def test_all_orm_descriptors_pep520_noinh(self):
- from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy.orm import declarative_base
Base = declarative_base()
@testing.requires.pep520
def test_all_orm_descriptors_pep520_onelevel_inh(self):
- from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy.orm import declarative_base
Base = declarative_base()
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import testing
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import backref
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import Session
from sqlalchemy.orm.attributes import instance_state
class DeannotateCorrectlyTest(fixtures.TestBase):
def test_pj_deannotates(self):
- from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy.orm import declarative_base
Base = declarative_base()
class JoinConditionErrorTest(fixtures.TestBase):
def test_clauseelement_pj(self):
- from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy.orm import declarative_base
Base = declarative_base()
assert_raises(sa.exc.ArgumentError, configure_mappers)
def test_clauseelement_pj_false(self):
- from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy.orm import declarative_base
Base = declarative_base()
assert_raises(sa.exc.ArgumentError, configure_mappers)
def test_invalid_string_args(self):
- from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy.orm import declarative_base
for argname, arg in [
("remote_side", ["c1.id"]),
from sqlalchemy import testing
from sqlalchemy import text
from sqlalchemy import util
-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import attributes
from sqlalchemy.orm import backref
from sqlalchemy.orm import clear_mappers
+from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import exc as orm_exc
from sqlalchemy.orm import mapper
from sqlalchemy.orm import relationship