This is an automated email from the ASF dual-hosted git repository. graceguo pushed a change to branch convert-ids-to-tabs-v2 in repository https://gitbox.apache.org/repos/asf/incubator-superset.git.
omit 03b722e convert ids to scope object omit 58f69a4 fix a few props initial value omit 98f1ac7 refactory after design review omit 226bd40 fix code review comments (round 1) omit 2c7fcf0 add single-field-edit in multi-edit mode switch omit 970e636 remove changes that should be another PR omit 9d2a391 convert ids to scope object omit 1609403 filter scope selector modal add c62b2f4 [docs] CTAS on PostgreSQL needs commit to apply (#8367) add d3406e0 [Config] Cache static resources (#8370) add a199901 [sqla] Enforcing ISO 8601 date/timestamp formats (#7702) add 9fc37ea [ci] Deprecate flake8 (#8409) add 1e533db fixed typo in installation instructions (#8413) add 4cfd6b3 [tests] Fix, removing deprecated function for future Python release compatibility. (#8353) add cca689b Add improved typed casting to BigQuery (#8331) add 8f246ce chore: disable another flaky cypress test (#8423) add b91205d [pydruid] Bumping the pydruid version (#8430) add a0db22b docs: add a note to RELEASING about Slack Channel (#8419) add cde17a8 docs: Add an 'Orientation' section to CONTRIBUTING.md (#8422) add 08c6b61 [fix] refine release instructions (#8381) add 786d770 [fix] Updating parse_human_timedelta typing (#8436) add 19d2ea2 spelling fix (#8442) add a39c24e explain the need to enable async queries (#8444) add 1d5718a introduce a space in command line option (#8438) add 82b1747 Split up tests/db_engine_test.py (#8449) add 59889a4 [setup] Fix, download_url (#8439) add e704e29 Allow fetching all rows from results endpoint (#8389) add eaeed0c removed repeated word (#8458) add c1810aa [docs] Crafting a new release (#8433) add 148cec4 Add UI-only database configuration method for extended authorization scenarios (#8448) add a757b43 [db engine] Add support for Elasticsearch (#8441) add f7f0be5 [SIP-15] Making client time use UTC as the local time (#8450) add 8b74745 [SIP-15] Adding initial framework (#8398) add 1adf742 Provide documentation for using a Service Account to connect to BigQuery (#8462) add 5fb0bcb [Datasource Editor] A few small UI changes in modal to prevent accidental edits (#8471) add 7afda6e Update UPDATING.md (#8465) add 0a3b121 [sql] Fixing datetime SQL literal (#8464) add 18c6d17 docs: more release instructions (#8432) add 3cba1bd feat: add expand_data parameter (#8472) add e4ca44e Use `config[]` not `config.get()` (#8454) add 1ccfa4f Re-enable DRUID_IS_ACTIVE flag (#8482) add a8f1589 fixing typo. (#8487) add 06a4108 Enhance docs for email reporting (#8486) add eb150eb [sip-15] Fix time range endpoints encoding (#8481) add 554a6d8 [sip-15] Adding database level python-date-format (#8474) add d46b47a feat(TableVis): Switch to the new table plugin (#8446) add acad66d [datasource editor] Only one click target for edit action (#8495) add fda2333 [SIP-15] Updating ISO 8601 regex match to make time optional (#8494) add a305b1a Change Fedora installation instructions + some small formatting changes (#8496) add 51c2290 feat: add korea(South) info on CountryMap viz and bump legacy-plugin-chart-country-map to v0.11.4 (#8478) add 5df1fcb Add `Duplicate Tab` option (#8485) add 4c35de1 build: bump dompurify version because of nasty xss bypass. (#8498) add 9a29116 [typing] superset/models/core.py (#8284) add 338a2b1 Allow user to customize query cost estimate (#8470) add 5dba2f4 [SIP-15] Adding grace period (#8490) add 5617f87 Updating pip with default timeout (#8492) add 0730261 Fix column type on dbs.encrypted_extra, add instructions for testing migration downgrades (#8493) add e8af945 Update query tab's title when saving a new query (#8484) add 926dca3 [docs] Small fixes on the release docs (#8500) add 0e64dc8 [SIP-15] Making sure the toast link opens in a new tab (#8503) add 7e7f553 Remove tabs (#8508) add 571c474 Make Report a bug link open in a new tab (#8509) add d78e59b revert tablevis (#8515) add 1e3d833 [sip-15] Fixing time range endpoints from dashboards (#8513) add ec476fc Default page: remove title attribute to fall back on appbuilder.app_name (#8427) add 397e1e3 Replace hardcoded default colors with defaults in setupColors.js (#8510) add 49ea232 [fix] Improve csv upload functionality (#8457) add c4c01d6 [docs] Adding Slice parameter documentation (#8531) add 5ed2190 [docs] User tutorial (#8459) add 650c848 [cli] Fix, import datasources exported by UI (#8477) add 64de9aa [docs] Updating slice parameter documentation. (#8535) add 6bce4f9 fab 2.2.0 (#8517) add 62476c5 Allow customization of documentation icon and text (#8507) add 763f59f Add support for database engine SAP Hana (#8411) add b7b655e [docs] 0.35.0 CHANGELOG (#8547) add a867d41 Upgrade superset-ui/time-format (#8541) add 1b3e40f Clickable checkbox labels (#8534) add a58b392 Encode feature flags to JSON pessimistically (#8529) add 7bfa24d [fix] Re-cleanup legacy filters (#8523) add 90275fe Add convert_dttm method to SnowflakeEngineSpec (#8551) add b4e501c filter scope selector modal add 7846a8c add single-field-edit in multi-edit mode switch add b48bf31 fix code review comments (round 1) add 7848027 refactory after design review add 39182f9 fix a few props initial value add c407dc6 convert ids to scope object add ce13818 remove changes that should be another PR add eecf04f convert ids to scope object This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (03b722e) \ N -- N -- N refs/heads/convert-ids-to-tabs-v2 (eecf04f) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. No new revisions were added by this update. Summary of changes: .pre-commit-config.yaml | 17 +- .travis.yml | 5 +- CHANGELOG.md | 136 ++++ CONTRIBUTING.md | 381 +++++++++- RELEASING/Dockerfile.from_tarball | 2 +- RELEASING/README.md | 171 ++++- RELEASING/from_tarball_entrypoint.sh | 3 +- UPDATING.md | 19 +- contrib/docker/Dockerfile | 4 +- docs/{tutorial.rst => admintutorial.rst} | 4 +- docs/index.rst | 6 +- docs/installation.rst | 201 ++++- docs/sqllab.rst | 49 ++ docs/{misc.rst => tutorials.rst} | 10 +- docs/usertutorial.rst | 508 +++++++++++++ docs/visualization.rst | 40 + pypi_push.sh | 10 +- requirements-dev.txt | 4 +- requirements.txt | 2 +- scripts/sign.sh | 19 +- setup.cfg | 12 + setup.py | 10 +- superset/__init__.py | 61 +- .../cypress/integration/dashboard/controls.js | 2 +- .../assets/images/usertutorial/add_new_chart.png | Bin 0 -> 42447 bytes .../usertutorial/advanced_analytics_base.png | Bin 0 -> 122647 bytes superset/assets/images/usertutorial/annotation.png | Bin 0 -> 101822 bytes .../images/usertutorial/annotation_settings.png | Bin 0 -> 22421 bytes .../usertutorial/average_aggregate_for_cost.png | Bin 0 -> 31741 bytes .../usertutorial/blue_bar_insert_component.png | Bin 0 -> 56554 bytes .../images/usertutorial/chose_a_datasource.png | Bin 0 -> 21013 bytes .../usertutorial/csv_to_database_configuration.png | Bin 0 -> 30607 bytes .../assets/images/usertutorial/edit-record.png | Bin 0 -> 4940 bytes .../assets/images/usertutorial/edit_annotation.png | Bin 0 -> 34104 bytes .../usertutorial/filter_on_origin_country.png | Bin 0 -> 44695 bytes superset/assets/images/usertutorial/markdown.png | Bin 0 -> 9030 bytes .../usertutorial/no_filter_on_time_filter.png | Bin 0 -> 35991 bytes .../images/usertutorial/parse_dates_column.png | Bin 0 -> 22004 bytes .../images/usertutorial/publish_dashboard.png | Bin 0 -> 67785 bytes superset/assets/images/usertutorial/resample.png | Bin 0 -> 88488 bytes .../resize_tutorial_table_on_dashboard.png | Bin 0 -> 40391 bytes .../assets/images/usertutorial/rolling_mean.png | Bin 0 -> 99706 bytes .../images/usertutorial/save_tutorial_table.png | Bin 0 -> 8282 bytes .../usertutorial/select_dates_pivot_table.png | Bin 0 -> 35466 bytes .../select_table_visualization_type.png | Bin 0 -> 47283 bytes .../assets/images/usertutorial/sum_cost_column.png | Bin 0 -> 36632 bytes .../time_comparison_absolute_difference.png | Bin 0 -> 98829 bytes .../usertutorial/time_comparison_two_series.png | Bin 0 -> 137009 bytes .../images/usertutorial/tutorial_line_chart.png | Bin 0 -> 97148 bytes .../images/usertutorial/tutorial_pivot_table.png | Bin 0 -> 57761 bytes .../assets/images/usertutorial/tutorial_table.png | Bin 0 -> 35897 bytes .../assets/images/usertutorial/upload_a_csv.png | Bin 0 -> 38213 bytes superset/assets/package-lock.json | 710 ++++++++++++------ superset/assets/package.json | 13 +- .../datasource/DatasourceEditor_spec.jsx | 1 + .../explore/components/CheckboxControl_spec.jsx | 14 +- .../messageToasts/components/Toast_spec.jsx | 13 +- .../javascripts/sqllab/TabbedSqlEditors_spec.jsx | 8 + superset/assets/src/SqlLab/actions/sqlLab.js | 5 +- superset/assets/src/SqlLab/components/App.jsx | 12 +- .../assets/src/SqlLab/components/QueryHistory.jsx | 2 + .../assets/src/SqlLab/components/QuerySearch.jsx | 2 + .../assets/src/SqlLab/components/QueryTable.jsx | 15 +- .../assets/src/SqlLab/components/ResultSet.jsx | 3 +- .../assets/src/SqlLab/components/SouthPane.jsx | 9 +- .../assets/src/SqlLab/components/SqlEditor.jsx | 2 + .../src/SqlLab/components/TabbedSqlEditors.jsx | 13 + superset/assets/src/SqlLab/reducers/sqlLab.js | 5 +- .../assets/src/datasource/DatasourceEditor.jsx | 71 +- superset/assets/src/datasource/main.css | 9 + .../components/controls/CheckboxControl.jsx | 1 + .../components/controls/DatasourceControl.css} | 30 +- .../components/controls/DatasourceControl.jsx | 71 +- .../components/controls/DateFilterControl.jsx | 37 +- .../assets/src/explore/controlPanels/sections.jsx | 2 +- superset/assets/src/explore/controls.jsx | 23 +- .../assets/src/messageToasts/components/Toast.jsx | 3 +- .../src/messageToasts/stylesheets/toast.less | 2 +- superset/assets/src/setup/setupColors.js | 1 + superset/cli.py | 16 +- superset/common/query_context.py | 12 +- superset/common/query_object.py | 13 +- superset/config.py | 83 ++- superset/connectors/base/models.py | 20 +- superset/connectors/druid/__init__.py | 3 +- superset/connectors/druid/models.py | 104 ++- superset/connectors/druid/views.py | 116 ++- superset/connectors/sqla/__init__.py | 3 +- superset/connectors/sqla/models.py | 124 +++- superset/connectors/sqla/views.py | 47 +- superset/dataframe.py | 2 +- superset/db_engine_specs/__init__.py | 4 +- superset/db_engine_specs/athena.py | 9 +- superset/db_engine_specs/base.py | 71 +- superset/db_engine_specs/bigquery.py | 36 +- superset/db_engine_specs/clickhouse.py | 9 +- superset/db_engine_specs/db2.py | 6 - superset/db_engine_specs/drill.py | 9 +- .../db_engine_specs/{druid.py => elasticsearch.py} | 35 +- superset/db_engine_specs/exasol.py | 2 +- superset/db_engine_specs/{oracle.py => hana.py} | 33 +- superset/db_engine_specs/hive.py | 26 +- superset/db_engine_specs/impala.py | 10 +- superset/db_engine_specs/kylin.py | 9 +- superset/db_engine_specs/mssql.py | 20 +- superset/db_engine_specs/mysql.py | 13 +- superset/db_engine_specs/oracle.py | 12 +- superset/db_engine_specs/postgres.py | 13 +- superset/db_engine_specs/presto.py | 55 +- superset/db_engine_specs/snowflake.py | 13 + superset/db_engine_specs/sqlite.py | 13 +- superset/db_engines/hive.py | 4 +- superset/examples/__init__.py | 34 +- superset/examples/bart_lines.py | 1 + superset/examples/birth_names.py | 4 +- superset/examples/countries.py | 6 +- superset/examples/country_map.py | 2 +- superset/examples/deck.py | 22 +- superset/examples/energy.py | 11 +- superset/examples/flights.py | 1 + superset/examples/helpers.py | 9 +- superset/examples/long_lat.py | 2 +- superset/examples/misc_dashboard.py | 2 +- superset/examples/multi_line.py | 1 + superset/examples/multiformat_time_series.py | 4 +- superset/examples/paris.py | 1 + superset/examples/random_time_series.py | 4 +- superset/examples/sf_population_polygons.py | 1 + superset/examples/tabbed_dashboard.py | 1 + superset/examples/unicode_test_data.py | 4 +- superset/examples/world_bank.py | 17 +- superset/jinja_context.py | 6 +- superset/migrations/env.py | 9 +- .../0b1f1ab473c0_add_extra_column_to_query.py | 2 +- .../0c5070e96b57_add_user_attributes_table.py | 2 +- .../11c737c17cc6_deprecate_restricted_metrics.py | 3 +- ...9ee0e3_fix_wrong_constraint_on_table_columns.py | 4 +- .../versions/1296d28ec131_druid_exports.py | 2 +- .../versions/12d55656cbca_is_featured.py | 2 +- .../versions/130915240929_is_sqllab_viz_flow.py | 2 +- superset/migrations/versions/18dc26817ad2_.py | 2 +- .../versions/18e88e1cc004_making_audit_nullable.py | 2 +- .../19a814813610_adding_metric_warning_text.py | 2 +- .../versions/1a1d627ebd8e_position_json.py | 2 +- .../versions/1a48a5411020_adding_slug_to_dash.py | 2 +- .../migrations/versions/1d2ddd543133_log_dt.py | 2 +- superset/migrations/versions/1d9e835a84f9_.py | 2 +- superset/migrations/versions/1e2841a4128_.py | 2 +- ...e_form_strip_leading_and_trailing_whitespace.py | 3 +- .../migrations/versions/2591d77e9831_user_id.py | 2 +- .../versions/27ae655e4247_make_creator_owners.py | 9 +- .../289ce07647b_add_encrypted_password_field.py | 2 +- .../2929af7925ed_tz_offsets_in_data_sources.py | 2 +- .../versions/2fcdcb35e487_saved_queries.py | 2 +- superset/migrations/versions/30bb17c0dc76_.py | 2 +- .../versions/315b3f4da9b0_adding_log_model.py | 2 +- .../versions/33d996bcc382_update_slice_model.py | 12 +- .../versions/3b626e2a6783_sync_db_with_models.py | 8 +- .../3c3ffe173e4f_add_sql_string_to_table.py | 2 +- ...1c4c6_migrate_num_period_compare_and_period_.py | 4 +- ...e1b21cd94a4_change_owner_to_m2m_relation_on_.py | 6 +- .../41f6a59a61f2_database_options_for_sql_lab.py | 2 +- .../migrations/versions/430039611635_log_more.py | 2 +- .../migrations/versions/43df8de3a5f4_dash_json.py | 2 +- .../4451805bbaa1_remove_double_percents.py | 5 +- .../versions/4500485bde7d_allow_run_sync_async.py | 2 +- superset/migrations/versions/45e7da7cfeba_.py | 2 +- superset/migrations/versions/46ba6aaaac97_.py | 2 +- ...8b9b7_remove_coordinator_from_druid_cluster_.py | 2 +- superset/migrations/versions/472d2f73dfd4_.py | 2 +- superset/migrations/versions/4736ec66ce19_.py | 2 +- superset/migrations/versions/4e6a06bad7a8_init.py | 2 +- .../versions/4fa88fe24e94_owners_many_to_many.py | 2 +- .../versions/525c854f0005_log_this_plus.py | 2 +- .../migrations/versions/55179c7f25c7_sqla_descr.py | 2 +- ...826_add_metadata_column_to_annotation_model_.py | 2 +- superset/migrations/versions/5a7bad26f2a7_.py | 2 +- superset/migrations/versions/5ccf602336a0_.py | 2 +- .../5e4a03ef0bf0_add_request_access_model.py | 2 +- superset/migrations/versions/6414e83d82b7_.py | 2 +- .../migrations/versions/65903709c321_allow_dml.py | 6 +- .../versions/67a6ac9b727b_update_spatial_params.py | 2 +- .../6c7537a6004a_models_for_email_reports.py | 2 +- superset/migrations/versions/705732c70154_.py | 2 +- .../732f1c06bcbf_add_fetch_values_predicate.py | 2 +- .../versions/7467e77870e4_remove_aggs.py | 2 +- .../versions/763d4b211ec9_fixing_audit_fk.py | 2 +- ...27d0d1d_reconvert_legacy_filters_into_adhoc.py} | 54 +- .../versions/7dbf98566af7_slice_description.py | 2 +- .../versions/7e3ddad2a00b_results_key_to_query.py | 2 +- superset/migrations/versions/7fcdcde0761c_.py | 2 +- .../80a67c5192fa_single_pie_chart_metric.py | 3 +- ...a3f04bc82_add_parent_ids_in_dashboard_layout.py | 3 +- .../versions/836c0bf75904_cache_timeouts.py | 2 +- ...4f117f9_adding_extra_field_to_database_model.py | 2 +- superset/migrations/versions/8b70aa3d0f87_.py | 2 +- superset/migrations/versions/8e80a26a31db_.py | 2 +- .../versions/937d04c16b64_update_datasources.py | 2 +- .../versions/956a063c52b3_adjusting_key_length.py | 2 +- superset/migrations/versions/960c69cb1f5b_.py | 2 +- superset/migrations/versions/979c03af3341_.py | 2 +- .../versions/a2d606a761d9_adding_favstar_model.py | 2 +- .../a33a03f16c4a_add_extra_column_to_savedquery.py | 2 +- .../versions/a61b40f9f57f_remove_allow_run_sync.py | 2 +- ...a65458420354_add_result_backend_time_logging.py | 2 +- .../a6c18f869a4e_query_start_running_time.py | 2 +- ...7c195a_rewriting_url_from_shortner_with_new_.py | 8 +- .../a9c47e2c1547_add_impersonate_user_to_dbs.py | 2 +- ...d66c4246e_add_cache_timeout_to_druid_cluster.py | 2 +- .../versions/ad4d656d92bc_add_avg_metric.py | 2 +- .../versions/ad82a75afd82_add_query_model.py | 2 +- .../versions/afb7730f6a9c_remove_empty_filters.py | 5 +- ...er_sql_column_data_type_in_query_mysql_table.py | 2 +- ...dfe5fb6c_adding_verbose_name_to_druid_column.py | 2 +- .../versions/b46fa1b0b39e_add_params_to_tables.py | 3 +- .../b4a38aa87893_deprecate_database_expression.py | 2 +- .../b6fa807eac07_make_names_non_nullable.py | 2 +- .../bb51420eaf83_add_schema_to_table_model.py | 2 +- .../versions/bcf3126872fc_add_keyvalue.py | 2 +- .../versions/bddc498dd179_adhoc_filters.py | 5 +- .../bebcf3fed1fe_convert_dashboard_v1_positions.py | 2 +- ...acd2cf3df2_alter_type_of_dbs_encrypted_extra.py | 64 ++ .../c3a8f8611885_materializing_permission.py | 2 +- .../versions/c5756bec8b47_time_grain_sqla.py | 5 +- .../migrations/versions/c611f2b591b8_dim_spec.py | 2 +- .../versions/c617da68de7d_form_nullable.py | 2 +- superset/migrations/versions/c829ff0b37d0_.py | 2 +- .../versions/c82ee8a39623_add_implicit_tags.py | 3 +- superset/migrations/versions/c9495751e314_.py | 2 +- .../versions/ca69c70ec99b_tracking_url.py | 2 +- ... => cca2f5d568c8_add_encrypted_extra_to_dbs.py} | 18 +- ...d38_increase_size_of_name_column_in_ab_view_.py | 2 +- superset/migrations/versions/d39b1e37131d_.py | 2 +- superset/migrations/versions/d6db5a5cdb5d_.py | 2 +- ...fdf31bdd4_add_published_column_to_dashboards.py | 2 +- ...1a0d6f2da_remove_limit_used_from_query_model.py | 2 +- .../versions/d827694c7555_css_templates.py | 2 +- ...d8bc074f7aad_add_new_field_is_restricted_to_.py | 7 +- .../migrations/versions/d94d33dbe938_form_strip.py | 2 +- .../db0c65b146bd_update_slice_model_json.py | 5 +- .../versions/db527d8c4c78_add_db_verbose_name.py | 3 +- .../versions/ddd6ebdd853b_annotations.py | 2 +- superset/migrations/versions/e3970889f38e_.py | 2 +- .../versions/e46f2d27a08e_materialize_perms.py | 2 +- .../e502db2af7be_add_template_params_to_tables.py | 2 +- .../versions/e553e78e90c5_add_druid_auth_py_py.py | 2 +- ...8c4473c581_allow_multi_schema_metadata_fetch.py | 2 +- .../versions/e866bd2d4976_smaller_grid.py | 4 +- superset/migrations/versions/ea033256294a_.py | 2 +- .../eca4694defa7_sqllab_setting_defaults.py | 5 +- ...bf6129e13_adding_verbose_name_to_tablecolumn.py | 2 +- .../versions/f162a1dea4c4_d3format_by_metric.py | 2 +- superset/migrations/versions/f1f2d4af5b90_.py | 2 +- superset/migrations/versions/f231d82b9b26_.py | 2 +- superset/migrations/versions/f959a6652acd_.py | 2 +- superset/migrations/versions/fbd55e0f83eb_.py | 2 +- superset/migrations/versions/fc480c87706c_.py | 2 +- superset/models/__init__.py | 5 +- superset/models/core.py | 378 +++++----- superset/models/helpers.py | 23 +- superset/models/schedules.py | 1 - superset/models/sql_lab.py | 4 +- superset/models/sql_types/presto_sql_types.py | 1 - superset/models/tags.py | 9 +- superset/security.py | 14 +- superset/sql_lab.py | 40 +- superset/sql_validators/__init__.py | 9 +- superset/sql_validators/presto_db.py | 4 +- superset/tasks/__init__.py | 3 +- superset/tasks/cache.py | 1 - superset/tasks/schedules.py | 38 +- superset/templates/appbuilder/navbar.html | 6 +- superset/templates/appbuilder/navbar_right.html | 18 +- .../templates/superset/models/database/add.html | 1 + .../templates/superset/models/database/edit.html | 1 + .../templates/superset/models/database/macros.html | 6 + superset/translations/en/LC_MESSAGES/messages.po | 3 +- superset/translations/fr/LC_MESSAGES/messages.json | 2 +- superset/translations/fr/LC_MESSAGES/messages.po | 4 +- superset/translations/it/LC_MESSAGES/messages.json | 4 +- superset/translations/it/LC_MESSAGES/messages.po | 3 +- superset/translations/ko/LC_MESSAGES/messages.po | 2 +- superset/translations/messages.pot | 3 +- superset/translations/ru/LC_MESSAGES/messages.json | 6 +- superset/translations/ru/LC_MESSAGES/messages.po | 4 +- superset/translations/utils.py | 3 +- superset/translations/zh/LC_MESSAGES/messages.json | 4 +- superset/translations/zh/LC_MESSAGES/messages.po | 4 +- superset/utils/core.py | 106 +-- superset/utils/decorators.py | 3 +- superset/utils/dict_import_export.py | 1 - superset/utils/import_datasource.py | 2 +- superset/utils/log.py | 6 +- superset/utils/logging_configurator.py | 25 +- superset/views/__init__.py | 23 +- superset/views/annotations.py | 6 +- superset/views/api.py | 5 +- superset/views/base.py | 27 +- superset/views/core.py | 207 ++++-- superset/views/dashboard.py | 1 + superset/views/database/__init__.py | 23 +- superset/views/database/api.py | 3 +- superset/views/database/forms.py | 14 +- superset/views/database/views.py | 79 +- superset/views/datasource.py | 1 + superset/views/log/api.py | 7 +- superset/views/log/views.py | 7 +- superset/views/schedules.py | 18 +- superset/views/sql_lab.py | 6 +- superset/views/tags.py | 8 +- superset/views/utils.py | 79 +- superset/viz.py | 56 +- tests/access_tests.py | 41 +- tests/base_tests.py | 8 +- tests/cache_tests.py | 1 + tests/celery_tests.py | 10 +- tests/core_tests.py | 152 +++- tests/dashboard_tests.py | 3 +- tests/dataframe_test.py | 25 +- tests/datasource_tests.py | 12 +- .../db_engine_specs/athena_tests.py | 21 +- tests/db_engine_specs/base_engine_spec_tests.py | 208 ++++++ .../db_engine_specs/base_tests.py | 24 +- tests/db_engine_specs/bigquery_tests.py | 56 ++ .../db_engine_specs/clickhouse_tests.py | 20 +- .../db_engine_specs/drill_tests.py | 21 +- .../db_engine_specs/elasticsearch_tests.py | 16 +- tests/db_engine_specs/hive_tests.py | 164 +++++ .../db_engine_specs/impala_tests.py | 20 +- .../db_engine_specs/kylin_tests.py | 20 +- tests/db_engine_specs/mssql_tests.py | 89 +++ tests/db_engine_specs/mysql_tests.py | 43 ++ tests/db_engine_specs/oracle_tests.py | 50 ++ .../db_engine_specs/pinot_tests.py | 24 +- tests/db_engine_specs/postgres_tests.py | 85 +++ tests/db_engine_specs/presto_tests.py | 356 +++++++++ .../snowflake_tests.py} | 36 +- .../db_engine_specs/sqlite_tests.py | 12 +- tests/db_engine_specs_test.py | 809 --------------------- tests/dict_import_export_tests.py | 66 +- tests/druid_func_tests.py | 11 +- tests/druid_tests.py | 17 +- tests/email_tests.py | 35 +- tests/import_export_tests.py | 93 +-- tests/load_examples_test.py | 1 + tests/macro_tests.py | 3 +- tests/migration_tests.py | 3 +- tests/model_tests.py | 45 +- tests/schedules_test.py | 19 +- tests/security_tests.py | 5 +- tests/sql_parse_tests.py | 136 ++-- tests/sql_validator_tests.py | 3 +- tests/sqla_models_tests.py | 13 +- tests/sqllab_tests.py | 67 +- tests/strategy_tests.py | 2 +- tests/superset_test_config.py | 6 +- tests/utils_tests.py | 153 ++-- tests/viz_tests.py | 13 +- tox.ini | 39 +- 359 files changed, 5743 insertions(+), 2921 deletions(-) rename docs/{tutorial.rst => admintutorial.rst} (99%) copy docs/{misc.rst => tutorials.rst} (92%) create mode 100644 docs/usertutorial.rst create mode 100644 superset/assets/images/usertutorial/add_new_chart.png create mode 100644 superset/assets/images/usertutorial/advanced_analytics_base.png create mode 100644 superset/assets/images/usertutorial/annotation.png create mode 100644 superset/assets/images/usertutorial/annotation_settings.png create mode 100644 superset/assets/images/usertutorial/average_aggregate_for_cost.png create mode 100644 superset/assets/images/usertutorial/blue_bar_insert_component.png create mode 100644 superset/assets/images/usertutorial/chose_a_datasource.png create mode 100644 superset/assets/images/usertutorial/csv_to_database_configuration.png create mode 100644 superset/assets/images/usertutorial/edit-record.png create mode 100644 superset/assets/images/usertutorial/edit_annotation.png create mode 100644 superset/assets/images/usertutorial/filter_on_origin_country.png create mode 100644 superset/assets/images/usertutorial/markdown.png create mode 100644 superset/assets/images/usertutorial/no_filter_on_time_filter.png create mode 100644 superset/assets/images/usertutorial/parse_dates_column.png create mode 100644 superset/assets/images/usertutorial/publish_dashboard.png create mode 100644 superset/assets/images/usertutorial/resample.png create mode 100644 superset/assets/images/usertutorial/resize_tutorial_table_on_dashboard.png create mode 100644 superset/assets/images/usertutorial/rolling_mean.png create mode 100644 superset/assets/images/usertutorial/save_tutorial_table.png create mode 100644 superset/assets/images/usertutorial/select_dates_pivot_table.png create mode 100644 superset/assets/images/usertutorial/select_table_visualization_type.png create mode 100644 superset/assets/images/usertutorial/sum_cost_column.png create mode 100644 superset/assets/images/usertutorial/time_comparison_absolute_difference.png create mode 100644 superset/assets/images/usertutorial/time_comparison_two_series.png create mode 100644 superset/assets/images/usertutorial/tutorial_line_chart.png create mode 100644 superset/assets/images/usertutorial/tutorial_pivot_table.png create mode 100644 superset/assets/images/usertutorial/tutorial_table.png create mode 100644 superset/assets/images/usertutorial/upload_a_csv.png copy superset/assets/{stylesheets/explore.css => src/explore/components/controls/DatasourceControl.css} (76%) copy superset/db_engine_specs/{druid.py => elasticsearch.py} (53%) copy superset/db_engine_specs/{oracle.py => hana.py} (51%) copy superset/migrations/versions/{bddc498dd179_adhoc_filters.py => 78ee127d0d1d_reconvert_legacy_filters_into_adhoc.py} (64%) create mode 100644 superset/migrations/versions/c2acd2cf3df2_alter_type_of_dbs_encrypted_extra.py copy superset/migrations/versions/{1e2841a4128_.py => cca2f5d568c8_add_encrypted_extra_to_dbs.py} (75%) copy superset/legacy.py => tests/db_engine_specs/athena_tests.py (59%) create mode 100644 tests/db_engine_specs/base_engine_spec_tests.py copy superset/utils/dates.py => tests/db_engine_specs/base_tests.py (56%) create mode 100644 tests/db_engine_specs/bigquery_tests.py copy superset/legacy.py => tests/db_engine_specs/clickhouse_tests.py (61%) copy superset/legacy.py => tests/db_engine_specs/drill_tests.py (59%) copy superset/legacy.py => tests/db_engine_specs/elasticsearch_tests.py (66%) create mode 100644 tests/db_engine_specs/hive_tests.py copy superset/legacy.py => tests/db_engine_specs/impala_tests.py (60%) copy superset/legacy.py => tests/db_engine_specs/kylin_tests.py (61%) create mode 100644 tests/db_engine_specs/mssql_tests.py create mode 100644 tests/db_engine_specs/mysql_tests.py create mode 100644 tests/db_engine_specs/oracle_tests.py copy superset/bin/superset => tests/db_engine_specs/pinot_tests.py (56%) mode change 100755 => 100644 create mode 100644 tests/db_engine_specs/postgres_tests.py create mode 100644 tests/db_engine_specs/presto_tests.py copy tests/{migration_tests.py => db_engine_specs/snowflake_tests.py} (53%) copy superset/db_engine_specs/gsheets.py => tests/db_engine_specs/sqlite_tests.py (74%) delete mode 100644 tests/db_engine_specs_test.py