def test_traverse(self): from bokeh.objects import PlotObject, traverse_plot_object pobject = PlotObject() pobject.properties_with_refs = Mock(return_value=['test1', 'test2']) pobject.test1 = PlotObject() pobject.test2 = 2 pobject.test3 = PlotObject() result = traverse_plot_object(pobject) self.assertTrue(pobject.test1 in result) self.assertTrue(len(result) == 1)
def load_broadcast_attrs(self, attrs, events='existing'): """events can be 'existing', or None. 'existing' means trigger events only for existing (not new objects). None means don't trigger any events. """ models = [] created = set() for attr in attrs: typename = attr['type'] attr = attr['attributes'] logger.debug('type: %s', typename) #logger.debug('attrs: %s', attr) _id = attr['id'] if _id in self._models: m = self._models[_id] m._block_callbacks = True m.load_json(attr, instance=m) else: cls = PlotObject.get_class(typename) m = cls.load_json(attr) if m is None: raise RuntimeError('Error loading object from JSON') self.add(m) created.add(m) models.append(m) for m in models: m.finalize(self._models) if events is None: self.clear_callback_queue(models) elif events is 'existing': non_created = [x for x in models if x not in created] self.execute_callback_queue(models=non_created) self.clear_callback_queue(models=created) self.enable_callbacks(models) return models
def load_broadcast_attrs(self, attrs, events="existing"): """events can be 'existing', or None. 'existing' means trigger events only for existing (not new objects). None means don't trigger any events. """ models = [] created = set() for attr in attrs: typename = attr["type"] attr = attr["attributes"] logger.debug("type: %s", typename) # logger.debug('attrs: %s', attr) _id = attr["id"] if _id in self._models: m = self._models[_id] m._block_callbacks = True m.load_json(attr, instance=m) else: cls = PlotObject.get_class(typename) m = cls.load_json(attr) if m is None: raise RuntimeError("Error loading object from JSON") self.add(m) created.add(m) models.append(m) for m in models: m.finalize(self._models) if events is None: self.clear_callback_queue(models) elif events is "existing": non_created = [x for x in models if x not in created] self.execute_callback_queue(models=non_created) self.clear_callback_queue(models=created) self.enable_callbacks(models) return models
def load_broadcast_attrs(self, attrs, events='existing'): """events can be 'existing', or None. existing means trigger events only for existing (not new objects). None means don't trigger any events """ models = [] created = set() for attr in attrs: typename = attr['type'] attr = attr['attributes'] logger.debug('type: %s', typename) #logger.debug('attrs: %s', attr) _id = attr['id'] if _id in self._models: m = self._models[_id] m._block_callbacks = True m.load_json(attr, instance=m) else: cls = PlotObject.get_class(typename) m = cls.load_json(attr) if m is None: import pdb;pdb.set_trace() self.add(m) created.add(m) models.append(m) for m in models: m.finalize(self._models) if events is None: self.clear_callback_queue(models) elif events is 'existing': non_created = [x for x in models if x not in created] self.execute_callback_queue(non_created) self.clear_callback_queue(created) self.enable_callbacks(models) return models
def load_obj(self, ref, asdict=False, modelattrs={}): """loads an object from the server. if asdict: only the json is returned. else: update the existing copy in _models if it is present instantiate a new one if it is not and make sure to convert all references into models in the conversion from json to objects, sometimes references to models need to be resolved. If there are any json attributes being processed, you can pass them in as modelattrs """ typename = ref["type"] ref_id = ref["id"] url = utils.urljoin(self.base_url, self.docid + "/" + ref["type"] +\ "/" + ref["id"] + "/") attr = protocol.deserialize_json(self.http_session.get(url).content) if not asdict: m = PlotObject.get_obj(typename, attr) self.add(m) m.finalize(self._models) m.dirty = False return m else: return attr
def test_load_json(self): from bokeh.plot_object import PlotObject cls = PlotObject.get_class("Plot") obj = cls.load_json({'id': 'test_id', 'min_border': 100}) self.assertEqual(obj._id, 'test_id') self.assertEqual(obj.title, '') self.assertEqual(obj.min_border, 100) obj.load_json({'id': 'test_id', 'title': 'xyz'}, instance=obj) self.assertEqual(obj._id, 'test_id') self.assertEqual(obj.title, 'xyz') self.assertEqual(obj.min_border, 100)
def test_r_traverse(self): from bokeh.objects import PlotObject, recursively_traverse_plot_object pobject1 = PlotObject() pobject2 = PlotObject() pobject3 = PlotObject() pobject4 = PlotObject() pobject1.pobject2 = pobject2 pobject1.pobject3 = pobject3 pobject3.pobject4 = pobject4 pobject1.properties_with_refs = Mock(return_value=['pobject2', 'pobject3']) pobject3.properties_with_refs = Mock(return_value=['pobject4']) resultset = recursively_traverse_plot_object(pobject1) expectedset = set([pobject1, pobject2, pobject3, pobject4]) self.assertEqual(resultset, expectedset)
def load_attrs(self, typename, attrs): models = [] for attr in attrs: # logger.debug('type: %s', typename) # logger.debug('attrs: %s', attr) _id = attr['id'] if _id in self._models: m = self._models[_id] m.load_json(attr, instance=m) else: m = PlotObject.get_obj(typename, attr) self.add(m) models.append(m) for m in models: m.finalize(self._models) return models
def load_obj(self, ref, asdict=False): """ Unserializes the object given by **ref**, into a new object of the type in the serialization. If **asdict** is True, then the raw dictionary (including object type and ref) is returned, and no new object is instantiated. """ # TODO: Do URL and path stuff to read json data from persistence # backend into jsondata string jsondata = None attrs = protocol.deserialize_json(jsondata) if asdict: return attrs else: from bokeh.objects import PlotObject objtype = attrs["type"] ref_id = attrs["id"] cls = PlotObject.get_class(objtype) newobj = cls(id=ref_id) # TODO: finish this... return newobj
def test_r_traverse(self): from bokeh.objects import PlotObject, recursively_traverse_plot_object pobject1 = PlotObject() pobject2 = PlotObject() pobject3 = PlotObject() pobject4 = PlotObject() pobject1.pobject2 = pobject2 pobject1.pobject3 = pobject3 pobject3.pobject4 = pobject4 pobject1.properties_with_refs = Mock( return_value=['pobject2', 'pobject3']) pobject3.properties_with_refs = Mock(return_value=['pobject4']) resultset = recursively_traverse_plot_object(pobject1) expectedset = set([pobject1, pobject2, pobject3, pobject4]) self.assertEqual(resultset, expectedset)