diff -r 85e7a05ad3de tests/regressiontests/serializers_regress/tests.py
a
|
b
|
|
72 | 72 | # 1) we're testing inheritance, not field behaviour, so none |
73 | 73 | # of the field values need to be protected. |
74 | 74 | # 2) saving the child class and having the parent created |
75 | | # automatically is easier than manually creating both. |
| 75 | # automatically is easier than manually creating both. |
76 | 76 | models.Model.save(instance) |
77 | 77 | created = [instance] |
78 | 78 | for klass,field in instance._meta.parents.items(): |
79 | 79 | created.append(klass.objects.get(id=pk)) |
80 | 80 | return created |
81 | | |
| 81 | |
82 | 82 | # A set of functions that can be used to compare |
83 | 83 | # test data objects of various kinds |
84 | 84 | def data_compare(testcase, pk, klass, data): |
… |
… |
|
111 | 111 | instance = klass.objects.get(id=pk) |
112 | 112 | for key,value in data.items(): |
113 | 113 | testcase.assertEqual(value, getattr(instance,key)) |
114 | | |
| 114 | |
115 | 115 | # Define some data types. Each data type is |
116 | 116 | # actually a pair of functions; one to create |
117 | 117 | # and one to compare objects of that type |
… |
… |
|
274 | 274 | |
275 | 275 | (data_obj, 800, AutoNowDateTimeData, datetime.datetime(2006,6,16,10,42,37)), |
276 | 276 | (data_obj, 810, ModifyingSaveData, 42), |
277 | | |
| 277 | |
278 | 278 | (inherited_obj, 900, InheritAbstractModel, {'child_data':37,'parent_data':42}), |
279 | 279 | (inherited_obj, 910, ExplicitInheritBaseModel, {'child_data':37,'parent_data':42}), |
280 | 280 | (inherited_obj, 920, InheritBaseModel, {'child_data':37,'parent_data':42}), |
… |
… |
|
302 | 302 | objects = [] |
303 | 303 | instance_count = {} |
304 | 304 | transaction.enter_transaction_management() |
305 | | transaction.managed(True) |
306 | | for (func, pk, klass, datum) in test_data: |
307 | | objects.extend(func[0](pk, klass, datum)) |
308 | | instance_count[klass] = 0 |
309 | | transaction.commit() |
310 | | transaction.leave_transaction_management() |
| 305 | try: |
| 306 | transaction.managed(True) |
| 307 | for (func, pk, klass, datum) in test_data: |
| 308 | objects.extend(func[0](pk, klass, datum)) |
| 309 | instance_count[klass] = 0 |
| 310 | transaction.commit() |
| 311 | finally: |
| 312 | transaction.leave_transaction_management() |
311 | 313 | |
312 | 314 | # Get a count of the number of objects created for each class |
313 | 315 | for klass in instance_count: |
314 | 316 | instance_count[klass] = klass.objects.count() |
315 | | |
| 317 | |
316 | 318 | # Add the generic tagged objects to the object list |
317 | 319 | objects.extend(Tag.objects.all()) |
318 | 320 | |
… |
… |
|
322 | 324 | # Flush the database and recreate from the serialized data |
323 | 325 | management.call_command('flush', verbosity=0, interactive=False) |
324 | 326 | transaction.enter_transaction_management() |
325 | | transaction.managed(True) |
326 | | for obj in serializers.deserialize(format, serialized_data): |
327 | | obj.save() |
328 | | transaction.commit() |
329 | | transaction.leave_transaction_management() |
| 327 | try: |
| 328 | transaction.managed(True) |
| 329 | for obj in serializers.deserialize(format, serialized_data): |
| 330 | obj.save() |
| 331 | transaction.commit() |
| 332 | finally: |
| 333 | transaction.leave_transaction_management() |
330 | 334 | |
331 | 335 | # Assert that the deserialized data is the same |
332 | 336 | # as the original source |