Fixed #12390 -- `Distance` and `Area` objects now support multiplication when they are the right-hand side.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@11898 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Justin Bronn 2009-12-17 18:21:30 +00:00
parent 5bd63663a9
commit fed3081caf
2 changed files with 32 additions and 23 deletions

View File

@ -225,6 +225,9 @@ class Distance(MeasureBase):
else: else:
raise TypeError('Distance must be multiplied with number') raise TypeError('Distance must be multiplied with number')
def __rmul__(self, other):
return self * other
def __div__(self, other): def __div__(self, other):
if isinstance(other, (int, float, long, Decimal)): if isinstance(other, (int, float, long, Decimal)):
return Distance(default_unit=self._default_unit, m=(self.m / float(other))) return Distance(default_unit=self._default_unit, m=(self.m / float(other)))
@ -309,6 +312,9 @@ class Area(MeasureBase):
else: else:
raise TypeError('Area must be multiplied with number') raise TypeError('Area must be multiplied with number')
def __rmul__(self, other):
return self * other
def __div__(self, other): def __div__(self, other):
if isinstance(other, (int, float, long, Decimal)): if isinstance(other, (int, float, long, Decimal)):
return Area(default_unit=self._default_unit, sq_m=(self.sq_m / float(other))) return Area(default_unit=self._default_unit, sq_m=(self.sq_m / float(other)))

View File

@ -95,6 +95,8 @@ class DistanceTest(unittest.TestCase):
d3 = d1 * 2 d3 = d1 * 2
self.assertEqual(d3.m, 200) self.assertEqual(d3.m, 200)
d3 = 2 * d1
self.assertEqual(d3.m, 200)
d3 *= 5 d3 *= 5
self.assertEqual(d3.m, 1000) self.assertEqual(d3.m, 1000)
@ -248,6 +250,8 @@ class AreaTest(unittest.TestCase):
a3 = a1 * 2 a3 = a1 * 2
self.assertEqual(a3.sq_m, 200) self.assertEqual(a3.sq_m, 200)
a3 = 2 * a1
self.assertEqual(a3.sq_m, 200)
a3 *= 5 a3 *= 5
self.assertEqual(a3.sq_m, 1000) self.assertEqual(a3.sq_m, 1000)
@ -319,7 +323,6 @@ class AreaTest(unittest.TestCase):
self.assertEqual(repr(a1), 'Area(sq_m=100.0)') self.assertEqual(repr(a1), 'Area(sq_m=100.0)')
self.assertEqual(repr(a2), 'Area(sq_km=3.5)') self.assertEqual(repr(a2), 'Area(sq_km=3.5)')
def suite(): def suite():
s = unittest.TestSuite() s = unittest.TestSuite()
s.addTest(unittest.makeSuite(DistanceTest)) s.addTest(unittest.makeSuite(DistanceTest))