Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
48431ab
[csv-upload] Fixing message encoding (#6971)
john-bodley Mar 3, 2019
aded70a
[date-filter] Adding minus infinity (#6968)
john-bodley Mar 4, 2019
d5b9795
Enhancement of query context and object. (#6962)
conglei Mar 5, 2019
ed79134
auto-set 'Is Temporal' to true where column_name == '__time' (#6857)
mistercrunch Mar 5, 2019
0421786
[dashboard editor] use the theme's btn-primary (#6859)
mistercrunch Mar 5, 2019
3e076cb
[sql-parse] Fixing LIMIT exceptions (#6963)
john-bodley Mar 5, 2019
8346e62
Sort Chart Types based on Usage (#6849)
datability-io Mar 5, 2019
c1ba914
docs: warn that docker installation instructions are `contrib/` (#6925)
mistercrunch Mar 6, 2019
e619405
Adding custom control overrides (#6956)
michellethomas Mar 6, 2019
23f4c95
refactor: bump @superset-ui versions (#6982)
kristw Mar 7, 2019
83b48a9
fix(fetch-datasource-meta-data): Chart data is not showing after in c…
Mar 7, 2019
e47a1b2
Split tags migration (#7002)
xtinec Mar 9, 2019
0535a11
Retrieve df from get_df_payload to hit cache (#6990)
villebro Mar 9, 2019
6a4d507
[fix] /superset/slice/id url is too long (#6989)
Mar 10, 2019
83b5dcc
fixing a broken link for the ORM documentation (#7005)
MarcusSorealheis Mar 12, 2019
d308c84
Bump sqlalchemy dependency (#7000)
mistercrunch Mar 12, 2019
7f3c145
Changing time table viz to pass formatTime a date (#7020)
michellethomas Mar 13, 2019
05be866
[db-engine-spec] Aligning Hive/Presto partition logic (#7007)
john-bodley Mar 13, 2019
cc58f0e
[WIP] fix user specified JSON metadata not updating dashboard on refr…
thunter009 Mar 14, 2019
0782e83
fix inaccurate data calculation with adata rolling and contribution (…
conglei Mar 14, 2019
4ca2cc1
fix(css-selector): Fixed incorrect css-selector for CRUD page reporte…
bipinsoniguavus Mar 15, 2019
5e66008
Add handling for memoryview (#6987)
villebro Mar 15, 2019
7d7210d
[api/v1][query_obj] add default prequeries array (#7039)
williaster Mar 15, 2019
07c340c
[sqlparse] Fixing table name extraction for ill-defined query (#7029)
john-bodley Mar 15, 2019
fc1770f
[fix] Cursor jumping when editing chart and dashboard titles (#7038)
Mar 15, 2019
f760ba8
fix: groupable only columns populating in filters (#6993)
Mar 15, 2019
4a30094
User can turn off download - export csv from a dashboard (#6821)
emacip Mar 16, 2019
a6d48d4
[fix] explore chart from dashboard missed slice title (#7046)
Mar 16, 2019
f5274a9
Fix issues around Database permissions (#7009)
mistercrunch Mar 18, 2019
5137539
[fix] Use HTTPS, not HTTP wherever practical (#7040)
hajdbo Mar 18, 2019
c771625
[datasource] Ensuring consistent behavior of datasource editing/savin…
john-bodley Mar 18, 2019
ead3d48
Adding warning message for sqllab save query (#7028)
michellethomas Mar 18, 2019
d56362f
feat: bump superset-ui-plugins to v0.10.2 (#7051)
kristw Mar 19, 2019
42a8a92
feat: add Bulgaria to country map (#6938)
djok Mar 19, 2019
c7ffdd6
docs: fix RST issues while building docs (#7012)
mistercrunch Mar 19, 2019
84109be
fix: search for visualizations with case-insensitive keyword
bipinsoniguavus Mar 19, 2019
aa9e273
docs: add hostnfly to company list (#7065)
kristw Mar 20, 2019
c1c8e50
Handle memoryview like bytes instances and decode bytes to utf8 (#7062)
villebro Mar 20, 2019
2524219
[tox] Enforcing consistent ordering (#7060)
john-bodley Mar 20, 2019
209e7a9
[SQL Lab] Copy to clipboard should work on the preview tab too (#7068…
enricoberti Mar 20, 2019
30f88ca
[SQL Lab] Fixed TableElement sorting functionality and tests (#7069) …
enricoberti Mar 20, 2019
61add60
[missing values] Removing replacing missing values (#4905)
john-bodley Mar 21, 2019
b210742
Fix filter_box migration PR #6523 (#7066)
mistercrunch Mar 21, 2019
9b58e9f
[SQL Lab] Improved query and results tabs rendering reliability (#7082)
enricoberti Mar 21, 2019
10d0033
Bump FAB to 1.12.5 (#7085)
dpgaspar Mar 22, 2019
5241486
[bugfix] throw "TypeError: 'NoneType'..." when save chart to new/exis…
hitdemo Mar 22, 2019
4631b7b
fix: bump pivot table version (#7088)
kristw Mar 22, 2019
33d67da
[Dashboard] Keeping refresh frequency value in Dashboard (#5741)
zhaoyongjie Mar 22, 2019
7457a35
[api] add `available_domains/` endpoint (#7097)
williaster Mar 23, 2019
60a7b6d
handle null column_name in sqla and druid models (#7063)
Mar 23, 2019
80d6f5a
[mypy] Adding mypy linting (#7053)
john-bodley Mar 25, 2019
23e823f
Bump SQLAlchemy to 1.3 (#7099)
villebro Mar 25, 2019
b3c4bd9
[forms] Fix handling of NULLs (#7078)
john-bodley Mar 25, 2019
003364e
Use metric name instead of metric in filter box (#7106)
michellethomas Mar 25, 2019
87fae5c
[docs] improve UPDATING.md around 0.31's [now] optional deps (#7117)
mistercrunch Mar 25, 2019
71f1bbd
SQL editor layout makeover (#7102)
xtinec Mar 25, 2019
4c5e6ca
Add HTTP Basic Auth for Druid (Issue #4776) (#6795)
donbowman Mar 25, 2019
ebb3210
Scripts & instructions to craft official Apache source releases (#7054)
mistercrunch Mar 25, 2019
f556da8
fix(useless-self-assignment): correct useless-self-assignment (#7090)
rasmi-ranjan-guavus Mar 26, 2019
68d2880
Remove super verbose `logging.debug` call (#7122)
mistercrunch Mar 26, 2019
215ed39
Bump python lib croniter to an existing version (#7132)
mistercrunch Mar 26, 2019
fcdf25c
Sparkline dates aren't formatting in Time Series Table (#6976)
khtruong Mar 5, 2019
80ae60f
Show tooltip with time frame (#6979)
betodealmeida Mar 13, 2019
f7c758e
Fix time filter control (#6978)
betodealmeida Mar 13, 2019
644bef0
feat: add ability to change font size in big number (#7003)
khtruong Mar 19, 2019
ead89c6
Allow LIMIT to be specified in parameters (#7052)
betodealmeida Mar 20, 2019
080956c
Changing time table viz to pass formatTime a date (#7020)
michellethomas Mar 13, 2019
9877482
Enable color consistency in a dashboard
khtruong Mar 21, 2019
b698f7e
Moved actions, minor UI, allowed dashboard copy
khtruong Mar 22, 2019
8ee362f
Fix linting errors
khtruong Mar 25, 2019
63bd2fa
Undo unintentional change
khtruong Mar 25, 2019
057ae8f
Updated and added unit tests
khtruong Mar 25, 2019
ae98bc2
Fail quietly if package has not been updated
khtruong Mar 25, 2019
c38ab70
Fail quietly on dashboard copy if package is old
khtruong Mar 25, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,4 @@ geckodriver.log
ghostdriver.log
testCSV.csv
.terser-plugin-cache/
apache-superset-*.tar.gz*
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ jobs:
python: 3.6
env: TOXENV=pylint
- language: python
python: 3.6
env:
- TOXENV=license-check
- TRAVIS_CACHE=$HOME/.travis_cache/
Expand Down
35 changes: 32 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -432,9 +432,9 @@ npm run lint

### Python Testing

All python tests are carried out in [tox](http://tox.readthedocs.io/en/latest/index.html)
All python tests are carried out in [tox](https://tox.readthedocs.io/en/latest/index.html)
a standardized testing framework.
All python tests can be run with any of the tox [environments](http://tox.readthedocs.io/en/latest/example/basic.html#a-simple-tox-ini-default-environments), via,
All python tests can be run with any of the tox [environments](https://tox.readthedocs.io/en/latest/example/basic.html#a-simple-tox-ini-default-environments), via,

```bash
tox -e <environment>
Expand Down Expand Up @@ -462,9 +462,38 @@ Note that the test environment uses a temporary directory for defining the
SQLite databases which will be cleared each time before the group of test
commands are invoked.

#### Typing

To ensure clarity, consistency, all readability, _all_ new functions should use
[type hints](https://docs.python.org/3/library/typing.html) and include a
docstring using Sphinx documentation.

Note per [PEP-484](https://www.python.org/dev/peps/pep-0484/#exceptions) no
syntax for listing explicitly raised exceptions is proposed and thus the
recommendation is to put this information in a docstring, i.e.,


```python
import math
from typing import Union


def sqrt(x: Union[float, int]) -> Union[float, int]:
"""
Return the square root of x.

:param x: A number
:returns: The square root of the given number
:raises ValueError: If the number is negative
"""

return math.sqrt(x)
```


### JavaScript Testing

We use [Jest](https://jestjs.io/) and [Enzyme](http://airbnb.io/enzyme/) to test Javascript. Tests can be run with:
We use [Jest](https://jestjs.io/) and [Enzyme](https://airbnb.io/enzyme/) to test Javascript. Tests can be run with:

```bash
cd superset/assets
Expand Down
39 changes: 39 additions & 0 deletions INSTALL.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# INSTALL / BUILD instructions for Apache Superset (incubating)

# These instructions should work along sources releases under
# https://dist.apache.org/repos/dist/dev/incubator/superset/*/*source.tar.gz$

# [required] fetch the tarball and untar the source
# change into the directory that was untarred.

#############################
# Dependencies
#############################
# Superset runs best on python3.6
# Also recommended is the latest long term supported node / npm
# For complementary information read our CONTRIBUTING.md
# for OS level dependencies find instructions here:
# http://superset.apache.org/installation.html

# Fetch npm dependencies
cd superset/assets/
npm ci

# Build the Javascript bundles
npm run build

# Back to the root of the repo
cd ../..

# [optional] Superset pulls in quite a lot of dependencies in order
# to connect to other services. You might want to test or run Superset
# from a virtual env to make sure those dependencies are separated
# from your system wide versions
python3 -m env36
source env36/bin/activate

# [required] building and installing by pip (preferred)
pip install .

# superset --help

3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Database Support

Superset speaks many SQL dialects through SQLAlchemy, a Python
ORM that is compatible with
[most common databases](http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html).
[most common databases](https://docs.sqlalchemy.org/en/rel_1_2/core/engines.html).

Superset can be used to visualize data out of most databases:
* MySQL
Expand Down Expand Up @@ -188,6 +188,7 @@ the world know they are using Superset. Join our growing community!
1. [Fordeal](http://www.fordeal.com)
1. [GfK Data Lab](http://datalab.gfk.com)
1. [Grassroot](https://www.grassrootinstitute.org/)
1. [Hostnfly](https://www.hostnfly.com/)
1. [HuiShouBao](http://www.huishoubao.com/)
1. [jampp](https://jampp.com/)
1. [Konfío](http://konfio.mx)
Expand Down
112 changes: 55 additions & 57 deletions RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,66 +46,64 @@ git commit -a -m "New doc version"
git push origin master
```

## Publishing a PyPI release
# Apache Releases

We create a branch that goes along each minor release `0.24`
and micro releases get corresponding tags as in `0.24.0`. Git history should
never be altered in release branches.
Bug fixes and security-related patches get cherry-picked
(usually from master) as in `git cherry-pick -x {SHA}`.
You'll probably want to run these commands manually and understand what
they do prior to doing so.

Following a set of cherries being picked, a release can be pushed to
PyPI as follows:
First you need to setup a few things. This is a one-off and doesn't
need to be done at every release.

```bash
# branching off of master
git checkout -b 0.25

# cherry-picking a SHA
git cherry-pick -x f9d85bd2e1fd9bc233d19c76bed09467522b968a
# repeat with other SHAs, don't forget the -x

# source of thruth for release numbers live in package.json
vi superset/assets/package.json
# hard code release in file, commit to the release branch
git commit -a -m "0.25.0"

# create the release tag in the release branch
git tag 0.25.0
git push apache 0.25 --tags

# check travis to confirm the build succeeded as
# you shouldn't assume that a clean cherry will be clean
# when landing on a new sundae

# compile the JS, and push to pypi
# to run this part you'll need a pypi account and rights on the
# superset package. Committers that want to ship releases
# should have this access.
# You'll also need a `.pypirc` as specified here:
# http://peterdowns.com/posts/first-time-with-pypi.html
./pypi_push.sh

# publish an update to the CHANGELOG.md for the right version range
# looking the latest CHANGELOG entry for the second argument
./gen_changelog.sh 0.22.1 0.25.0
# this will overwrite the CHANGELOG.md with only the version range
# so you'll want to copy paste that on top of the previous CHANGELOG.md
# open a PR against `master`
# Create PGP Key
gpg --gen-key

# Checkout ASF dist repo
svn checkout https://dist.apache.org/repos/dist/dev/incubator/superset/ ~/svn/superset
cd ~/svn/superset


# Add your GPG pub key to KEYS file. Replace "Maxime Beauchemin" with your name
export FULLNAME="Maxime Beauchemin"
(gpg --list-sigs $FULLNAME && gpg --armor --export $FULLNAME ) >> KEYS


# Commit the changes
svn commit -m "Add PGP keys of new Superset committer"
```

In the future we'll start publishing release candidates for minor releases
only, but typically not for micro release.
The process will be similar to the process described above, expect the
tags will be formatted `0.25.0rc1`, `0.25.0rc2`, ..., until consensus
is reached.

We should also have a Github PR label process to target the proper
release, and tooling helping keeping track of all the cherries and
target versions.

For Apache releases, the process will be a bit heavier and should get
documented here. There will be extra steps for signing the binaries,
with a PGP key and providing MD5, Apache voting, as well as
publishing to Apache's SVN repository. View the ASF docs for more
information.
Now let's craft a source release
```bash
# Assuming these commands are executed from the root of the repo
# Setting a VERSION var will be useful
export VERSION=0.31.0rc18

# Let's create a git tag
git tag -f ${VERSION}

# [WARNING!] This command wipes everything in your repo that is
# gitignored in preparation for the source release.
# You may want to check that there's nothing your care about here first.
# Alternatively you could clone the repo into another location as in
# git clone [email protected]:apache/incubator-superset.git superset-releases
git clean -fxd
git archive \
--format=tar.gz ${VERSION} \
--prefix=apache-superset-${VERSION}/ \
-o apache-superset-${VERSION}-source.tar.gz

scripts/sign.sh apache-superset-${VERSION}-source.tar.gz
```

Now let's ship this into svn

```bash
# cp or mv the files over to the svn repo
mkdir ~/svn/superset/${VERSION}/
cp apache-superset-${VERSION}* ~/svn/superset/${VERSION}/
cd ~/svn/superset/
svn add ${VERSION}
svn commit
```

Now you're ready to announce the release on the mailing list
15 changes: 11 additions & 4 deletions UPDATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,24 @@ This file documents any backwards-incompatible changes in Superset and
assists people when migrating to a new version.

## Superset 0.32.0
* If you use `Hive` or `Presto`, we've moved some dependencies that were
in the main package as optional now. To get these packages,
run `pip install superset[presto]` and/or `pip install superset[hive]` as
required.

* [5445](https://github.com/apache/incubator-superset/pull/5445) : a change
which prevents encoding of empty string from form data in the datanbase.
This involves a non-schema changing migration which does potentially impact
a large number of records. Scheduled downtime may be advised.

## Superset 0.31.0

* If you use `Hive` or `Presto`, we've moved some dependencies that were
in the main package as optional now. To get these packages,
run `pip install superset[presto]` and/or `pip install superset[hive]` as
required.

* Similarly, if you use Celery's `flower`, `gsheetsdb`, `thrift` or
`thrift-sasl`, those dependencies have now been made optional in our
package, meaning you may have to install them in your environment post
0.31.0

* boto3 / botocore was removed from the dependency list. If you use s3
as a place to store your SQL Lab result set or Hive uploads, you may
have to rely on an alternate requirements.txt file to install those
Expand Down
2 changes: 1 addition & 1 deletion docs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ BUILDDIR = _build

# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from https://sphinx-doc.org/)
endif

# Internal variables.
Expand Down
2 changes: 1 addition & 1 deletion docs/faq.rst
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ Superset in the :ref:`ref_database_deps` section of the docs. Database
engines not listed in this page may work too. We rely on the
community to contribute to this knowledge base.

.. _SQLAlchemy dialect: http://docs.sqlalchemy.org/en/latest/dialects/
.. _SQLAlchemy dialect: https://docs.sqlalchemy.org/en/latest/dialects/
.. _DBAPI driver: https://www.python.org/dev/peps/pep-0249/

For a database engine to be supported in Superset through the
Expand Down
33 changes: 18 additions & 15 deletions docs/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,14 @@ as needed.
Start with Docker
-----------------

If you know docker, then you're lucky, we have shortcut road for you to
.. note ::
The Docker-related files and documentation has been
community-contributed and
is not actively maintained and managed by the core committers working on
the project. Some issues have been reported as of 2019-01.
Help and contributions around Docker are welcomed!

If you know docker, then you're lucky, we have shortcut road for you to
initialize development environment: ::

git clone https://github.com/apache/incubator-superset/
Expand All @@ -73,7 +80,7 @@ From there, the container server will reload on modification of the superset pyt
and javascript source code.
Don't forget to reload the page to take the new frontend into account though.

See also `CONTRIBUTING.md <https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#webpack-dev-server>`_,
See also `CONTRIBUTING.md#building <https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#building>`_,
for alternative way of serving the frontend.

It is also possible to run Superset in non-development mode: in the `docker-compose.yml` file remove
Expand Down Expand Up @@ -208,7 +215,7 @@ setup known to work well in production: ::
superset:app

Refer to the
`Gunicorn documentation <http://docs.gunicorn.org/en/stable/design.html>`_
`Gunicorn documentation <https://docs.gunicorn.org/en/stable/design.html>`_
for more information.

Note that *gunicorn* does not
Expand Down Expand Up @@ -312,7 +319,7 @@ as well as Flask extensions like ``flask-wtf``, ``flask-cache``,
``flask-migrate``, and ``flask-appbuilder``. Flask App Builder, the web
framework used by Superset offers many configuration settings. Please consult
the `Flask App Builder Documentation
<http://flask-appbuilder.readthedocs.org/en/latest/config.html>`_
<https://flask-appbuilder.readthedocs.org/en/latest/config.html>`_
for more information on how to configure it.

Make sure to change:
Expand Down Expand Up @@ -382,7 +389,8 @@ Here's a list of some of the recommended packages.
+---------------+-------------------------------------+-------------------------------------------------+
| Teradata | ``pip install sqlalchemy-teradata`` | ``teradata://`` |
+---------------+-------------------------------------+-------------------------------------------------+
| Pinot | ``pip install pinotdb`` | ``pinot+http://controller:5436/query?server=http://controller:5983/`` |
| Pinot | ``pip install pinotdb`` | ``pinot+http://controller:5436/`` |
| | | ``query?server=http://controller:5983/`` |
+---------------+-------------------------------------+-------------------------------------------------+

Note that many other databases are supported, the main criteria being the
Expand All @@ -407,11 +415,6 @@ You can also use `PyAthena` library(no java required) like this ::

See `PyAthena <https://github.com/laughingman7743/PyAthena#sqlalchemy>`_.

MSSQL
-----

Full Unicode support requires SQLAlchemy 1.3 or later.

Snowflake
---------

Expand Down Expand Up @@ -490,9 +493,9 @@ find an ``extra`` field as a ``JSON`` blob.

This JSON string contains extra configuration elements. The ``engine_params``
object gets unpacked into the
`sqlalchemy.create_engine <http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine>`_ call,
`sqlalchemy.create_engine <https://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine>`_ call,
while the ``metadata_params`` get unpacked into the
`sqlalchemy.MetaData <http://docs.sqlalchemy.org/en/rel_1_0/core/metadata.html#sqlalchemy.schema.MetaData>`_ call. Refer to the SQLAlchemy docs for more information.
`sqlalchemy.MetaData <https://docs.sqlalchemy.org/en/rel_1_2/core/metadata.html#sqlalchemy.schema.MetaData>`_ call. Refer to the SQLAlchemy docs for more information.


Schemas (Postgres & Redshift)
Expand Down Expand Up @@ -576,7 +579,7 @@ The following keys in `superset_config.py` can be specified to configure CORS:


* ``ENABLE_CORS``: Must be set to True in order to enable CORS
* ``CORS_OPTIONS``: options passed to Flask-CORS (`documentation <http://flask-cors.corydolphin.com/en/latest/api.html#extension>`)
* ``CORS_OPTIONS``: options passed to Flask-CORS (`documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`)


DOMAIN SHARDING
Expand All @@ -588,7 +591,7 @@ next available socket. PR (`#5039 <https://github.com/apache/incubator-superset/
and this feature will be enabled by configuration only (by default Superset
doesn't allow cross-domain request).

*``SUPERSET_WEBSERVER_DOMAINS``: list of allowed hostnames for domain sharding feature. default `None`
* ``SUPERSET_WEBSERVER_DOMAINS``: list of allowed hostnames for domain sharding feature. default `None`


MIDDLEWARE
Expand Down Expand Up @@ -810,7 +813,7 @@ Building from source

More advanced users may want to build Superset from sources. That
would be the case if you fork the project to add features specific to
your environment. See `CONTRIBUTING.md <https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#local-development>`_.
your environment. See `CONTRIBUTING.md#setup-local-environment-for-development <https://github.com/apache/incubator-superset/blob/master/CONTRIBUTING.md#setup-local-environment-for-development>`_.

Blueprints
----------
Expand Down
Loading