Chris Glass has proposed merging lp:~tribaal/txaws/integer-max-support into lp:txaws.
Requested reviews: txAWS Technical List (txaws-tech) Related bugs: Bug #965112 in txAWS: "Integer Schema parameter should support min and max" https://bugs.launchpad.net/txaws/+bug/965112 For more details, see: https://code.launchpad.net/~tribaal/txaws/integer-max-support/+merge/99283 This fixes the bug as reported. The Integer parameter now accepts min and max values (like Unicode), and the default behavior of being positive only uses the same mechanism. -- https://code.launchpad.net/~tribaal/txaws/integer-max-support/+merge/99283 Your team txAWS Technical List is requested to review the proposed merge of lp:~tribaal/txaws/integer-max-support into lp:txaws.
=== modified file 'txaws/server/schema.py' --- txaws/server/schema.py 2012-01-06 02:00:17 +0000 +++ txaws/server/schema.py 2012-03-26 10:11:21 +0000 @@ -179,15 +179,23 @@ kind = "integer" + lower_than_min_template = "Value must be at least %s." + greater_than_max_template = "Value exceeds maximum of %s." + + def __init__(self, name, optional=False, default=None, + min=0, max=None, allow_none=False, validator=None): + super(Integer, self).__init__(name, optional, default, min, max, + allow_none, validator) + def parse(self, value): - number = int(value) - if number < 0: - raise ValueError() - return number + return int(value) def format(self, value): return str(value) + def measure(self, value): + return int(value) + class Bool(Parameter): """A parameter that must be a C{bool}.""" === modified file 'txaws/server/tests/test_schema.py' --- txaws/server/tests/test_schema.py 2012-01-27 02:10:24 +0000 +++ txaws/server/tests/test_schema.py 2012-03-26 10:11:21 +0000 @@ -257,13 +257,30 @@ def test_parse_with_negative(self): """L{Integer.parse} converts the given raw C{value} to C{int}.""" parameter = Integer("Test") - self.assertRaises(ValueError, parameter.parse, "-1") + error = self.assertRaises(APIError, parameter.coerce, "-1") + self.assertEqual(400, error.status) + self.assertEqual("InvalidParameterValue", error.code) + self.assertIn("Value must be at least 0.", error.message) def test_format(self): """L{Integer.format} converts the given integer to a string.""" parameter = Integer("Test") self.assertEqual("123", parameter.format(123)) + def test_min_and_max(self): + """The L{Integer} parameter properly supports ranges.""" + parameter = Integer("Test", min=2, max=4) + + error = self.assertRaises(APIError, parameter.coerce, "1") + self.assertEqual(400, error.status) + self.assertEqual("InvalidParameterValue", error.code) + self.assertIn("Value must be at least 2.", error.message) + + error = self.assertRaises(APIError, parameter.coerce, "5") + self.assertIn("Value exceeds maximum of 4.", error.message) + self.assertEqual(400, error.status) + self.assertEqual("InvalidParameterValue", error.code) + class BoolTestCase(TestCase):
_______________________________________________ Mailing list: https://launchpad.net/~txaws-dev Post to : txaws-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~txaws-dev More help : https://help.launchpad.net/ListHelp