From 30df7be25842ca9087fc0aa1ba46147e3ea2d69d Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Tue, 15 Dec 2015 16:03:39 -0800 Subject: [PATCH 1/7] Adding a view for featured datasets --- .../versions/12d55656cbca_is_featured.py | 23 ++++++++++++++++ panoramix/models.py | 1 + panoramix/static/featured_datasets.css | 18 +++++++++++++ .../panoramix/featured_datasets.html | 27 +++++++++++++++++++ panoramix/views.py | 15 ++++++++++- 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 panoramix/migrations/versions/12d55656cbca_is_featured.py create mode 100644 panoramix/static/featured_datasets.css create mode 100644 panoramix/templates/panoramix/featured_datasets.html diff --git a/panoramix/migrations/versions/12d55656cbca_is_featured.py b/panoramix/migrations/versions/12d55656cbca_is_featured.py new file mode 100644 index 00000000000..31582237430 --- /dev/null +++ b/panoramix/migrations/versions/12d55656cbca_is_featured.py @@ -0,0 +1,23 @@ +"""is_featured + +Revision ID: 12d55656cbca +Revises: 55179c7f25c7 +Create Date: 2015-12-14 13:37:17.374852 + +""" + +# revision identifiers, used by Alembic. +revision = '12d55656cbca' +down_revision = '55179c7f25c7' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column('tables', sa.Column('is_featured', sa.Boolean(), nullable=True)) + + +def downgrade(): + op.drop_column('tables', 'is_featured') + diff --git a/panoramix/models.py b/panoramix/models.py index 73d060d30c9..a4b3007ae5b 100644 --- a/panoramix/models.py +++ b/panoramix/models.py @@ -228,6 +228,7 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): description = Column(Text) default_endpoint = Column(Text) database_id = Column(Integer, ForeignKey('dbs.id'), nullable=False) + is_featured = Column(Boolean, default=False) database = relationship( 'Database', backref='tables', foreign_keys=[database_id]) offset = Column(Integer, default=0) diff --git a/panoramix/static/featured_datasets.css b/panoramix/static/featured_datasets.css new file mode 100644 index 00000000000..a9067d4f3e0 --- /dev/null +++ b/panoramix/static/featured_datasets.css @@ -0,0 +1,18 @@ +.main-text { + text-align: center; + font-size: 36px; + margin-bottom: 20px; +} + +.data-title{ + font-size: 26px; + font-weight: strong; +} + +table { + border-bottom: 1px solid #dddddd; +} + +td { + vertical-align: middle; +} diff --git a/panoramix/templates/panoramix/featured_datasets.html b/panoramix/templates/panoramix/featured_datasets.html new file mode 100644 index 00000000000..fb9f014690c --- /dev/null +++ b/panoramix/templates/panoramix/featured_datasets.html @@ -0,0 +1,27 @@ +{% extends "panoramix/base.html" %} +{% block content %} + +
+Featured Datasets +
+ + + + + + + + + {% for dataset in featured_datasets %} + + + + + {% endfor %} + +
TableDatabase
+ {{ dataset.table_name }} +
{{ dataset.description }} +
{{ dataset.database }}
+{% endblock %} + diff --git a/panoramix/views.py b/panoramix/views.py index ee0256f780e..0d17173db8b 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -140,7 +140,7 @@ class TableView(PanoramixModelView, DeleteMixin): list_columns = ['table_link', 'database', 'changed_by', 'changed_on_'] add_columns = ['table_name', 'database', 'default_endpoint', 'offset'] edit_columns = [ - 'table_name', 'database', 'description', 'main_dttm_col', + 'table_name', 'is_featured', 'database', 'description', 'main_dttm_col', 'default_endpoint', 'offset'] related_views = [TableColumnInlineView, SqlMetricInlineView] base_order = ('changed_on','desc') @@ -538,6 +538,19 @@ class Panoramix(BaseView): title=ascii_art.stacktrace, art=ascii_art.error), 500 + @has_access + @expose("/datasets", methods=['GET']) + def datasets(self): + session = db.session() + datasets_sqla = (session.query(models.SqlaTable) + .filter_by(is_featured=True).all()) + datasets_druid = (session.query(models.Datasource) + .filter_by(is_featured=True).all()) + featured_datasets = datasets_sqla + datasets_druid + return self.render_template( + 'panoramix/featured_datasets.html', + featured_datasets=featured_datasets) + appbuilder.add_view_no_menu(Panoramix) appbuilder.add_link( "Refresh Druid Metadata", From 6155ff8de6a9d7c8c18f6bfcb15e5938c2404bc8 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Wed, 16 Dec 2015 15:31:50 -0800 Subject: [PATCH 2/7] Adding owner to sqlatables and changing some of the formatting using DataTables --- .../versions/2591d77e9831_user_id.py | 27 +++++++++++++++++++ panoramix/models.py | 2 ++ panoramix/static/featured_datasets.css | 15 +++++------ .../panoramix/featured_datasets.html | 20 +++++++++++--- panoramix/views.py | 16 ++++++++--- 5 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 panoramix/migrations/versions/2591d77e9831_user_id.py diff --git a/panoramix/migrations/versions/2591d77e9831_user_id.py b/panoramix/migrations/versions/2591d77e9831_user_id.py new file mode 100644 index 00000000000..5039078e901 --- /dev/null +++ b/panoramix/migrations/versions/2591d77e9831_user_id.py @@ -0,0 +1,27 @@ +"""user_id + +Revision ID: 2591d77e9831 +Revises: 12d55656cbca +Create Date: 2015-12-15 17:02:45.128709 + +""" + +# revision identifiers, used by Alembic. +revision = '2591d77e9831' +down_revision = '12d55656cbca' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + with op.batch_alter_table('tables') as batch_op: + batch_op.add_column(sa.Column('user_id', sa.Integer())) + batch_op.create_foreign_key('user_id', 'ab_user', ['user_id'], ['id']) + + +def downgrade(): + with op.batch_alter_table('tables'): + op.drop_constraint(None, 'tables', type_='foreignkey') + op.drop_column('tables', 'user_id') + diff --git a/panoramix/models.py b/panoramix/models.py index a4b3007ae5b..a2357b27a95 100644 --- a/panoramix/models.py +++ b/panoramix/models.py @@ -229,6 +229,8 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): default_endpoint = Column(Text) database_id = Column(Integer, ForeignKey('dbs.id'), nullable=False) is_featured = Column(Boolean, default=False) + user_id = Column(Integer, ForeignKey('ab_user.id')) + owner = relationship('User', backref='tables', foreign_keys=[user_id]) database = relationship( 'Database', backref='tables', foreign_keys=[database_id]) offset = Column(Integer, default=0) diff --git a/panoramix/static/featured_datasets.css b/panoramix/static/featured_datasets.css index a9067d4f3e0..32a41147e86 100644 --- a/panoramix/static/featured_datasets.css +++ b/panoramix/static/featured_datasets.css @@ -4,15 +4,14 @@ margin-bottom: 20px; } -.data-title{ - font-size: 26px; - font-weight: strong; +.small_table { + width: 170px; } -table { +#data-title{ + font-size: 20px; +} + +#dataset-table { border-bottom: 1px solid #dddddd; } - -td { - vertical-align: middle; -} diff --git a/panoramix/templates/panoramix/featured_datasets.html b/panoramix/templates/panoramix/featured_datasets.html index fb9f014690c..83106307f45 100644 --- a/panoramix/templates/panoramix/featured_datasets.html +++ b/panoramix/templates/panoramix/featured_datasets.html @@ -4,24 +4,38 @@
Featured Datasets
- +
+ + {% for dataset in featured_datasets %} - + + + {% endfor %}
Table DatabaseOwner
- {{ dataset.table_name }} +
{{ dataset.table_name }}

{{ dataset.description }}
{{ dataset.database }}{{ dataset.database }}{{ dataset.owner }}
{% endblock %} +{% block tail %} + + + + +{% endblock %} diff --git a/panoramix/views.py b/panoramix/views.py index 0d17173db8b..09ca4360684 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -59,6 +59,14 @@ class TableColumnInlineView(CompactCRUDMixin, PanoramixModelView): } appbuilder.add_view_no_menu(TableColumnInlineView) +appbuilder.add_link( + "Featured Datasets", + href='/panoramix/featured_datasets', + category='Sources', + category_icon='fa-table', + icon="fa-star") + + class ColumnInlineView(CompactCRUDMixin, PanoramixModelView): datamodel = SQLAInterface(models.Column) @@ -140,8 +148,8 @@ class TableView(PanoramixModelView, DeleteMixin): list_columns = ['table_link', 'database', 'changed_by', 'changed_on_'] add_columns = ['table_name', 'database', 'default_endpoint', 'offset'] edit_columns = [ - 'table_name', 'is_featured', 'database', 'description', 'main_dttm_col', - 'default_endpoint', 'offset'] + 'table_name', 'is_featured', 'database', 'description', 'owner', + 'main_dttm_col', 'default_endpoint', 'offset'] related_views = [TableColumnInlineView, SqlMetricInlineView] base_order = ('changed_on','desc') description_columns = { @@ -539,8 +547,8 @@ class Panoramix(BaseView): art=ascii_art.error), 500 @has_access - @expose("/datasets", methods=['GET']) - def datasets(self): + @expose("/featured_datasets", methods=['GET']) + def featured_datasets(self): session = db.session() datasets_sqla = (session.query(models.SqlaTable) .filter_by(is_featured=True).all()) From 6bbcbe524a4027a1b19e18c365d7a085230ab135 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Wed, 16 Dec 2015 16:34:51 -0800 Subject: [PATCH 3/7] Fixing the button on the featured datasets page --- panoramix/templates/panoramix/featured_datasets.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/panoramix/templates/panoramix/featured_datasets.html b/panoramix/templates/panoramix/featured_datasets.html index 83106307f45..eba600544de 100644 --- a/panoramix/templates/panoramix/featured_datasets.html +++ b/panoramix/templates/panoramix/featured_datasets.html @@ -18,11 +18,11 @@ Featured Datasets
{{ dataset.table_name }}
-
{{ dataset.description }} +

