25
25
from __future__ import absolute_import
26
26
27
27
import copy
28
-
29
28
import re
30
- import six
31
29
import warnings
30
+ from collections import OrderedDict
31
+
32
+ import six
32
33
33
34
from plotly import exceptions , graph_reference
34
35
from plotly .graph_objs import graph_objs_tools
@@ -113,17 +114,6 @@ def validate(self):
113
114
"""Everything is *always* validated now. keep for backwards compat."""
114
115
pass
115
116
116
- def get_ordered (self , ** kwargs ):
117
- """
118
- We have no way to order things anymore. Keep for backwards compat.
119
-
120
- See https://github.com/plotly/python-api/issues/290.
121
-
122
- :return: (PlotlyBase)
123
-
124
- """
125
- return self
126
-
127
117
128
118
class PlotlyList (list , PlotlyBase ):
129
119
"""
@@ -311,6 +301,10 @@ def get_data(self, flatten=False):
311
301
else :
312
302
return l
313
303
304
+ def get_ordered (self , ** kwargs ):
305
+ """All children are already validated. Just use get_ordered on them."""
306
+ return [child .get_ordered for child in self ]
307
+
314
308
def to_string (self , level = 0 , indent = 4 , eol = '\n ' ,
315
309
pretty = True , max_chars = 80 ):
316
310
"""Get formatted string by calling `to_string` on children items."""
@@ -668,6 +662,17 @@ def get_data(self, flatten=False):
668
662
del d [key ]
669
663
return d
670
664
665
+ def get_ordered (self , ** kwargs ):
666
+ """Return a predictable, OrderedDict version of self."""
667
+ keys = sorted (self .keys (), key = graph_objs_tools .sort_keys )
668
+ ordered = OrderedDict ()
669
+ for key in keys :
670
+ if isinstance (self [key ], PlotlyBase ):
671
+ ordered [key ] = self [key ].get_ordered ()
672
+ else :
673
+ ordered [key ] = self [key ]
674
+ return ordered
675
+
671
676
def to_string (self , level = 0 , indent = 4 , eol = '\n ' ,
672
677
pretty = True , max_chars = 80 ):
673
678
"""
0 commit comments