Beispiel #1
0
    @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",
)
Beispiel #3
0
        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", )
Beispiel #4
0
    @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")
Beispiel #5
0
        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",
)
Beispiel #6
0
    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", )
Beispiel #8
0
            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')
Beispiel #10
0
                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)
Beispiel #13
0
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')
Beispiel #14
0
                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')
Beispiel #15
0
    @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')
Beispiel #16
0
                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")
Beispiel #17
0
    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')
Beispiel #19
0
    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")