@@ -56,6 +56,7 @@ def __init__(self, dashboard_json=None, backgroundColor='#FFFFFF',
5656 boxHeaderBackgroundColor = '#f8f8f8' , foregroundColor = '#333333' ,
5757 headerBackgroundColor = '#2E3A46' , headerForegroundColor = '#FFFFFF' ,
5858 links = [], logoUrl = '' , title = 'Untitled Dashboard' ):
59+ # TODO: change name to box_id_to_path
5960 self .box_ids_dict = {}
6061 if not dashboard_json :
6162 self ['layout' ] = EmptyBox ()
@@ -72,30 +73,33 @@ def __init__(self, dashboard_json=None, backgroundColor='#FFFFFF',
7273 'logoUrl' : logoUrl ,
7374 'title' : title
7475 }
75- # TODO: change name to box_id_to_path
7676 else :
7777 self ['layout' ] = dashboard_json ['layout' ]
78- self ['version' ] = dashboard_json ['layout ' ]
78+ self ['version' ] = dashboard_json ['version ' ]
7979 self ['settings' ] = dashboard_json ['settings' ]
8080
81- all_nodes = []
82- node_gen = node_generator (dashboard_json ['layout' ])
81+ self ._assign_boxes_to_ids ()
8382
84- finished_iteration = False
85- while not finished_iteration :
86- try :
87- all_nodes .append (node_gen .next ())
88- except StopIteration :
89- finished_iteration = True
83+ def _assign_boxes_to_ids (self ):
84+ self .box_ids_dict = {}
85+ all_nodes = []
86+ node_gen = node_generator (self ['layout' ])
9087
91- for node in all_nodes :
92- if (node [1 ] != () and node [0 ]['type' ] == 'box' and
93- node [0 ]['boxType' ] != 'empty' ):
94- try :
95- max_id = max (self .box_ids_dict .keys ())
96- except ValueError :
97- max_id = 0
98- self .box_ids_dict [max_id + 1 ] = list (node [1 ])
88+ finished_iteration = False
89+ while not finished_iteration :
90+ try :
91+ all_nodes .append (node_gen .next ())
92+ except StopIteration :
93+ finished_iteration = True
94+
95+ for node in all_nodes :
96+ if (node [1 ] != () and node [0 ]['type' ] == 'box'
97+ and node [0 ]['boxType' ] != 'empty' ):
98+ try :
99+ max_id = max (self .box_ids_dict .keys ())
100+ except ValueError :
101+ max_id = 0
102+ self .box_ids_dict [max_id + 1 ] = list (node [1 ])
99103
100104 def _insert (self , box_or_container , array_of_paths ):
101105 """Performs user-unfriendly box and container manipulations."""
@@ -195,10 +199,10 @@ def insert(self, box, box_id=None, side='above'):
195199 )
196200 if box_id not in self .box_ids_dict :
197201 raise exceptions .PlotlyError (
198- "Your box_id must a number which is pointing to a box in "
199- "your dashboard."
202+ "Your box_id must a number in your dashboard. To view a "
203+ "representation of your dashboard run 'get_preview()' ."
200204 )
201-
205+ #self._assign_boxes_to_ids()
202206 if side == 'above' :
203207 old_box = self ._get_box (box_id )
204208 self ._insert (
@@ -223,6 +227,12 @@ def insert(self, box, box_id=None, side='above'):
223227 Container (old_box , box , direction = 'horizontal' ),
224228 self .box_ids_dict [box_id ]
225229 )
230+ else :
231+ raise exceptions .PlotlyError (
232+ "If there is at least one box in your dashboard, you "
233+ "must specify a valid side value. You must choose from "
234+ "'above', 'below', 'left', and 'right'."
235+ )
226236
227237
228238def upload_dashboard (dashboard_object , filename , world_readable ,
@@ -255,48 +265,3 @@ def upload_dashboard(dashboard_object, filename, world_readable,
255265 url = res .json ()['web_url' ]
256266 webbrowser .open_new (res .json ()['web_url' ])
257267 return url
258-
259-
260- # little wrapper around requests.get
261- def get (* args , ** kwargs ):
262- return requests .get (
263- * args , auth = (username , api_key ), headers = headers , ** kwargs
264- )
265-
266-
267- def _get_all_dashboards ():
268- """Grab a list of all users' dashboards."""
269- dashboards = []
270- res = get (build_url ('dashboards' )).json ()
271-
272- for dashboard in res ['results' ]:
273- if not dashboard ['deleted' ]:
274- dashboards .append (dashboard )
275- while res ['next' ]:
276- res = get (res ['next' ]).json ()
277-
278- for dashboard in res ['results' ]:
279- if not dashboard ['deleted' ]:
280- dashboards .append (dashboard )
281- return dashboards
282-
283-
284- def _get_dashboard_json (dashboard_name ):
285- dashboards = _get_all_dashboards ()
286- for index , dboard in enumerate (dashboards ):
287- if dboard ['filename' ] == dashboard_name :
288- break
289-
290- dashboard = get (dashboards [index ]['api_urls' ]['dashboards' ]).json ()
291- dashboard_json = json .loads (dashboard ['content' ])
292- return dashboard_json
293-
294-
295- def get_dashboard_names ():
296- dashboards = _get_all_dashboards ()
297- return [str (dboard ['filename' ]) for dboard in dashboards ]
298-
299-
300- def get_dashboard (dashboard_name ):
301- dashboard_json = _get_dashboard_json (dashboard_name )
302- return Dashboard (dashboard_json )
0 commit comments