@has_access_api @expose("/<int:table_schema_id>/expanded", methods=["POST"]) def expanded(self, table_schema_id): payload = json.loads(request.form["expanded"]) (db.session.query(TableSchema).filter_by(id=table_schema_id).update( {"expanded": payload})) db.session.commit() response = json.dumps({"id": table_schema_id, "expanded": payload}) return json_success(response) appbuilder.add_view_no_menu(TabStateView) appbuilder.add_view_no_menu(TableSchemaView) appbuilder.add_link(__("Saved Queries"), href="/sqllab/my_queries/", icon="fa-save", category="SQL Lab") class SqlLab(BaseSupersetView): """The base views for Superset!""" @expose("/my_queries/") @has_access def my_queries(self): """Assigns a list of found users to the given role.""" return redirect("/savedqueryview/list/?_flt_0_user={}".format( g.user.id)) appbuilder.add_view_no_menu(SqlLab)
add_template = "superset/models/database/add.html" edit_template = "superset/models/database/edit.html" validators_columns = {"sqlalchemy_uri": [sqlalchemy_uri_form_validator]} yaml_dict_key = "databases" def _delete(self, pk): DeleteMixin._delete(self, pk) appbuilder.add_link( "Import Dashboards", label=__("Import Dashboards"), href="/superset/import_dashboards", icon="fa-cloud-upload", category="Manage", category_label=__("Manage"), category_icon="fa-wrench", ) appbuilder.add_view( DatabaseView, "Databases", label=__("Databases"), icon="fa-database", category="Sources", category_label=__("Sources"), category_icon="fa-database", )
return redirect("/druiddatasourcemodelview/list/") @has_access @expose("/scan_new_datasources/") def scan_new_datasources(self): """ Calling this endpoint will cause a scan for new datasources only and add them. """ return self.refresh_datasources(refreshAll=False) appbuilder.add_view_no_menu(Druid) appbuilder.add_link("Scan New Datasources", label=__("Scan New Datasources"), href='/druid/scan_new_datasources/', category='Sources', category_label=__("Sources"), category_icon='fa-database', icon="fa-refresh") appbuilder.add_link("Refresh Druid Metadata", label=__("Refresh Druid Metadata"), href='/druid/refresh_datasources/', category='Sources', category_label=__("Sources"), category_icon='fa-database', icon="fa-cog") appbuilder.add_separator("Sources", )
@expose("/scan_new_datasources/") def scan_new_datasources(self): """ Calling this endpoint will cause a scan for new datasources only and add them. """ return self.refresh_datasources(refresh_all=False) appbuilder.add_view_no_menu(Druid) appbuilder.add_link( "Scan New Datasources", label=__("Scan New Datasources"), href="/druid/scan_new_datasources/", category="Sources", category_label=__("Sources"), category_icon="fa-database", icon="fa-refresh", ) appbuilder.add_link( "Refresh Druid Metadata", label=__("Refresh Druid Metadata"), href="/druid/refresh_datasources/", category="Sources", category_label=__("Sources"), category_icon="fa-database", icon="fa-cog", ) appbuilder.add_separator("Sources")
Keyword arguments: form_data -- the dictionary containing the properties for the table to be created database -- the database object which will be used csv_filename -- the name of the csv-file to be imported Raises: TableCreationException: If the data could not be inserted into the table """ try: database.db_engine_spec.create_and_fill_table_from_csv( form_data, csv_filename, database) except Exception as e: raise TableCreationException( f"Table {form_data.get('tableName')} could not be filled with CSV {csv_filename}. " "This could be an issue with the schema, a connection issue, etc.", e, ) appbuilder.add_view_no_menu(CsvImporter) appbuilder.add_link( "Upload a CSV", label=__("Upload a CSV"), href="/csvimporter/csvtodatabase", icon="fa-upload", category="Sources", category_label=__("Sources"), category_icon="fa-wrench", )
def pre_update(self, obj): self.pre_add(obj) class SavedQueryViewApi(SavedQueryView): show_columns = ['label', 'db_id', 'schema', 'description', 'sql'] add_columns = show_columns edit_columns = add_columns appbuilder.add_view_no_menu(SavedQueryViewApi) appbuilder.add_view_no_menu(SavedQueryView) appbuilder.add_link(__('Saved Queries'), href='/sqllab/my_queries/', icon='fa-save', category='SQL Lab') class SqlLab(BaseSupersetView): """The base views for Superset!""" @expose('/my_queries/') @has_access def my_queries(self): """Assigns a list of found users to the given role.""" return redirect('/savedqueryview/list/?_flt_0_user={}'.format( g.user.id)) appbuilder.add_view_no_menu(SqlLab)
try: cluster.refresh_datasources() except Exception as e: flash( "Error while processing cluster '{}'\n{}".format( cluster_name, utils.error_msg_from_exception(e)), "danger") logging.exception(e) return redirect('/druidclustermodelview/list/') cluster.metadata_last_refreshed = datetime.now() flash( "Refreshed metadata from cluster " "[" + cluster.cluster_name + "]", 'info') session.commit() return redirect("/druiddatasourcemodelview/list/") appbuilder.add_view_no_menu(Druid) appbuilder.add_link( "Refresh Druid Metadata", label=__("Refresh Druid Metadata"), href='/druid/refresh_datasources/', category='Sources', category_label=__("Sources"), category_icon='fa-database', icon="fa-cog") appbuilder.add_separator("Sources", )
try: t.fetch_metadata() successes.append(t) except Exception: failures.append(t) if len(successes) > 0: success_msg = _( 'Metadata refreshed for the following table(s): %(tables)s', tables=', '.join([t.table_name for t in successes])) flash(success_msg, 'info') if len(failures) > 0: failure_msg = _( 'Unable to retrieve metadata for the following table(s): %(tables)s', tables=', '.join([t.table_name for t in failures])) flash(failure_msg, 'danger') return redirect('/tablemodelview/list/') appbuilder.add_view_no_menu(TableModelView) appbuilder.add_link('Tables', label=__('Tables'), href='/tablemodelview/list/?_flt_1_is_sqllab_view=y', icon='fa-table', category='Sources', category_label=__('Sources'), category_icon='fa-table') appbuilder.add_separator('Sources')
for cluster in session.query(elastic_cluster).all(): cluster_name = cluster.cluster_name try: cluster.refresh_datasources() except Exception as e: flash( 'Error while processing cluster \'{}\'\n{}'.format( cluster_name, error_msg_from_exception(e)), 'danger') logging.exception(e) return redirect('/elasticclustermodelview/list/') cluster.metadata_last_refreshed = datetime.now() flash( 'Refreshed metadata from cluster ' '[' + cluster.cluster_name + ']', 'info') session.commit() return redirect('/elasticdatasourcemodelview/list/') appbuilder.add_view_no_menu(Elastic) appbuilder.add_link( 'Refresh Elastic Metadata', label=__('Refresh Elastic Metadata'), href='/elastic/refresh_datasources/', category='Sources', category_label=__('Sources'), category_icon='fa-database', icon='fa-cog')
t.fetch_metadata() successes.append(t) except Exception: failures.append(t) if len(successes) > 0: success_msg = _( 'Metadata refreshed for the following table(s): %(tables)s', tables=', '.join([t.table_name for t in successes])) flash(success_msg, 'info') if len(failures) > 0: failure_msg = _( 'Unable to retrieve metadata for the following table(s): %(tables)s', tables=', '.join([t.table_name for t in failures])) flash(failure_msg, 'danger') return redirect(url_for('TableModelView.list')) appbuilder.add_view_no_menu(TableModelView) appbuilder.add_link('Tables', label=__('Tables'), href='TableModelView.list', icon='fa-table', category='Sources', category_label=__('Sources'), category_icon='fa-table') appbuilder.add_separator('Sources') #)+'?_flt_1_is_sqllab_view=y
@expose("/geocoding/progress", methods=["GET"]) def progress(self) -> Response: """ Method to check the progress of the geocoding task :return: GeoCoding Object """ return json_success( json.dumps(self.geocoder.progress, default=lambda x: x.__dict__)) @api @has_access_api @expose("/geocoding/interrupt", methods=["POST"]) def interrupt(self) -> Response: """ Used for interrupting the geocoding process """ self.geocoder.interruptflag = True return json_success('"OK"') appbuilder.add_view_no_menu(Geocoder) appbuilder.add_link( "Geocode Addresses", label=__("Geocode Addresses"), href="/geocoder/geocoding", icon="fa-globe", category="Sources", category_label=__("Sources"), category_icon="fa-wrench", ) appbuilder.add_separator("Sources")
class SavedQueryViewApi(SavedQueryView): list_columns = [ 'label', 'sqlalchemy_uri', 'user_email', 'schema', 'description', 'sql' ] show_columns = ['label', 'db_id', 'schema', 'description', 'sql'] add_columns = show_columns edit_columns = add_columns appbuilder.add_view_no_menu(SavedQueryViewApi) appbuilder.add_view_no_menu(SavedQueryView) appbuilder.add_link(__('Saved Queries'), href='SqlLab.my_queries', icon='fa-save', category='SQL Lab') class SqlLab(BaseSupersetView): """The base views for Superset!""" @expose('/my_queries/') @has_access def my_queries(self): """Assigns a list of found users to the given role.""" return redirect( url_for('SavedQueryView.list') + '?_flt_0_user={}'.format(g.user.id)) appbuilder.add_view_no_menu(SqlLab)
from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals from flask_appbuilder import BaseView, expose from superset import appbuilder class EChartsView(BaseView): default_view = 'sample' @expose('/sample/') def sample(self): return self.render_template('superset/echarts/echarts_index.html') @expose('/message/<string:msg>') def message(self, msg): msg = 'Hello %s' % (msg) return msg @expose('/welcome/<string:msg>') def welcome(self, msg): msg = 'Hello %s' % (msg) return self.render_template('index.html',msg = msg) appbuilder.add_view(EChartsView, "Sample", category='EChart') appbuilder.add_link("Message", href='/myview/message/john', category='EChart') appbuilder.add_link("Welcome", href='/myview/welcome/student', category='EChart')
t.fetch_metadata() successes.append(t) except Exception: failures.append(t) if len(successes) > 0: success_msg = _( 'Metadata refreshed for the following table(s): %(tables)s', tables=', '.join([t.table_name for t in successes])) flash(success_msg, 'info') if len(failures) > 0: failure_msg = _( 'Unable to retrieve metadata for the following table(s): %(tables)s', tables=', '.join([t.table_name for t in failures])) flash(failure_msg, 'danger') return redirect('/tablemodelview/list/') appbuilder.add_view_no_menu(TableModelView) appbuilder.add_link( 'Tables', label=__('Tables'), href='/tablemodelview/list/?_flt_1_is_sqllab_view=y', icon='fa-table', category='Sources', category_label=__('Sources'), category_icon='fa-table') appbuilder.add_separator('Sources')
@has_access @expose('/scan_new_datasources/') def scan_new_datasources(self): """ Calling this endpoint will cause a scan for new datasources only and add them. """ return self.refresh_datasources(refreshAll=False) appbuilder.add_view_no_menu(Druid) appbuilder.add_link( 'Scan New Datasources', label=__('Scan New Datasources'), href='/druid/scan_new_datasources/', category='Sources', category_label=__('Sources'), category_icon='fa-database', icon='fa-refresh') appbuilder.add_link( 'Refresh Druid Metadata', label=__('Refresh Druid Metadata'), href='/druid/refresh_datasources/', category='Sources', category_label=__('Sources'), category_icon='fa-database', icon='fa-cog') appbuilder.add_separator('Sources')
failures.append(t) if len(successes) > 0: success_msg = _( "Metadata refreshed for the following table(s): %(tables)s", tables=", ".join([t.table_name for t in successes]), ) flash(success_msg, "info") if len(failures) > 0: failure_msg = _( "Unable to retrieve metadata for the following table(s): %(tables)s", tables=", ".join([t.table_name for t in failures]), ) flash(failure_msg, "danger") return redirect("/tablemodelview/list/") appbuilder.add_view_no_menu(TableModelView) appbuilder.add_link( "Tables", label=__("Tables"), href="/tablemodelview/list/?_flt_1_is_sqllab_view=y", icon="fa-table", category="Sources", category_label=__("Sources"), category_icon="fa-table", ) appbuilder.add_separator("Sources")
def pre_update(self, obj): self.pre_add(obj) class SavedQueryViewApi(SavedQueryView): show_columns = ['label', 'db_id', 'schema', 'description', 'sql'] add_columns = show_columns edit_columns = add_columns appbuilder.add_view_no_menu(SavedQueryViewApi) appbuilder.add_view_no_menu(SavedQueryView) appbuilder.add_link( __('Saved Queries'), href='/sqllab/my_queries/', icon='fa-save', category='SQL Lab') class SqlLab(BaseSupersetView): """The base views for Superset!""" @expose('/my_queries/') def my_queries(self): """Assigns a list of found users to the given role.""" return redirect( '/savedqueryview/list/?_flt_0_user={}'.format(g.user.id)) appbuilder.add_view_no_menu(SqlLab)
return redirect('/druiddatasourcemodelview/list/') @has_access @expose('/scan_new_datasources/') def scan_new_datasources(self): """ Calling this endpoint will cause a scan for new datasources only and add them. """ return self.refresh_datasources(refreshAll=False) appbuilder.add_view_no_menu(Druid) appbuilder.add_link('Scan New Datasources', label=__('Scan New Datasources'), href='/druid/scan_new_datasources/', category='Sources', category_label=__('Sources'), category_icon='fa-database', icon='fa-refresh') appbuilder.add_link('Refresh Druid Metadata', label=__('Refresh Druid Metadata'), href='/druid/refresh_datasources/', category='Sources', category_label=__('Sources'), category_icon='fa-database', icon='fa-cog') appbuilder.add_separator('Sources')
def _delete(self, pk): DeleteMixin._delete(self, pk) @expose('/edit/<pk>', methods=['GET', 'POST']) @has_access def edit(self, pk): """Simple hack to redirect to explore view after saving""" resp = super(TableModelView, self).edit(pk) if isinstance(resp, basestring): return resp return redirect('/superset/explore/table/{}/'.format(pk)) appbuilder.add_view( TableModelView, "Tables", label=__("Tables"), category="Sources", category_label=__("Sources"), icon='fa-table', ) appbuilder.add_link("Import ExeclInfo", label=__("Import ExeclInfo"), href="/superset/Import_ExeclInfo", icon="fa-cloud-upload", category="Sources", category_label=__("Sources")) appbuilder.add_separator("Sources")