{{ dataset.description }}

{{ dataset.database }} {{ dataset.owner }} - + Visualize it! {% endfor %} From 6f948f07838ae037ba92f2c2cedd2bddaf1fc948 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Wed, 16 Dec 2015 17:58:16 -0800 Subject: [PATCH 4/7] Changing DataTables to default to show all and sort by database --- panoramix/templates/panoramix/featured_datasets.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/panoramix/templates/panoramix/featured_datasets.html b/panoramix/templates/panoramix/featured_datasets.html index eba600544de..dfbe182ce52 100644 --- a/panoramix/templates/panoramix/featured_datasets.html +++ b/panoramix/templates/panoramix/featured_datasets.html @@ -35,7 +35,14 @@ Featured Datasets {% endblock %} From f24e58abf295a048d31d980e291adc83adb15d3a Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Thu, 17 Dec 2015 11:28:06 -0800 Subject: [PATCH 5/7] Fixes to the downgrade migration for user_id in sqlatables --- panoramix/migrations/versions/2591d77e9831_user_id.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/panoramix/migrations/versions/2591d77e9831_user_id.py b/panoramix/migrations/versions/2591d77e9831_user_id.py index 5039078e901..4fac61ce9eb 100644 --- a/panoramix/migrations/versions/2591d77e9831_user_id.py +++ b/panoramix/migrations/versions/2591d77e9831_user_id.py @@ -21,7 +21,6 @@ def upgrade(): def downgrade(): - with op.batch_alter_table('tables'): - op.drop_constraint(None, 'tables', type_='foreignkey') - op.drop_column('tables', 'user_id') - + with op.batch_alter_table('tables') as batch_op: + batch_op.drop_constraint('user_id', type_='foreignkey') + batch_op.drop_column('user_id') From e5256ef6da462a7259436c10f5e435eb3023a0d1 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Thu, 17 Dec 2015 11:35:18 -0800 Subject: [PATCH 6/7] Fixing alignment of a hanging indent for code quality --- panoramix/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panoramix/views.py b/panoramix/views.py index 09ca4360684..8e4d5df3819 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -149,7 +149,7 @@ class TableView(PanoramixModelView, DeleteMixin): add_columns = ['table_name', 'database', 'default_endpoint', 'offset'] edit_columns = [ 'table_name', 'is_featured', 'database', 'description', 'owner', - 'main_dttm_col', 'default_endpoint', 'offset'] + 'main_dttm_col', 'default_endpoint', 'offset'] related_views = [TableColumnInlineView, SqlMetricInlineView] base_order = ('changed_on','desc') description_columns = { From 79e7818ba83237c78092a66a391d5bfa809038c5 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Thu, 17 Dec 2015 15:43:28 -0800 Subject: [PATCH 7/7] Changes to the layout of the featured datasets page --- panoramix/static/featured_datasets.css | 17 ---------- .../panoramix/featured_datasets.html | 32 +++++++++---------- panoramix/views.py | 2 +- 3 files changed, 17 insertions(+), 34 deletions(-) delete mode 100644 panoramix/static/featured_datasets.css diff --git a/panoramix/static/featured_datasets.css b/panoramix/static/featured_datasets.css deleted file mode 100644 index 32a41147e86..00000000000 --- a/panoramix/static/featured_datasets.css +++ /dev/null @@ -1,17 +0,0 @@ -.main-text { - text-align: center; - font-size: 36px; - margin-bottom: 20px; -} - -.small_table { - width: 170px; -} - -#data-title{ - font-size: 20px; -} - -#dataset-table { - border-bottom: 1px solid #dddddd; -} diff --git a/panoramix/templates/panoramix/featured_datasets.html b/panoramix/templates/panoramix/featured_datasets.html index dfbe182ce52..18f7a353869 100644 --- a/panoramix/templates/panoramix/featured_datasets.html +++ b/panoramix/templates/panoramix/featured_datasets.html @@ -1,10 +1,8 @@ {% extends "panoramix/base.html" %} {% block content %} - -
-Featured Datasets -
- +

Featured Datasets

+
+
@@ -17,32 +15,34 @@ Featured Datasets {% for dataset in featured_datasets %} - + {% endfor %} {% endblock %} -{% block tail %} - - - +{% block head_css %} +{{ super() }} + +{% endblock %} + +{% block tail_js %} +{{ super() }} + + {% endblock %} diff --git a/panoramix/views.py b/panoramix/views.py index 8e4d5df3819..5d74bb6017a 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -66,7 +66,7 @@ appbuilder.add_link( category_icon='fa-table', icon="fa-star") - +appbuilder.add_separator("Sources") class ColumnInlineView(CompactCRUDMixin, PanoramixModelView): datamodel = SQLAInterface(models.Column)