| | 188 | def _resolve(db, value, error_msg): |
|---|
| | 189 | """Support function for Create transactions to resolve entity |
|---|
| | 190 | references originating in a different database.""" |
|---|
| | 191 | if isinstance(value, base.Entity) and value._db is not db: |
|---|
| | 192 | entity = value |
|---|
| | 193 | if entity._default_key is not None: |
|---|
| | 194 | extent_name = entity.sys.extent.name |
|---|
| | 195 | if hasattr(db, extent_name): |
|---|
| | 196 | extent = getattr(db, extent_name) |
|---|
| | 197 | criteria = dict( |
|---|
| | 198 | [(name, _resolve(db, getattr(entity, name), error_msg)) |
|---|
| | 199 | for name in entity._default_key]) |
|---|
| | 200 | value = extent.findone(**criteria) |
|---|
| | 201 | if value is not None: |
|---|
| | 202 | return value |
|---|
| | 203 | raise DatabaseMismatch(error_msg) |
|---|
| | 204 | else: |
|---|
| | 205 | return value |
|---|
| | 206 | |
|---|
| | 207 | |
|---|
| 241 | | entity = field._value |
|---|
| 242 | | if isinstance(entity, base.Entity) and entity._db is not db: |
|---|
| 243 | | resolved = False |
|---|
| 244 | | if entity._default_key is not None: |
|---|
| 245 | | extent_name = entity.sys.extent.name |
|---|
| 246 | | if hasattr(db, extent_name): |
|---|
| 247 | | extent = getattr(db, extent_name) |
|---|
| 248 | | criteria = dict([(name, getattr(entity, name)) |
|---|
| 249 | | for name in entity._default_key]) |
|---|
| 250 | | value = extent.findone(**criteria) |
|---|
| 251 | | if value is not None: |
|---|
| 252 | | field._value = value |
|---|
| 253 | | resolved = True |
|---|
| 254 | | if not resolved: |
|---|
| 255 | | raise DatabaseMismatch(msg % (field_name, entity)) |
|---|
| | 261 | field_value = field._value |
|---|
| | 262 | error_msg = msg % (field_name, field_value) |
|---|
| | 263 | field._value = _resolve(db, field_value, error_msg) |
|---|