Moved time column and grains to models.py (#1255)

This commit is contained in:
vera-liu 2016-10-05 13:02:35 -07:00 committed by Maxime Beauchemin
parent a8a16900e7
commit 659bf6d7e8
6 changed files with 27 additions and 29 deletions

View File

@ -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));

View File

@ -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,

View File

@ -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) {

View File

@ -2,7 +2,6 @@ export const initialState = {
datasources: null,
datasourceId: null,
datasourceType: null,
datasourceClass: null,
vizType: null,
timeColumnOpts: [],
timeColumn: null,

View File

@ -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

View File

@ -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")