summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-05-13 06:23:30 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-05-13 06:23:30 +0000
commit28f66bb097799f34a6ead02fe4ecafa493cee06b (patch)
tree1a80e2849772c92b3fc840487848a5222ea4d1d0 /django
parentbc044651aaed9eedbc195414a71bde4e375a7c73 (diff)
downloaddjango-28f66bb097799f34a6ead02fe4ecafa493cee06b.tar.gz
unicode: Merged from trunk up to [5213].
git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5214 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/conf/locale/zh_CN/LC_MESSAGES/django.mobin30798 -> 30798 bytes
-rw-r--r--django/conf/locale/zh_CN/LC_MESSAGES/django.po2
-rw-r--r--django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mobin1505 -> 1498 bytes
-rw-r--r--django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po2
-rw-r--r--django/contrib/localflavor/is_/forms.py2
-rw-r--r--django/contrib/webdesign/lorem_ipsum.py135
-rw-r--r--django/db/backends/postgresql/base.py4
-rw-r--r--django/db/backends/postgresql_psycopg2/base.py4
-rw-r--r--django/http/__init__.py4
-rw-r--r--django/newforms/forms.py2
-rw-r--r--django/newforms/models.py47
-rw-r--r--django/test/testcases.py25
12 files changed, 121 insertions, 106 deletions
diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
index 0d6bf90c0e..3b04920654 100644
--- a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
+++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/django/conf/locale/zh_CN/LC_MESSAGES/django.po
index 2552b677bd..1f30a08b15 100644
--- a/django/conf/locale/zh_CN/LC_MESSAGES/django.po
+++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.po
@@ -1344,7 +1344,7 @@ msgstr "四月"
#: utils/dates.py:19
msgid "may"
-msgstr "三月"
+msgstr "五月"
#: utils/dates.py:19
msgid "jun"
diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
index ec7580a862..f0127a55a0 100644
--- a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
index 610e61d17a..03abe3708c 100644
--- a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
@@ -46,7 +46,7 @@ msgstr "清除全部"
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid "January February March April May June July August September October November December"
-msgstr "一月 二月 三月 四月 五月 六月 六月 七月 八月 九月 十月 十一月 十二月"
+msgstr "一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
diff --git a/django/contrib/localflavor/is_/forms.py b/django/contrib/localflavor/is_/forms.py
index d052acf579..41727d8fa3 100644
--- a/django/contrib/localflavor/is_/forms.py
+++ b/django/contrib/localflavor/is_/forms.py
@@ -41,7 +41,7 @@ class ISIdNumberField(RegexField):
method is modulo 11.
"""
check = [3, 2, 7, 6, 5, 4, 3, 2, 1, 0]
- return sum(int(value[i]) * check[i] for i in range(10)) % 11 == 0
+ return sum([int(value[i]) * check[i] for i in range(10)]) % 11 == 0
def _format(self, value):
"""
diff --git a/django/contrib/webdesign/lorem_ipsum.py b/django/contrib/webdesign/lorem_ipsum.py
index b5a3d3b5db..6226bbef1b 100644
--- a/django/contrib/webdesign/lorem_ipsum.py
+++ b/django/contrib/webdesign/lorem_ipsum.py
@@ -1,66 +1,69 @@
-"""
-Utility functions for generating "lorem ipsum" Latin text.
-"""
-
-import random
-
-COMMON_P = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
-WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet', 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi', 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi', 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos', 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum', 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus', 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus', 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum', 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem', 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus', 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente', 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet', 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta', 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima', 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim', 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores', 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias', 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea', 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt', 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate', 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius', 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos', 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore', 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo', 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi', 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam', 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique', 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere', 'maxime', 'corrupti')
-COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua')
-
-def sentence():
- """
- Returns a randomly generated sentence of lorem ipsum text.
-
- The first word is capitalized, and the sentence ends in either a period or
- question mark. Commas are added at random.
- """
- # Determine the number of comma-separated sections and number of words in
- # each section for this sentence.
- sections = [' '.join(random.sample(WORDS, random.randint(3, 12))) for i in range(random.randint(1, 5))]
- s = ', '.join(sections)
- # Convert to sentence case and add end punctuation.
- return '%s%s%s' % (s[0].upper(), s[1:], random.choice('?.'))
-
-def paragraph():
- """
- Returns a randomly generated paragraph of lorem ipsum text.
-
- The paragraph consists of between 1 and 4 sentences, inclusive.
- """
- return ' '.join([sentence() for i in range(random.randint(1, 4))])
-
-def paragraphs(count, common=True):
- """
- Returns a list of paragraphs as returned by paragraph().
-
- If `common` is True, then the first paragraph will be the standard
- 'lorem ipsum' paragraph. Otherwise, the first paragraph will be random
- Latin text. Either way, subsequent paragraphs will be random Latin text.
- """
- paras = []
- for i in range(count):
- if common and i == 0:
- paras.append(COMMON_P)
- else:
- paras.append(paragraph())
- return paras
-
-def words(count, common=True):
- """
- Returns a string of `count` lorem ipsum words separated by a single space.
-
- If `common` is True, then the first 19 words will be the standard
- 'lorem ipsum' words. Otherwise, all words will be selected randomly.
- """
- if common:
- word_list = list(COMMON_WORDS)
- else:
- word_list = []
- c = len(word_list)
- if count > c:
- count = min(count - c, len(WORDS))
- word_list += random.sample(WORDS, count - c)
- else:
- word_list = word_list[:count]
- return ' '.join(word_list)
+"""
+Utility functions for generating "lorem ipsum" Latin text.
+"""
+
+import random
+
+COMMON_P = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
+WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet', 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi', 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi', 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos', 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum', 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus', 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus', 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum', 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem', 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus', 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente', 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet', 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta', 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima', 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim', 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores', 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias', 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea', 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt', 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate', 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius', 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos', 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore', 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo', 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi', 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam', 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique', 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere', 'maxime', 'corrupti')
+COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua')
+
+def sentence():
+ """
+ Returns a randomly generated sentence of lorem ipsum text.
+
+ The first word is capitalized, and the sentence ends in either a period or
+ question mark. Commas are added at random.
+ """
+ # Determine the number of comma-separated sections and number of words in
+ # each section for this sentence.
+ sections = [' '.join(random.sample(WORDS, random.randint(3, 12))) for i in range(random.randint(1, 5))]
+ s = ', '.join(sections)
+ # Convert to sentence case and add end punctuation.
+ return '%s%s%s' % (s[0].upper(), s[1:], random.choice('?.'))
+
+def paragraph():
+ """
+ Returns a randomly generated paragraph of lorem ipsum text.
+
+ The paragraph consists of between 1 and 4 sentences, inclusive.
+ """
+ return ' '.join([sentence() for i in range(random.randint(1, 4))])
+
+def paragraphs(count, common=True):
+ """
+ Returns a list of paragraphs as returned by paragraph().
+
+ If `common` is True, then the first paragraph will be the standard
+ 'lorem ipsum' paragraph. Otherwise, the first paragraph will be random
+ Latin text. Either way, subsequent paragraphs will be random Latin text.
+ """
+ paras = []
+ for i in range(count):
+ if common and i == 0:
+ paras.append(COMMON_P)
+ else:
+ paras.append(paragraph())
+ return paras
+
+def words(count, common=True):
+ """
+ Returns a string of `count` lorem ipsum words separated by a single space.
+
+ If `common` is True, then the first 19 words will be the standard
+ 'lorem ipsum' words. Otherwise, all words will be selected randomly.
+ """
+ if common:
+ word_list = list(COMMON_WORDS)
+ else:
+ word_list = []
+ c = len(word_list)
+ if count > c:
+ count -= c
+ while count > 0:
+ c = min(count, len(WORDS))
+ count -= c
+ word_list += random.sample(WORDS, c)
+ else:
+ word_list = word_list[:count]
+ return ' '.join(word_list)
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index 867ddd0148..ef0d06f6a1 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -233,7 +233,7 @@ def get_sql_sequence_reset(style, model_list):
if isinstance(f, models.AutoField):
output.append("%s setval('%s', (%s max(%s) %s %s));" % \
(style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD('%s_%s_seq' % (model._meta.db_table, f.column)),
+ style.SQL_FIELD(quote_name('%s_%s_seq' % (model._meta.db_table, f.column))),
style.SQL_KEYWORD('SELECT'),
style.SQL_FIELD(quote_name(f.column)),
style.SQL_KEYWORD('FROM'),
@@ -242,7 +242,7 @@ def get_sql_sequence_reset(style, model_list):
for f in model._meta.many_to_many:
output.append("%s setval('%s', (%s max(%s) %s %s));" % \
(style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()),
+ style.SQL_FIELD(quote_name('%s_id_seq' % f.m2m_db_table())),
style.SQL_KEYWORD('SELECT'),
style.SQL_FIELD(quote_name('id')),
style.SQL_KEYWORD('FROM'),
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
index ed810504dd..d9a850957c 100644
--- a/django/db/backends/postgresql_psycopg2/base.py
+++ b/django/db/backends/postgresql_psycopg2/base.py
@@ -184,7 +184,7 @@ def get_sql_sequence_reset(style, model_list):
if isinstance(f, models.AutoField):
output.append("%s setval('%s', (%s max(%s) %s %s));" % \
(style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD('%s_%s_seq' % (model._meta.db_table, f.column)),
+ style.SQL_FIELD(quote_name('%s_%s_seq' % (model._meta.db_table, f.column))),
style.SQL_KEYWORD('SELECT'),
style.SQL_FIELD(quote_name(f.column)),
style.SQL_KEYWORD('FROM'),
@@ -193,7 +193,7 @@ def get_sql_sequence_reset(style, model_list):
for f in model._meta.many_to_many:
output.append("%s setval('%s', (%s max(%s) %s %s));" % \
(style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()),
+ style.SQL_FIELD(quote_name('%s_id_seq' % f.m2m_db_table())),
style.SQL_KEYWORD('SELECT'),
style.SQL_FIELD(quote_name('id')),
style.SQL_KEYWORD('FROM'),
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 4361796dcd..4c667e02af 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -108,6 +108,10 @@ class QueryDict(MultiValueDict):
self._assert_mutable()
MultiValueDict.__setitem__(self, key, value)
+ def __delitem__(self, key):
+ self._assert_mutable()
+ super(QueryDict, self).__delitem__(key)
+
def get(self, key, default=None):
return str_to_unicode(MultiValueDict.get(self, key, default), self.encoding)
diff --git a/django/newforms/forms.py b/django/newforms/forms.py
index 9fafd20787..edd1992cf4 100644
--- a/django/newforms/forms.py
+++ b/django/newforms/forms.py
@@ -255,6 +255,8 @@ class BoundField(StrAndUnicode):
attrs['id'] = auto_id
if not self.form.is_bound:
data = self.form.initial.get(self.name, self.field.initial)
+ if callable(data):
+ data = data()
else:
data = self.data
return widget.render(self.html_name, data, attrs=attrs)
diff --git a/django/newforms/models.py b/django/newforms/models.py
index a60002b705..ea99ca9ea0 100644
--- a/django/newforms/models.py
+++ b/django/newforms/models.py
@@ -12,17 +12,7 @@ from widgets import Select, SelectMultiple, MultipleHiddenInput
__all__ = ('save_instance', 'form_for_model', 'form_for_instance', 'form_for_fields',
'ModelChoiceField', 'ModelMultipleChoiceField')
-def model_save(self, commit=True):
- """
- Creates and returns model instance according to self.clean_data.
-
- This method is created for any form_for_model Form.
- """
- if self.errors:
- raise ValueError("The %s could not be created because the data didn't validate." % self._model._meta.object_name)
- return save_instance(self, self._model(), commit)
-
-def save_instance(form, instance, commit=True):
+def save_instance(form, instance, fields=None, fail_message='saved', commit=True):
"""
Saves bound Form ``form``'s clean_data into model instance ``instance``.
@@ -33,15 +23,19 @@ def save_instance(form, instance, commit=True):
from django.db import models
opts = instance.__class__._meta
if form.errors:
- raise ValueError("The %s could not be changed because the data didn't validate." % opts.object_name)
+ raise ValueError("The %s could not be %s because the data didn't validate." % (opts.object_name, fail_message))
clean_data = form.clean_data
for f in opts.fields:
if not f.editable or isinstance(f, models.AutoField) or not f.name in clean_data:
continue
+ if fields and f.name not in fields:
+ continue
setattr(instance, f.name, clean_data[f.name])
if commit:
instance.save()
for f in opts.many_to_many:
+ if fields and f.name not in fields:
+ continue
if f.name in clean_data:
setattr(instance, f.attname, clean_data[f.name])
# GOTCHA: If many-to-many data is given and commit=False, the many-to-many
@@ -50,13 +44,19 @@ def save_instance(form, instance, commit=True):
# exception in that case.
return instance
-def make_instance_save(instance):
- "Returns the save() method for a form_for_instance Form."
+def make_model_save(model, fields, fail_message):
+ "Returns the save() method for a Form."
def save(self, commit=True):
- return save_instance(self, instance, commit)
+ return save_instance(self, model(), fields, fail_message, commit)
+ return save
+
+def make_instance_save(instance, fields, fail_message):
+ "Returns the save() method for a Form."
+ def save(self, commit=True):
+ return save_instance(self, instance, fields, fail_message, commit)
return save
-def form_for_model(model, form=BaseForm, formfield_callback=lambda f: f.formfield()):
+def form_for_model(model, form=BaseForm, fields=None, formfield_callback=lambda f: f.formfield()):
"""
Returns a Form class for the given Django model class.
@@ -71,13 +71,16 @@ def form_for_model(model, form=BaseForm, formfield_callback=lambda f: f.formfiel
for f in opts.fields + opts.many_to_many:
if not f.editable:
continue
+ if fields and not f.name in fields:
+ continue
formfield = formfield_callback(f)
if formfield:
field_list.append((f.name, formfield))
- fields = SortedDictFromList(field_list)
- return type(opts.object_name + 'Form', (form,), {'base_fields': fields, '_model': model, 'save': model_save})
+ base_fields = SortedDictFromList(field_list)
+ return type(opts.object_name + 'Form', (form,),
+ {'base_fields': base_fields, '_model': model, 'save': make_model_save(model, fields, 'created')})
-def form_for_instance(instance, form=BaseForm, formfield_callback=lambda f, **kwargs: f.formfield(**kwargs)):
+def form_for_instance(instance, form=BaseForm, fields=None, formfield_callback=lambda f, **kwargs: f.formfield(**kwargs)):
"""
Returns a Form class for the given Django model instance.
@@ -94,13 +97,15 @@ def form_for_instance(instance, form=BaseForm, formfield_callback=lambda f, **kw
for f in opts.fields + opts.many_to_many:
if not f.editable:
continue
+ if fields and not f.name in fields:
+ continue
current_value = f.value_from_object(instance)
formfield = formfield_callback(f, initial=current_value)
if formfield:
field_list.append((f.name, formfield))
- fields = SortedDictFromList(field_list)
+ base_fields = SortedDictFromList(field_list)
return type(opts.object_name + 'InstanceForm', (form,),
- {'base_fields': fields, '_model': model, 'save': make_instance_save(instance)})
+ {'base_fields': base_fields, '_model': model, 'save': make_instance_save(instance, fields, 'changed')})
def form_for_fields(field_list):
"Returns a Form class for the given list of Django database field instances."
diff --git a/django/test/testcases.py b/django/test/testcases.py
index 7c7a976641..45b7a2331d 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -1,4 +1,5 @@
import re, doctest, unittest
+import sys
from urlparse import urlparse
from django.db import transaction
from django.core import management, mail
@@ -45,16 +46,16 @@ class TestCase(unittest.TestCase):
if hasattr(self, 'fixtures'):
management.load_data(self.fixtures, verbosity=0)
mail.outbox = []
-
- def run(self, result=None):
- """Wrapper around default run method to perform common Django test set up.
- This means that user-defined Test Cases aren't required to include a call
- to super().setUp().
-
+
+ def __call__(self, result=None):
+ """
+ Wrapper around default __call__ method to perform common Django test
+ set up. This means that user-defined Test Cases aren't required to
+ include a call to super().setUp().
"""
self.client = Client()
self._pre_setup()
- super(TestCase, self).run(result)
+ super(TestCase, self).__call__(result)
def assertRedirects(self, response, expected_path, status_code=302, target_status_code=200):
"""Assert that a response redirected to a specific URL, and that the
@@ -108,7 +109,7 @@ class TestCase(unittest.TestCase):
for err in errors:
if field:
if field in context[form].errors:
- self.assertTrue(err in context[form].errors[field],
+ self.failUnless(err in context[form].errors[field],
"The field '%s' on form '%s' in context %d does not contain the error '%s' (actual errors: %s)" %
(field, form, i, err, list(context[form].errors[field])))
elif field in context[form].fields:
@@ -117,7 +118,7 @@ class TestCase(unittest.TestCase):
else:
self.fail("The form '%s' in context %d does not contain the field '%s'" % (form, i, field))
else:
- self.assertTrue(err in context[form].non_field_errors(),
+ self.failUnless(err in context[form].non_field_errors(),
"The form '%s' in context %d does not contain the non-field error '%s' (actual errors: %s)" %
(form, i, err, list(context[form].non_field_errors())))
if not found_form:
@@ -127,7 +128,7 @@ class TestCase(unittest.TestCase):
"Assert that the template with the provided name was used in rendering the response"
if isinstance(response.template, list):
template_names = [t.name for t in response.template]
- self.assertTrue(template_name in template_names,
+ self.failUnless(template_name in template_names,
u"Template '%s' was not one of the templates used to render the response. Templates used: %s" %
(template_name, u', '.join(template_names)))
elif response.template:
@@ -140,9 +141,9 @@ class TestCase(unittest.TestCase):
def assertTemplateNotUsed(self, response, template_name):
"Assert that the template with the provided name was NOT used in rendering the response"
if isinstance(response.template, list):
- self.assertFalse(template_name in [t.name for t in response.template],
+ self.failIf(template_name in [t.name for t in response.template],
u"Template '%s' was used unexpectedly in rendering the response" % template_name)
elif response.template:
self.assertNotEqual(template_name, response.template.name,
u"Template '%s' was used unexpectedly in rendering the response" % template_name)
-
+