diff --git a/dodo.py b/dodo.py index 3b7d027..128b961 100644 --- a/dodo.py +++ b/dodo.py @@ -21,8 +21,8 @@ def task_install_doc_dependencies(): # would not need to exist if nbsite had conda package return { 'actions': [ - 'conda install -y -q -c conda-forge notebook ipython sphinx beautifulsoup4 graphviz selenium phantomjs', - 'pip install nbsite sphinx_ioam_theme'], + 'conda install -y -q -c conda-forge notebook ipython sphinx=1.6 beautifulsoup4 graphviz selenium phantomjs', + 'pip install https://github.com/pyviz/nbsite/archive/master.zip sphinx_ioam_theme'], 'task_dep': ['install_test_dependencies'] } diff --git a/examples/user_guide/View_Parameters.ipynb b/examples/user_guide/View_Parameters.ipynb index 2b9e8e6..8c2463a 100644 --- a/examples/user_guide/View_Parameters.ipynb +++ b/examples/user_guide/View_Parameters.ipynb @@ -76,7 +76,7 @@ " \n", " def view(self, *args, **kwargs):\n", " return self.element(self.amplitude*np.sin(np.linspace(0, np.pi*self.frequency)),\n", - " vdims=[hv.Dimension('y', range=(-5, 5))])(style=dict(color=self.color))\n", + " vdims=[hv.Dimension('y', range=(-5, 5))]).opts(style=dict(color=self.color))\n", " \n", " def event(self, **kwargs):\n", " if not self.output or any(k in kwargs for k in ['color', 'element']):\n", diff --git a/parambokeh/__init__.py b/parambokeh/__init__.py index f3cda44..73a9296 100644 --- a/parambokeh/__init__.py +++ b/parambokeh/__init__.py @@ -29,6 +29,31 @@ __version__ = '0.2.1-unknown' +class default_label_formatter(param.ParameterizedFunction): + "Default formatter to turn parameter names into appropriate widget labels." + + capitalize = param.Boolean(default=True, doc=""" + Whether or not the label should be capitalized.""") + + replace_underscores = param.Boolean(default=True, doc=""" + Whether or not underscores should be replaced with spaces.""") + + overrides = param.Dict(default={}, doc=""" + Allows custom labels to be specified for specific parameter + names using a dictionary where key is the parameter name and the + value is the desired label.""") + + def __call__(self, pname): + + if pname in self.overrides: + return self.overrides[pname] + if self.replace_underscores: + pname = pname.replace('_',' ') + if self.capitalize: + pname = pname.capitalize() + return pname + + class Widgets(param.ParameterizedFunction): callback = param.Callable(default=None, doc=""" @@ -93,6 +118,9 @@ class Widgets(param.ParameterizedFunction): width = param.Integer(default=300, bounds=(0, None), doc=""" Width of widgetbox the parameter widgets are displayed in.""") + label_formatter = param.Callable(default=default_label_formatter, allow_None=True, + doc="Callable used to format the parameter names into widget labels.") + # Timeout if a notebook comm message is swallowed timeout = 20000 @@ -265,7 +293,12 @@ def _make_widget(self, p_name): kw = dict(value=value) - kw['title'] = p_name + if self.p.label_formatter is not None: + kw['title'] = self.p.label_formatter(p_name) + else: + kw['title'] = p_name + + kw['name'] = p_name if hasattr(p_obj, 'get_range') and not isinstance(kw['value'], dict): options = named_objs(p_obj.get_range().items()) diff --git a/parambokeh/widgets.py b/parambokeh/widgets.py index 75d41e5..d493b15 100644 --- a/parambokeh/widgets.py +++ b/parambokeh/widgets.py @@ -94,10 +94,10 @@ def RangeWidget(*args, **kw): return RangeSlider(*args, **kw) def PlotWidget(*args, **kw): - return column(name=kw['title']) + return column(name=kw['name']) def HTMLWidget(*args, **kw): - return Div(name=kw['title']) + return Div(name=kw['name']) ptype2wtype = {