Skip to content

Commit

Permalink
Fix range and datetime widgets
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Sep 1, 2018
1 parent 258af46 commit 85a91df
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
11 changes: 11 additions & 0 deletions panel/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import json
import sys
import inspect
import numbers
from datetime import datetime

import param
import bokeh
Expand Down Expand Up @@ -58,6 +60,15 @@ def get_method_owner(meth):
return meth.__self__


def value_as_datetime(value):
"""
Retrieve the value tuple as a tuple of datetime objects.
"""
if isinstance(value, numbers.Number):
value = datetime.utcfromtimestamp(value / 1000)
return value


class default_label_formatter(param.ParameterizedFunction):
"Default formatter to turn parameter names into appropriate widget labels."

Expand Down
18 changes: 16 additions & 2 deletions panel/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from __future__ import absolute_import

import ast
from datetime import datetime
from collections import OrderedDict

import param
Expand All @@ -19,7 +20,7 @@

from .layout import WidgetBox # noqa
from .viewable import Reactive
from .util import as_unicode, push
from .util import as_unicode, push, value_as_datetime


class Widget(Reactive):
Expand Down Expand Up @@ -148,6 +149,12 @@ class DatePicker(Widget):

_rename = {'start': 'min_date', 'end': 'max_date'}

def _process_property_change(self, msg):
msg = super(DatePicker, self)._process_property_change(msg)
if 'value' in msg:
msg['value'] = datetime.strptime(msg['value'][4:], '%b %d %Y')
return msg


class RangeSlider(Widget):

Expand All @@ -162,7 +169,7 @@ class RangeSlider(Widget):
_widget_type = _BkRangeSlider

def _process_property_change(self, msg):
msg = super(RangeSlider, self)._process_param_change(msg)
msg = super(RangeSlider, self)._process_property_change(msg)
if 'value' in msg:
msg['value'] = tuple(msg['value'])
return msg
Expand All @@ -180,6 +187,13 @@ class DateRangeSlider(Widget):

_widget_type = _BkDateRangeSlider

def _process_property_change(self, msg):
msg = super(DateRangeSlider, self)._process_property_change(msg)
if 'value' in msg:
v1, v2 = msg['value']
msg['value'] = (value_as_datetime(v1), value_as_datetime(v2))
return msg


class _ButtonBase(Widget):

Expand Down

0 comments on commit 85a91df

Please sign in to comment.