txaws-dev team mailing list archive
-
txaws-dev team
-
Mailing list archive
-
Message #00106
[Merge] lp:~tribaal/txaws/integer-max-support into lp:txaws
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):