diff options
author | Alistair Coles <alistair.coles@hpe.com> | 2016-09-09 11:06:06 +0100 |
---|---|---|
committer | Alistair Coles <alistair.coles@hpe.com> | 2016-09-14 18:17:40 +0100 |
commit | e41158d79e4bcb280ec94365226f9423f72d7b66 (patch) | |
tree | eeaf15a53c2384a93587d8b3052e882c0ee8902a | |
parent | 4c955751d340a8f71a2eebdb3c58d90b36874a66 (diff) | |
download | python-swiftclient-e41158d79e4bcb280ec94365226f9423f72d7b66.tar.gz |
Make tempurl subcommand insist on whole number seconds
Previously the tempurl subcommand would dump a traceback
due to a TypeError if the seconds option was not an int
value. With this patch it will now return the same
error message as if the seconds option were negative or not
a number.
Also changes the error message to state that the seconds
option should be a "whole number" rather than a "positive
integer", since 0 is a valid value.
Change-Id: Ie940d470f2be8006aa8eb7fe242f092457aeae21
Closes-Bug: #1621817
-rw-r--r-- | swiftclient/utils.py | 12 | ||||
-rw-r--r-- | tests/unit/test_utils.py | 21 |
2 files changed, 25 insertions, 8 deletions
diff --git a/swiftclient/utils.py b/swiftclient/utils.py index 2e727ad..0d1104e 100644 --- a/swiftclient/utils.py +++ b/swiftclient/utils.py @@ -80,17 +80,19 @@ def generate_temp_url(path, seconds, key, method, absolute=False): :param absolute: if True then the seconds parameter is interpreted as an absolute Unix time, otherwise seconds is interpreted as a relative time offset from current time. - :raises: ValueError if seconds is not a positive integer or path is not to + :raises: ValueError if seconds is not a whole number or path is not to an object. - :raises: TypeError if seconds is not an integer :return: the path portion of a temporary URL """ try: + seconds = float(seconds) + if not seconds.is_integer(): + raise ValueError() seconds = int(seconds) + if seconds < 0: + raise ValueError() except ValueError: - raise TypeError('seconds must be an integer') - if seconds < 0: - raise ValueError('seconds must be a positive integer') + raise ValueError('seconds must be a whole number') if isinstance(path, six.binary_type): try: diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index e820aff..67c39e0 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -170,15 +170,30 @@ class TestTempURL(unittest.TestCase): self.assertEqual(url, expected_url) def test_generate_temp_url_bad_seconds(self): - with self.assertRaises(TypeError) as exc_manager: + with self.assertRaises(ValueError) as exc_manager: u.generate_temp_url(self.url, 'not_an_int', self.key, self.method) self.assertEqual(exc_manager.exception.args[0], - 'seconds must be an integer') + 'seconds must be a whole number') with self.assertRaises(ValueError) as exc_manager: u.generate_temp_url(self.url, -1, self.key, self.method) self.assertEqual(exc_manager.exception.args[0], - 'seconds must be a positive integer') + 'seconds must be a whole number') + + with self.assertRaises(ValueError) as exc_manager: + u.generate_temp_url(self.url, 1.1, self.key, self.method) + self.assertEqual(exc_manager.exception.args[0], + 'seconds must be a whole number') + + with self.assertRaises(ValueError) as exc_manager: + u.generate_temp_url(self.url, '-1', self.key, self.method) + self.assertEqual(exc_manager.exception.args[0], + 'seconds must be a whole number') + + with self.assertRaises(ValueError) as exc_manager: + u.generate_temp_url(self.url, '1.1', self.key, self.method) + self.assertEqual(exc_manager.exception.args[0], + 'seconds must be a whole number') def test_generate_temp_url_bad_path(self): with self.assertRaises(ValueError) as exc_manager: |