Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Combine consecutive with statements

Python 2.7 allows to combine several 'with' instructions.
  • Loading branch information...
commit 165f44aaaa0b9008f35d8f6a3474db061559ad53 1 parent 22c6497
Claude Paroz claudep authored
21 django/contrib/auth/tests/test_forms.py
View
@@ -121,17 +121,16 @@ def test_inactive_user(self):
[force_text(form.error_messages['inactive'])])
def test_inactive_user_i18n(self):
- with self.settings(USE_I18N=True):
- with translation.override('pt-br', deactivate=True):
- # The user is inactive.
- data = {
- 'username': 'inactive',
- 'password': 'password',
- }
- form = AuthenticationForm(None, data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form.non_field_errors(),
- [force_text(form.error_messages['inactive'])])
+ with self.settings(USE_I18N=True), translation.override('pt-br', deactivate=True):
+ # The user is inactive.
+ data = {
+ 'username': 'inactive',
+ 'password': 'password',
+ }
+ form = AuthenticationForm(None, data)
+ self.assertFalse(form.is_valid())
+ self.assertEqual(form.non_field_errors(),
+ [force_text(form.error_messages['inactive'])])
def test_custom_login_allowed_policy(self):
# The user is inactive, but our custom form policy allows him to log in.
29 django/contrib/humanize/tests.py
View
@@ -77,15 +77,14 @@ def test_l10n_intcomma(self):
'100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567', '1,234,567.1234567',
None)
- with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=False):
- with translation.override('en'):
- self.humanize_tester(test_list, result_list, 'intcomma')
+ with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=False), \
+ translation.override('en'):
+ self.humanize_tester(test_list, result_list, 'intcomma')
def test_intcomma_without_number_grouping(self):
# Regression for #17414
- with translation.override('ja'):
- with self.settings(USE_L10N=True):
- self.humanize_tester([100], ['100'], 'intcomma')
+ with translation.override('ja'), self.settings(USE_L10N=True):
+ self.humanize_tester([100], ['100'], 'intcomma')
def test_intword(self):
test_list = ('100', '1000000', '1200000', '1290000',
@@ -104,18 +103,18 @@ def test_i18n_intcomma(self):
'100', '1000', '10123', '10311', '1000000', None)
result_list = ('100', '1.000', '10.123', '10.311', '1.000.000', '1.234.567,25',
'100', '1.000', '10.123', '10.311', '1.000.000', None)
- with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True):
- with translation.override('de'):
- self.humanize_tester(test_list, result_list, 'intcomma')
+ with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True), \
+ translation.override('de'):
+ self.humanize_tester(test_list, result_list, 'intcomma')
def test_i18n_intword(self):
test_list = ('100', '1000000', '1200000', '1290000',
'1000000000', '2000000000', '6000000000000')
result_list = ('100', '1,0 Million', '1,2 Millionen', '1,3 Millionen',
'1,0 Milliarde', '2,0 Milliarden', '6,0 Billionen')
- with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True):
- with translation.override('de'):
- self.humanize_tester(test_list, result_list, 'intword')
+ with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True), \
+ translation.override('de'):
+ self.humanize_tester(test_list, result_list, 'intword')
def test_apnumber(self):
test_list = [str(x) for x in range(1, 11)]
@@ -162,9 +161,9 @@ def test_naturalday_uses_localtime(self):
orig_humanize_datetime, humanize.datetime = humanize.datetime, MockDateTime
try:
- with override_settings(TIME_ZONE="America/Chicago", USE_TZ=True):
- with translation.override('en'):
- self.humanize_tester([dt], ['yesterday'], 'naturalday')
+ with override_settings(TIME_ZONE="America/Chicago", USE_TZ=True), \
+ translation.override('en'):
+ self.humanize_tester([dt], ['yesterday'], 'naturalday')
finally:
humanize.datetime = orig_humanize_datetime
23 tests/admin_views/tests.py
View
@@ -524,31 +524,28 @@ def testI18NLanguageNonEnglishDefault(self):
if the default language is non-English but the selected language
is English. See #13388 and #3594 for more details.
"""
- with self.settings(LANGUAGE_CODE='fr'):
- with translation.override('en-us'):
- response = self.client.get('/test_admin/admin/jsi18n/')
- self.assertNotContains(response, 'Choisir une heure')
+ with self.settings(LANGUAGE_CODE='fr'), translation.override('en-us'):
+ response = self.client.get('/test_admin/admin/jsi18n/')
+ self.assertNotContains(response, 'Choisir une heure')
def testI18NLanguageNonEnglishFallback(self):
"""
Makes sure that the fallback language is still working properly
in cases where the selected language cannot be found.
"""
- with self.settings(LANGUAGE_CODE='fr'):
- with translation.override('none'):
- response = self.client.get('/test_admin/admin/jsi18n/')
- self.assertContains(response, 'Choisir une heure')
+ with self.settings(LANGUAGE_CODE='fr'), translation.override('none'):
+ response = self.client.get('/test_admin/admin/jsi18n/')
+ self.assertContains(response, 'Choisir une heure')
def testL10NDeactivated(self):
"""
Check if L10N is deactivated, the JavaScript i18n view doesn't
return localized date/time formats. Refs #14824.
"""
- with self.settings(LANGUAGE_CODE='ru', USE_L10N=False):
- with translation.override('none'):
- response = self.client.get('/test_admin/admin/jsi18n/')
- self.assertNotContains(response, '%d.%m.%Y %H:%M:%S')
- self.assertContains(response, '%Y-%m-%d %H:%M:%S')
+ with self.settings(LANGUAGE_CODE='ru', USE_L10N=False), translation.override('none'):
+ response = self.client.get('/test_admin/admin/jsi18n/')
+ self.assertNotContains(response, '%d.%m.%Y %H:%M:%S')
+ self.assertContains(response, '%Y-%m-%d %H:%M:%S')
def test_disallowed_filtering(self):
with patch_logger('django.security.DisallowedModelAdminLookup', 'error') as calls:
13 tests/admin_widgets/tests.py
View
@@ -295,13 +295,12 @@ def test_render(self):
def test_localization(self):
w = widgets.AdminSplitDateTime()
- with self.settings(USE_L10N=True):
- with translation.override('de-at'):
- w.is_localized = True
- self.assertHTMLEqual(
- w.render('test', datetime(2007, 12, 1, 9, 30)),
- '<p class="datetime">Datum: <input value="01.12.2007" type="text" class="vDateField" name="test_0" size="10" /><br />Zeit: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>',
- )
+ with self.settings(USE_L10N=True), translation.override('de-at'):
+ w.is_localized = True
+ self.assertHTMLEqual(
+ w.render('test', datetime(2007, 12, 1, 9, 30)),
+ '<p class="datetime">Datum: <input value="01.12.2007" type="text" class="vDateField" name="test_0" size="10" /><br />Zeit: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>',
+ )
class AdminURLWidgetTest(DjangoTestCase):
37 tests/defaultfilters/tests.py
View
@@ -647,22 +647,21 @@ class DefaultFiltersI18NTests(TransRealMixin, TestCase):
def test_localized_filesizeformat(self):
# NOTE: \xa0 avoids wrapping between value and unit
- with self.settings(USE_L10N=True):
- with translation.override('de', deactivate=True):
- self.assertEqual(filesizeformat(1023), '1023\xa0Bytes')
- self.assertEqual(filesizeformat(1024), '1,0\xa0KB')
- self.assertEqual(filesizeformat(10*1024), '10,0\xa0KB')
- self.assertEqual(filesizeformat(1024*1024-1), '1024,0\xa0KB')
- self.assertEqual(filesizeformat(1024*1024), '1,0\xa0MB')
- self.assertEqual(filesizeformat(1024*1024*50), '50,0\xa0MB')
- self.assertEqual(filesizeformat(1024*1024*1024-1), '1024,0\xa0MB')
- self.assertEqual(filesizeformat(1024*1024*1024), '1,0\xa0GB')
- self.assertEqual(filesizeformat(1024*1024*1024*1024), '1,0\xa0TB')
- self.assertEqual(filesizeformat(1024*1024*1024*1024*1024),
- '1,0\xa0PB')
- self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000),
- '2000,0\xa0PB')
- self.assertEqual(filesizeformat(complex(1,-1)), '0\xa0Bytes')
- self.assertEqual(filesizeformat(""), '0\xa0Bytes')
- self.assertEqual(filesizeformat("\N{GREEK SMALL LETTER ALPHA}"),
- '0\xa0Bytes')
+ with self.settings(USE_L10N=True), translation.override('de', deactivate=True):
+ self.assertEqual(filesizeformat(1023), '1023\xa0Bytes')
+ self.assertEqual(filesizeformat(1024), '1,0\xa0KB')
+ self.assertEqual(filesizeformat(10*1024), '10,0\xa0KB')
+ self.assertEqual(filesizeformat(1024*1024-1), '1024,0\xa0KB')
+ self.assertEqual(filesizeformat(1024*1024), '1,0\xa0MB')
+ self.assertEqual(filesizeformat(1024*1024*50), '50,0\xa0MB')
+ self.assertEqual(filesizeformat(1024*1024*1024-1), '1024,0\xa0MB')
+ self.assertEqual(filesizeformat(1024*1024*1024), '1,0\xa0GB')
+ self.assertEqual(filesizeformat(1024*1024*1024*1024), '1,0\xa0TB')
+ self.assertEqual(filesizeformat(1024*1024*1024*1024*1024),
+ '1,0\xa0PB')
+ self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000),
+ '2000,0\xa0PB')
+ self.assertEqual(filesizeformat(complex(1,-1)), '0\xa0Bytes')
+ self.assertEqual(filesizeformat(""), '0\xa0Bytes')
+ self.assertEqual(filesizeformat("\N{GREEK SMALL LETTER ALPHA}"),
+ '0\xa0Bytes')
18 tests/forms_tests/tests/test_fields.py
View
@@ -286,11 +286,10 @@ def test_floatfield_changed(self):
n = 4.35
self.assertFalse(f._has_changed(n, '4.3500'))
- with translation.override('fr'):
- with self.settings(USE_L10N=True):
- f = FloatField(localize=True)
- localized_n = formats.localize_input(n) # -> '4,35' in French
- self.assertFalse(f._has_changed(n, localized_n))
+ with translation.override('fr'), self.settings(USE_L10N=True):
+ f = FloatField(localize=True)
+ localized_n = formats.localize_input(n) # -> '4,35' in French
+ self.assertFalse(f._has_changed(n, localized_n))
# DecimalField ################################################################
@@ -399,11 +398,10 @@ def test_decimalfield_changed(self):
self.assertFalse(f._has_changed(d, '0.10'))
self.assertTrue(f._has_changed(d, '0.101'))
- with translation.override('fr'):
- with self.settings(USE_L10N=True):
- f = DecimalField(max_digits=2, decimal_places=2, localize=True)
- localized_d = formats.localize_input(d) # -> '0,1' in French
- self.assertFalse(f._has_changed(d, localized_d))
+ with translation.override('fr'), self.settings(USE_L10N=True):
+ f = DecimalField(max_digits=2, decimal_places=2, localize=True)
+ localized_d = formats.localize_input(d) # -> '0,1' in French
+ self.assertFalse(f._has_changed(d, localized_d))
# DateField ###################################################################
35 tests/i18n/tests.py
View
@@ -746,11 +746,11 @@ def test_get_format_modules_lang(self):
self.assertEqual('.', get_format('DECIMAL_SEPARATOR', lang='en'))
def test_get_format_modules_stability(self):
- with self.settings(FORMAT_MODULE_PATH='i18n.other.locale'):
- with translation.override('de', deactivate=True):
- old = str("%r") % get_format_modules(reverse=True)
- new = str("%r") % get_format_modules(reverse=True) # second try
- self.assertEqual(new, old, 'Value returned by get_formats_modules() must be preserved between calls.')
+ with self.settings(FORMAT_MODULE_PATH='i18n.other.locale'), \
+ translation.override('de', deactivate=True):
+ old = str("%r") % get_format_modules(reverse=True)
+ new = str("%r") % get_format_modules(reverse=True) # second try
+ self.assertEqual(new, old, 'Value returned by get_formats_modules() must be preserved between calls.')
def test_localize_templatetag_and_filter(self):
"""
@@ -1062,9 +1062,8 @@ def test_single_locale_activation(self):
def test_multiple_locale_filter(self):
with translation.override('de'):
t = Template("{% load i18n %}{{ 0|yesno:_('yes,no,maybe') }}")
- with translation.override(self._old_language):
- with translation.override('nl'):
- self.assertEqual(t.render(Context({})), 'nee')
+ with translation.override(self._old_language), translation.override('nl'):
+ self.assertEqual(t.render(Context({})), 'nee')
def test_multiple_locale_filter_deactivate(self):
with translation.override('de', deactivate=True):
@@ -1083,9 +1082,8 @@ def test_multiple_locale_filter_direct_switch(self):
def test_multiple_locale(self):
with translation.override('de'):
t = Template("{{ _('No') }}")
- with translation.override(self._old_language):
- with translation.override('nl'):
- self.assertEqual(t.render(Context({})), 'Nee')
+ with translation.override(self._old_language), translation.override('nl'):
+ self.assertEqual(t.render(Context({})), 'Nee')
def test_multiple_locale_deactivate(self):
with translation.override('de', deactivate=True):
@@ -1104,9 +1102,8 @@ def test_multiple_locale_direct_switch(self):
def test_multiple_locale_loadi18n(self):
with translation.override('de'):
t = Template("{% load i18n %}{{ _('No') }}")
- with translation.override(self._old_language):
- with translation.override('nl'):
- self.assertEqual(t.render(Context({})), 'Nee')
+ with translation.override(self._old_language), translation.override('nl'):
+ self.assertEqual(t.render(Context({})), 'Nee')
def test_multiple_locale_loadi18n_deactivate(self):
with translation.override('de', deactivate=True):
@@ -1125,9 +1122,8 @@ def test_multiple_locale_loadi18n_direct_switch(self):
def test_multiple_locale_trans(self):
with translation.override('de'):
t = Template("{% load i18n %}{% trans 'No' %}")
- with translation.override(self._old_language):
- with translation.override('nl'):
- self.assertEqual(t.render(Context({})), 'Nee')
+ with translation.override(self._old_language), translation.override('nl'):
+ self.assertEqual(t.render(Context({})), 'Nee')
def test_multiple_locale_deactivate_trans(self):
with translation.override('de', deactivate=True):
@@ -1146,9 +1142,8 @@ def test_multiple_locale_direct_switch_trans(self):
def test_multiple_locale_btrans(self):
with translation.override('de'):
t = Template("{% load i18n %}{% blocktrans %}No{% endblocktrans %}")
- with translation.override(self._old_language):
- with translation.override('nl'):
- self.assertEqual(t.render(Context({})), 'Nee')
+ with translation.override(self._old_language), translation.override('nl'):
+ self.assertEqual(t.render(Context({})), 'Nee')
def test_multiple_locale_deactivate_btrans(self):
with translation.override('de', deactivate=True):
19 tests/logging_tests/tests.py
View
@@ -355,20 +355,19 @@ def test_configure_initializes_logging(self):
self.assertTrue(dictConfig.called)
+@override_settings(DEBUG=True)
class SecurityLoggerTest(TestCase):
urls = 'logging_tests.urls'
def test_suspicious_operation_creates_log_message(self):
- with self.settings(DEBUG=True):
- with patch_logger('django.security.SuspiciousOperation', 'error') as calls:
- response = self.client.get('/suspicious/')
- self.assertEqual(len(calls), 1)
- self.assertEqual(calls[0], 'dubious')
+ with patch_logger('django.security.SuspiciousOperation', 'error') as calls:
+ response = self.client.get('/suspicious/')
+ self.assertEqual(len(calls), 1)
+ self.assertEqual(calls[0], 'dubious')
def test_suspicious_operation_uses_sublogger(self):
- with self.settings(DEBUG=True):
- with patch_logger('django.security.DisallowedHost', 'error') as calls:
- response = self.client.get('/suspicious_spec/')
- self.assertEqual(len(calls), 1)
- self.assertEqual(calls[0], 'dubious')
+ with patch_logger('django.security.DisallowedHost', 'error') as calls:
+ response = self.client.get('/suspicious_spec/')
+ self.assertEqual(len(calls), 1)
+ self.assertEqual(calls[0], 'dubious')
35 tests/one_to_one_regress/tests.py
View
@@ -141,12 +141,10 @@ def test_reverse_object_does_not_exist_cache(self):
"""
p = Place(name='Zombie Cats', address='Not sure')
p.save()
- with self.assertNumQueries(1):
- with self.assertRaises(Restaurant.DoesNotExist):
- p.restaurant
- with self.assertNumQueries(0):
- with self.assertRaises(Restaurant.DoesNotExist):
- p.restaurant
+ with self.assertNumQueries(1), self.assertRaises(Restaurant.DoesNotExist):
+ p.restaurant
+ with self.assertNumQueries(0), self.assertRaises(Restaurant.DoesNotExist):
+ p.restaurant
def test_reverse_object_cached_when_related_is_accessed(self):
"""
@@ -199,9 +197,8 @@ def test_reverse_object_cached_when_related_is_unset(self):
self.assertEqual(self.p1.undergroundbar, b)
b.place = None
b.save()
- with self.assertNumQueries(0):
- with self.assertRaises(UndergroundBar.DoesNotExist):
- self.p1.undergroundbar
+ with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist):
+ self.p1.undergroundbar
def test_get_reverse_on_unsaved_object(self):
"""
@@ -213,24 +210,21 @@ def test_get_reverse_on_unsaved_object(self):
p = Place()
# When there's no instance of the origin of the one-to-one
- with self.assertNumQueries(0):
- with self.assertRaises(UndergroundBar.DoesNotExist):
- p.undergroundbar
+ with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist):
+ p.undergroundbar
UndergroundBar.objects.create()
# When there's one instance of the origin
# (p.undergroundbar used to return that instance)
- with self.assertNumQueries(0):
- with self.assertRaises(UndergroundBar.DoesNotExist):
- p.undergroundbar
+ with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist):
+ p.undergroundbar
UndergroundBar.objects.create()
# When there are several instances of the origin
- with self.assertNumQueries(0):
- with self.assertRaises(UndergroundBar.DoesNotExist):
- p.undergroundbar
+ with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist):
+ p.undergroundbar
def test_set_reverse_on_unsaved_object(self):
"""
@@ -239,6 +233,5 @@ def test_set_reverse_on_unsaved_object(self):
"""
p = Place()
b = UndergroundBar.objects.create()
- with self.assertNumQueries(0):
- with self.assertRaises(ValueError):
- p.undergroundbar = b
+ with self.assertNumQueries(0), self.assertRaises(ValueError):
+ p.undergroundbar = b
71 tests/test_utils/tests.py
View
@@ -152,9 +152,8 @@ def test_nested(self):
self.assertEqual(2, len(captured_queries))
def test_failure(self):
- with self.assertRaises(TypeError):
- with CaptureQueriesContext(connection):
- raise TypeError
+ with self.assertRaises(TypeError), CaptureQueriesContext(connection):
+ raise TypeError
def test_with_client(self):
with CaptureQueriesContext(connection) as captured_queries:
@@ -190,14 +189,12 @@ def test_simple(self):
Person.objects.count()
def test_failure(self):
- with self.assertRaises(AssertionError) as exc_info:
- with self.assertNumQueries(2):
- Person.objects.count()
+ with self.assertRaises(AssertionError) as exc_info, self.assertNumQueries(2):
+ Person.objects.count()
self.assertIn("1 queries executed, 2 expected", str(exc_info.exception))
- with self.assertRaises(TypeError):
- with self.assertNumQueries(4000):
- raise TypeError
+ with self.assertRaises(TypeError), self.assertNumQueries(4000):
+ raise TypeError
def test_with_client(self):
person = Person.objects.create(name="test")
@@ -232,13 +229,13 @@ def test_usage(self):
render_to_string('template_used/base.html')
def test_nested_usage(self):
- with self.assertTemplateUsed('template_used/base.html'):
- with self.assertTemplateUsed('template_used/include.html'):
- render_to_string('template_used/include.html')
+ with self.assertTemplateUsed('template_used/base.html'), \
+ self.assertTemplateUsed('template_used/include.html'):
+ render_to_string('template_used/include.html')
- with self.assertTemplateUsed('template_used/extends.html'):
- with self.assertTemplateUsed('template_used/base.html'):
- render_to_string('template_used/extends.html')
+ with self.assertTemplateUsed('template_used/extends.html'), \
+ self.assertTemplateUsed('template_used/base.html'):
+ render_to_string('template_used/extends.html')
with self.assertTemplateUsed('template_used/base.html'):
with self.assertTemplateUsed('template_used/alternative.html'):
@@ -258,38 +255,34 @@ def test_not_used(self):
pass
def test_error_message(self):
- with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'):
- with self.assertTemplateUsed('template_used/base.html'):
- pass
+ with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'), \
+ self.assertTemplateUsed('template_used/base.html'):
+ pass
- with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'):
- with self.assertTemplateUsed(template_name='template_used/base.html'):
- pass
+ with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'), \
+ self.assertTemplateUsed(template_name='template_used/base.html'):
+ pass
- with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html.*template_used/alternative\.html$'):
- with self.assertTemplateUsed('template_used/base.html'):
- render_to_string('template_used/alternative.html')
+ with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html.*template_used/alternative\.html$'), \
+ self.assertTemplateUsed('template_used/base.html'):
+ render_to_string('template_used/alternative.html')
def test_failure(self):
- with self.assertRaises(TypeError):
- with self.assertTemplateUsed():
- pass
+ with self.assertRaises(TypeError), self.assertTemplateUsed():
+ pass
- with self.assertRaises(AssertionError):
- with self.assertTemplateUsed(''):
- pass
+ with self.assertRaises(AssertionError), self.assertTemplateUsed(''):
+ pass
- with self.assertRaises(AssertionError):
- with self.assertTemplateUsed(''):
- render_to_string('template_used/base.html')
+ with self.assertRaises(AssertionError), self.assertTemplateUsed(''):
+ render_to_string('template_used/base.html')
- with self.assertRaises(AssertionError):
- with self.assertTemplateUsed(template_name=''):
- pass
+ with self.assertRaises(AssertionError), self.assertTemplateUsed(template_name=''):
+ pass
- with self.assertRaises(AssertionError):
- with self.assertTemplateUsed('template_used/base.html'):
- render_to_string('template_used/alternative.html')
+ with self.assertRaises(AssertionError), \
+ self.assertTemplateUsed('template_used/base.html'):
+ render_to_string('template_used/alternative.html')
class HTMLEqualTests(TestCase):
179 tests/transactions/tests.py
View
@@ -65,10 +65,9 @@ def test_commit(self):
self.assertQuerysetEqual(Reporter.objects.all(), ['<Reporter: Tintin>'])
def test_rollback(self):
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic():
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic():
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_nested_commit_commit(self):
@@ -82,30 +81,27 @@ def test_nested_commit_commit(self):
def test_nested_commit_rollback(self):
with transaction.atomic():
Reporter.objects.create(first_name="Tintin")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic():
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic():
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
self.assertQuerysetEqual(Reporter.objects.all(), ['<Reporter: Tintin>'])
def test_nested_rollback_commit(self):
- with six.assertRaisesRegex(self, Exception, "Oops"):
+ with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic():
+ Reporter.objects.create(last_name="Tintin")
with transaction.atomic():
- Reporter.objects.create(last_name="Tintin")
- with transaction.atomic():
- Reporter.objects.create(last_name="Haddock")
- raise Exception("Oops, that's his first name")
+ Reporter.objects.create(last_name="Haddock")
+ raise Exception("Oops, that's his first name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_nested_rollback_rollback(self):
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic():
- Reporter.objects.create(last_name="Tintin")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic():
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
- raise Exception("Oops, that's his first name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic():
+ Reporter.objects.create(last_name="Tintin")
+ with six.assertRaisesRegex(self, Exception, "Oops"):
+ with transaction.atomic():
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
+ raise Exception("Oops, that's his first name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_merged_commit_commit(self):
@@ -119,31 +115,29 @@ def test_merged_commit_commit(self):
def test_merged_commit_rollback(self):
with transaction.atomic():
Reporter.objects.create(first_name="Tintin")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic(savepoint=False):
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), \
+ transaction.atomic(savepoint=False):
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
# Writes in the outer block are rolled back too.
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_merged_rollback_commit(self):
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic():
- Reporter.objects.create(last_name="Tintin")
- with transaction.atomic(savepoint=False):
- Reporter.objects.create(last_name="Haddock")
- raise Exception("Oops, that's his first name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic():
+ Reporter.objects.create(last_name="Tintin")
+ with transaction.atomic(savepoint=False):
+ Reporter.objects.create(last_name="Haddock")
+ raise Exception("Oops, that's his first name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_merged_rollback_rollback(self):
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic():
- Reporter.objects.create(last_name="Tintin")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic(savepoint=False):
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
- raise Exception("Oops, that's his first name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic():
+ Reporter.objects.create(last_name="Tintin")
+ with six.assertRaisesRegex(self, Exception, "Oops"):
+ with transaction.atomic(savepoint=False):
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
+ raise Exception("Oops, that's his first name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_reuse_commit_commit(self):
@@ -159,32 +153,29 @@ def test_reuse_commit_rollback(self):
atomic = transaction.atomic()
with atomic:
Reporter.objects.create(first_name="Tintin")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with atomic:
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), atomic:
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
self.assertQuerysetEqual(Reporter.objects.all(), ['<Reporter: Tintin>'])
def test_reuse_rollback_commit(self):
atomic = transaction.atomic()
- with six.assertRaisesRegex(self, Exception, "Oops"):
+ with six.assertRaisesRegex(self, Exception, "Oops"), atomic:
+ Reporter.objects.create(last_name="Tintin")
with atomic:
- Reporter.objects.create(last_name="Tintin")
- with atomic:
- Reporter.objects.create(last_name="Haddock")
- raise Exception("Oops, that's his first name")
+ Reporter.objects.create(last_name="Haddock")
+ raise Exception("Oops, that's his first name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_reuse_rollback_rollback(self):
atomic = transaction.atomic()
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with atomic:
- Reporter.objects.create(last_name="Tintin")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with atomic:
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
- raise Exception("Oops, that's his first name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), atomic:
+ Reporter.objects.create(last_name="Tintin")
+ with six.assertRaisesRegex(self, Exception, "Oops"):
+ with atomic:
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
+ raise Exception("Oops, that's his first name")
self.assertQuerysetEqual(Reporter.objects.all(), [])
def test_force_rollback(self):
@@ -200,10 +191,9 @@ def test_prevent_rollback(self):
Reporter.objects.create(first_name="Tintin")
sid = transaction.savepoint()
# trigger a database error inside an inner atomic without savepoint
- with self.assertRaises(DatabaseError):
- with transaction.atomic(savepoint=False):
- connection.cursor().execute(
- "SELECT no_such_col FROM transactions_reporter")
+ with self.assertRaises(DatabaseError), transaction.atomic(savepoint=False):
+ connection.cursor().execute(
+ "SELECT no_such_col FROM transactions_reporter")
transaction.savepoint_rollback(sid)
# atomic block should rollback, but prevent it, as we just did it.
self.assertTrue(transaction.get_rollback())
@@ -263,10 +253,10 @@ def test_merged_outer_rollback(self):
Reporter.objects.create(first_name="Tintin")
with transaction.atomic(savepoint=False):
Reporter.objects.create(first_name="Archibald", last_name="Haddock")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic(savepoint=False):
- Reporter.objects.create(first_name="Tournesol")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), \
+ transaction.atomic(savepoint=False):
+ Reporter.objects.create(first_name="Tournesol")
+ raise Exception("Oops, that's his last name")
# It wasn't possible to roll back
self.assertEqual(Reporter.objects.count(), 3)
# It wasn't possible to roll back
@@ -279,10 +269,10 @@ def test_merged_inner_savepoint_rollback(self):
Reporter.objects.create(first_name="Tintin")
with transaction.atomic():
Reporter.objects.create(first_name="Archibald", last_name="Haddock")
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic(savepoint=False):
- Reporter.objects.create(first_name="Tournesol")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), \
+ transaction.atomic(savepoint=False):
+ Reporter.objects.create(first_name="Tournesol")
+ raise Exception("Oops, that's his last name")
# It wasn't possible to roll back
self.assertEqual(Reporter.objects.count(), 3)
# The first block with a savepoint must roll back
@@ -293,10 +283,10 @@ def test_merged_outer_rollback_after_inner_failure_and_inner_success(self):
with transaction.atomic():
Reporter.objects.create(first_name="Tintin")
# Inner block without a savepoint fails
- with six.assertRaisesRegex(self, Exception, "Oops"):
- with transaction.atomic(savepoint=False):
- Reporter.objects.create(first_name="Haddock")
- raise Exception("Oops, that's his last name")
+ with six.assertRaisesRegex(self, Exception, "Oops"), \
+ transaction.atomic(savepoint=False):
+ Reporter.objects.create(first_name="Haddock")
+ raise Exception("Oops, that's his last name")
# It wasn't possible to roll back
self.assertEqual(Reporter.objects.count(), 2)
# Inner block with a savepoint succeeds
@@ -316,9 +306,9 @@ class AtomicErrorsTests(TransactionTestCase):
def test_atomic_prevents_setting_autocommit(self):
autocommit = transaction.get_autocommit()
- with transaction.atomic():
- with self.assertRaises(transaction.TransactionManagementError):
- transaction.set_autocommit(not autocommit)
+ with transaction.atomic(), \
+ self.assertRaises(transaction.TransactionManagementError):
+ transaction.set_autocommit(not autocommit)
# Make sure autocommit wasn't changed.
self.assertEqual(connection.autocommit, autocommit)
@@ -552,9 +542,8 @@ def test_autocommit_context_manager(self):
The autocommit context manager works exactly the same as the default
behavior.
"""
- with self.assertRaises(Exception):
- with transaction.autocommit():
- self.create_reporter_and_fail()
+ with self.assertRaises(Exception), transaction.autocommit():
+ self.create_reporter_and_fail()
self.assertEqual(Reporter.objects.count(), 1)
@@ -563,9 +552,8 @@ def test_autocommit_context_manager_with_using(self):
"""
The autocommit context manager also works with a using argument.
"""
- with self.assertRaises(Exception):
- with transaction.autocommit(using="default"):
- self.create_reporter_and_fail()
+ with self.assertRaises(Exception), transaction.autocommit(using="default"):
+ self.create_reporter_and_fail()
self.assertEqual(Reporter.objects.count(), 1)
@@ -575,9 +563,8 @@ def test_commit_on_success(self):
With the commit_on_success context manager, the transaction is only
committed if the block doesn't throw an exception.
"""
- with self.assertRaises(Exception):
- with transaction.commit_on_success():
- self.create_reporter_and_fail()
+ with self.assertRaises(Exception), transaction.commit_on_success():
+ self.create_reporter_and_fail()
self.assertEqual(Reporter.objects.count(), 0)
@@ -586,9 +573,8 @@ def test_commit_on_success_with_using(self):
"""
The commit_on_success context manager also works with a using argument.
"""
- with self.assertRaises(Exception):
- with transaction.commit_on_success(using="default"):
- self.create_reporter_and_fail()
+ with self.assertRaises(Exception), transaction.commit_on_success(using="default"):
+ self.create_reporter_and_fail()
self.assertEqual(Reporter.objects.count(), 0)
@@ -633,18 +619,18 @@ def test_manually_managed_mistake(self):
"""
If you forget, you'll get bad errors.
"""
- with self.assertRaises(transaction.TransactionManagementError):
- with transaction.commit_manually():
- Reporter.objects.create(first_name="Scott", last_name="Browning")
+ with self.assertRaises(transaction.TransactionManagementError), \
+ transaction.commit_manually():
+ Reporter.objects.create(first_name="Scott", last_name="Browning")
@skipUnlessDBFeature('supports_transactions')
def test_manually_managed_with_using(self):
"""
The commit_manually function also works with a using argument.
"""
- with self.assertRaises(transaction.TransactionManagementError):
- with transaction.commit_manually(using="default"):
- Reporter.objects.create(first_name="Walter", last_name="Cronkite")
+ with self.assertRaises(transaction.TransactionManagementError), \
+ transaction.commit_manually(using="default"):
+ Reporter.objects.create(first_name="Walter", last_name="Cronkite")
@skipUnlessDBFeature('requires_rollback_on_dirty_transaction')
def test_bad_sql(self):
@@ -654,8 +640,7 @@ def test_bad_sql(self):
be rolled back. The bug is only visible using the psycopg2 backend,
though the fix is generally a good idea.
"""
- with self.assertRaises(IntegrityError):
- with transaction.commit_on_success():
- cursor = connection.cursor()
- cursor.execute("INSERT INTO transactions_reporter (first_name, last_name) VALUES ('Douglas', 'Adams');")
+ with self.assertRaises(IntegrityError), transaction.commit_on_success():
+ cursor = connection.cursor()
+ cursor.execute("INSERT INTO transactions_reporter (first_name, last_name) VALUES ('Douglas', 'Adams');")
transaction.rollback()
64 tests/view_tests/tests/test_i18n.py
View
@@ -85,20 +85,18 @@ def test_jsi18n_with_missing_en_files(self):
languages and you've set settings.LANGUAGE_CODE to some other language
than English.
"""
- with self.settings(LANGUAGE_CODE='es'):
- with override('en-us'):
- response = self.client.get('/views/jsi18n/')
- self.assertNotContains(response, 'esto tiene que ser traducido')
+ with self.settings(LANGUAGE_CODE='es'), override('en-us'):
+ response = self.client.get('/views/jsi18n/')
+ self.assertNotContains(response, 'esto tiene que ser traducido')
def test_jsi18n_fallback_language(self):
"""
Let's make sure that the fallback language is still working properly
in cases where the selected language cannot be found.
"""
- with self.settings(LANGUAGE_CODE='fr'):
- with override('fi'):
- response = self.client.get('/views/jsi18n/')
- self.assertContains(response, 'il faut le traduire')
+ with self.settings(LANGUAGE_CODE='fr'), override('fi'):
+ response = self.client.get('/views/jsi18n/')
+ self.assertContains(response, 'il faut le traduire')
def testI18NLanguageNonEnglishDefault(self):
"""
@@ -107,10 +105,9 @@ def testI18NLanguageNonEnglishDefault(self):
is English and there is not 'en' translation available. See #13388,
#3594 and #13726 for more details.
"""
- with self.settings(LANGUAGE_CODE='fr'):
- with override('en-us'):
- response = self.client.get('/views/jsi18n/')
- self.assertNotContains(response, 'Choisir une heure')
+ with self.settings(LANGUAGE_CODE='fr'), override('en-us'):
+ response = self.client.get('/views/jsi18n/')
+ self.assertNotContains(response, 'Choisir une heure')
def test_nonenglish_default_english_userpref(self):
"""
@@ -119,20 +116,19 @@ def test_nonenglish_default_english_userpref(self):
with the proper English translations. See #13726 for more details.
"""
extended_apps = list(settings.INSTALLED_APPS) + ['view_tests.app0']
- with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps):
- with override('en-us'):
- response = self.client.get('/views/jsi18n_english_translation/')
- self.assertContains(response, javascript_quote('this app0 string is to be translated'))
+ with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps), \
+ override('en-us'):
+ response = self.client.get('/views/jsi18n_english_translation/')
+ self.assertContains(response, javascript_quote('this app0 string is to be translated'))
def testI18NLanguageNonEnglishFallback(self):
"""
Makes sure that the fallback language is still working properly
in cases where the selected language cannot be found.
"""
- with self.settings(LANGUAGE_CODE='fr'):
- with override('none'):
- response = self.client.get('/views/jsi18n/')
- self.assertContains(response, 'Choisir une heure')
+ with self.settings(LANGUAGE_CODE='fr'), override('none'):
+ response = self.client.get('/views/jsi18n/')
+ self.assertContains(response, 'Choisir une heure')
class JsI18NTestsMultiPackage(TestCase):
@@ -149,10 +145,11 @@ def testI18NLanguageEnglishDefault(self):
#3594 and #13514 for more details.
"""
extended_apps = list(settings.INSTALLED_APPS) + ['view_tests.app1', 'view_tests.app2']
- with self.settings(LANGUAGE_CODE='en-us', INSTALLED_APPS=extended_apps):
- with override('fr'):
- response = self.client.get('/views/jsi18n_multi_packages1/')
- self.assertContains(response, javascript_quote('il faut traduire cette chaîne de caractères de app1'))
+ with self.settings(LANGUAGE_CODE='en-us', INSTALLED_APPS=extended_apps), \
+ override('fr'):
+ response = self.client.get('/views/jsi18n_multi_packages1/')
+ self.assertContains(response,
+ javascript_quote('il faut traduire cette chaîne de caractères de app1'))
def testI18NDifferentNonEnLangs(self):
"""
@@ -160,20 +157,21 @@ def testI18NDifferentNonEnLangs(self):
English.
"""
extended_apps = list(settings.INSTALLED_APPS) + ['view_tests.app3', 'view_tests.app4']
- with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps):
- with override('es-ar'):
- response = self.client.get('/views/jsi18n_multi_packages2/')
- self.assertContains(response, javascript_quote('este texto de app3 debe ser traducido'))
+ with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps), \
+ override('es-ar'):
+ response = self.client.get('/views/jsi18n_multi_packages2/')
+ self.assertContains(response,
+ javascript_quote('este texto de app3 debe ser traducido'))
def testI18NWithLocalePaths(self):
extended_locale_paths = settings.LOCALE_PATHS + (
path.join(path.dirname(
path.dirname(path.abspath(upath(__file__)))), 'app3', 'locale'),)
- with self.settings(LANGUAGE_CODE='es-ar', LOCALE_PATHS=extended_locale_paths):
- with override('es-ar'):
- response = self.client.get('/views/jsi18n/')
- self.assertContains(response,
- javascript_quote('este texto de app3 debe ser traducido'))
+ with self.settings(LANGUAGE_CODE='es-ar', LOCALE_PATHS=extended_locale_paths), \
+ override('es-ar'):
+ response = self.client.get('/views/jsi18n/')
+ self.assertContains(response,
+ javascript_quote('este texto de app3 debe ser traducido'))
skip_selenium = not os.environ.get('DJANGO_SELENIUM_TESTS', False)

4 comments on commit 165f44a

Jannis Leidel
Owner

Oh noes, the backslashes, they are everywhere! Can we please, please, use the implied line continuation in braces like PEP 8 says?

Claude Paroz
Collaborator

I would, I would, if only this was possible! Try by yourself and tell me what I missed...

Aymeric Augustin
Owner

I had the same reaction as jezdez.

I'm in favor of reverting to:

with long_long_long_foo:
    with long_long_long_bar:
        ...

if the alternative is:

with long_long_long_foo, \
        long_long_long_bar:
    ...

The extra indent doesn't hurt in most of the places you've changed.

Claude Paroz
Collaborator

Personally, I'd either revert all or nothing. If someone is motivated to cherry-pick and change the syntax whenever lines are too long, he can do it.

Please sign in to comment.
Something went wrong with that request. Please try again.