Fixed #21266 -- Fixed E201,E202 pep8 warnings.

This commit is contained in:
Larry O'Neill 2013-10-14 20:13:14 +01:00 committed by Tim Graham
parent 42a67ec1cd
commit 83b9bfea44
35 changed files with 152 additions and 145 deletions

View File

@ -403,7 +403,7 @@ class InlineValidator(BaseValidator):
def check_type(cls, attr, type_): def check_type(cls, attr, type_):
if getattr(cls, attr, None) is not None and not isinstance(getattr(cls, attr), type_): if getattr(cls, attr, None) is not None and not isinstance(getattr(cls, attr), type_):
raise ImproperlyConfigured("'%s.%s' should be a %s." raise ImproperlyConfigured("'%s.%s' should be a %s."
% (cls.__name__, attr, type_.__name__ )) % (cls.__name__, attr, type_.__name__))
def check_isseq(cls, label, obj): def check_isseq(cls, label, obj):
if not isinstance(obj, (list, tuple)): if not isinstance(obj, (list, tuple)):

View File

@ -238,8 +238,8 @@ class CommentModerator(object):
return return
recipient_list = [manager_tuple[1] for manager_tuple in settings.MANAGERS] recipient_list = [manager_tuple[1] for manager_tuple in settings.MANAGERS]
t = loader.get_template('comments/comment_notification_email.txt') t = loader.get_template('comments/comment_notification_email.txt')
c = Context({ 'comment': comment, c = Context({'comment': comment,
'content_object': content_object }) 'content_object': content_object})
subject = '[%s] New comment posted on "%s"' % (get_current_site(request).name, subject = '[%s] New comment posted on "%s"' % (get_current_site(request).name,
content_object) content_object)
message = t.render(c) message = t.render(c)

View File

@ -32,7 +32,7 @@ class PostGISIntrospection(DatabaseIntrospection):
try: try:
cursor.execute(oid_sql, ('geometry',)) cursor.execute(oid_sql, ('geometry',))
GEOM_TYPE = cursor.fetchone()[0] GEOM_TYPE = cursor.fetchone()[0]
postgis_types = { GEOM_TYPE : 'GeometryField' } postgis_types = {GEOM_TYPE : 'GeometryField'}
if self.connection.ops.geography: if self.connection.ops.geography:
cursor.execute(oid_sql, ('geography',)) cursor.execute(oid_sql, ('geography',))
GEOG_TYPE = cursor.fetchone()[0] GEOG_TYPE = cursor.fetchone()[0]

View File

@ -226,8 +226,8 @@ class GeoSQLCompiler(compiler.SQLCompiler):
# transformed geometries have an SRID different than that of the # transformed geometries have an SRID different than that of the
# field -- this is only used by `transform` for Oracle and # field -- this is only used by `transform` for Oracle and
# SpatiaLite backends. # SpatiaLite backends.
if self.query.transformed_srid and ( self.connection.ops.oracle or if self.query.transformed_srid and (self.connection.ops.oracle or
self.connection.ops.spatialite ): self.connection.ops.spatialite):
sel_fmt = "'SRID=%d;'||%s" % (self.query.transformed_srid, sel_fmt) sel_fmt = "'SRID=%d;'||%s" % (self.query.transformed_srid, sel_fmt)
else: else:
sel_fmt = '%s' sel_fmt = '%s'

View File

@ -36,8 +36,8 @@ class GeoWhereNode(WhereNode):
def _prepare_data(self, data): def _prepare_data(self, data):
if isinstance(data, (list, tuple)): if isinstance(data, (list, tuple)):
obj, lookup_type, value = data obj, lookup_type, value = data
if ( isinstance(obj, Constraint) and if (isinstance(obj, Constraint) and
isinstance(obj.field, GeometryField) ): isinstance(obj.field, GeometryField)):
data = (GeoConstraint(obj), lookup_type, value) data = (GeoConstraint(obj), lookup_type, value)
return super(GeoWhereNode, self)._prepare_data(data) return super(GeoWhereNode, self)._prepare_data(data)

View File

@ -19,15 +19,16 @@ class OGRIndexError(OGRException, KeyError):
#### OGR error checking codes and routine #### #### OGR error checking codes and routine ####
# OGR Error Codes # OGR Error Codes
OGRERR_DICT = { 1 : (OGRException, 'Not enough data.'), OGRERR_DICT = {
2 : (OGRException, 'Not enough memory.'), 1: (OGRException, 'Not enough data.'),
3 : (OGRException, 'Unsupported geometry type.'), 2: (OGRException, 'Not enough memory.'),
4 : (OGRException, 'Unsupported operation.'), 3: (OGRException, 'Unsupported geometry type.'),
5 : (OGRException, 'Corrupt data.'), 4: (OGRException, 'Unsupported operation.'),
6 : (OGRException, 'OGR failure.'), 5: (OGRException, 'Corrupt data.'),
7 : (SRSException, 'Unsupported SRS.'), 6: (OGRException, 'OGR failure.'),
8 : (OGRException, 'Invalid handle.'), 7: (SRSException, 'Unsupported SRS.'),
} 8: (OGRException, 'Invalid handle.'),
}
OGRERR_NONE = 0 OGRERR_NONE = 0
def check_err(code): def check_err(code):

View File

@ -178,17 +178,18 @@ class OFTStringList(Field): pass
class OFTWideStringList(Field): pass class OFTWideStringList(Field): pass
# Class mapping dictionary for OFT Types and reverse mapping. # Class mapping dictionary for OFT Types and reverse mapping.
OGRFieldTypes = { 0 : OFTInteger, OGRFieldTypes = {
1 : OFTIntegerList, 0: OFTInteger,
2 : OFTReal, 1: OFTIntegerList,
3 : OFTRealList, 2: OFTReal,
4 : OFTString, 3: OFTRealList,
5 : OFTStringList, 4: OFTString,
6 : OFTWideString, 5: OFTStringList,
7 : OFTWideStringList, 6: OFTWideString,
8 : OFTBinary, 7: OFTWideStringList,
9 : OFTDate, 8: OFTBinary,
10 : OFTTime, 9: OFTDate,
11 : OFTDateTime, 10: OFTTime,
} 11: OFTDateTime,
}
ROGRFieldTypes = dict((cls, num) for num, cls in OGRFieldTypes.items()) ROGRFieldTypes = dict((cls, num) for num, cls in OGRFieldTypes.items())

View File

@ -151,8 +151,8 @@ class OGRGeometry(GDALBase):
def from_bbox(cls, bbox): def from_bbox(cls, bbox):
"Constructs a Polygon from a bounding box (4-tuple)." "Constructs a Polygon from a bounding box (4-tuple)."
x0, y0, x1, y1 = bbox x0, y0, x1, y1 = bbox
return OGRGeometry( 'POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' % ( return OGRGeometry('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' % (
x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) ) x0, y0, x0, y1, x1, y1, x1, y0, x0, y0))
### Geometry set-like operations ### ### Geometry set-like operations ###
# g = g1 | g2 # g = g1 | g2

View File

