Skip to content

Commit

Permalink
Improve date handling
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Mar 29, 2022
1 parent 93fa3e4 commit 8e96b73
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
7 changes: 4 additions & 3 deletions examples/reference/widgets/DateSlider.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@
"\n",
"##### Core\n",
"\n",
"* **``start``** (datetime): The range's lower bound\n",
"* **``end``** (datetime): The range's upper bound\n",
"* **``value``** (datetime): The selected value as a datetime type\n",
"* **``as_datetime``**: Whether to return value as a date (default) or datetime\n",
"* **``start``** (date or datetime): The range's lower bound\n",
"* **``end``** (date or datetime): The range's upper bound\n",
"* **``value``** (date or datetime): The selected value as a datetime type\n",
"* **``value_throttled``** (datetime): The selected value as a datetime type throttled until mouseup\n",
"\n",
"##### Display\n",
Expand Down
19 changes: 16 additions & 3 deletions panel/widgets/slider.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,9 @@ def _process_property_change(self, msg):

class DateSlider(_SliderBase):

as_datetime = param.Boolean(default=False, doc="""
Whether to store the date as a datetime.""")

value = param.Date(default=None)

value_throttled = param.Date(default=None, constant=True)
Expand All @@ -172,7 +175,7 @@ class DateSlider(_SliderBase):

end = param.Date(default=None)

_rename = {'name': 'title'}
_rename = {'name': 'title', 'as_datetime': None}

_source_transforms = {'value': None, 'value_throttled': None, 'start': None, 'end': None}

Expand All @@ -183,12 +186,22 @@ def __init__(self, **params):
params['value'] = params.get('start', self.start)
super().__init__(**params)

def _process_param_change(self, msg):
msg = super()._process_param_change(msg)
if 'value' in msg:
value = msg['value']
if isinstance(value, dt.datetime):
value = value.replace(tzinfo=dt.timezone.utc).timestamp() * 1000
msg['value'] = value
return msg

def _process_property_change(self, msg):
msg = super()._process_property_change(msg)
transform = value_as_datetime if self.as_datetime else value_as_date
if 'value' in msg:
msg['value'] = value_as_date(msg['value'])
msg['value'] = transform(msg['value'])
if 'value_throttled' in msg:
msg['value_throttled'] = value_as_date(msg['value_throttled'])
msg['value_throttled'] = transform(msg['value_throttled'])
return msg


Expand Down

0 comments on commit 8e96b73

Please sign in to comment.