SQLAlchemy 2.1.0b2__cp313-cp313t-win_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sqlalchemy/__init__.py +298 -0
- sqlalchemy/connectors/__init__.py +18 -0
- sqlalchemy/connectors/aioodbc.py +171 -0
- sqlalchemy/connectors/asyncio.py +476 -0
- sqlalchemy/connectors/pyodbc.py +250 -0
- sqlalchemy/dialects/__init__.py +62 -0
- sqlalchemy/dialects/_typing.py +30 -0
- sqlalchemy/dialects/mssql/__init__.py +89 -0
- sqlalchemy/dialects/mssql/aioodbc.py +63 -0
- sqlalchemy/dialects/mssql/base.py +4166 -0
- sqlalchemy/dialects/mssql/information_schema.py +285 -0
- sqlalchemy/dialects/mssql/json.py +140 -0
- sqlalchemy/dialects/mssql/mssqlpython.py +220 -0
- sqlalchemy/dialects/mssql/provision.py +196 -0
- sqlalchemy/dialects/mssql/pymssql.py +126 -0
- sqlalchemy/dialects/mssql/pyodbc.py +698 -0
- sqlalchemy/dialects/mysql/__init__.py +106 -0
- sqlalchemy/dialects/mysql/_mariadb_shim.py +312 -0
- sqlalchemy/dialects/mysql/aiomysql.py +226 -0
- sqlalchemy/dialects/mysql/asyncmy.py +214 -0
- sqlalchemy/dialects/mysql/base.py +3877 -0
- sqlalchemy/dialects/mysql/cymysql.py +106 -0
- sqlalchemy/dialects/mysql/dml.py +279 -0
- sqlalchemy/dialects/mysql/enumerated.py +277 -0
- sqlalchemy/dialects/mysql/expression.py +146 -0
- sqlalchemy/dialects/mysql/json.py +92 -0
- sqlalchemy/dialects/mysql/mariadb.py +67 -0
- sqlalchemy/dialects/mysql/mariadbconnector.py +330 -0
- sqlalchemy/dialects/mysql/mysqlconnector.py +296 -0
- sqlalchemy/dialects/mysql/mysqldb.py +312 -0
- sqlalchemy/dialects/mysql/provision.py +153 -0
- sqlalchemy/dialects/mysql/pymysql.py +157 -0
- sqlalchemy/dialects/mysql/pyodbc.py +156 -0
- sqlalchemy/dialects/mysql/reflection.py +724 -0
- sqlalchemy/dialects/mysql/reserved_words.py +570 -0
- sqlalchemy/dialects/mysql/types.py +845 -0
- sqlalchemy/dialects/oracle/__init__.py +85 -0
- sqlalchemy/dialects/oracle/base.py +3977 -0
- sqlalchemy/dialects/oracle/cx_oracle.py +1601 -0
- sqlalchemy/dialects/oracle/dictionary.py +507 -0
- sqlalchemy/dialects/oracle/json.py +158 -0
- sqlalchemy/dialects/oracle/oracledb.py +909 -0
- sqlalchemy/dialects/oracle/provision.py +288 -0
- sqlalchemy/dialects/oracle/types.py +367 -0
- sqlalchemy/dialects/oracle/vector.py +368 -0
- sqlalchemy/dialects/postgresql/__init__.py +171 -0
- sqlalchemy/dialects/postgresql/_psycopg_common.py +229 -0
- sqlalchemy/dialects/postgresql/array.py +534 -0
- sqlalchemy/dialects/postgresql/asyncpg.py +1323 -0
- sqlalchemy/dialects/postgresql/base.py +5789 -0
- sqlalchemy/dialects/postgresql/bitstring.py +327 -0
- sqlalchemy/dialects/postgresql/dml.py +360 -0
- sqlalchemy/dialects/postgresql/ext.py +593 -0
- sqlalchemy/dialects/postgresql/hstore.py +423 -0
- sqlalchemy/dialects/postgresql/json.py +408 -0
- sqlalchemy/dialects/postgresql/named_types.py +521 -0
- sqlalchemy/dialects/postgresql/operators.py +130 -0
- sqlalchemy/dialects/postgresql/pg8000.py +670 -0
- sqlalchemy/dialects/postgresql/pg_catalog.py +344 -0
- sqlalchemy/dialects/postgresql/provision.py +184 -0
- sqlalchemy/dialects/postgresql/psycopg.py +799 -0
- sqlalchemy/dialects/postgresql/psycopg2.py +860 -0
- sqlalchemy/dialects/postgresql/psycopg2cffi.py +61 -0
- sqlalchemy/dialects/postgresql/ranges.py +1002 -0
- sqlalchemy/dialects/postgresql/types.py +388 -0
- sqlalchemy/dialects/sqlite/__init__.py +57 -0
- sqlalchemy/dialects/sqlite/aiosqlite.py +321 -0
- sqlalchemy/dialects/sqlite/base.py +3063 -0
- sqlalchemy/dialects/sqlite/dml.py +279 -0
- sqlalchemy/dialects/sqlite/json.py +100 -0
- sqlalchemy/dialects/sqlite/provision.py +229 -0
- sqlalchemy/dialects/sqlite/pysqlcipher.py +161 -0
- sqlalchemy/dialects/sqlite/pysqlite.py +754 -0
- sqlalchemy/dialects/type_migration_guidelines.txt +145 -0
- sqlalchemy/engine/__init__.py +62 -0
- sqlalchemy/engine/_processors_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_processors_cy.py +92 -0
- sqlalchemy/engine/_result_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_result_cy.py +633 -0
- sqlalchemy/engine/_row_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_row_cy.py +232 -0
- sqlalchemy/engine/_util_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/engine/_util_cy.py +136 -0
- sqlalchemy/engine/base.py +3354 -0
- sqlalchemy/engine/characteristics.py +155 -0
- sqlalchemy/engine/create.py +877 -0
- sqlalchemy/engine/cursor.py +2421 -0
- sqlalchemy/engine/default.py +2402 -0
- sqlalchemy/engine/events.py +965 -0
- sqlalchemy/engine/interfaces.py +3495 -0
- sqlalchemy/engine/mock.py +134 -0
- sqlalchemy/engine/processors.py +82 -0
- sqlalchemy/engine/reflection.py +2100 -0
- sqlalchemy/engine/result.py +1966 -0
- sqlalchemy/engine/row.py +397 -0
- sqlalchemy/engine/strategies.py +16 -0
- sqlalchemy/engine/url.py +922 -0
- sqlalchemy/engine/util.py +156 -0
- sqlalchemy/event/__init__.py +26 -0
- sqlalchemy/event/api.py +220 -0
- sqlalchemy/event/attr.py +674 -0
- sqlalchemy/event/base.py +472 -0
- sqlalchemy/event/legacy.py +258 -0
- sqlalchemy/event/registry.py +390 -0
- sqlalchemy/events.py +17 -0
- sqlalchemy/exc.py +922 -0
- sqlalchemy/ext/__init__.py +11 -0
- sqlalchemy/ext/associationproxy.py +2072 -0
- sqlalchemy/ext/asyncio/__init__.py +29 -0
- sqlalchemy/ext/asyncio/base.py +281 -0
- sqlalchemy/ext/asyncio/engine.py +1487 -0
- sqlalchemy/ext/asyncio/exc.py +21 -0
- sqlalchemy/ext/asyncio/result.py +994 -0
- sqlalchemy/ext/asyncio/scoping.py +1679 -0
- sqlalchemy/ext/asyncio/session.py +2007 -0
- sqlalchemy/ext/automap.py +1701 -0
- sqlalchemy/ext/baked.py +559 -0
- sqlalchemy/ext/compiler.py +600 -0
- sqlalchemy/ext/declarative/__init__.py +65 -0
- sqlalchemy/ext/declarative/extensions.py +560 -0
- sqlalchemy/ext/horizontal_shard.py +481 -0
- sqlalchemy/ext/hybrid.py +1877 -0
- sqlalchemy/ext/indexable.py +364 -0
- sqlalchemy/ext/instrumentation.py +450 -0
- sqlalchemy/ext/mutable.py +1081 -0
- sqlalchemy/ext/orderinglist.py +439 -0
- sqlalchemy/ext/serializer.py +185 -0
- sqlalchemy/future/__init__.py +16 -0
- sqlalchemy/future/engine.py +15 -0
- sqlalchemy/inspection.py +174 -0
- sqlalchemy/log.py +283 -0
- sqlalchemy/orm/__init__.py +176 -0
- sqlalchemy/orm/_orm_constructors.py +2694 -0
- sqlalchemy/orm/_typing.py +179 -0
- sqlalchemy/orm/attributes.py +2868 -0
- sqlalchemy/orm/base.py +976 -0
- sqlalchemy/orm/bulk_persistence.py +2152 -0
- sqlalchemy/orm/clsregistry.py +582 -0
- sqlalchemy/orm/collections.py +1568 -0
- sqlalchemy/orm/context.py +3471 -0
- sqlalchemy/orm/decl_api.py +2280 -0
- sqlalchemy/orm/decl_base.py +2309 -0
- sqlalchemy/orm/dependency.py +1306 -0
- sqlalchemy/orm/descriptor_props.py +1183 -0
- sqlalchemy/orm/dynamic.py +307 -0
- sqlalchemy/orm/evaluator.py +379 -0
- sqlalchemy/orm/events.py +3386 -0
- sqlalchemy/orm/exc.py +237 -0
- sqlalchemy/orm/identity.py +302 -0
- sqlalchemy/orm/instrumentation.py +746 -0
- sqlalchemy/orm/interfaces.py +1589 -0
- sqlalchemy/orm/loading.py +1684 -0
- sqlalchemy/orm/mapped_collection.py +557 -0
- sqlalchemy/orm/mapper.py +4411 -0
- sqlalchemy/orm/path_registry.py +829 -0
- sqlalchemy/orm/persistence.py +1789 -0
- sqlalchemy/orm/properties.py +973 -0
- sqlalchemy/orm/query.py +3528 -0
- sqlalchemy/orm/relationships.py +3570 -0
- sqlalchemy/orm/scoping.py +2232 -0
- sqlalchemy/orm/session.py +5403 -0
- sqlalchemy/orm/state.py +1175 -0
- sqlalchemy/orm/state_changes.py +196 -0
- sqlalchemy/orm/strategies.py +3492 -0
- sqlalchemy/orm/strategy_options.py +2562 -0
- sqlalchemy/orm/sync.py +164 -0
- sqlalchemy/orm/unitofwork.py +798 -0
- sqlalchemy/orm/util.py +2438 -0
- sqlalchemy/orm/writeonly.py +694 -0
- sqlalchemy/pool/__init__.py +41 -0
- sqlalchemy/pool/base.py +1522 -0
- sqlalchemy/pool/events.py +375 -0
- sqlalchemy/pool/impl.py +582 -0
- sqlalchemy/py.typed +0 -0
- sqlalchemy/schema.py +74 -0
- sqlalchemy/sql/__init__.py +156 -0
- sqlalchemy/sql/_annotated_cols.py +397 -0
- sqlalchemy/sql/_dml_constructors.py +132 -0
- sqlalchemy/sql/_elements_constructors.py +2164 -0
- sqlalchemy/sql/_orm_types.py +20 -0
- sqlalchemy/sql/_selectable_constructors.py +840 -0
- sqlalchemy/sql/_typing.py +487 -0
- sqlalchemy/sql/_util_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/sql/_util_cy.py +127 -0
- sqlalchemy/sql/annotation.py +590 -0
- sqlalchemy/sql/base.py +2699 -0
- sqlalchemy/sql/cache_key.py +1066 -0
- sqlalchemy/sql/coercions.py +1373 -0
- sqlalchemy/sql/compiler.py +8327 -0
- sqlalchemy/sql/crud.py +1815 -0
- sqlalchemy/sql/ddl.py +1928 -0
- sqlalchemy/sql/default_comparator.py +654 -0
- sqlalchemy/sql/dml.py +1977 -0
- sqlalchemy/sql/elements.py +6033 -0
- sqlalchemy/sql/events.py +458 -0
- sqlalchemy/sql/expression.py +172 -0
- sqlalchemy/sql/functions.py +2305 -0
- sqlalchemy/sql/lambdas.py +1443 -0
- sqlalchemy/sql/naming.py +209 -0
- sqlalchemy/sql/operators.py +2897 -0
- sqlalchemy/sql/roles.py +332 -0
- sqlalchemy/sql/schema.py +6703 -0
- sqlalchemy/sql/selectable.py +7553 -0
- sqlalchemy/sql/sqltypes.py +4093 -0
- sqlalchemy/sql/traversals.py +1042 -0
- sqlalchemy/sql/type_api.py +2446 -0
- sqlalchemy/sql/util.py +1495 -0
- sqlalchemy/sql/visitors.py +1157 -0
- sqlalchemy/testing/__init__.py +96 -0
- sqlalchemy/testing/assertions.py +1007 -0
- sqlalchemy/testing/assertsql.py +519 -0
- sqlalchemy/testing/asyncio.py +128 -0
- sqlalchemy/testing/config.py +440 -0
- sqlalchemy/testing/engines.py +483 -0
- sqlalchemy/testing/entities.py +117 -0
- sqlalchemy/testing/exclusions.py +476 -0
- sqlalchemy/testing/fixtures/__init__.py +30 -0
- sqlalchemy/testing/fixtures/base.py +384 -0
- sqlalchemy/testing/fixtures/mypy.py +247 -0
- sqlalchemy/testing/fixtures/orm.py +227 -0
- sqlalchemy/testing/fixtures/sql.py +538 -0
- sqlalchemy/testing/pickleable.py +155 -0
- sqlalchemy/testing/plugin/__init__.py +6 -0
- sqlalchemy/testing/plugin/bootstrap.py +51 -0
- sqlalchemy/testing/plugin/plugin_base.py +828 -0
- sqlalchemy/testing/plugin/pytestplugin.py +892 -0
- sqlalchemy/testing/profiling.py +329 -0
- sqlalchemy/testing/provision.py +613 -0
- sqlalchemy/testing/requirements.py +1978 -0
- sqlalchemy/testing/schema.py +198 -0
- sqlalchemy/testing/suite/__init__.py +19 -0
- sqlalchemy/testing/suite/test_cte.py +237 -0
- sqlalchemy/testing/suite/test_ddl.py +420 -0
- sqlalchemy/testing/suite/test_dialect.py +776 -0
- sqlalchemy/testing/suite/test_insert.py +630 -0
- sqlalchemy/testing/suite/test_reflection.py +3557 -0
- sqlalchemy/testing/suite/test_results.py +660 -0
- sqlalchemy/testing/suite/test_rowcount.py +258 -0
- sqlalchemy/testing/suite/test_select.py +2112 -0
- sqlalchemy/testing/suite/test_sequence.py +317 -0
- sqlalchemy/testing/suite/test_table_via_select.py +686 -0
- sqlalchemy/testing/suite/test_types.py +2271 -0
- sqlalchemy/testing/suite/test_unicode_ddl.py +189 -0
- sqlalchemy/testing/suite/test_update_delete.py +139 -0
- sqlalchemy/testing/util.py +535 -0
- sqlalchemy/testing/warnings.py +52 -0
- sqlalchemy/types.py +76 -0
- sqlalchemy/util/__init__.py +158 -0
- sqlalchemy/util/_collections.py +688 -0
- sqlalchemy/util/_collections_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/util/_collections_cy.pxd +8 -0
- sqlalchemy/util/_collections_cy.py +516 -0
- sqlalchemy/util/_has_cython.py +46 -0
- sqlalchemy/util/_immutabledict_cy.cp313t-win_arm64.pyd +0 -0
- sqlalchemy/util/_immutabledict_cy.py +240 -0
- sqlalchemy/util/compat.py +299 -0
- sqlalchemy/util/concurrency.py +322 -0
- sqlalchemy/util/cython.py +79 -0
- sqlalchemy/util/deprecations.py +401 -0
- sqlalchemy/util/langhelpers.py +2320 -0
- sqlalchemy/util/preloaded.py +152 -0
- sqlalchemy/util/queue.py +304 -0
- sqlalchemy/util/tool_support.py +201 -0
- sqlalchemy/util/topological.py +120 -0
- sqlalchemy/util/typing.py +711 -0
- sqlalchemy-2.1.0b2.dist-info/METADATA +269 -0
- sqlalchemy-2.1.0b2.dist-info/RECORD +270 -0
- sqlalchemy-2.1.0b2.dist-info/WHEEL +5 -0
- sqlalchemy-2.1.0b2.dist-info/licenses/LICENSE +19 -0
- sqlalchemy-2.1.0b2.dist-info/top_level.txt +1 -0
sqlalchemy/orm/sync.py
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# orm/sync.py
|
|
2
|
+
# Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
|
|
3
|
+
# <see AUTHORS file>
|
|
4
|
+
#
|
|
5
|
+
# This module is part of SQLAlchemy and is released under
|
|
6
|
+
# the MIT License: https://www.opensource.org/licenses/mit-license.php
|
|
7
|
+
# mypy: allow-untyped-defs, allow-untyped-calls
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
"""private module containing functions used for copying data
|
|
11
|
+
between instances based on join conditions.
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from . import exc
|
|
18
|
+
from . import util as orm_util
|
|
19
|
+
from .base import PassiveFlag
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _populate(
|
|
23
|
+
source,
|
|
24
|
+
source_mapper,
|
|
25
|
+
dest,
|
|
26
|
+
dest_mapper,
|
|
27
|
+
synchronize_pairs,
|
|
28
|
+
uowcommit,
|
|
29
|
+
flag_cascaded_pks,
|
|
30
|
+
):
|
|
31
|
+
source_dict = source.dict
|
|
32
|
+
dest_dict = dest.dict
|
|
33
|
+
|
|
34
|
+
for l, r in synchronize_pairs:
|
|
35
|
+
try:
|
|
36
|
+
# inline of source_mapper._get_state_attr_by_column
|
|
37
|
+
prop = source_mapper._columntoproperty[l]
|
|
38
|
+
value = source.manager[prop.key].impl.get(
|
|
39
|
+
source, source_dict, PassiveFlag.PASSIVE_OFF
|
|
40
|
+
)
|
|
41
|
+
except exc.UnmappedColumnError as err:
|
|
42
|
+
_raise_col_to_prop(False, source_mapper, l, dest_mapper, r, err)
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
# inline of dest_mapper._set_state_attr_by_column
|
|
46
|
+
prop = dest_mapper._columntoproperty[r]
|
|
47
|
+
dest.manager[prop.key].impl.set(dest, dest_dict, value, None)
|
|
48
|
+
except exc.UnmappedColumnError as err:
|
|
49
|
+
_raise_col_to_prop(True, source_mapper, l, dest_mapper, r, err)
|
|
50
|
+
|
|
51
|
+
# technically the "r.primary_key" check isn't
|
|
52
|
+
# needed here, but we check for this condition to limit
|
|
53
|
+
# how often this logic is invoked for memory/performance
|
|
54
|
+
# reasons, since we only need this info for a primary key
|
|
55
|
+
# destination.
|
|
56
|
+
if (
|
|
57
|
+
flag_cascaded_pks
|
|
58
|
+
and l.primary_key
|
|
59
|
+
and r.primary_key
|
|
60
|
+
and r.references(l)
|
|
61
|
+
):
|
|
62
|
+
uowcommit.attributes[("pk_cascaded", dest, r)] = True
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _bulk_populate_inherit_keys(source_dict, source_mapper, synchronize_pairs):
|
|
66
|
+
# a simplified version of populate() used by bulk insert mode
|
|
67
|
+
for l, r in synchronize_pairs:
|
|
68
|
+
try:
|
|
69
|
+
prop = source_mapper._columntoproperty[l]
|
|
70
|
+
value = source_dict[prop.key]
|
|
71
|
+
except exc.UnmappedColumnError as err:
|
|
72
|
+
_raise_col_to_prop(False, source_mapper, l, source_mapper, r, err)
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
prop = source_mapper._columntoproperty[r]
|
|
76
|
+
source_dict[prop.key] = value
|
|
77
|
+
except exc.UnmappedColumnError as err:
|
|
78
|
+
_raise_col_to_prop(True, source_mapper, l, source_mapper, r, err)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _clear(dest, dest_mapper, synchronize_pairs):
|
|
82
|
+
for l, r in synchronize_pairs:
|
|
83
|
+
if (
|
|
84
|
+
r.primary_key
|
|
85
|
+
and dest_mapper._get_state_attr_by_column(dest, dest.dict, r)
|
|
86
|
+
not in orm_util._none_set
|
|
87
|
+
):
|
|
88
|
+
raise AssertionError(
|
|
89
|
+
f"Dependency rule on column '{l}' "
|
|
90
|
+
"tried to blank-out primary key "
|
|
91
|
+
f"column '{r}' on instance '{orm_util.state_str(dest)}'"
|
|
92
|
+
)
|
|
93
|
+
try:
|
|
94
|
+
dest_mapper._set_state_attr_by_column(dest, dest.dict, r, None)
|
|
95
|
+
except exc.UnmappedColumnError as err:
|
|
96
|
+
_raise_col_to_prop(True, None, l, dest_mapper, r, err)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _update(source, source_mapper, dest, old_prefix, synchronize_pairs):
|
|
100
|
+
for l, r in synchronize_pairs:
|
|
101
|
+
try:
|
|
102
|
+
oldvalue = source_mapper._get_committed_attr_by_column(
|
|
103
|
+
source.obj(), l
|
|
104
|
+
)
|
|
105
|
+
value = source_mapper._get_state_attr_by_column(
|
|
106
|
+
source, source.dict, l, passive=PassiveFlag.PASSIVE_OFF
|
|
107
|
+
)
|
|
108
|
+
except exc.UnmappedColumnError as err:
|
|
109
|
+
_raise_col_to_prop(False, source_mapper, l, None, r, err)
|
|
110
|
+
dest[r.key] = value
|
|
111
|
+
dest[old_prefix + r.key] = oldvalue
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _populate_dict(source, source_mapper, dict_, synchronize_pairs):
|
|
115
|
+
for l, r in synchronize_pairs:
|
|
116
|
+
try:
|
|
117
|
+
value = source_mapper._get_state_attr_by_column(
|
|
118
|
+
source, source.dict, l, passive=PassiveFlag.PASSIVE_OFF
|
|
119
|
+
)
|
|
120
|
+
except exc.UnmappedColumnError as err:
|
|
121
|
+
_raise_col_to_prop(False, source_mapper, l, None, r, err)
|
|
122
|
+
|
|
123
|
+
dict_[r.key] = value
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _source_modified(uowcommit, source, source_mapper, synchronize_pairs):
|
|
127
|
+
"""return true if the source object has changes from an old to a
|
|
128
|
+
new value on the given synchronize pairs
|
|
129
|
+
|
|
130
|
+
"""
|
|
131
|
+
for l, r in synchronize_pairs:
|
|
132
|
+
try:
|
|
133
|
+
prop = source_mapper._columntoproperty[l]
|
|
134
|
+
except exc.UnmappedColumnError as err:
|
|
135
|
+
_raise_col_to_prop(False, source_mapper, l, None, r, err)
|
|
136
|
+
history = uowcommit.get_attribute_history(
|
|
137
|
+
source, prop.key, PassiveFlag.PASSIVE_NO_INITIALIZE
|
|
138
|
+
)
|
|
139
|
+
if bool(history.deleted):
|
|
140
|
+
return True
|
|
141
|
+
else:
|
|
142
|
+
return False
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _raise_col_to_prop(
|
|
146
|
+
isdest, source_mapper, source_column, dest_mapper, dest_column, err
|
|
147
|
+
):
|
|
148
|
+
if isdest:
|
|
149
|
+
raise exc.UnmappedColumnError(
|
|
150
|
+
"Can't execute sync rule for "
|
|
151
|
+
"destination column '%s'; mapper '%s' does not map "
|
|
152
|
+
"this column. Try using an explicit `foreign_keys` "
|
|
153
|
+
"collection which does not include this column (or use "
|
|
154
|
+
"a viewonly=True relation)." % (dest_column, dest_mapper)
|
|
155
|
+
) from err
|
|
156
|
+
else:
|
|
157
|
+
raise exc.UnmappedColumnError(
|
|
158
|
+
"Can't execute sync rule for "
|
|
159
|
+
"source column '%s'; mapper '%s' does not map this "
|
|
160
|
+
"column. Try using an explicit `foreign_keys` "
|
|
161
|
+
"collection which does not include destination column "
|
|
162
|
+
"'%s' (or use a viewonly=True relation)."
|
|
163
|
+
% (source_column, source_mapper, dest_column)
|
|
164
|
+
) from err
|