diff --git a/caravel/forms.py b/caravel/forms.py index c226ad59c4aa6..f67078828949f 100644 --- a/caravel/forms.py +++ b/caravel/forms.py @@ -214,6 +214,15 @@ def __init__(self, viz): 'Y', choices=self.choicify(datasource.column_names), description="Columns to display"), + 'druid_time_origin': SelectField( + 'Origin', + choices=( + ('', 'default'), + ('now', 'now'), + ), + description=( + "Defines the origin where time buckets start, " + "accepts natural dates as in 'now', 'sunday' or '1970-01-01'")), 'granularity': FreeFormSelectField( 'Time Granularity', default="one day", choices=self.choicify([ @@ -617,9 +626,10 @@ def add_to_form(attrs): time_fields = 'granularity_sqla' add_to_form((time_fields, )) else: - time_fields = 'granularity' - add_to_form(('granularity',)) + time_fields = ('granularity', 'druid_time_origin') + add_to_form(('granularity', 'druid_time_origin')) field_css_classes['granularity'] = ['form-control', 'select2_freeform'] + field_css_classes['druid_time_origin'] = ['form-control', 'select2_freeform'] add_to_form(('since', 'until')) QueryForm.fieldsets = ({ diff --git a/caravel/models.py b/caravel/models.py index 57500b9c35ab4..8fdf1450175d7 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -1013,6 +1013,10 @@ def query( granularity).total_seconds() * 1000 if not isinstance(granularity, string_types): granularity = {"type": "duration", "duration": granularity} + origin = extras.get('druid_time_origin') + if origin: + dttm = utils.parse_human_datetime(origin) + granularity['origin'] = dttm.isoformat() qry = dict( datasource=self.datasource_name, diff --git a/caravel/viz.py b/caravel/viz.py index 79548446ed5d1..9d5f56fc4fbaf 100644 --- a/caravel/viz.py +++ b/caravel/viz.py @@ -206,6 +206,7 @@ def query_obj(self): 'where': form_data.get("where", ''), 'having': form_data.get("having", ''), 'time_grain_sqla': form_data.get("time_grain_sqla", ''), + 'druid_time_origin': form_data.get("druid_time_origin", ''), } d = { 'granularity': granularity,