@@ -143,20 +143,11 @@ def __init__(self, columns_or_json):
143
143
"""
144
144
145
145
# TODO: verify that columns are actually columns
146
- if isinstance (columns_or_json , (list , tuple )):
147
- column_names = [column .name for column in columns_or_json ]
148
- duplicate_name = utils .get_first_duplicate (column_names )
149
- if duplicate_name :
150
- err = exceptions .NON_UNIQUE_COLUMN_MESSAGE .format (duplicate_name )
151
- raise exceptions .InputError (err )
152
-
153
- self ._columns = list (columns_or_json )
154
- self .id = ''
155
- elif isinstance (columns_or_json , dict ):
156
- # check if 'cols' is only root key
146
+ if isinstance (columns_or_json , dict ):
147
+ # check if 'cols' is a root key
157
148
if 'cols' not in columns_or_json :
158
149
raise exceptions .PlotlyError (
159
- "'cols' must be the one and only key in your json grid."
150
+ "'cols' must be a root key in your json grid."
160
151
)
161
152
162
153
# check if 'data', 'order' and 'uid' are not in columns
@@ -169,12 +160,31 @@ def __init__(self, columns_or_json):
169
160
"Each column name of your dictionary must have "
170
161
"'data', 'order' and 'uid' as keys."
171
162
)
163
+ # order columns in a list before putting inside the grid
164
+ ordered_columns = []
165
+ for order in range (len (columns_or_json ['cols' ])):
166
+ for column_name in columns_or_json ['cols' ].keys ():
167
+ if columns_or_json ['cols' ][column_name ]['order' ] == order :
168
+ break
169
+
170
+ ordered_columns .append (Column (
171
+ columns_or_json ['cols' ][column_name ]['data' ],
172
+ column_name )
173
+ )
174
+ self ._columns = ordered_columns
172
175
173
- self ._columns = [Column (columns_or_json ['cols' ][column_name ]['data' ], column_name )
174
- for column_name in columns_or_json ['cols' ]]
175
176
# fill in uids
176
177
for column in self :
177
178
column .id = columns_or_json ['cols' ][column .name ]['uid' ]
179
+ else :
180
+ column_names = [column .name for column in columns_or_json ]
181
+ duplicate_name = utils .get_first_duplicate (column_names )
182
+ if duplicate_name :
183
+ err = exceptions .NON_UNIQUE_COLUMN_MESSAGE .format (duplicate_name )
184
+ raise exceptions .InputError (err )
185
+
186
+ self ._columns = list (columns_or_json )
187
+ self .id = ''
178
188
179
189
def __repr__ (self ):
180
190
return self ._columns .__repr__ ()
0 commit comments