@ -205,7 +205,7 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
# Testing `from_bbox` class method # Testing `from_bbox` class method
bbox = (-180, -90, 180, 90) bbox = (-180, -90, 180, 90)
p = OGRGeometry.from_bbox( bbox ) p = OGRGeometry.from_bbox(bbox)
self.assertEqual(bbox, p.extent) self.assertEqual(bbox, p.extent)
prev = OGRGeometry('POINT(0 0)') prev = OGRGeometry('POINT(0 0)')

View File

@ -22,9 +22,10 @@ class GeoIPRecord(Structure):
('continent_code', c_char_p), ('continent_code', c_char_p),
] ]
geoip_char_fields = [name for name, ctype in GeoIPRecord._fields_ if ctype is c_char_p] geoip_char_fields = [name for name, ctype in GeoIPRecord._fields_ if ctype is c_char_p]
geoip_encodings = { 0: 'iso-8859-1', geoip_encodings = {
0: 'iso-8859-1',
1: 'utf8', 1: 'utf8',
} }
class GeoIPTag(Structure): pass class GeoIPTag(Structure): pass

View File

@ -96,9 +96,9 @@ class ListMixin(object):
indexRange = range(*index.indices(origLen)) indexRange = range(*index.indices(origLen))
newLen = origLen - len(indexRange) newLen = origLen - len(indexRange)
newItems = ( self._get_single_internal(i) newItems = (self._get_single_internal(i)
for i in xrange(origLen) for i in xrange(origLen)
if i not in indexRange ) if i not in indexRange)
self._rebuild(newLen, newItems) self._rebuild(newLen, newItems)

View File

@ -116,7 +116,7 @@ class ListMixinTest(unittest.TestCase):
self.assertEqual(pl, ul[:], 'set slice [%d:%d]' % (i, j)) self.assertEqual(pl, ul[:], 'set slice [%d:%d]' % (i, j))
for k in self.step_range(): for k in self.step_range():
ssl = nextRange( len(ul[i:j:k]) ) ssl = nextRange(len(ul[i:j:k]))
ul[i:j:k] = ssl ul[i:j:k] = ssl
pl[i:j:k] = ssl pl[i:j:k] = ssl
self.assertEqual(pl, ul[:], 'set slice [%d:%d:%d]' % (i, j, k)) self.assertEqual(pl, ul[:], 'set slice [%d:%d:%d]' % (i, j, k))
@ -127,12 +127,12 @@ class ListMixinTest(unittest.TestCase):
self.assertRaises(ValueError, setfcn, ul, i, j, k, sliceLen - 1) self.assertRaises(ValueError, setfcn, ul, i, j, k, sliceLen - 1)
for k in self.step_range(): for k in self.step_range():
ssl = nextRange( len(ul[i::k]) ) ssl = nextRange(len(ul[i::k]))
ul[i::k] = ssl ul[i::k] = ssl
pl[i::k] = ssl pl[i::k] = ssl
self.assertEqual(pl, ul[:], 'set slice [%d::%d]' % (i, k)) self.assertEqual(pl, ul[:], 'set slice [%d::%d]' % (i, k))
ssl = nextRange( len(ul[:i:k]) ) ssl = nextRange(len(ul[:i:k]))
ul[:i:k] = ssl ul[:i:k] = ssl
pl[:i:k] = ssl pl[:i:k] = ssl
self.assertEqual(pl, ul[:], 'set slice [:%d:%d]' % (i, k)) self.assertEqual(pl, ul[:], 'set slice [:%d:%d]' % (i, k))

View File

@ -95,7 +95,7 @@ class GoogleZoom(object):
lon = (px[0] - npix) / self._degpp[zoom] lon = (px[0] - npix) / self._degpp[zoom]
# Calculating the latitude value. # Calculating the latitude value.
lat = RTOD * ( 2 * atan(exp((px[1] - npix)/ (-1.0 * self._radpp[zoom]))) - 0.5 * pi) lat = RTOD * (2 * atan(exp((px[1] - npix)/ (-1.0 * self._radpp[zoom]))) - 0.5 * pi)
# Returning the longitude, latitude coordinate pair. # Returning the longitude, latitude coordinate pair.
return (lon, lat) return (lon, lat)

View File

@ -140,7 +140,7 @@ class DistanceTest(TestCase):
# Testing geodetic distance calculation with a non-point geometry # Testing geodetic distance calculation with a non-point geometry
# (a LineString of Wollongong and Shellharbour coords). # (a LineString of Wollongong and Shellharbour coords).
ls = LineString( ( (150.902, -34.4245), (150.87, -34.5789) ) ) ls = LineString(((150.902, -34.4245), (150.87, -34.5789)))
if oracle or connection.ops.geography: if oracle or connection.ops.geography:
# Reference query: # Reference query:
# SELECT ST_distance_sphere(point, ST_GeomFromText('LINESTRING(150.9020 -34.4245,150.8700 -34.5789)', 4326)) FROM distapp_australiacity ORDER BY name; # SELECT ST_distance_sphere(point, ST_GeomFromText('LINESTRING(150.9020 -34.4245,150.8700 -34.5789)', 4326)) FROM distapp_australiacity ORDER BY name;

View File

