summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/openstack/compute/limits.py34
-rw-r--r--nova/tests/api/openstack/compute/test_limits.py24
-rw-r--r--nova/utils.py8
3 files changed, 33 insertions, 33 deletions
diff --git a/nova/api/openstack/compute/limits.py b/nova/api/openstack/compute/limits.py
index 07e791306..107f40436 100644
--- a/nova/api/openstack/compute/limits.py
+++ b/nova/api/openstack/compute/limits.py
@@ -33,19 +33,13 @@ from nova.api.openstack import xmlutil
from nova.openstack.common import importutils
from nova.openstack.common import jsonutils
from nova import quota
+from nova import utils
from nova import wsgi as base_wsgi
QUOTAS = quota.QUOTAS
-# Convenience constants for the limits dictionary passed to Limiter().
-PER_SECOND = 1
-PER_MINUTE = 60
-PER_HOUR = 60 * 60
-PER_DAY = 60 * 60 * 24
-
-
limits_nsmap = {None: xmlutil.XMLNS_COMMON_V10, 'atom': xmlutil.XMLNS_ATOM}
@@ -122,14 +116,7 @@ class Limit(object):
Stores information about a limit for HTTP requests.
"""
- UNITS = {
- 1: "SECOND",
- 60: "MINUTE",
- 60 * 60: "HOUR",
- 60 * 60 * 24: "DAY",
- }
-
- UNIT_MAP = dict([(v, k) for k, v in UNITS.items()])
+ UNITS = dict([(v, k) for k, v in utils.TIME_UNITS.items()])
def __init__(self, verb, uri, regex, value, unit):
"""
@@ -223,12 +210,13 @@ class Limit(object):
# a regular-expression to match, value and unit of measure (PER_DAY, etc.)
DEFAULT_LIMITS = [
- Limit("POST", "*", ".*", 10, PER_MINUTE),
- Limit("POST", "*/servers", "^/servers", 50, PER_DAY),
- Limit("PUT", "*", ".*", 10, PER_MINUTE),
- Limit("GET", "*changes-since*", ".*changes-since.*", 3, PER_MINUTE),
- Limit("DELETE", "*", ".*", 100, PER_MINUTE),
- Limit("GET", "*/os-fping", "^/os-fping", 12, PER_HOUR),
+ Limit("POST", "*", ".*", 10, utils.TIME_UNITS['MINUTE']),
+ Limit("POST", "*/servers", "^/servers", 50, utils.TIME_UNITS['DAY']),
+ Limit("PUT", "*", ".*", 10, utils.TIME_UNITS['MINUTE']),
+ Limit("GET", "*changes-since*", ".*changes-since.*", 3,
+ utils.TIME_UNITS['MINUTE']),
+ Limit("DELETE", "*", ".*", 100, utils.TIME_UNITS['MINUTE']),
+ Limit("GET", "*/os-fping", "^/os-fping", 12, utils.TIME_UNITS['HOUR']),
]
@@ -390,9 +378,9 @@ class Limiter(object):
# Convert unit
unit = unit.upper()
- if unit not in Limit.UNIT_MAP:
+ if unit not in utils.TIME_UNITS:
raise ValueError("Invalid units specified")
- unit = Limit.UNIT_MAP[unit]
+ unit = utils.TIME_UNITS[unit]
# Build a limit
result.append(Limit(verb, uri, regex, value, unit))
diff --git a/nova/tests/api/openstack/compute/test_limits.py b/nova/tests/api/openstack/compute/test_limits.py
index b9dc72b1f..3dbc7bfea 100644
--- a/nova/tests/api/openstack/compute/test_limits.py
+++ b/nova/tests/api/openstack/compute/test_limits.py
@@ -32,14 +32,18 @@ from nova.openstack.common import jsonutils
from nova import test
from nova.tests.api.openstack import fakes
from nova.tests import matchers
+from nova import utils
TEST_LIMITS = [
- limits.Limit("GET", "/delayed", "^/delayed", 1, limits.PER_MINUTE),
- limits.Limit("POST", "*", ".*", 7, limits.PER_MINUTE),
- limits.Limit("POST", "/servers", "^/servers", 3, limits.PER_MINUTE),
- limits.Limit("PUT", "*", "", 10, limits.PER_MINUTE),
- limits.Limit("PUT", "/servers", "^/servers", 5, limits.PER_MINUTE),
+ limits.Limit("GET", "/delayed", "^/delayed", 1,
+ utils.TIME_UNITS['MINUTE']),
+ limits.Limit("POST", "*", ".*", 7, utils.TIME_UNITS['MINUTE']),
+ limits.Limit("POST", "/servers", "^/servers", 3,
+ utils.TIME_UNITS['MINUTE']),
+ limits.Limit("PUT", "*", "", 10, utils.TIME_UNITS['MINUTE']),
+ limits.Limit("PUT", "/servers", "^/servers", 5,
+ utils.TIME_UNITS['MINUTE']),
]
NS = {
'atom': 'http://www.w3.org/2005/Atom',
@@ -312,7 +316,7 @@ class LimitsControllerTest(BaseLimitTestSuite):
req, 1, {})
-class TestLimiter(limits.Limiter):
+class MockLimiter(limits.Limiter):
pass
@@ -331,12 +335,12 @@ class LimitMiddlewareTest(BaseLimitTestSuite):
super(LimitMiddlewareTest, self).setUp()
_limits = '(GET, *, .*, 1, MINUTE)'
self.app = limits.RateLimitingMiddleware(self._empty_app, _limits,
- "%s.TestLimiter" %
+ "%s.MockLimiter" %
self.__class__.__module__)
def test_limit_class(self):
# Test that middleware selected correct limiter class.
- assert isinstance(self.app._limiter, TestLimiter)
+ assert isinstance(self.app._limiter, MockLimiter)
def test_good_request(self):
# Test successful GET request through middleware.
@@ -485,8 +489,8 @@ class ParseLimitsTest(BaseLimitTestSuite):
self.assertEqual([t.value for t in l], expected)
# ...and the units...
- expected = [limits.PER_MINUTE, limits.PER_HOUR,
- limits.PER_SECOND, limits.PER_DAY]
+ expected = [utils.TIME_UNITS['MINUTE'], utils.TIME_UNITS['HOUR'],
+ utils.TIME_UNITS['SECOND'], utils.TIME_UNITS['DAY']]
self.assertEqual([t.unit for t in l], expected)
diff --git a/nova/utils.py b/nova/utils.py
index 338e4d880..b8cb1d5a8 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -96,6 +96,14 @@ BYTE_MULTIPLIERS = {
'k': 1024,
}
+# used in limits
+TIME_UNITS = {
+ 'SECOND': 1,
+ 'MINUTE': 60,
+ 'HOUR': 3600,
+ 'DAY': 84400
+}
+
synchronized = lockutils.synchronized_with_prefix('nova-')