1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
import pytest
import sqlalchemy as sa
from sqlalchemy_utils import get_mapper
from sqlalchemy_utils.functions.orm import _get_query_compile_state
class TestGetMapper:
@pytest.fixture
def Building(self, Base):
class Building(Base):
__tablename__ = 'building'
id = sa.Column(sa.Integer, primary_key=True)
return Building
def test_table(self, Building):
assert get_mapper(Building.__table__) == sa.inspect(Building)
def test_declarative_class(self, Building):
assert (
get_mapper(Building) ==
sa.inspect(Building)
)
def test_declarative_object(self, Building):
assert (
get_mapper(Building()) ==
sa.inspect(Building)
)
def test_mapper(self, Building):
assert (
get_mapper(Building.__mapper__) ==
sa.inspect(Building)
)
def test_class_alias(self, Building):
assert (
get_mapper(sa.orm.aliased(Building)) ==
sa.inspect(Building)
)
def test_instrumented_attribute(self, Building):
assert (
get_mapper(Building.id) == sa.inspect(Building)
)
def test_table_alias(self, Building):
alias = sa.orm.aliased(Building.__table__)
assert (
get_mapper(alias) ==
sa.inspect(Building)
)
def test_column(self, Building):
assert (
get_mapper(Building.__table__.c.id) ==
sa.inspect(Building)
)
def test_column_of_an_alias(self, Building):
assert (
get_mapper(sa.orm.aliased(Building.__table__).c.id) ==
sa.inspect(Building)
)
class TestGetMapperWithQueryEntities:
@pytest.fixture
def Building(self, Base):
class Building(Base):
__tablename__ = 'building'
id = sa.Column(sa.Integer, primary_key=True)
return Building
@pytest.fixture
def init_models(self, Building):
pass
def test_mapper_entity_with_mapper(self, session, Building):
query = session.query(Building.__mapper__)
entity = _get_query_compile_state(query)._entities[0]
assert get_mapper(entity) == sa.inspect(Building)
def test_mapper_entity_with_class(self, session, Building):
query = session.query(Building)
entity = _get_query_compile_state(query)._entities[0]
assert get_mapper(entity) == sa.inspect(Building)
def test_column_entity(self, session, Building):
query = session.query(Building.id)
entity = _get_query_compile_state(query)._entities[0]
assert get_mapper(entity) == sa.inspect(Building)
class TestGetMapperWithMultipleMappersFound:
@pytest.fixture
def Building(self, Base):
class Building(Base):
__tablename__ = 'building'
id = sa.Column(sa.Integer, primary_key=True)
class BigBuilding(Building):
pass
return Building
def test_table(self, Building):
with pytest.raises(ValueError):
get_mapper(Building.__table__)
def test_table_alias(self, Building):
alias = sa.orm.aliased(Building.__table__)
with pytest.raises(ValueError):
get_mapper(alias)
class TestGetMapperForTableWithoutMapper:
@pytest.fixture
def building(self):
metadata = sa.MetaData()
return sa.Table('building', metadata)
def test_table(self, building):
with pytest.raises(ValueError):
get_mapper(building)
def test_table_alias(self, building):
alias = sa.orm.aliased(building)
with pytest.raises(ValueError):
get_mapper(alias)
|