|
@@ -1,5 +1,6 @@
|
|
|
import sys
|
|
|
|
|
|
+from collections import deque
|
|
|
from datetime import timedelta
|
|
|
|
|
|
is_jython = sys.platform.startswith("java")
|
|
@@ -32,12 +33,17 @@ def str_to_bool(term, table={"false": False, "no": False, "0": False,
|
|
|
|
|
|
|
|
|
class Option(object):
|
|
|
+ alt = None
|
|
|
+ deprecate_by = None
|
|
|
+ remove_by = None
|
|
|
typemap = dict(string=str, int=int, float=float, any=lambda v: v,
|
|
|
bool=str_to_bool, dict=dict, tuple=tuple)
|
|
|
|
|
|
def __init__(self, default=None, *args, **kwargs):
|
|
|
self.default = default
|
|
|
self.type = kwargs.get("type") or "string"
|
|
|
+ for attr, value in kwargs.iteritems():
|
|
|
+ setattr(self, attr, value)
|
|
|
|
|
|
def to_python(self, value):
|
|
|
return self.typemap[self.type](value)
|
|
@@ -174,13 +180,25 @@ NAMESPACES = {
|
|
|
}
|
|
|
|
|
|
|
|
|
-def _flatten(d, ns=""):
|
|
|
- acc = []
|
|
|
- for key, value in d.iteritems():
|
|
|
- if isinstance(value, dict):
|
|
|
- acc.extend(_flatten(value, ns=key + '_'))
|
|
|
- else:
|
|
|
- acc.append((ns + key, value.default))
|
|
|
- return acc
|
|
|
+def flatten(d, ns=""):
|
|
|
+ stack = deque([(ns, d)])
|
|
|
+ while stack:
|
|
|
+ name, space = stack.popleft()
|
|
|
+ for key, value in space.iteritems():
|
|
|
+ if isinstance(value, dict):
|
|
|
+ stack.append((name + key + '_', value))
|
|
|
+ else:
|
|
|
+ yield name + key, value
|
|
|
|
|
|
-DEFAULTS = dict(_flatten(NAMESPACES))
|
|
|
+
|
|
|
+def find_deprecated_settings(source):
|
|
|
+ from celery.utils import warn_deprecated
|
|
|
+ for name, opt in flatten(NAMESPACES):
|
|
|
+ if (opt.deprecate_by or opt.remove_by) and getattr(source, name, None):
|
|
|
+ warn_deprecated(description="The %r setting" % (name, ),
|
|
|
+ deprecation=opt.deprecate_by,
|
|
|
+ removal=opt.remove_by,
|
|
|
+ alternative=opt.alt)
|
|
|
+
|
|
|
+
|
|
|
+DEFAULTS = dict((key, value.default) for key, value in flatten(NAMESPACES))
|