|
@@ -23,6 +23,12 @@ from kombu.utils.limits import TokenBucket # noqa
|
|
|
from celery.five import items
|
|
|
from celery.utils.functional import LRUCache, first, uniq # noqa
|
|
|
|
|
|
+try:
|
|
|
+ from django.utils.functional import LazyObject
|
|
|
+except ImportError:
|
|
|
+ class LazyObject(object): # noqa
|
|
|
+ pass
|
|
|
+
|
|
|
DOT_HEAD = """
|
|
|
{IN}{type} {id} {{
|
|
|
{INp}graph [{attrs}]
|
|
@@ -39,6 +45,12 @@ __all__ = ['GraphFormatter', 'CycleError', 'DependencyGraph',
|
|
|
'ConfigurationView', 'LimitedSet']
|
|
|
|
|
|
|
|
|
+def force_mapping(m):
|
|
|
+ if isinstance(m, LazyObject):
|
|
|
+ m = m._wrapped
|
|
|
+ return DictAttribute(m) if not isinstance(m, Mapping) else m
|
|
|
+
|
|
|
+
|
|
|
class GraphFormatter(object):
|
|
|
_attr = DOT_ATTR.strip()
|
|
|
_node = DOT_NODE.strip()
|
|
@@ -447,8 +459,7 @@ class ConfigurationView(AttributeDictMixin):
|
|
|
_order=[changes] + defaults)
|
|
|
|
|
|
def add_defaults(self, d):
|
|
|
- if not isinstance(d, Mapping):
|
|
|
- d = DictAttribute(d)
|
|
|
+ d = force_mapping(d)
|
|
|
self.defaults.insert(0, d)
|
|
|
self._order.insert(1, d)
|
|
|
|