* Add interim grains
* Refactor and add blacklist
* Change PT30M to PT0.5H
* Linting
* Linting
* Add time grain addons to config.py and refactor engine spec logic
* Remove redundant import and clean up config.py
* Fix bad rebase
* Implement changes proposed by @betodealmeida
* Revert removal of name from Grain
* Linting
* [sql lab] extract Hive error messages
So pyhive returns an exception object with a stringified thrift error
object. This PR uses a regex to extract the errorMessage portion of that
string.
* Unit test
* Visualization Unicode bug fix
* Fix the build (#5403)
The travis build has been failing for 2 reasons recently
* pylint takes > 10 minutes without outputing
* bad merge confict auto resolve in controls.jsx
* Visualization Unicode bug fix
* Migrate flask_script to the Flask built-in click.
Flask 0.11 is the built-in integration of the click command line interface.
Flask-Migrate support for the new Flask CLI based on Click after Release 2.0.0.
* Resolved merge conflicts.
* Fixed issue introduced from bad merge.
* Fixed flake8 errors, added build to excluded flake8 stuff.
* * Moved the FlaskGroup declaration to the driver script.
* Moved shell context definition to cli.py
* Switched shell context definition to use decorator.
* Moved create_app definition to cli.py
* Fixed InvocationError with a wrapped function
* Added extra newlines between functions
* Removed flask-script dependency.
* Improve database type inference
Python's DBAPI isn't super clear and homogeneous on the
cursor.description specification, and this PR attempts to improve
inferring the datatypes returned in the cursor.
This work started around Presto's TIMESTAMP type being mishandled as
string as the database driver (pyhive) returns it as a string. The work
here fixes this bug and does a better job at inferring MySQL and Presto types.
It also creates a new method in db_engine_specs allowing for other
databases engines to implement and become more precise on type-inference
as needed.
* Fixing tests
* Adressing comments
* Using infer_objects
* Removing faulty line
* Addressing PrestoSpec redundant method comment
* Fix rebase issue
* Fix tests
* fetch datasources from broker endpoint when refresh new datasources
* remove get_base_coordinator_url as out of use
* add broker_endpoint in get_test_cluster_obj
* Added support for URLShortLinkButton to work for the dashboard case
* Fix lint errors and test
* Change references to 'slice' to 'chart'.
* Add unit tests to improve coverage
* Fixing lint errors
* Refactor to make URLShortLink more generic. Remove history modification code, redirect should be handling this.
* Remove history modification code, redirect should be handling this
* Generate a shorter link without the directory, and delegate default linked to the contents of window.location
* Fix lint errors
* Fix test_shortner test to check for new pattern
* Remove usage of addHistory to manipulate explore shortlink redirection
* Address build failure and using better practices for shortlink defaults
* Fixing alphabetical order
* More syntax mistakes
* Revert explore view history changes
* Fix use of component props, & rebase
* Initial test
* Save
* Working version
* Use since/until from payload
* Option to prefix metric name
* Rename LineMultiLayer to MultiLineViz
* Add more styles
* Explicit nulls
* Add more x controls
* Refactor to reuse nvd3_vis
* Fix x ticks
* Fix spacing
* Fix for druid datasource
* Rename file
* Small fixes and cleanup
* Fix margins
* Add proper thumbnails
* Align yaxis1 and yaxis2 ticks
* Improve code
* Trigger tests
* Move file
* Small fixes plus example
* Fix unit test
* Remove SQL and Filter sections
* Fix percent_metrics ZeroDivisionError and can not get metrics with label issue
* convert iterator to list
* get percentage metrics with get_metric_label method
* Adding tests case for expression type metrics
* Simplify expression
* [sql lab] a better approach at limiting queries
Currently there are two mechanisms that we use to enforce the row
limiting constraints, depending on the database engine:
1. use dbapi's `cursor.fetchmany()`
2. wrap the SQL into a limiting subquery
Method 1 isn't great as it can result in the database server storing
larger than required result sets in memory expecting another fetch
command while we know we don't need that.
Method 2 has a positive side of working with all database engines,
whether they use LIMIT, ROWNUM, TOP or whatever else since sqlalchemy
does the work as specified for the dialect. On the downside though
the query optimizer might not be able to optimize this as much as an
approach that doesn't use a subquery.
Since most modern DBs use the LIMIT syntax, this adds a regex approach
to modify the query and force a LIMIT clause without using a subquery
for the database that support this syntax and uses method 2 for all
others.
* Fixing build
* Fix lint
* Added more tests
* Fix tests
* Force lowercase column names for Snowflake and Oracle
* Force lowercase column names for Snowflake and Oracle
* Remove lowercasing of DB2 columns
* Remove DB2 lowercasing
* Fix test cases
* add extraction fn support for Druid queries
* bump pydruid version to get extraction fn commits
* update and add tests for druid for filters with extraction fns
* conform to flake8 rules
* fix flake8 issues
* bump pyruid version for extraction function features
* [bugfix] temporal columns with expression fail
error msg: "local variable 'literal' referenced before assignment"
Error occurs [only] when using temporal column defined as a SQL
expression.
Also noticed that examples were using `granularity` instead of using
`granularity_sqla` as they should. Fixed that here.
* Add tests
* [WiP] [explore] proper filtering of NULLs and ''
TODO: handling of Druid equivalents
* Unit tests
* Some refactoring
* [druid] fix 'Unorderable types' when col has nuls
Error "unorderable types: str() < int()" occurs when grouping by a
numerical Druid colummn that contains null values.
* druid/pydruid returns strings in the datafram with NAs for nulls
* Superset has custom logic around get_fillna_for_col that fills in the
NULLs based on declared column type (FLOAT here), so now we have a mixed
bag of type in the series
* pandas chokes on pivot_table or groupby operations as it cannot sorts
mixed types
The approach here is to stringify and fillna('<NULL>') to get a
consistent series.
* typo
* Fix druid_func tests
* Addressing more comments
* last touches
* [sql lab] preserve schema through visualize flow
https://github.com/apache/incubator-superset/pull/4696 got tangled
into refactoring views out of views/core.py and onto views/sql_lab.py
This is the same PR without the refactoring.
* Fix lint
* [bugfix] convert metrics to numeric in dataframe
It appears sometimes the dbapi driver and pandas's read_sql fail at
returning the proper numeric types for metrics and they show up as
`object` in the dataframe. This results in "No numeric types to
aggregate" errors when trying to perform aggregations or pivoting in
pandas.
This PR looks for metrics in dataframes that are typed as "object"
and uses pandas' to_numeric to convert.
* Fix tests
* Remove all iteritems
* Allowing limit ordering by post-aggregation metrics
* don't overwrite og dictionaries
* update tests
* python3 compat
* code review comments, add tests, implement it in groupby as well
* python 3 compat for unittest
* more self
* Throw exception when get aggregations is called with postaggs
* Treat adhoc metrics as another aggregation
* move access permissions methods to security manager
* consolidate all security methods into SupersetSecurityManager
* update security method calls
* update calls from tests
* move get_or_create_main_db to utils
* raise if supersetsecuritymanager is not extended
* rename sm to security_manager
* [Explore] Save url parameters when user save slices
* remove print
(cherry picked from commit bd9ecbe)
* add unit test
(cherry picked from commit 0f350ad)
* wrapping all request params into url_params
(cherry picked from commit 17197c1)
* Remove comments from queries in SQL Lab that break Explore view
This fixes an issue where comments on the last line of the source query comment out the closing parenthesis of the subquery.
* Add test case for SqlaTable with query with comment
This test ensures that comments in the query are removed when calling SqlaTable.get_from_clause().
* Add missing blank line class definition (PEP8)
* [Explore view] Use POST method for charting requests
* fix per code review comments
* more code review fixes
* code review fix: remove duplicated calls for getting values from request
* [Explore view] Use POST method for charting requests
* fix per code review comments
* more code review fixes
* code review fix: remove duplicated calls for getting values from request
* Use the query_obj as the basis for the cache key
When we recently moved from hashing form_data to define the cache_key
towards using the rendered query instead,
it made is such that non deterministic form
control values like relative times specified in "from" and "until" time
bound resulted in making those miss cache 100% of the time.
Here we move away from using the rendered query and using the query_obj
instead.
* Deprecating using form_data in templates
* conditional check on datatype of results before converting to df
fix type checking
fix conditional checks
remove trailing whitespace and fix df_data fallback def
actually remove trailing whitespace
generalized type check to check all columns for dict
refactor dict col check
* move df conversion to helper and add unit test
add missing newlines
another missing newline
fix quotes
more quote fixes
* Fix USA's state geojson for 'Country Map' visualization
Turns out the ISO codes were missing from the geojson file, this adds it
and uses human-readable indents.
* using proper ISO codes
* Linting
New linting rules started applying, I'm guessing a new version of
pylint?
* Adding full Annotation Framework
* Viz types
* Re organizing native annotations
* liniting
* Bug fix
* Handle no data
* Cleanup
* Refactor slice form_data to data
Before this PR the only way to query lat/long is in the shape of 2
columns that contains lat and long.
Now we're adding 2 more options:
* a single column that has lat and long with a delimiter in between
* support for geohashes - geohashes are cool
* change reference for slices to chart
* change profile page reference
* change reference for Associated Slices
* change back to single quotes
* fix other single quotes
* linting
* last one
* fix test
A bug in to_dict(orient="records") in pandas/core/frame.py prevents
datetimes with time zones to be worked with. This works around the
issue in superset by re-implementing the logic of pandas in the
correct way. Until pandas fixes the issue this code should stay.
https://github.com/pandas-dev/pandas/issues/18372
This closes#1929
* Feature: added datepicker and time granularity options to dashboard filter
* Added option for Druid datasource time filters
* added more checkbox control over dashboard time filters
* exposed API endpoint to get querystring for a slice
* Added unit tests for endpoint
* fixed test case for python3
* moved get querystring logic into its own func
* renamed query string endpoint
* Add "Impersonate user" setting to Datasource
* Add tests
* Use g.user.username for all the sync cases
* use uri.username instead of uri.user
* Small refactoring
* [explore] fixed padding bug on filter section
* fix slice_id logging issue
* [superset-sqllab] fix slice_id population in appropriate column
* [explore-logging] test the slice_id logging fix
* fix travis errors
* fix nits pointed out in PR comments
* cleanup tests
* made python more beautiful
* made python even more beautiful
* made python even more more beautiful
* made python even more more more beautiful
* fix lint error
* make exception handling more specific
* fixed silly error
* fixed argument indentation
* [add] Save filters to dashboard
* format code
* fix CI error
* add semicolon semi
* fix none object
* add test data
optimize the js code
fix the compatibility issue
* fix urllib to urllib.parse
* add space
* update test case
* remove 'return'
* fix error
* update test case
* [druid] Allow custom druid postaggregators
Also, fix the postaggregation for approxHistogram quantiles so it adds
the dependent field and that can show up in the graphs/tables.
In general, postAggregators add significant power, we should probably
support including custom postAggregators. Plywood has standard
postAggregators here, and a customAggregator escape hatch that allows
you to define custom postAggregators.
This commit adds a similar capability for Superset and a additional
field/fields/fieldName breakdown of the typical naming for dependent
aggregations, which should make it significantly easier to develop
approxHistogram and custom postAggregation-required dashboards.
* [druid] Minor style cleanup in tests file.
* [druid] Apply code review suggestions
* break out CustomPostAggregator into separate class. This just cleans
up the creation of the postaggregator a little bit.
* minor style issues.
* move the function around so the git diff is more readable
* [sqllab] improve Hive support
* Fix "Transport not open" bug
* Getting progress bar to show
* Bump pyhive to 0.4.0
* Getting [Track Job] button to show
* Fix testzz
* upgrade celery to 4.0.2
* using Redis for unit tests (sqla broker not supported in Celery 4)
* Setting Celery's soft_time_limit based on `SQLLAB_ASYNC_TIME_LIMIT_SEC` config
* Better error handling in async tasks
* Better statsd logging in async tasks
* show [pending/running] query status in Results tab
* systematically using sqla NullPool on worker (async) to limit number
of database connections
* sort explicitly on label
* add simple test for /slicemodelview/add endpoint
* make comments and method names more clear
* fix test name
* be more explicit, test status_code
* sql_lab.py: compress via utils
* utils.py: added zlib_compress and zlib_compress_to_string
* core.py: converted to use zlib_decompress_to_string; renamed uncompress to decompress in utils.py
* utils_tests.py: added test for compress/decompress
* fixed broken utils test; removed redundant code and empty lines from utils.py
* utils.py: corrected docstrings, removed unnecessary 'else'
* removed yet another superfluous else
* [sqllab] assign types for visualize flow
Somehow when using the visualize flow, the types were not
assigned at all, creating some bugs downstream. This PR attempts to get
the information required based on what pandas is knows and the types in
the data itself.
* Fixing tests
* Fixing tests
* Fixing more tests
* Fixing the last py3 tests
* Simplifying the viz interface (#2005)
* Working on dashes
* Making this a collaborative branch
* Fixing some bugs
* Fixing bugs
* More improvements
* Add datasource back in bootstrap data
* Decent state
* Linting
* Moving forward
* Some more linting
* Fix the timer
* Triggering events through state
* Lingint
* Put filters in an array instead of flt strings (#2090)
* Put filters in an array instead of flt strings
* Remove query_filter(), put opChoices into Filter
* Update version_info.json
* Fix migrations
* More renderTrigger=true
* Fixing bugs
* Working on standalone
* getting standalone to work
* Fixed forcedHeight for standalone =view
* Linting
* Get save slice working in v2 (#2106)
* Filter bugfix
* Fixing empty series limit bug
* Fixed dashboard view
* Fixing short urls
* Only allow owners to overwrite slice (#2142)
* Raise exception when date range is wrong
* Only allow owner to overwrite a slice
* Fix tests for deprecate v1 (#2140)
* Fixed tests for control panels container and filters
* Fixed python tests for explorev2
* Fix linting errors
* Add in stop button during slice querying/rendering (#2121)
* Add in stop button during slice querying/rendering
* Abort ajax request on stop
* Adding missing legacy module
* Removing select2.sortable.js because of license
* Allow query to display while slice is loading (#2100)
* Allow query to display while slice is loading
* Put latestQueryFormData in store
* Reorganized query function, got rid of tu[le return values
* Merging migrations
* Wrapping up shortner migration
* Fixing tests
* Add folder creation to syncBackend
* Fixing edit URL in explore view
* Fix look of Stop button
* Adding syntax highlighting to query modal
* Fix cast_form_data and flase checkbox on dash
* Bugfix
* Going deeper
* Fix filtering
* Deleing invalid filters when changing datasource
* Minor adjustments
* Fixing calendar heatmap examples
* Moving edit datasource button to header's right side
* Fixing mapbox example
* Show stack trace when clicking alert
* Adding npm sync-backend command to build instruction
* Bumping up JS dependencies
* rm dep on select2
* Fix py3 urlparse
* rm superset-select2.js
* Improving migration scripts
* Bugfixes on staging
* Fixing Markup viz
* Rename rv => o in the decorator.
* Address comments.
* Permissions cleanup: remove none and duplicates. (#1967)
* Updates
* Rename var and dropdown text
* Cleanup
* Resolve comments.
* Add user to the perm check.
* Add KeyValue model for storing id-value pairs
use it for storing shared queries
* Change string to text and added test
* Put getQueryLink in one place
* Changed migration down version
* Changes based on comments
* Update bcf3126872fc_add_keyvalue.py
* Cleanup fulfilled requests after approve
* Modified tests
* Moved to separate test, add user to access functions
* Moved to separate test and added test cases
* Fixed issue with dryrun
* More changes based on comments
* Druid dashboard import
* Fix tests.
* Parse params with trailing commas
* Resolved issue with datasource is not in DB yet when slice perms are set
* Finish rebase
* Fix heads alembic problem.
* Druid dashboard import
* Fix tests.
* Parse params with trailing commas
* Resolved issue with datasource is not in DB yet when slice perms are set
* Finish rebase
* Initial
* rewrite some line to make it short and setting merge variable temporarily
* rewrite commit author
* add emitted attribute
* Fix typo
* fix test error
* fix typo
* test added
* Enable freeform-select with fetched column values for filter values
- db migration to add filter_select_enabled
- add freeform-multi option for Selectfield
- modify formatFilter() function on query to accomodate filter-select
* Fix js tests
* Fix codeclimate issue
* Changes based on comments
* Add test for filter endpoint
* Extract out renderFilterFormField function from render
* Fix landscape issues
* Sort searched queries by recency
* Fixed sqllab tests
* Add one more tr to QueryTable spec for pagination
* Change desc to asc as we reverse queries in component
* add config option for explore v2 beta users, and send through v2 path
* fix long lines
* use role rather than user ids in config
* add test
* simplify role check
* remove extra line
* use different test user for v2 tests
* Not working errors
* Remove update_explore endpoint, only update explore endpoints in reducer on query
* Change scroll to auto and make container reponse to height:
* Remove update_explore endpoint
* Remove can_update_explore perm
* Support running superset via pex
* [superset] Update default port in superset/bin/superset
* Fix codeclimate line length issues
* Fix another line length issue, in config.py
* Add trivial utils test to increase test coverage
* Clean up runserver handling
* Implement table name extraction tests.
* Address comments.
* Fix tests and reimplement the token processing.
* Exclude aliases.
* Clean up print statements and code.
* Reverse select test.
* Fix failing test.
* Test JOINs
* refactore as a class
* Check for permissions in SQL Lab.
* Implement permissions check for the datasources in sql_lab
* Address comments.
* Added filter in ControlPanelsContainer
* Move function for getting url params object to utils
* Fixed python test
* Move Filter to separate component
* Added specs and made changes based on comments
* Moved specs to right folder
* Fixed bugs with viz in exploreV2
Done:
- fix typo in pie viz
- add metrics/groupby to dist_bar viz
- fix typo in heatmap viz
- add big_number_total to viz
- fixed problem with fetching columns for datasource
- add sqlaTimeSeries to viz
- change row_limit and limit from number to strings so that we
don't need to parse integers in bootstrap data
* Fix python tests
* Added order_bars checkbox for dist_bar viz
* Get query buttonw working in explorev2
- Create new endpoint for updating explore viz
- Send over new form_data when query button is pressed
* Added endpoint test
* Changes based on comments
* Added docstring for endpoint, and query spec
* Remove white space around docstring
* Change in files
* Renamin files and folders
* cleaning up a single piece of lint
* Removing boat picture from docs
* add superset word mark
* Update rename note in docs
* Fixing images
* Pinning datatables
* Fixing issues with mapbox-gl
* Forgot to rename one file
* Linting
* v0.13.0
* adding pyyaml to dev-reqs
* pass field options in viz json
* move field options to fetch_datasource_metadata
* on control panels container mount, fetch datasource meta data and set dynamic field choices
* render options for select fields
* use component class rather than sic
* fix linting
* fix whitespace
* delete unused var
* only render fields once datasource meta has returned
* fix typo
* add datasources and fix column formatting
* fix tests
* never used function
* fix tests
* add test for fetch_datasource_metadata
* remove unneeded props
* Support week_ending_saturday for Druid.
* Use period granularity
* Use ISO 8601 for period definitions.
* Fix tests
* More flexibility for the freeform choices.
* [druid] optimize Druid queries where possible
Trying to use timeseries, topn where possible, falling back on 2-phases
groupby only where needed
* Fixing py3 bug
* Added time filter to query search page
* Added start date
* Updated python endpoint test
* changed spec
* Added specs and tests
* Modified python/js tests and some function/file names
based on code review comments
* Resolved conflicts in DashboardSelect_spec and QuerySearch_spec
* Break python tests for separate functions, Move sql queries to setUp()
* Get around eslint error for spec
* Small changes based on comments
* do not over-write the stored password with a masked password.
his addresses issue #1199
* added a test to validate that sending a password-masked sqlalchemy_uri does not over-write the stored sqlalchemy_uri
* requery the database object after the update.
use self.assertEqual for more informative error messages.
* Query search page under SQL Lab tab
* Modifications based on comments
* Hash
* Added spec and endpoint test with modifications
based on second round comments
* Changed permission menu in https://github.com/airbnb/caravel/pull/1095/files
* Query search page under SQL Lab tab
* Modifications based on comments
* Hash
* Added spec and endpoint test with modifications
based on second round comments
* Changed permission menu in https://github.com/airbnb/caravel/pull/1095/files
* Generalize switch between different datasources.
* Fix previous migration since slice model changed
* Fix warm up cache and other small stuff
* Adding modules and datasources through config
* Replace tabs w/ spaces
* Fix other style issues
* Change add method for SliceModelView to pick the first non-empty ds
* Remove tests on slice add redirect
* Change way of db migration
* Fix styling
* Fix create slice
* Small fixes
* Fix code climate check
* Adding notes on how to create new datasource in CONTRIBUTING.md
* Fix last merge
* A commit just to trigger travis build again
* Add migration to merge two heads
* Fix codeclimate
* Simplify source_registry
* Fix codeclimate
* Remove all getter methods
* Handling timeouts
* Fixing timer on non-utc server
* Allowing async with results
* [bugfix] database is not selected
* Making sure the session is up and running
* Cleaning up query results and query objects
* Picking a groupby and metric field on visualize flow
* Showing local time in query history
* Using pull-left pull-right instead of grid layout for table metdata
Long column name were looking weird and icons were wrapping oddly
* Linting
* Eliminating east buttons under the sql editor
* Sort database dropdown by name
* Linting
* Allowing non-SELECT statements to run
* Adding a db config
* Making sqla checkout check cross-db
* move initialization of Database sqlalchemy_uri and password from DatabaseView.pre_add to utils.get_or_create_main_db.
Unit tests for mysql and postgres include username and password in the SQLALCHEMY_DATABASE_URI.
* modified test_testconn to work with sqlalchemy uri with a username and password.
* Improving the Visualize flow
* Fixed the timer
* CTAS
* Expiclit engine handling
* make tab full height, stretch for longer content (#1081)
* Better error handling for queries
* Hooked and fixed CSV export
* Linting
* Tying in the dttm in the viz flow
* Indicator showing when going offline
* Addressing comments, fixing the build
* Fixing unit tests
* call explore() directly from '/caravel/slice/id/' endpoint instead of redirecting to it.
* pass slice_id instead of slice_params in 'caravel/slice/id/' endpoint to avoid logging errors. add fix for MultiDict bug
* address max's comments
* remove the /slice/id/ endpoint in preference of /datasource_type/datasource_id/slice_id/
* pep8
* Carapal react mockup
This is really just a mock up written in React to try different
components. It could become scaffolding to build a prototype, or not.
* Merging in Alanna's theme tweaks for SQL lab
* Tweak the display of the alert message in navbar
* Sketching the middleware refresh for Queries
* Adjustments
* Implement timer sync.
* CTAS
* Refactor the queries to be stored as a dict. (#994)
* Download csv endpoint. (#992)
* CSV download engdpoint.
* Use lower case booleans.
* Replcate loop with the object lookup by key.
* First changes for the sync
* Address comments
* Fix query deletions. Update only the queries from the store.
* Sync queries using tmp_id.
* simplify
* Fix the tests in the carapal. (#1023)
* Sync queries using tmp_id.
* Fix the unit tests
* Bux fixes. Pass 2.
* Tweakin' & linting
* Adding alpha label to the SQL LAb navbar entry
* Fixing the python unit tests
* [panoramix] -> [dashed]
* merge from caravel/master
* Updated from airbnb
* Cleaning
* Rebase with upstream/master
* merge from caravel/master
* Updated from airbnb
* Cleaning
* Manual rebase
* Last pending change to rebase
* Convert date to datetime before serialization.
Approach choosen: transform data before serialize and keep just one way to serialize
* Unit test created
* stupid error :(
* remove uneeded code and rename test
* Avoid double type checking
Test updated
note: isinstance(<datetime>, <date>) == True, check order changed
* Increase coverage
* Fix assertRaises
* pass the request arg in the /caravel/slices/<slice_id>/ endpoint.
remove unused import.
* test that a single slice redirects rather than testing them all. update standalone redirect logic for Javascript 'false' instead of Python False
After ea8a7ec1ba creating a slice
started redirecting to druid datasource from sqlalchemy tables.
That's quite painful for sqlalchemy tables users.
Instead of hardcoding a choice just query the db, if we don't
have any druid datasource fallback to sqlalchemy tables.
Bonus points we remove hacky javascript and make the message
translatable.
While at it fix druid client test to not hardcode datasource id.
* Flashed messaged should be flushed in every page
* Show error messages in AJAX style
* Introduce the decorator "api"
* Move toggleCheckbox() to the right place and trigger it in jQuery style
* add unicode data to tests
* make tests pass on 2.7
* clean up data loading
- remove duplicate keys in slice_data
- reduce line length
* change manager option flag to -t, --load-test-data
* test --> load_test_data
* Make sure anonymous user with proper permissions can access data
* Review fixes: naming changes
* Review fixes: add more granular tests for public user dashboard access
* Review fixes: test that public user has access only to permitted data sets
* Introducing more security features
* Many to many owners for slices and dashboards
* Slices are filtered to only slices that the user has access to
* Adding unit tests