From 659bf6d7e80d70def5b6c46a9d8a3a262e37a13e Mon Sep 17 00:00:00 2001 From: vera-liu Date: Wed, 5 Oct 2016 13:02:35 -0700 Subject: [PATCH] Moved time column and grains to models.py (#1255) --- .../explorev2/actions/exploreActions.js | 7 +++-- .../assets/javascripts/explorev2/index.jsx | 1 - .../explorev2/reducers/exploreReducer.js | 4 +-- .../javascripts/explorev2/stores/store.js | 1 - caravel/models.py | 17 ++++++++++++ caravel/views.py | 26 ++++--------------- 6 files changed, 27 insertions(+), 29 deletions(-) diff --git a/caravel/assets/javascripts/explorev2/actions/exploreActions.js b/caravel/assets/javascripts/explorev2/actions/exploreActions.js index 11cd7ae987..32268f7d03 100644 --- a/caravel/assets/javascripts/explorev2/actions/exploreActions.js +++ b/caravel/assets/javascripts/explorev2/actions/exploreActions.js @@ -29,7 +29,7 @@ export const CHANGE_FILTER_OP = 'CHANGE_FILTER_OP'; export const CHANGE_FILTER_VALUE = 'CHANGE_FILTER_VALUE'; export const RESET_FORM_DATA = 'RESET_FORM_DATA'; export const CLEAR_ALL_OPTS = 'CLEAR_ALL_OPTS'; -export const SET_DATASOURCE_CLASS = 'SET_DATASOURCE_CLASS'; +export const SET_DATASOURCE_TYPE = 'SET_DATASOURCE_TYPE'; export function setTimeColumnOpts(timeColumnOpts) { return { type: SET_TIME_COLUMN_OPTS, timeColumnOpts }; @@ -60,8 +60,8 @@ export function clearAllOpts() { return { type: CLEAR_ALL_OPTS }; } -export function setDatasourceClass(datasourceClass) { - return { type: SET_DATASOURCE_CLASS, datasourceClass }; +export function setDatasourceType(datasourceType) { + return { type: SET_DATASOURCE_TYPE, datasourceType }; } export function setFormOpts(datasourceId, datasourceType) { @@ -94,7 +94,6 @@ export function setFormOpts(datasourceId, datasourceType) { if (d) timeGrainOpts.push({ value: d, label: d }); }); // Repopulate options for controls - dispatch(setDatasourceClass(data.datasource_class)); dispatch(setTimeColumnOpts(timeColumnOpts)); dispatch(setTimeGrainOpts(timeGrainOpts)); dispatch(setGroupByColumnOpts(groupByColumnOpts)); diff --git a/caravel/assets/javascripts/explorev2/index.jsx b/caravel/assets/javascripts/explorev2/index.jsx index 4bb1425bc4..77dce35ea2 100644 --- a/caravel/assets/javascripts/explorev2/index.jsx +++ b/caravel/assets/javascripts/explorev2/index.jsx @@ -17,7 +17,6 @@ const bootstrappedState = Object.assign(initialState, { datasources: bootstrapData.datasources, datasourceId: parseInt(bootstrapData.datasource_id, 10), datasourceType: bootstrapData.datasource_type, - datasourceClass: bootstrapData.datasource_class, sliceName: bootstrapData.viz.form_data.slice_name, sliceId: bootstrapData.viz.form_data.slice_id, vizType: bootstrapData.viz.form_data.viz_type, diff --git a/caravel/assets/javascripts/explorev2/reducers/exploreReducer.js b/caravel/assets/javascripts/explorev2/reducers/exploreReducer.js index 0ad91c93b1..da650d120a 100644 --- a/caravel/assets/javascripts/explorev2/reducers/exploreReducer.js +++ b/caravel/assets/javascripts/explorev2/reducers/exploreReducer.js @@ -103,8 +103,8 @@ export const exploreReducer = function (state, action) { [actions.CLEAR_ALL_OPTS]() { return Object.assign({}, state, defaultOpts); }, - [actions.SET_DATASOURCE_CLASS]() { - return Object.assign({}, state, { datasourceClass: action.datasourceClass }); + [actions.SET_DATASOURCE_TYPE]() { + return Object.assign({}, state, { datasourceType: action.datasourceType }); }, }; if (action.type in actionHandlers) { diff --git a/caravel/assets/javascripts/explorev2/stores/store.js b/caravel/assets/javascripts/explorev2/stores/store.js index 11dd9b73e0..80d1bd7296 100644 --- a/caravel/assets/javascripts/explorev2/stores/store.js +++ b/caravel/assets/javascripts/explorev2/stores/store.js @@ -2,7 +2,6 @@ export const initialState = { datasources: null, datasourceId: null, datasourceType: null, - datasourceClass: null, vizType: null, timeColumnOpts: [], timeColumn: null, diff --git a/caravel/models.py b/caravel/models.py index 5493e2b279..f4cc6b778d 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -760,6 +760,13 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): def sql_url(self): return self.database.sql_url + "?table_name=" + str(self.table_name) + @property + def time_column_grains(self): + return { + "time_columns": self.dttm_cols, + "time_grains": [grain.name for grain in self.database.grains()] + } + def get_col(self, col_name): columns = self.table_columns for col in columns: @@ -1278,6 +1285,16 @@ class DruidDatasource(Model, AuditMixinNullable, Queryable): "[{obj.cluster_name}]." "[{obj.datasource_name}]").format(obj=self) + @property + def time_column_grains(self): + return { + "time_columns": [ + 'all', '5 seconds', '30 seconds', '1 minute', + '5 minutes', '1 hour', '6 hour', '1 day', '7 days' + ], + "time_grains": ['now'] + } + def __repr__(self): return self.datasource_name diff --git a/caravel/views.py b/caravel/views.py index 18fdb32be7..0124f788f6 100755 --- a/caravel/views.py +++ b/caravel/views.py @@ -42,10 +42,6 @@ config = app.config log_this = models.Log.log_this can_access = utils.can_access QueryStatus = models.QueryStatus -DRUID_TIME_GRAINS = [ - 'all', '5 seconds', '30 seconds', '1 minute', - '5 minutes', '1 hour', '6 hour', '1 day', '7 days' -] class BaseCaravelView(BaseView): @@ -1301,7 +1297,6 @@ class Caravel(BaseCaravelView): "datasources": [(d.id, d.full_name) for d in datasources], "datasource_id": datasource_id, "datasource_type": datasource_type, - "datasource_class": datasource_class.__name__, "user_id": g.user.get_id() if g.user else None, "viz": json.loads(viz_obj.get_json()) } @@ -1963,25 +1958,14 @@ class Caravel(BaseCaravelView): if not self.datasource_access(datasource): return json_error_response(DATASOURCE_ACCESS_ERR) - time_columns = [] - grains_choices = [] - datasource_class_name = datasource_class.__name__ - if datasource_class_name == 'SqlaTable': - time_columns = datasource.dttm_cols - grains = datasource.database.grains() - grains_choices = [grain.name for grain in grains] - elif datasource_class_name == 'DruidDatasource': - time_columns = DRUID_TIME_GRAINS - grains_choices = ['now'] - - form_data = { - "datasource_class": datasource_class_name, - "time_columns": time_columns, - "time_grains": grains_choices, + column_opts = { "groupby_cols": datasource.groupby_column_names, "metrics": datasource.metrics_combo, - "filter_cols": datasource.filterable_column_names, + "filter_cols": datasource.filterable_column_names } + form_data = dict( + column_opts.items() + datasource.time_column_grains.items() + ) return Response( json.dumps(form_data), mimetype="application/json")