@ -46,7 +46,7 @@ city_dict = dict((name, coords) for name, coords in city_data)
interstate_data = ( interstate_data = (
('I-45', ('I-45',
'LINESTRING(-95.3708481 29.7765870 11.339,-95.3694580 29.7787980 4.536,-95.3690305 29.7797359 9.762,-95.3691886 29.7812450 12.448,-95.3696447 29.7850144 10.457,-95.3702511 29.7868518 9.418,-95.3706724 29.7881286 14.858,-95.3711632 29.7896157 15.386,-95.3714525 29.7936267 13.168,-95.3717848 29.7955007 15.104,-95.3717719 29.7969804 16.516,-95.3717305 29.7982117 13.923,-95.3717254 29.8000778 14.385,-95.3719875 29.8013539 15.160,-95.3720575 29.8026785 15.544,-95.3721321 29.8040912 14.975,-95.3722074 29.8050998 15.688,-95.3722779 29.8060430 16.099,-95.3733818 29.8076750 15.197,-95.3741563 29.8103686 17.268,-95.3749458 29.8129927 19.857,-95.3763564 29.8144557 15.435)', 'LINESTRING(-95.3708481 29.7765870 11.339,-95.3694580 29.7787980 4.536,-95.3690305 29.7797359 9.762,-95.3691886 29.7812450 12.448,-95.3696447 29.7850144 10.457,-95.3702511 29.7868518 9.418,-95.3706724 29.7881286 14.858,-95.3711632 29.7896157 15.386,-95.3714525 29.7936267 13.168,-95.3717848 29.7955007 15.104,-95.3717719 29.7969804 16.516,-95.3717305 29.7982117 13.923,-95.3717254 29.8000778 14.385,-95.3719875 29.8013539 15.160,-95.3720575 29.8026785 15.544,-95.3721321 29.8040912 14.975,-95.3722074 29.8050998 15.688,-95.3722779 29.8060430 16.099,-95.3733818 29.8076750 15.197,-95.3741563 29.8103686 17.268,-95.3749458 29.8129927 19.857,-95.3763564 29.8144557 15.435)',
( 11.339, 4.536, 9.762, 12.448, 10.457, 9.418, 14.858, (11.339, 4.536, 9.762, 12.448, 10.457, 9.418, 14.858,
15.386, 13.168, 15.104, 16.516, 13.923, 14.385, 15.16 , 15.386, 13.168, 15.104, 16.516, 13.923, 14.385, 15.16 ,
15.544, 14.975, 15.688, 16.099, 15.197, 17.268, 19.857, 15.544, 14.975, 15.688, 16.099, 15.197, 17.268, 19.857,
15.435), 15.435),

View File

@ -459,11 +459,13 @@ class GeoQuerySetTest(TestCase):
@no_spatialite @no_spatialite
def test_force_rhr(self): def test_force_rhr(self):
"Testing GeoQuerySet.force_rhr()." "Testing GeoQuerySet.force_rhr()."
rings = ( ( (0, 0), (5, 0), (0, 5), (0, 0) ), rings = (
( (1, 1), (1, 3), (3, 1), (1, 1) ), ((0, 0), (5, 0), (0, 5), (0, 0)),
((1, 1), (1, 3), (3, 1), (1, 1)),
) )
rhr_rings = ( ( (0, 0), (0, 5), (5, 0), (0, 0) ), rhr_rings = (
( (1, 1), (3, 1), (1, 3), (1, 1) ), ((0, 0), (0, 5), (5, 0), (0, 0)),
((1, 1), (3, 1), (1, 3), (1, 1)),
) )
State.objects.create(name='Foo', poly=Polygon(*rings)) State.objects.create(name='Foo', poly=Polygon(*rings))
s = State.objects.force_rhr().get(name='Foo') s = State.objects.force_rhr().get(name='Foo')
@ -648,7 +650,7 @@ class GeoQuerySetTest(TestCase):
@no_spatialite @no_spatialite
def test_reverse_geom(self): def test_reverse_geom(self):
"Testing GeoQuerySet.reverse_geom()." "Testing GeoQuerySet.reverse_geom()."
coords = [ (-95.363151, 29.763374), (-95.448601, 29.713803) ] coords = [(-95.363151, 29.763374), (-95.448601, 29.713803)]
Track.objects.create(name='Foo', line=LineString(coords)) Track.objects.create(name='Foo', line=LineString(coords))
t = Track.objects.reverse_geom().get(name='Foo') t = Track.objects.reverse_geom().get(name='Foo')
coords.reverse() coords.reverse()

View File

@ -31,7 +31,7 @@ def csrf(request):
return smart_text(token) return smart_text(token)
_get_val = lazy(_get_val, six.text_type) _get_val = lazy(_get_val, six.text_type)
return {'csrf_token': _get_val() } return {'csrf_token': _get_val()}
def debug(request): def debug(request):
"Returns context variables helpful for debugging." "Returns context variables helpful for debugging."

View File

@ -32,7 +32,7 @@ def safeRef(target, onDelete = None):
if callable(onDelete): if callable(onDelete):
return weakref.ref(target, onDelete) return weakref.ref(target, onDelete)
else: else:
return weakref.ref( target ) return weakref.ref(target)
class BoundMethodWeakref(object): class BoundMethodWeakref(object):
"""'Safe' and reusable weak references to instance methods """'Safe' and reusable weak references to instance methods
@ -70,7 +70,7 @@ class BoundMethodWeakref(object):
_allInstances = weakref.WeakValueDictionary() _allInstances = weakref.WeakValueDictionary()
def __new__( cls, target, onDelete=None, *arguments,**named ): def __new__(cls, target, onDelete=None, *arguments,**named):
"""Create new instance or return current instance """Create new instance or return current instance
Basically this method of construction allows us to Basically this method of construction allows us to
@ -85,12 +85,12 @@ class BoundMethodWeakref(object):
key = cls.calculateKey(target) key = cls.calculateKey(target)
current =cls._allInstances.get(key) current =cls._allInstances.get(key)
if current is not None: if current is not None:
current.deletionMethods.append( onDelete) current.deletionMethods.append(onDelete)
return current return current
else: else:
base = super( BoundMethodWeakref, cls).__new__( cls ) base = super(BoundMethodWeakref, cls).__new__(cls)
cls._allInstances[key] = base cls._allInstances[key] = base
base.__init__( target, onDelete, *arguments,**named) base.__init__(target, onDelete, *arguments,**named)
return base return base
def __init__(self, target, onDelete=None): def __init__(self, target, onDelete=None):
@ -112,13 +112,13 @@ class BoundMethodWeakref(object):
methods = self.deletionMethods[:] methods = self.deletionMethods[:]
del self.deletionMethods[:] del self.deletionMethods[:]
try: try:
del self.__class__._allInstances[ self.key ] del self.__class__._allInstances[self.key]
except KeyError: except KeyError:
pass pass
for function in methods: for function in methods:
try: try:
if callable( function ): if callable(function):
function( self ) function(self)
except Exception as e: except Exception as e:
try: try:
traceback.print_exc() traceback.print_exc()
@ -127,20 +127,20 @@ class BoundMethodWeakref(object):
self, function, e) self, function, e)
) )
self.deletionMethods = [onDelete] self.deletionMethods = [onDelete]
self.key = self.calculateKey( target ) self.key = self.calculateKey(target)
self.weakSelf = weakref.ref(target.__self__, remove) self.weakSelf = weakref.ref(target.__self__, remove)
self.weakFunc = weakref.ref(target.__func__, remove) self.weakFunc = weakref.ref(target.__func__, remove)
self.selfName = str(target.__self__) self.selfName = str(target.__self__)
self.funcName = str(target.__func__.__name__) self.funcName = str(target.__func__.__name__)
def calculateKey( cls, target ): def calculateKey(cls, target):
"""Calculate the reference key for this reference """Calculate the reference key for this reference
Currently this is a two-tuple of the id()'s of the Currently this is a two-tuple of the id()'s of the
target object and the target function respectively. target object and the target function respectively.
""" """
return (id(target.__self__),id(target.__func__)) return (id(target.__self__),id(target.__func__))
calculateKey = classmethod( calculateKey ) calculateKey = classmethod(calculateKey)
def __str__(self): def __str__(self):
"""Give a friendly representation of the object""" """Give a friendly representation of the object"""
@ -155,7 +155,7 @@ class BoundMethodWeakref(object):
def __hash__(self): def __hash__(self):
return hash(self.key) return hash(self.key)
def __bool__( self ): def __bool__(self):
"""Whether we are still a valid reference""" """Whether we are still a valid reference"""
return self() is not None return self() is not None

View File

@ -36,7 +36,7 @@ class DebugParser(Parser):
self.command_stack = [] self.command_stack = []
def enter_command(self, command, token): def enter_command(self, command, token):
self.command_stack.append( (command, token.source) ) self.command_stack.append((command, token.source))
def exit_command(self): def exit_command(self):
self.command_stack.pop() self.command_stack.pop()

View File

