Browse Source

Update result graph

Ask Solem 12 years ago
parent
commit
f2e7962c34
5 changed files with 16 additions and 17 deletions
  1. 9 12
      celery/datastructures.py
  2. 6 4
      celery/result.py
  3. BIN
      docs/images/graph.png
  4. BIN
      docs/images/result_graph.png
  5. 1 1
      docs/userguide/canvas.rst

+ 9 - 12
celery/datastructures.py

@@ -16,6 +16,7 @@ from functools import partial
 from itertools import chain
 
 from billiard.einfo import ExceptionInfo  # noqa
+from kombu.utils.encoding import safe_str
 from kombu.utils.limits import TokenBucket  # noqa
 
 from .utils.functional import LRUCache, first, uniq  # noqa
@@ -47,37 +48,33 @@ class GraphFormatter(object):
         'style': 'filled',
         'fontname': 'Helvetica Neue',
     }
-    node_scheme = {
-        'fillcolor': 'palegreen3',
-        'color': 'palegreen4',
-    }
-    term_scheme = {
-        'fillcolor': 'palegreen1',
-        'color': 'palegreen2',
-    }
     edge_scheme = {
         'color': 'darkseagreen4',
         'arrowcolor': 'black',
         'arrowsize': 0.7,
     }
+    node_scheme = {'fillcolor': 'palegreen3', 'color': 'palegreen4'}
+    term_scheme = {'fillcolor': 'palegreen1', 'color': 'palegreen2'}
     graph_scheme = {'bgcolor': 'mintcream'}
 
-    def __init__(self, root=None, type=None, id=None, indent=0, inw=' ' * 4):
+    def __init__(self, root=None, type=None, id=None,
+            indent=0, inw=' ' * 4, **scheme):
         self.id = id or 'dependencies'
         self.root = root
         self.type = type or 'digraph'
         self.direction = self._dirs[self.type]
         self.IN = inw * (indent or 0)
         self.INp = self.IN + inw
-        #self.graph_scheme = dict(self.graph_scheme, root=self.label(self.root))
+        self.scheme = dict(self.scheme, **scheme)
+        self.graph_scheme = dict(self.graph_scheme, root=self.label(self.root))
 
     def attr(self, name, value):
-        value = '"{0}"'.format(str(value))
+        value = '"{0}"'.format(value)
         return self.FMT(self._attr, name=name, value=value)
 
     def attrs(self, d, scheme=None):
         d = dict(self.scheme, **dict(scheme, **d or {}) if scheme else d)
-        return self._attrsep.join(self.attr(k, v) for k, v in d.iteritems())
+        return self._attrsep.join(safe_str(self.attr(k, v)) for k, v in d.iteritems())
 
     def head(self, **attrs):
         return self.FMT(self._head, id=self.id, type=self.type,

+ 6 - 4
celery/result.py

@@ -20,7 +20,7 @@ from kombu.utils.compat import OrderedDict
 from . import current_app
 from . import states
 from .app import app_or_default
-from .datastructures import DependencyGraph
+from .datastructures import DependencyGraph, GraphFormatter
 from .exceptions import IncompleteStream, TimeoutError
 
 
@@ -187,11 +187,13 @@ class AsyncResult(ResultBase):
         """Returns :const:`True` if the task failed."""
         return self.state == states.FAILURE
 
-    def build_graph(self, intermediate=False):
-        graph = DependencyGraph()
+    def build_graph(self, intermediate=False, formatter=None):
+        graph = DependencyGraph(
+            formatter=formatter or GraphFormatter(root=self.id, shape='oval'),
+        )
         for parent, node in self.iterdeps(intermediate=intermediate):
+            graph.add_arc(node)
             if parent:
-                graph.add_arc(parent)
                 graph.add_edge(parent, node)
         return graph
 

BIN
docs/images/graph.png


BIN
docs/images/result_graph.png


+ 1 - 1
docs/userguide/canvas.rst

@@ -545,7 +545,7 @@ and create images:
 
     $ dot -Tpng graph.dot -o graph.png
 
-.. image:: ../images/graph.png
+.. image:: ../images/result_graph.png
 
 .. _canvas-group: