From 3321a56782debe12db16b531378f485a7c673f0c Mon Sep 17 00:00:00 2001 From: Maxime Date: Sat, 8 Aug 2015 15:03:36 +0000 Subject: [PATCH] Final touches on getting decent database support --- app/models.py | 18 +++++++++-- app/templates/panoramix/datasource.html | 40 ++++++++++++++++++++----- app/views.py | 2 +- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/app/models.py b/app/models.py index 8ffdca798..38da123d5 100644 --- a/app/models.py +++ b/app/models.py @@ -41,6 +41,8 @@ class Database(Model, AuditMixin): database_name = Column(String(256), unique=True) sqlalchemy_uri = Column(String(1024)) + baselink = "datasourcemodelview" + def __repr__(self): return self.database_name @@ -59,11 +61,16 @@ class Table(Model, Queryable, AuditMixin): __tablename__ = 'tables' id = Column(Integer, primary_key=True) table_name = Column(String(256), unique=True) + main_datetime_column_id = Column(Integer, ForeignKey('table_columns.id')) + main_datetime_column = relationship( + 'TableColumn', foreign_keys=[main_datetime_column_id]) default_endpoint = Column(Text) database_id = Column(Integer, ForeignKey('dbs.id')) database = relationship( 'Database', backref='tables', foreign_keys=[database_id]) + baselink = "tableview" + @property def name(self): return self.table_name @@ -151,7 +158,7 @@ class Table(Model, Queryable, AuditMixin): "SELECT\n" " {select_exprs}\n" "FROM {self.table_name}\n" - "{limiting_join}\n" + "{limiting_join}" "WHERE\n" " {where_clause}\n" "GROUP BY\n" @@ -221,6 +228,8 @@ class TableColumn(Model, AuditMixin): filterable = Column(Boolean, default=False) description = Column(Text, default='') + def __repr__(self): + return self.column_name class Cluster(Model, AuditMixin): __tablename__ = 'clusters' @@ -350,6 +359,7 @@ class Datasource(Model, AuditMixin, Queryable): timeseries_limit=15, row_limit=None): qry_start_dttm = datetime.now() + query_str = "" aggregations = { m.metric_name: m.json_obj for m in self.metrics if m.metric_name in metrics @@ -409,6 +419,7 @@ class Datasource(Model, AuditMixin, Queryable): }], } client.groupby(**pre_qry) + query_str += json.dumps(client.query_dict, indent=2) + "\n" df = client.export_pandas() if not df is None and not df.empty: dims = qry['dimensions'] @@ -435,9 +446,12 @@ class Datasource(Model, AuditMixin, Queryable): qry['limit_spec'] = None client.groupby(**qry) + query_str += json.dumps(client.query_dict, indent=2) df = client.export_pandas() return QueryResult( - df=df, query="", duration=datetime.now() - qry_start_dttm) + df=df, + query=query_str, + duration=datetime.now() - qry_start_dttm) #class Metric(Model, AuditMixin): diff --git a/app/templates/panoramix/datasource.html b/app/templates/panoramix/datasource.html index 217c9e7bf..5bed7d9c5 100644 --- a/app/templates/panoramix/datasource.html +++ b/app/templates/panoramix/datasource.html @@ -20,6 +20,7 @@ form input.form-control { max-width: 350px; //width: 350px; } + {% endblock %} {% block content_fluid %} @@ -30,7 +31,7 @@ form input.form-control { {% if datasource.description %} {% endif %} - + @@ -39,11 +40,20 @@ form input.form-control {

{{ viz.verbose_name }} {{ "{0:0.2f}".format(results.duration.total_seconds()) }} s - query + query


{% block viz %} @@ -98,6 +106,22 @@ form input.form-control { {% endif %}
+ {% endblock %} {% block tail_js %} diff --git a/app/views.py b/app/views.py index 80ed7289c..25b3f51a1 100644 --- a/app/views.py +++ b/app/views.py @@ -124,7 +124,7 @@ class TableView(ModelView, DeleteMixin): datamodel = SQLAInterface(models.Table) list_columns = ['table_link', 'database'] add_columns = ['table_name', 'database', 'default_endpoint'] - edit_columns = add_columns + edit_columns = ['table_name', 'database', 'main_datetime_column', 'default_endpoint'] related_views = [TableColumnInlineView, SqlMetricInlineView] def post_insert(self, table):