@ -613,10 +613,10 @@ class DocTestParser:
self._parse_example(m, name, lineno) self._parse_example(m, name, lineno)
# Create an Example, and add it to the list. # Create an Example, and add it to the list.
if not self._IS_BLANK_OR_COMMENT(source): if not self._IS_BLANK_OR_COMMENT(source):
output.append( Example(source, want, exc_msg, output.append(Example(source, want, exc_msg,
lineno=lineno, lineno=lineno,
indent=min_indent+len(m.group('indent')), indent=min_indent+len(m.group('indent')),
options=options) ) options=options))
# Update lineno (lines inside this example) # Update lineno (lines inside this example)
lineno += string.count('\n', m.start(), m.end()) lineno += string.count('\n', m.start(), m.end())
# Update charno. # Update charno.
@ -1498,7 +1498,7 @@ class DocTestRunner:
if t == 0: if t == 0:
notests.append(name) notests.append(name)
elif f == 0: elif f == 0:
passed.append( (name, t) ) passed.append((name, t))
else: else:
failed.append(x) failed.append(x)
if verbose: if verbose:

View File

@ -92,42 +92,42 @@ PALETTES = {
'MIGRATE_FAILURE': {}, 'MIGRATE_FAILURE': {},
}, },
DARK_PALETTE: { DARK_PALETTE: {
'ERROR': { 'fg': 'red', 'opts': ('bold',) }, 'ERROR': {'fg': 'red', 'opts': ('bold',)},
'NOTICE': { 'fg': 'red' }, 'NOTICE': {'fg': 'red'},
'SQL_FIELD': { 'fg': 'green', 'opts': ('bold',) }, 'SQL_FIELD': {'fg': 'green', 'opts': ('bold',)},
'SQL_COLTYPE': { 'fg': 'green' }, 'SQL_COLTYPE': {'fg': 'green'},
'SQL_KEYWORD': { 'fg': 'yellow' }, 'SQL_KEYWORD': {'fg': 'yellow'},
'SQL_TABLE': { 'opts': ('bold',) }, 'SQL_TABLE': {'opts': ('bold',)},
'HTTP_INFO': { 'opts': ('bold',) }, 'HTTP_INFO': {'opts': ('bold',)},
'HTTP_SUCCESS': { }, 'HTTP_SUCCESS': {},
'HTTP_REDIRECT': { 'fg': 'green' }, 'HTTP_REDIRECT': {'fg': 'green'},
'HTTP_NOT_MODIFIED': { 'fg': 'cyan' }, 'HTTP_NOT_MODIFIED': {'fg': 'cyan'},
'HTTP_BAD_REQUEST': { 'fg': 'red', 'opts': ('bold',) }, 'HTTP_BAD_REQUEST': {'fg': 'red', 'opts': ('bold',)},
'HTTP_NOT_FOUND': { 'fg': 'yellow' }, 'HTTP_NOT_FOUND': {'fg': 'yellow'},
'HTTP_SERVER_ERROR': { 'fg': 'magenta', 'opts': ('bold',) }, 'HTTP_SERVER_ERROR': {'fg': 'magenta', 'opts': ('bold',)},
'MIGRATE_HEADING': { 'fg': 'cyan', 'opts': ('bold',) }, 'MIGRATE_HEADING': {'fg': 'cyan', 'opts': ('bold',)},
'MIGRATE_LABEL': { 'opts': ('bold',) }, 'MIGRATE_LABEL': {'opts': ('bold',)},
'MIGRATE_SUCCESS': { 'fg': 'green', 'opts': ('bold',) }, 'MIGRATE_SUCCESS': {'fg': 'green', 'opts': ('bold',)},
'MIGRATE_FAILURE': { 'fg': 'red', 'opts': ('bold',) }, 'MIGRATE_FAILURE': {'fg': 'red', 'opts': ('bold',)},
}, },
LIGHT_PALETTE: { LIGHT_PALETTE: {
'ERROR': { 'fg': 'red', 'opts': ('bold',) }, 'ERROR': {'fg': 'red', 'opts': ('bold',)},
'NOTICE': { 'fg': 'red' }, 'NOTICE': {'fg': 'red'},
'SQL_FIELD': { 'fg': 'green', 'opts': ('bold',) }, 'SQL_FIELD': {'fg': 'green', 'opts': ('bold',)},
'SQL_COLTYPE': { 'fg': 'green' }, 'SQL_COLTYPE': {'fg': 'green'},
'SQL_KEYWORD': { 'fg': 'blue' }, 'SQL_KEYWORD': {'fg': 'blue'},
'SQL_TABLE': { 'opts': ('bold',) }, 'SQL_TABLE': {'opts': ('bold',)},
'HTTP_INFO': { 'opts': ('bold',) }, 'HTTP_INFO': {'opts': ('bold',)},
'HTTP_SUCCESS': { }, 'HTTP_SUCCESS': {},
'HTTP_REDIRECT': { 'fg': 'green', 'opts': ('bold',) }, 'HTTP_REDIRECT': {'fg': 'green', 'opts': ('bold',)},
'HTTP_NOT_MODIFIED': { 'fg': 'green' }, 'HTTP_NOT_MODIFIED': {'fg': 'green'},
'HTTP_BAD_REQUEST': { 'fg': 'red', 'opts': ('bold',) }, 'HTTP_BAD_REQUEST': {'fg': 'red', 'opts': ('bold',)},
'HTTP_NOT_FOUND': { 'fg': 'red' }, 'HTTP_NOT_FOUND': {'fg': 'red'},
'HTTP_SERVER_ERROR': { 'fg': 'magenta', 'opts': ('bold',) }, 'HTTP_SERVER_ERROR': {'fg': 'magenta', 'opts': ('bold',)},
'MIGRATE_HEADING': { 'fg': 'cyan', 'opts': ('bold',) }, 'MIGRATE_HEADING': {'fg': 'cyan', 'opts': ('bold',)},
'MIGRATE_LABEL': { 'opts': ('bold',) }, 'MIGRATE_LABEL': {'opts': ('bold',)},
'MIGRATE_SUCCESS': { 'fg': 'green', 'opts': ('bold',) }, 'MIGRATE_SUCCESS': {'fg': 'green', 'opts': ('bold',)},
'MIGRATE_FAILURE': { 'fg': 'red', 'opts': ('bold',) }, 'MIGRATE_FAILURE': {'fg': 'red', 'opts': ('bold',)},
} }
} }
DEFAULT_PALETTE = DARK_PALETTE DEFAULT_PALETTE = DARK_PALETTE

View File

@ -343,7 +343,7 @@ class ExceptionReporter(object):
before = escape(template_source[upto:start]) before = escape(template_source[upto:start])
during = escape(template_source[start:end]) during = escape(template_source[start:end])
after = escape(template_source[end:next]) after = escape(template_source[end:next])
source_lines.append( (num, escape(template_source[upto:next])) ) source_lines.append((num, escape(template_source[upto:next])))
upto = next upto = next
total = len(source_lines) total = len(source_lines)
@ -450,7 +450,7 @@ class ExceptionReporter(object):
""" """
import traceback import traceback
frames = self.get_traceback_frames() frames = self.get_traceback_frames()
tb = [ (f['filename'], f['lineno'], f['function'], f['context_line']) for f in frames ] tb = [(f['filename'], f['lineno'], f['function'], f['context_line']) for f in frames]
list = ['Traceback (most recent call last):\n'] list = ['Traceback (most recent call last):\n']
list += traceback.format_list(tb) list += traceback.format_list(tb)
list += traceback.format_exception_only(self.exc_type, self.exc_value) list += traceback.format_exception_only(self.exc_type, self.exc_value)

View File

@ -4,7 +4,7 @@ install-script = scripts/rpm-install.sh
[flake8] [flake8]
exclude=./django/utils/dictconfig.py,./django/contrib/comments/*,./django/utils/unittest.py,./tests/comment_tests/*,./django/test/_doctest.py exclude=./django/utils/dictconfig.py,./django/contrib/comments/*,./django/utils/unittest.py,./tests/comment_tests/*,./django/test/_doctest.py
ignore=E123,E124,E125,E126,E127,E128,E225,E226,E241,E251,E302,E501,E121,E122,E201,E202,E203,E221,E227,E231,E261,E301,E303,E502,E701,F401,F403,F841,W601 ignore=E123,E124,E125,E126,E127,E128,E225,E226,E241,E251,E302,E501,E121,E122,E203,E221,E227,E231,E261,E301,E303,E502,E701,F401,F403,F841,W601
[metadata] [metadata]
license-file = LICENSE license-file = LICENSE

View File

@ -101,7 +101,7 @@ class CustomRedirects(TestCase):
new object. new object.
Refs 8001, 18310, 19505. Refs 8001, 18310, 19505.
""" """
post_data = { 'name': 'John Doe', } post_data = {'name': 'John Doe'}
self.assertEqual(Person.objects.count(), 0) self.assertEqual(Person.objects.count(), 0)
response = self.client.post( response = self.client.post(
reverse('admin:admin_custom_urls_person_add'), post_data) reverse('admin:admin_custom_urls_person_add'), post_data)
@ -120,7 +120,7 @@ class CustomRedirects(TestCase):
Person.objects.create(name='John Doe') Person.objects.create(name='John Doe')
self.assertEqual(Person.objects.count(), 1) self.assertEqual(Person.objects.count(), 1)
person = Person.objects.all()[0] person = Person.objects.all()[0]
post_data = { 'name': 'Jack Doe', } post_data = {'name': 'Jack Doe'}
response = self.client.post( response = self.client.post(
reverse('admin:admin_custom_urls_person_change', args=[person.pk]), post_data) reverse('admin:admin_custom_urls_person_change', args=[person.pk]), post_data)
self.assertRedirects( self.assertRedirects(
@ -131,7 +131,7 @@ class CustomRedirects(TestCase):
Ensures that the ModelAdmin.response_add()'s parameter `post_url_continue` Ensures that the ModelAdmin.response_add()'s parameter `post_url_continue`
controls the redirection after an object has been created. controls the redirection after an object has been created.
""" """
post_data = { 'name': 'SuperFast', '_continue': '1' } post_data = {'name': 'SuperFast', '_continue': '1'}
self.assertEqual(Car.objects.count(), 0) self.assertEqual(Car.objects.count(), 0)
response = self.client.post( response = self.client.post(
reverse('admin:admin_custom_urls_car_add'), post_data) reverse('admin:admin_custom_urls_car_add'), post_data)

View File

@ -367,7 +367,9 @@ class AdminFileWidgetTest(DjangoTestCase):
w = widgets.AdminFileWidget() w = widgets.AdminFileWidget()
self.assertHTMLEqual( self.assertHTMLEqual(
w.render('test', album.cover_art), w.render('test', album.cover_art),
'<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/hybrid_theory.jpg">albums\hybrid_theory.jpg</a> <span class="clearable-file-input"><input type="checkbox" name="test-clear" id="test-clear_id" /> <label for="test-clear_id">Clear</label></span><br />Change: <input type="file" name="test" /></p>' % { 'STORAGE_URL': default_storage.url('') }, '<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/hybrid_theory.jpg">albums\hybrid_theory.jpg</a> <span class="clearable-file-input"><input type="checkbox" name="test-clear" id="test-clear_id" /> <label for="test-clear_id">Clear</label></span><br />Change: <input type="file" name="test" /></p>' % {
'STORAGE_URL': default_storage.url('')
},
) )
self.assertHTMLEqual( self.assertHTMLEqual(

View File

@ -353,7 +353,7 @@ class BaseCacheTests(object):
'ascii': 'ascii_value', 'ascii': 'ascii_value',
'unicode_ascii': 'Iñtërnâtiônàlizætiøn1', 'unicode_ascii': 'Iñtërnâtiônàlizætiøn1',
'Iñtërnâtiônàlizætiøn': 'Iñtërnâtiônàlizætiøn2', 'Iñtërnâtiônàlizætiøn': 'Iñtërnâtiônàlizætiøn2',
'ascii2': {'x' : 1 } 'ascii2': {'x' : 1}
} }
# Test `set` # Test `set`
for (key, value) in stuff.items(): for (key, value) in stuff.items():

View File

@ -315,9 +315,9 @@ class DefaultFiltersTests(TestCase):
# Check urlize handles brackets properly (#19070) # Check urlize handles brackets properly (#19070)
self.assertEqual(urlize('[see www.example.com]'), self.assertEqual(urlize('[see www.example.com]'),
'[see <a href="http://www.example.com" rel="nofollow">www.example.com</a>]' ) '[see <a href="http://www.example.com" rel="nofollow">www.example.com</a>]')
self.assertEqual(urlize('see test[at[example.com'), self.assertEqual(urlize('see test[at[example.com'),
'see <a href="http://test[at[example.com" rel="nofollow">test[at[example.com</a>' ) 'see <a href="http://test[at[example.com" rel="nofollow">test[at[example.com</a>')
self.assertEqual(urlize('[http://168.192.0.1](http://168.192.0.1)'), self.assertEqual(urlize('[http://168.192.0.1](http://168.192.0.1)'),
'[<a href="http://168.192.0.1](http://168.192.0.1)" rel="nofollow">http://168.192.0.1](http://168.192.0.1)</a>') '[<a href="http://168.192.0.1](http://168.192.0.1)" rel="nofollow">http://168.192.0.1](http://168.192.0.1)</a>')

View File

@ -978,7 +978,7 @@ class FieldsTests(SimpleTestCase):
class HiddenNullBooleanForm(Form): class HiddenNullBooleanForm(Form):
hidden_nullbool1 = NullBooleanField(widget=HiddenInput, initial=True) hidden_nullbool1 = NullBooleanField(widget=HiddenInput, initial=True)
hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False) hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False)
f = HiddenNullBooleanForm({ 'hidden_nullbool1': 'True', 'hidden_nullbool2': 'False' }) f = HiddenNullBooleanForm({'hidden_nullbool1': 'True', 'hidden_nullbool2': 'False'})
self.assertEqual(None, f.full_clean()) self.assertEqual(None, f.full_clean())
self.assertEqual(True, f.cleaned_data['hidden_nullbool1']) self.assertEqual(True, f.cleaned_data['hidden_nullbool1'])
self.assertEqual(False, f.cleaned_data['hidden_nullbool2']) self.assertEqual(False, f.cleaned_data['hidden_nullbool2'])
@ -991,7 +991,7 @@ class FieldsTests(SimpleTestCase):
nullbool0 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES)) nullbool0 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES))
nullbool1 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES)) nullbool1 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES))
nullbool2 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES)) nullbool2 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES))
f = MySQLNullBooleanForm({ 'nullbool0': '1', 'nullbool1': '0', 'nullbool2': '' }) f = MySQLNullBooleanForm({'nullbool0': '1', 'nullbool1': '0', 'nullbool2': ''})
self.assertEqual(None, f.full_clean()) self.assertEqual(None, f.full_clean())
self.assertEqual(True, f.cleaned_data['nullbool0']) self.assertEqual(True, f.cleaned_data['nullbool0'])
self.assertEqual(False, f.cleaned_data['nullbool1']) self.assertEqual(False, f.cleaned_data['nullbool1'])

View File

@ -1205,7 +1205,7 @@ class TestEmptyFormSet(TestCase):
"""Test that an empty formset still calls clean()""" """Test that an empty formset still calls clean()"""
EmptyFsetWontValidateFormset = formset_factory(FavoriteDrinkForm, extra=0, formset=EmptyFsetWontValidate) EmptyFsetWontValidateFormset = formset_factory(FavoriteDrinkForm, extra=0, formset=EmptyFsetWontValidate)
formset = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'0'},prefix="form") formset = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'0'},prefix="form")
formset2 = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'1', 'form-0-name':'bah' },prefix="form") formset2 = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'1', 'form-0-name':'bah'},prefix="form")
self.assertFalse(formset.is_valid()) self.assertFalse(formset.is_valid())
self.assertFalse(formset2.is_valid()) self.assertFalse(formset2.is_valid())

View File

@ -755,7 +755,7 @@ class FormattingTests(TransRealMixin, TestCase):
""" """
Tests the {% localize %} templatetag Tests the {% localize %} templatetag
""" """
context = Context({'value': 3.14 }) context = Context({'value': 3.14})
template1 = Template("{% load l10n %}{% localize %}{{ value }}{% endlocalize %};{% localize on %}{{ value }}{% endlocalize %}") template1 = Template("{% load l10n %}{% localize %}{{ value }}{% endlocalize %};{% localize on %}{{ value }}{% endlocalize %}")
template2 = Template("{% load l10n %}{{ value }};{% localize off %}{{ value }};{% endlocalize %}{{ value }}") template2 = Template("{% load l10n %}{{ value }};{% localize off %}{{ value }};{% endlocalize %}{{ value }}")
template3 = Template('{% load l10n %}{{ value }};{{ value|unlocalize }}') template3 = Template('{% load l10n %}{{ value }};{{ value|unlocalize }}')
@ -789,7 +789,7 @@ class FormattingTests(TransRealMixin, TestCase):
'cents_paid': decimal.Decimal('59.47'), 'cents_paid': decimal.Decimal('59.47'),
'products_delivered': 12000, 'products_delivered': 12000,
}) })
context = Context({'form': form }) context = Context({'form': form})
self.assertTrue(form.is_valid()) self.assertTrue(form.is_valid())
self.assertHTMLEqual( self.assertHTMLEqual(

View File

@ -696,7 +696,7 @@ class UniqueTest(TestCase):
def test_explicitpk_unspecified(self): def test_explicitpk_unspecified(self):
"""Test for primary_key being in the form and failing validation.""" """Test for primary_key being in the form and failing validation."""
form = ExplicitPKForm({'key': '', 'desc': '' }) form = ExplicitPKForm({'key': '', 'desc': ''})
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
def test_explicitpk_unique(self): def test_explicitpk_unique(self):

View File

@ -50,10 +50,10 @@ def get_filter_tests():
'filter-timesince06' : ('{{ a|timesince:b }}', {'a':now_tz - timedelta(hours=8), 'b':now_tz}, '8\xa0hours'), 'filter-timesince06' : ('{{ a|timesince:b }}', {'a':now_tz - timedelta(hours=8), 'b':now_tz}, '8\xa0hours'),
# Regression for #7443 # Regression for #7443
'filter-timesince07': ('{{ earlier|timesince }}', { 'earlier': now - timedelta(days=7) }, '1\xa0week'), 'filter-timesince07': ('{{ earlier|timesince }}', {'earlier': now - timedelta(days=7)}, '1\xa0week'),
'filter-timesince08': ('{{ earlier|timesince:now }}', { 'now': now, 'earlier': now - timedelta(days=7) }, '1\xa0week'), 'filter-timesince08': ('{{ earlier|timesince:now }}', {'now': now, 'earlier': now - timedelta(days=7)}, '1\xa0week'),
'filter-timesince09': ('{{ later|timesince }}', { 'later': now + timedelta(days=7) }, '0\xa0minutes'), 'filter-timesince09': ('{{ later|timesince }}', {'later': now + timedelta(days=7)}, '0\xa0minutes'),
'filter-timesince10': ('{{ later|timesince:now }}', { 'now': now, 'later': now + timedelta(days=7) }, '0\xa0minutes'), 'filter-timesince10': ('{{ later|timesince:now }}', {'now': now, 'later': now + timedelta(days=7)}, '0\xa0minutes'),
# Ensures that differing timezones are calculated correctly # Ensures that differing timezones are calculated correctly
# Tests trying to compare a timezone-aware 'now' to now aren't supported on no-tz-support systems (e.g Windows). # Tests trying to compare a timezone-aware 'now' to now aren't supported on no-tz-support systems (e.g Windows).
@ -78,10 +78,10 @@ def get_filter_tests():
'filter-timeuntil05' : ('{{ a|timeuntil:b }}', {'a':now - timedelta(days=2), 'b':now - timedelta(days=2, minutes=1)}, '1\xa0minute'), 'filter-timeuntil05' : ('{{ a|timeuntil:b }}', {'a':now - timedelta(days=2), 'b':now - timedelta(days=2, minutes=1)}, '1\xa0minute'),
# Regression for #7443 # Regression for #7443
'filter-timeuntil06': ('{{ earlier|timeuntil }}', { 'earlier': now - timedelta(days=7) }, '0\xa0minutes'), 'filter-timeuntil06': ('{{ earlier|timeuntil }}', {'earlier': now - timedelta(days=7)}, '0\xa0minutes'),
'filter-timeuntil07': ('{{ earlier|timeuntil:now }}', { 'now': now, 'earlier': now - timedelta(days=7) }, '0\xa0minutes'), 'filter-timeuntil07': ('{{ earlier|timeuntil:now }}', {'now': now, 'earlier': now - timedelta(days=7)}, '0\xa0minutes'),
'filter-timeuntil08': ('{{ later|timeuntil }}', { 'later': now + timedelta(days=7, hours=1) }, '1\xa0week'), 'filter-timeuntil08': ('{{ later|timeuntil }}', {'later': now + timedelta(days=7, hours=1)}, '1\xa0week'),
'filter-timeuntil09': ('{{ later|timeuntil:now }}', { 'now': now, 'later': now + timedelta(days=7) }, '1\xa0week'), 'filter-timeuntil09': ('{{ later|timeuntil:now }}', {'now': now, 'later': now + timedelta(days=7)}, '1\xa0week'),
# Ensures that differing timezones are calculated correctly # Ensures that differing timezones are calculated correctly
# Tests trying to compare a timezone-aware 'now' to now aren't supported on no-tz-support systems (e.g Windows). # Tests trying to compare a timezone-aware 'now' to now aren't supported on no-tz-support systems (e.g Windows).
@ -267,8 +267,8 @@ def get_filter_tests():
'filter-default_if_none01': ('{{ a|default:"x<" }}', {"a": None}, "x<"), 'filter-default_if_none01': ('{{ a|default:"x<" }}', {"a": None}, "x<"),
'filter-default_if_none02': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": None}, "x<"), 'filter-default_if_none02': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": None}, "x<"),
'filter-phone2numeric01': ('{{ a|phone2numeric }} {{ b|phone2numeric }}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>") }, "&lt;1-800-2255-63&gt; <1-800-2255-63>"), 'filter-phone2numeric01': ('{{ a|phone2numeric }} {{ b|phone2numeric }}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>")}, "&lt;1-800-2255-63&gt; <1-800-2255-63>"),
'filter-phone2numeric02': ('{% autoescape off %}{{ a|phone2numeric }} {{ b|phone2numeric }}{% endautoescape %}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>") }, "<1-800-2255-63> <1-800-2255-63>"), 'filter-phone2numeric02': ('{% autoescape off %}{{ a|phone2numeric }} {{ b|phone2numeric }}{% endautoescape %}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>")}, "<1-800-2255-63> <1-800-2255-63>"),
'filter-phone2numeric03': ('{{ a|phone2numeric }}', {"a": "How razorback-jumping frogs can level six piqued gymnasts!"}, "469 729672225-5867464 37647 226 53835 749 747833 49662787!"), 'filter-phone2numeric03': ('{{ a|phone2numeric }}', {"a": "How razorback-jumping frogs can level six piqued gymnasts!"}, "469 729672225-5867464 37647 226 53835 749 747833 49662787!"),
# Ensure iriencode keeps safe strings: # Ensure iriencode keeps safe strings:
@ -347,7 +347,7 @@ def get_filter_tests():
# Test that joining with unsafe joiners don't result in unsafe strings (#11377) # Test that joining with unsafe joiners don't result in unsafe strings (#11377)
'join05': (r'{{ a|join:var }}', {'a': ['alpha', 'beta & me'], 'var': ' & '}, 'alpha &amp; beta &amp; me'), 'join05': (r'{{ a|join:var }}', {'a': ['alpha', 'beta & me'], 'var': ' & '}, 'alpha &amp; beta &amp; me'),
'join06': (r'{{ a|join:var }}', {'a': ['alpha', 'beta & me'], 'var': mark_safe(' & ')}, 'alpha & beta &amp; me'), 'join06': (r'{{ a|join:var }}', {'a': ['alpha', 'beta & me'], 'var': mark_safe(' & ')}, 'alpha & beta &amp; me'),
'join07': (r'{{ a|join:var|lower }}', {'a': ['Alpha', 'Beta & me'], 'var': ' & ' }, 'alpha &amp; beta &amp; me'), 'join07': (r'{{ a|join:var|lower }}', {'a': ['Alpha', 'Beta & me'], 'var': ' & '}, 'alpha &amp; beta &amp; me'),
'join08': (r'{{ a|join:var|lower }}', {'a': ['Alpha', 'Beta & me'], 'var': mark_safe(' & ')}, 'alpha & beta &amp; me'), 'join08': (r'{{ a|join:var|lower }}', {'a': ['Alpha', 'Beta & me'], 'var': mark_safe(' & ')}, 'alpha & beta &amp; me'),
'date01': (r'{{ d|date:"m" }}', {'d': datetime(2008, 1, 1)}, '01'), 'date01': (r'{{ d|date:"m" }}', {'d': datetime(2008, 1, 1)}, '01'),

View File

@ -1102,19 +1102,19 @@ class TemplateTests(TransRealMixin, TestCase):
'ifchanged08': ('{% for data in datalist %}{% for c,d in data %}{% if c %}{% ifchanged %}{{ d }}{% endifchanged %}{% endif %}{% endfor %}{% endfor %}', {'datalist': [[(1, 'a'), (1, 'a'), (0, 'b'), (1, 'c')], [(0, 'a'), (1, 'c'), (1, 'd'), (1, 'd'), (0, 'e')]]}, 'accd'), 'ifchanged08': ('{% for data in datalist %}{% for c,d in data %}{% if c %}{% ifchanged %}{{ d }}{% endifchanged %}{% endif %}{% endfor %}{% endfor %}', {'datalist': [[(1, 'a'), (1, 'a'), (0, 'b'), (1, 'c')], [(0, 'a'), (1, 'c'), (1, 'd'), (1, 'd'), (0, 'e')]]}, 'accd'),
# Test one parameter given to ifchanged. # Test one parameter given to ifchanged.
'ifchanged-param01': ('{% for n in num %}{% ifchanged n %}..{% endifchanged %}{{ n }}{% endfor %}', { 'num': (1,2,3) }, '..1..2..3'), 'ifchanged-param01': ('{% for n in num %}{% ifchanged n %}..{% endifchanged %}{{ n }}{% endfor %}', {'num': (1,2,3)}, '..1..2..3'),
'ifchanged-param02': ('{% for n in num %}{% for x in numx %}{% ifchanged n %}..{% endifchanged %}{{ x }}{% endfor %}{% endfor %}', { 'num': (1,2,3), 'numx': (5,6,7) }, '..567..567..567'), 'ifchanged-param02': ('{% for n in num %}{% for x in numx %}{% ifchanged n %}..{% endifchanged %}{{ x }}{% endfor %}{% endfor %}', {'num': (1,2,3), 'numx': (5,6,7)}, '..567..567..567'),
# Test multiple parameters to ifchanged. # Test multiple parameters to ifchanged.
'ifchanged-param03': ('{% for n in num %}{{ n }}{% for x in numx %}{% ifchanged x n %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1,1,2), 'numx': (5,6,6) }, '156156256'), 'ifchanged-param03': ('{% for n in num %}{{ n }}{% for x in numx %}{% ifchanged x n %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1,1,2), 'numx': (5,6,6)}, '156156256'),
# Test a date+hour like construct, where the hour of the last day # Test a date+hour like construct, where the hour of the last day
# is the same but the date had changed, so print the hour anyway. # is the same but the date had changed, so print the hour anyway.
'ifchanged-param04': ('{% for d in days %}{% ifchanged %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},] }, '112323'), 'ifchanged-param04': ('{% for d in days %}{% ifchanged %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},]}, '112323'),
# Logically the same as above, just written with explicit # Logically the same as above, just written with explicit
# ifchanged for the day. # ifchanged for the day.
'ifchanged-param05': ('{% for d in days %}{% ifchanged d.day %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d.day h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},] }, '112323'), 'ifchanged-param05': ('{% for d in days %}{% ifchanged d.day %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d.day h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},]}, '112323'),
# Test the else clause of ifchanged. # Test the else clause of ifchanged.
'ifchanged-else01': ('{% for id in ids %}{{ id }}{% ifchanged id %}-first{% else %}-other{% endifchanged %},{% endfor %}', {'ids': [1,1,2,2,2,3]}, '1-first,1-other,2-first,2-other,2-other,3-first,'), 'ifchanged-else01': ('{% for id in ids %}{{ id }}{% ifchanged id %}-first{% else %}-other{% endifchanged %},{% endfor %}', {'ids': [1,1,2,2,2,3]}, '1-first,1-other,2-first,2-other,2-other,3-first,'),
@ -1512,11 +1512,11 @@ class TemplateTests(TransRealMixin, TestCase):
'{{ item.foo }}' '{{ item.foo }}'
'{% endfor %},' '{% endfor %},'
'{% endfor %}', '{% endfor %}',
{'data': [ {'foo':'c', 'bar':1}, {'data': [{'foo':'c', 'bar':1},
{'foo':'d', 'bar':1}, {'foo':'d', 'bar':1},
{'foo':'a', 'bar':2}, {'foo':'a', 'bar':2},
{'foo':'b', 'bar':2}, {'foo':'b', 'bar':2},
{'foo':'x', 'bar':3} ]}, {'foo':'x', 'bar':3}]},
'1:cd,2:ab,3:x,'), '1:cd,2:ab,3:x,'),
# Test for silent failure when target variable isn't found # Test for silent failure when target variable isn't found
@ -1640,8 +1640,8 @@ class TemplateTests(TransRealMixin, TestCase):
'widthratio16': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':50,'b':100}, '-50-'), 'widthratio16': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':50,'b':100}, '-50-'),
'widthratio17': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':100,'b':100}, '-100-'), 'widthratio17': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':100,'b':100}, '-100-'),
'widthratio18': ('{% widthratio a b 100 as %}', { }, template.TemplateSyntaxError), 'widthratio18': ('{% widthratio a b 100 as %}', {}, template.TemplateSyntaxError),
'widthratio19': ('{% widthratio a b 100 not_as variable %}', { }, template.TemplateSyntaxError), 'widthratio19': ('{% widthratio a b 100 not_as variable %}', {}, template.TemplateSyntaxError),
### WITH TAG ######################################################## ### WITH TAG ########################################################
'with01': ('{% with key=dict.key %}{{ key }}{% endwith %}', {'dict': {'key': 50}}, '50'), 'with01': ('{% with key=dict.key %}{{ key }}{% endwith %}', {'dict': {'key': 50}}, '50'),
@ -1778,11 +1778,11 @@ class TemplateTests(TransRealMixin, TestCase):
'autoescape-filtertag01': ("{{ first }}{% filter safe %}{{ first }} x<y{% endfilter %}", {"first": "<a>"}, template.TemplateSyntaxError), 'autoescape-filtertag01': ("{{ first }}{% filter safe %}{{ first }} x<y{% endfilter %}", {"first": "<a>"}, template.TemplateSyntaxError),
# ifqeual compares unescaped vales. # ifqeual compares unescaped vales.
'autoescape-ifequal01': ('{% ifequal var "this & that" %}yes{% endifequal %}', { "var": "this & that" }, "yes"), 'autoescape-ifequal01': ('{% ifequal var "this & that" %}yes{% endifequal %}', {"var": "this & that"}, "yes"),
# Arguments to filters are 'safe' and manipulate their input unescaped. # Arguments to filters are 'safe' and manipulate their input unescaped.
'autoescape-filters01': ('{{ var|cut:"&" }}', { "var": "this & that" }, "this that" ), 'autoescape-filters01': ('{{ var|cut:"&" }}', {"var": "this & that"}, "this that"),
'autoescape-filters02': ('{{ var|join:" & \" }}', { "var": ("Tom", "Dick", "Harry") }, "Tom & Dick & Harry"), 'autoescape-filters02': ('{{ var|join:" & \" }}', {"var": ("Tom", "Dick", "Harry")}, "Tom & Dick & Harry"),
# Literal strings are safe. # Literal strings are safe.
'autoescape-literals01': ('{{ "this & that" }}',{}, "this & that"), 'autoescape-literals01': ('{{ "this & that" }}',{}, "this & that"),
@ -1791,7 +1791,7 @@ class TemplateTests(TransRealMixin, TestCase):
'autoescape-stringiterations01': ('{% for l in var %}{{ l }},{% endfor %}', {'var': 'K&R'}, "K,&amp;,R,"), 'autoescape-stringiterations01': ('{% for l in var %}{{ l }},{% endfor %}', {'var': 'K&R'}, "K,&amp;,R,"),
# Escape requirement survives lookup. # Escape requirement survives lookup.
'autoescape-lookup01': ('{{ var.key }}', { "var": {"key": "this & that" }}, "this &amp; that"), 'autoescape-lookup01': ('{{ var.key }}', {"var": {"key": "this & that"}}, "this &amp; that"),
# Static template tags # Static template tags
'static-prefixtag01': ('{% load static %}{% get_static_prefix %}', {}, settings.STATIC_URL), 'static-prefixtag01': ('{% load static %}{% get_static_prefix %}', {}, settings.STATIC_URL),

View File

@ -36,7 +36,7 @@ class TestUtilsHttp(unittest.TestCase):
self.assertEqual(result, 'a=1&b=2&c=3') self.assertEqual(result, 'a=1&b=2&c=3')
# A dictionary # A dictionary
result = http.urlencode({ 'a': 1, 'b': 2, 'c': 3}) result = http.urlencode({'a': 1, 'b': 2, 'c': 3})
acceptable_results = [ acceptable_results = [
# Need to allow all of these as dictionaries have to be treated as # Need to allow all of these as dictionaries have to be treated as
# unordered # unordered

View File

@ -76,11 +76,11 @@ class TestUtilsText(SimpleTestCase):
truncator = text.Truncator('<br/>The <hr />quick brown fox jumped over' truncator = text.Truncator('<br/>The <hr />quick brown fox jumped over'
' the lazy dog.') ' the lazy dog.')
self.assertEqual('<br/>The <hr />quick brown...', self.assertEqual('<br/>The <hr />quick brown...',
truncator.words(3, '...', html=True )) truncator.words(3, '...', html=True))
truncator = text.Truncator('<br>The <hr/>quick <em>brown fox</em> ' truncator = text.Truncator('<br>The <hr/>quick <em>brown fox</em> '
'jumped over the lazy dog.') 'jumped over the lazy dog.')
self.assertEqual('<br>The <hr/>quick <em>brown...</em>', self.assertEqual('<br>The <hr/>quick <em>brown...</em>',
truncator.words(3, '...', html=True )) truncator.words(3, '...', html=True))
# Test html entities # Test html entities
truncator = text.Truncator('<i>Buenos d&iacute;as!' truncator = text.Truncator('<i>Buenos d&iacute;as!'