diff --git a/.gitignore b/.gitignore index 4d61b9286a61a..81642b0e1447e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,15 +4,16 @@ babel .coverage _build _static -dashed/bin/dashedc +caravel/bin/caravelc +envpy3 build *.db tmp -dashed_config.py +caravel_config.py local_config.py env dist -dashed.egg-info/ +caravel.egg-info/ app.db *.bak diff --git a/.landscape.yml b/.landscape.yml index 93e2e8d444f52..48a06e4ce1d72 100644 --- a/.landscape.yml +++ b/.landscape.yml @@ -16,8 +16,8 @@ pep8: full: true ignore-paths: - docs - - dashed/migrations/env.py - - dashed/ascii_art.py + - caravel/migrations/env.py + - caravel/ascii_art.py ignore-patterns: - ^example/doc_.*\.py$ - (^|/)docs(/|$) diff --git a/.travis.yml b/.travis.yml index 7035ea95e12c5..2f22d1c16e590 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ before_install: install: - pip wheel -w $HOME/.wheelhouse -f $HOME/.wheelhouse . - pip install --find-links=$HOME/.wheelhouse --no-index . - - cd dashed/assets + - cd caravel/assets - npm install - npm run lint - npm run prod diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9410d800c876c..ec80742ac5a54 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,8 +30,8 @@ Look through the GitHub issues for features. Anything tagged with ### Documentation -Dashed could always use better documentation, -whether as part of the official Dashed docs, +Caravel could always use better documentation, +whether as part of the official Caravel docs, in docstrings, `docs/*.rst` or even on the web as blog posts or articles. @@ -49,14 +49,14 @@ If you are proposing a feature: ## Latest Documentation -[API Documentation](http://pythonhosted.com/dashed) +[API Documentation](http://pythonhosted.com/caravel) ## Setting up a Python development environment # fork the repo on github and then clone it # alternatively you may want to clone the main repo but that won't work # so well if you are planning on sending PRs - # git clone git@github.com:mistercrunch/dashed.git + # git clone git@github.com:mistercrunch/caravel.git # [optional] setup a virtual env and activate it virtualenv env @@ -66,24 +66,24 @@ If you are proposing a feature: python setup.py develop # Create an admin user - fabmanager create-admin --app dashed + fabmanager create-admin --app caravel # Initialize the database - dashed db upgrade + caravel db upgrade # Create default roles and permissions - dashed init + caravel init # Load some data to play with - dashed load_examples + caravel load_examples # start a dev web server - dashed runserver -d + caravel runserver -d ## Setting up the node / npm javascript environment -`dashed/assets` contains all npm-managed, front end assets. +`caravel/assets` contains all npm-managed, front end assets. Flask-Appbuilder itself comes bundled with jQuery and bootstrap. While these may be phased out over time, these packages are currently not managed with npm. @@ -116,7 +116,7 @@ new `node_modules/` folder within `assets/`. npm install ``` -To parse and generate bundled files for dashed, run either of the +To parse and generate bundled files for caravel, run either of the following commands. The `dev` flag will keep the npm script running and re-run it upon any changes within the assets directory. @@ -132,7 +132,7 @@ For every development session you will have to start a flask dev server as well as an npm watcher ``` -dashed runserver -d -p 8081 +caravel runserver -d -p 8081 npm run dev ``` @@ -157,12 +157,12 @@ Generate the documentation with: cd docs && ./build.sh ## CSS Themes -As part of the npm build process, CSS for Dashed is compiled from ```Less```, a dynamic stylesheet language. +As part of the npm build process, CSS for Caravel is compiled from ```Less```, a dynamic stylesheet language. -It's possible to customize or add your own theme to Dashed, either by overriding CSS rules or preferably +It's possible to customize or add your own theme to Caravel, either by overriding CSS rules or preferably by modifying the Less variables or files in ```assets/stylesheets/less/```. -The ```variables.less``` and ```bootswatch.less``` files that ship with Dashed are derived from +The ```variables.less``` and ```bootswatch.less``` files that ship with Caravel are derived from [Bootswatch](https://bootswatch.com) and thus extend Bootstrap. Modify variables in these files directly, or swap them out entirely with the equivalent files from other Bootswatch (themes)[https://github.com/thomaspark/bootswatch.git] diff --git a/MANIFEST.in b/MANIFEST.in index ce0e121d0e016..72c6b65f0edcc 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,8 +1,8 @@ -recursive-include dashed/templates * -recursive-include dashed/static * -recursive-exclude dashed/static/assets/node_modules * -recursive-include dashed/static/assets/node_modules/font-awesome * -recursive-exclude dashed/static/docs * +recursive-include caravel/templates * +recursive-include caravel/static * +recursive-exclude caravel/static/assets/node_modules * +recursive-include caravel/static/assets/node_modules/font-awesome * +recursive-exclude caravel/static/docs * recursive-exclude tests * -recursive-include dashed/data * -recursive-include dashed/migrations * +recursive-include caravel/data * +recursive-include caravel/migrations * diff --git a/README.md b/README.md index 2cbfb9b198199..93a831267d0d0 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,33 @@ -Dashed +Caravel ========= -[![PyPI version](https://badge.fury.io/py/dashed.svg)](https://badge.fury.io/py/dashed) -[![Coverage Status](https://coveralls.io/repos/airbnb/dashed/badge.svg?branch=master&service=github)](https://coveralls.io/github/airbnb/dashed?branch=master) -[![Code Health](https://landscape.io/github/airbnb/dashed/master/landscape.svg?style=flat)](https://landscape.io/github/airbnb/dashed/master) -[![Requirements Status](https://requires.io/github/airbnb/dashed/requirements.svg?branch=master)](https://requires.io/github/airbnb/dashed/requirements/?branch=master) -[![Join the chat at https://gitter.im/airbnb/dashed](https://badges.gitter.im/airbnb/dashed.svg)](https://gitter.im/airbnb/dashed?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![PyPI version](https://badge.fury.io/py/caravel.svg)](https://badge.fury.io/py/caravel) +[![Coverage Status](https://coveralls.io/repos/airbnb/caravel/badge.svg?branch=master&service=github)](https://coveralls.io/github/airbnb/caravel?branch=master) +[![Code Health](https://landscape.io/github/airbnb/caravel/master/landscape.svg?style=flat)](https://landscape.io/github/airbnb/caravel/master) +[![Requirements Status](https://requires.io/github/airbnb/caravel/requirements.svg?branch=master)](https://requires.io/github/airbnb/caravel/requirements/?branch=master) +[![Join the chat at https://gitter.im/airbnb/caravel](https://badges.gitter.im/airbnb/caravel.svg)](https://gitter.im/airbnb/caravel?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Dashed is a data exploration platform designed to be visual, intuitive +Caravel is a data exploration platform designed to be visual, intuitive and interactive. [this project used to be named **Panoramix**] -Video - Introduction to Dashed +Video - Introduction to Caravel --------------------------------- -[![Dashed - ](http://img.youtube.com/vi/3Txm_nj_R7M/0.jpg)](http://www.youtube.com/watch?v=3Txm_nj_R7M) +[![Caravel - ](http://img.youtube.com/vi/3Txm_nj_R7M/0.jpg)](http://www.youtube.com/watch?v=3Txm_nj_R7M) Screenshots ------------ ![img](http://i.imgur.com/bi09J9X.png) ![img](http://i.imgur.com/aOaH0ty.png) -Dashed +Caravel --------- -Dashed's main goal is to make it easy to slice, dice and visualize data. +Caravel's main goal is to make it easy to slice, dice and visualize data. It empowers its user to perform **analytics at the speed of thought**. -Dashed provides: +Caravel provides: * A quick way to intuitively visualize datasets * Create and share interactive dashboards * A rich set of visualizations to analyze your data, as well as a flexible @@ -40,14 +40,14 @@ Dashed provides: displayed in the UI, by defining which fields should show up in which dropdown and which aggregation and function (metrics) are made available to the user -* Deep integration with Druid allows for Dashed to stay blazing fast while +* Deep integration with Druid allows for Caravel to stay blazing fast while slicing and dicing large, realtime datasets Database Support ---------------- -Dashed was originally designed on to of Druid.io, but quickly broadened +Caravel was originally designed on to of Druid.io, but quickly broadened its scope to support other databases through the use of SqlAlchemy, a Python ORM that is compatible with [most common databases](http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html). @@ -68,36 +68,36 @@ power analytic dashboards and applications.* Installation ------------ -Dashed is currently only tested using Python 2.7.*. Python 3 support is +Caravel is currently only tested using Python 2.7.*. Python 3 support is on the roadmap, Python 2.6 won't be supported. -Follow these few simple steps to install Dashed. +Follow these few simple steps to install Caravel. ``` -# Install dashed -pip install dashed +# Install caravel +pip install caravel # Create an admin user -fabmanager create-admin --app dashed +fabmanager create-admin --app caravel # Initialize the database -dashed db upgrade +caravel db upgrade # Create default roles and permissions -dashed init +caravel init # Load some data to play with -dashed load_examples +caravel load_examples # Start the development web server -dashed runserver -d +caravel runserver -d ``` After installation, you should be able to point your browser to the right hostname:port [http://localhost:8088](http://localhost:8088), login using the credential you entered while creating the admin account, and navigate to `Menu -> Admin -> Refresh Metadata`. This action should bring in all of -your datasources for Dashed to be aware of, and they should show up in +your datasources for Caravel to be aware of, and they should show up in `Menu -> Datasources`, from where you can start playing with your data! Configuration @@ -134,14 +134,14 @@ More screenshots Related Links ------------- -* [Dashed Google Group] (https://groups.google.com/forum/#!forum/airbnb_dashed) -* [Gitter (live chat) Channel](https://gitter.im/airbnb/dashed) +* [Caravel Google Group] (https://groups.google.com/forum/#!forum/airbnb_caravel) +* [Gitter (live chat) Channel](https://gitter.im/airbnb/caravel) Tip of the Hat -------------- -Dashed would not be possible without these great frameworks / libs +Caravel would not be possible without these great frameworks / libs * Flask App Builder - Allowing us to focus on building the app quickly while getting the foundation for free @@ -153,4 +153,4 @@ getting the foundation for free Contributing ------------ -Interested in contributing? Casual hacking? Check out [Contributing.MD](https://github.com/airbnb/dashed/blob/master/CONTRIBUTING.md) +Interested in contributing? Casual hacking? Check out [Contributing.MD](https://github.com/airbnb/caravel/blob/master/CONTRIBUTING.md) diff --git a/TODO.md b/TODO.md index e753f4a5e174c..25ffabfb4c324 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,5 @@ # TODO -List of TODO items for Dashed +List of TODO items for Caravel ## Important * **Getting proper JS testing:** unit tests on the Python side are pretty @@ -7,7 +7,7 @@ List of TODO items for Dashed testing all the ajax-type calls * **Viz Plugins:** Allow people to define and share visualization plugins. ideally one would only need to drop in a set of files in a folder and - Dashed would discover and expose the plugins + Caravel would discover and expose the plugins ## Features * **Stars:** set dashboards, slices and datasets as favorites diff --git a/alembic.ini b/alembic.ini index 6d12b48b5e907..b5a16536033e6 100644 --- a/alembic.ini +++ b/alembic.ini @@ -29,7 +29,7 @@ script_location = migrations # are written from script.py.mako # output_encoding = utf-8 -sqlalchemy.url = scheme://localhost/dashed +sqlalchemy.url = scheme://localhost/caravel # Logging configuration [loggers] diff --git a/caravel/__init__.py b/caravel/__init__.py index 6dfc8b2aa3ead..c3517f0c29b66 100644 --- a/caravel/__init__.py +++ b/caravel/__init__.py @@ -10,7 +10,7 @@ APP_DIR = os.path.dirname(__file__) -CONFIG_MODULE = os.environ.get('DASHED_CONFIG', 'dashed.config') +CONFIG_MODULE = os.environ.get('CARAVEL_CONFIG', 'caravel.config') # Logging configuration logging.basicConfig(format='%(asctime)s:%(levelname)s:%(name)s:%(message)s') @@ -28,15 +28,15 @@ class MyIndexView(IndexView): @expose('/') def index(self): - return redirect('/dashed/welcome') + return redirect('/caravel/welcome') appbuilder = AppBuilder( app, db.session, - base_template='dashed/base.html', + base_template='caravel/base.html', indexview=MyIndexView, security_manager_class=app.config.get("CUSTOM_SECURITY_MANAGER")) sm = appbuilder.sm get_session = appbuilder.get_session -from dashed import config, views # noqa +from caravel import config, views # noqa diff --git a/caravel/assets/javascripts/dashboard.js b/caravel/assets/javascripts/dashboard.js index 57dccfd6dbdf8..e3ef7d5457f84 100644 --- a/caravel/assets/javascripts/dashboard.js +++ b/caravel/assets/javascripts/dashboard.js @@ -1,6 +1,6 @@ var $ = window.$ = require('jquery'); var jQuery = window.jQuery = $; -var px = require('./modules/dashed.js'); +var px = require('./modules/caravel.js'); var d3 = require('d3'); require('bootstrap'); @@ -8,7 +8,7 @@ var ace = require('brace'); require('brace/mode/css'); require('brace/theme/crimson_editor'); -require('./dashed-select2.js'); +require('./caravel-select2.js'); require('../node_modules/gridster/dist/jquery.gridster.min.css'); require('../node_modules/gridster/dist/jquery.gridster.min.js'); @@ -137,7 +137,7 @@ var Dashboard = function (dashboardData) { }; $.ajax({ type: "POST", - url: '/dashed/save_dash/' + dashboard.id + '/', + url: '/caravel/save_dash/' + dashboard.id + '/', data: { data: JSON.stringify(data) }, diff --git a/caravel/assets/javascripts/explore.js b/caravel/assets/javascripts/explore.js index 343f5309995d0..ce6f911730f28 100644 --- a/caravel/assets/javascripts/explore.js +++ b/caravel/assets/javascripts/explore.js @@ -5,13 +5,13 @@ // js var $ = window.$ = require('jquery'); var jQuery = window.jQuery = $; -var px = require('./modules/dashed.js'); +var px = require('./modules/caravel.js'); require('jquery-ui'); $.widget.bridge('uitooltip', $.ui.tooltip); // Shutting down jq-ui tooltips require('bootstrap'); -require('./dashed-select2.js'); +require('./caravel-select2.js'); require('../node_modules/bootstrap-toggle/js/bootstrap-toggle.min.js'); diff --git a/caravel/assets/javascripts/index.jsx b/caravel/assets/javascripts/index.jsx index d12ac3d590d78..c84528c8efec6 100644 --- a/caravel/assets/javascripts/index.jsx +++ b/caravel/assets/javascripts/index.jsx @@ -8,7 +8,7 @@ class App extends React.Component { render () { return ( -

Dashed

+

Caravel

Extensible visualization tool for exploring data from any database.

); diff --git a/caravel/assets/javascripts/modules/caravel.js b/caravel/assets/javascripts/modules/caravel.js index 3b2ab4f216a36..acf2ab0ec97cf 100644 --- a/caravel/assets/javascripts/modules/caravel.js +++ b/caravel/assets/javascripts/modules/caravel.js @@ -2,7 +2,7 @@ var $ = require('jquery'); var jQuery = $; var d3 = require('d3'); -require('../../stylesheets/dashed.css'); +require('../../stylesheets/caravel.css'); // vis sources var sourceMap = { @@ -46,7 +46,7 @@ var color = function () { // Color factory var seen = {}; return function (s) { - // next line is for dashed series that should have the same color + // next line is for caravel series that should have the same color s = s.replace('---', ''); if (seen[s] === undefined) { seen[s] = Object.keys(seen).length; @@ -133,7 +133,7 @@ var px = (function () { } function initFavStars() { - var baseUrl = '/dashed/favstar/'; + var baseUrl = '/caravel/favstar/'; // Init star behavihor for favorite function show() { if ($(this).hasClass('selected')) { diff --git a/caravel/assets/javascripts/sql.js b/caravel/assets/javascripts/sql.js index 7b2fb27c505a1..40e3145a39f28 100644 --- a/caravel/assets/javascripts/sql.js +++ b/caravel/assets/javascripts/sql.js @@ -36,7 +36,7 @@ $(document).ready(function () { function showTableMetadata() { $(".metadata").load( - '/dashed/table/' + database_id + '/' + $("#dbtable").val() + '/'); + '/caravel/table/' + database_id + '/' + $("#dbtable").val() + '/'); } $("#dbtable").on("change", showTableMetadata); showTableMetadata(); @@ -46,7 +46,7 @@ $(document).ready(function () { $(".sqlcontent").show(); function selectStarOnClick() { - $.ajax('/dashed/select_star/' + database_id + '/' + $("#dbtable").val() + '/') + $.ajax('/caravel/select_star/' + database_id + '/' + $("#dbtable").val() + '/') .done(function (msg) { editor.setValue(msg); }); @@ -67,7 +67,7 @@ $(document).ready(function () { history.pushState({}, document.title, '?sql=' + encodeURIComponent(editor.getValue())); $.ajax({ type: "POST", - url: '/dashed/runsql/', + url: '/caravel/runsql/', data: { data: JSON.stringify({ database_id: $('#database_id').val(), diff --git a/caravel/assets/javascripts/standalone.js b/caravel/assets/javascripts/standalone.js index 9110581f4e661..efc9f5a90f3c2 100644 --- a/caravel/assets/javascripts/standalone.js +++ b/caravel/assets/javascripts/standalone.js @@ -1,6 +1,6 @@ var $ = window.$ = require('jquery'); var jQuery = window.jQuery = $; -var px = require('./modules/dashed.js'); +var px = require('./modules/caravel.js'); require('bootstrap'); diff --git a/caravel/assets/javascripts/welcome.js b/caravel/assets/javascripts/welcome.js index 6d0db5d80a950..90841313a21c9 100644 --- a/caravel/assets/javascripts/welcome.js +++ b/caravel/assets/javascripts/welcome.js @@ -1,7 +1,7 @@ var $ = window.$ = require('jquery'); var jQuery = window.jQuery = $; -require('../stylesheets/dashed.css'); +require('../stylesheets/caravel.css'); require('../stylesheets/welcome.css'); require('bootstrap'); require('datatables'); @@ -37,7 +37,7 @@ $(document).ready(function () { cal.init({ start: new Date().setFullYear(new Date().getFullYear() - 1), range: 13, - data: '/dashed/activity_per_day', + data: '/caravel/activity_per_day', domain: "month", subDomain: "day", itemName: "action", diff --git a/caravel/assets/package.json b/caravel/assets/package.json index 606bec806f520..fec1f77945d1c 100644 --- a/caravel/assets/package.json +++ b/caravel/assets/package.json @@ -1,5 +1,5 @@ { - "name": "dashed", + "name": "caravel", "version": "0.1.0", "description": "Any database to any visualization", "directories": { @@ -15,7 +15,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/mistercrunch/dashed.git" + "url": "git+https://github.com/mistercrunch/caravel.git" }, "keywords": [ "big", @@ -31,9 +31,9 @@ ], "author": "Airbnb", "bugs": { - "url": "https://github.com/mistercrunch/dashed/issues" + "url": "https://github.com/mistercrunch/caravel/issues" }, - "homepage": "https://github.com/mistercrunch/dashed#readme", + "homepage": "https://github.com/mistercrunch/caravel#readme", "dependencies": { "babel-loader": "^6.2.1", "babel-polyfill": "^6.3.14", diff --git a/caravel/assets/visualizations/big_number.js b/caravel/assets/visualizations/big_number.js index 38c22aa89571e..a9d2b6331b4e3 100644 --- a/caravel/assets/visualizations/big_number.js +++ b/caravel/assets/visualizations/big_number.js @@ -4,7 +4,7 @@ var d3 = window.d3 || require('d3'); // CSS require('./big_number.css'); -var px = require('../javascripts/modules/dashed.js'); +var px = require('../javascripts/modules/caravel.js'); function bigNumberVis(slice) { var div = d3.select(slice.selector); diff --git a/caravel/assets/visualizations/filter_box.css b/caravel/assets/visualizations/filter_box.css index 15697836166da..efe69c5381858 100644 --- a/caravel/assets/visualizations/filter_box.css +++ b/caravel/assets/visualizations/filter_box.css @@ -1,6 +1,6 @@ .select2-highlighted > .filter_box { background-color: transparent; - border: 1px dashed black; + border: 1px caravel black; } .dashboard .filter_box .slice_container > div { diff --git a/caravel/assets/visualizations/filter_box.js b/caravel/assets/visualizations/filter_box.js index f820549610ca8..df6cf99b15431 100644 --- a/caravel/assets/visualizations/filter_box.js +++ b/caravel/assets/visualizations/filter_box.js @@ -5,7 +5,7 @@ var d3 = window.d3 || require('d3'); // CSS require('./filter_box.css'); -require('../javascripts/dashed-select2.js'); +require('../javascripts/caravel-select2.js'); function filterBox(slice) { var filtersObj = {}; diff --git a/caravel/assets/visualizations/heatmap.js b/caravel/assets/visualizations/heatmap.js index 6bc688fc8c512..c9100e2c0f917 100644 --- a/caravel/assets/visualizations/heatmap.js +++ b/caravel/assets/visualizations/heatmap.js @@ -1,6 +1,6 @@ // JS var $ = window.$ || require('jquery'); -var px = window.px || require('../javascripts/modules/dashed.js'); +var px = window.px || require('../javascripts/modules/caravel.js'); var d3 = require('d3'); d3.tip = require('d3-tip'); //using window.d3 doesn't capture events properly bc of multiple instances diff --git a/caravel/assets/visualizations/nvd3_vis.css b/caravel/assets/visualizations/nvd3_vis.css index 80c452b4d6f7f..0d63c69ba2617 100644 --- a/caravel/assets/visualizations/nvd3_vis.css +++ b/caravel/assets/visualizations/nvd3_vis.css @@ -1,4 +1,4 @@ -g.dashed path { +g.caravel path { stroke-dasharray: 5, 5; } diff --git a/caravel/assets/visualizations/nvd3_vis.js b/caravel/assets/visualizations/nvd3_vis.js index f7c61f6e863b0..db4099456b05c 100644 --- a/caravel/assets/visualizations/nvd3_vis.js +++ b/caravel/assets/visualizations/nvd3_vis.js @@ -1,7 +1,7 @@ // JS var $ = window.$ || require('jquery'); var d3 = window.d3 || require('d3'); -var px = window.px || require('../javascripts/modules/dashed.js'); +var px = window.px || require('../javascripts/modules/caravel.js'); var nv = require('nvd3'); // CSS diff --git a/caravel/assets/visualizations/sankey.js b/caravel/assets/visualizations/sankey.js index 018ffe57db16c..1272f59fc0821 100644 --- a/caravel/assets/visualizations/sankey.js +++ b/caravel/assets/visualizations/sankey.js @@ -1,7 +1,7 @@ // CSS require('./sankey.css'); // JS -var px = window.px || require('../javascripts/modules/dashed.js'); +var px = window.px || require('../javascripts/modules/caravel.js'); var d3 = window.d3 || require('d3'); d3.sankey = require('d3-sankey').sankey; diff --git a/caravel/assets/visualizations/sunburst.js b/caravel/assets/visualizations/sunburst.js index 8246454c2428e..f5ad84b0c4787 100644 --- a/caravel/assets/visualizations/sunburst.js +++ b/caravel/assets/visualizations/sunburst.js @@ -1,5 +1,5 @@ var d3 = window.d3 || require('d3'); -var px = require('../javascripts/modules/dashed.js'); +var px = require('../javascripts/modules/caravel.js'); var wrapSvgText = require('../javascripts/modules/utils.js').wrapSvgText; require('./sunburst.css'); diff --git a/caravel/assets/visualizations/word_cloud.js b/caravel/assets/visualizations/word_cloud.js index a83442ba529e0..7efd7c03193c7 100644 --- a/caravel/assets/visualizations/word_cloud.js +++ b/caravel/assets/visualizations/word_cloud.js @@ -1,4 +1,4 @@ -var px = window.px || require('../javascripts/modules/dashed.js'); +var px = window.px || require('../javascripts/modules/caravel.js'); var d3 = window.d3 || require('d3'); var cloudLayout = require('d3-cloud'); diff --git a/caravel/bin/caravel b/caravel/bin/caravel index 9640a49c5c102..5400b949577cb 100755 --- a/caravel/bin/caravel +++ b/caravel/bin/caravel @@ -5,11 +5,11 @@ import logging from subprocess import Popen from flask.ext.script import Manager -from dashed import app +from caravel import app from flask.ext.migrate import MigrateCommand -import dashed -from dashed import db -from dashed import data, utils +import caravel +from caravel import db +from caravel import data, utils config = app.config @@ -21,16 +21,16 @@ manager.add_command('db', MigrateCommand) '-d', '--debug', action='store_true', help="Start the web server in debug mode") @manager.option( - '-p', '--port', default=config.get("DASHED_WEBSERVER_PORT"), + '-p', '--port', default=config.get("CARAVEL_WEBSERVER_PORT"), help="Specify the port on which to run the web server") @manager.option( - '-w', '--workers', default=config.get("DASHED_WORKERS", 16), + '-w', '--workers', default=config.get("CARAVEL_WORKERS", 16), help="Number of gunicorn web server workers to fire up") @manager.option( - '-t', '--timeout', default=config.get("DASHED_WEBSERVER_TIMEOUT"), + '-t', '--timeout', default=config.get("CARAVEL_WEBSERVER_TIMEOUT"), help="Specify the timeout (seconds) for the gunicorn web server") def runserver(debug, port, timeout, workers): - """Starts a Dashed web server""" + """Starts a Caravel web server""" debug = debug or config.get("DEBUG") if debug: app.run( @@ -43,14 +43,14 @@ def runserver(debug, port, timeout, workers): "-w {workers} " "--timeout {timeout} " "-b 0.0.0.0:{port} " - "dashed:app").format(**locals()) + "caravel:app").format(**locals()) print("Starting server with command: " + cmd) Popen(cmd, shell=True).wait() @manager.command def init(): - """Inits the Dashed application""" - utils.init(dashed) + """Inits the Caravel application""" + utils.init(caravel) @manager.option( '-s', '--sample', action='store_true', @@ -74,7 +74,7 @@ def load_examples(sample): def refresh_druid(): """Refresh all druid datasources""" session = db.session() - from dashed import models + from caravel import models for cluster in session.query(models.DruidCluster).all(): try: cluster.refresh_datasources() diff --git a/caravel/config.py b/caravel/config.py index 31a79904350a6..01876998da82c 100644 --- a/caravel/config.py +++ b/caravel/config.py @@ -1,4 +1,4 @@ -"""The main config file for Dashed +"""The main config file for Caravel All configuration in this file can be overridden by providing a local_config in your PYTHONPATH as there is a ``from local_config import *`` @@ -12,13 +12,13 @@ # --------------------------------------------------------- -# Dashed specifix config +# Caravel specifix config # --------------------------------------------------------- ROW_LIMIT = 50000 WEBSERVER_THREADS = 8 -DASHED_WEBSERVER_PORT = 8088 -DASHED_WEBSERVER_TIMEOUT = 60 +CARAVEL_WEBSERVER_PORT = 8088 +CARAVEL_WEBSERVER_TIMEOUT = 60 CUSTOM_SECURITY_MANAGER = None # --------------------------------------------------------- @@ -27,7 +27,7 @@ SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h' # noqa # The SQLAlchemy connection string. -SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/dashed.db' +SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/caravel.db' # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp' # SQLALCHEMY_DATABASE_URI = 'postgresql://root:password@localhost/myapp' @@ -44,7 +44,7 @@ # GLOBALS FOR APP Builder # ------------------------------ # Uncomment to setup Your App name -APP_NAME = "Dashed" +APP_NAME = "Caravel" # Uncomment to setup Setup an App icon # APP_ICON = "/static/img/something.png" @@ -116,6 +116,6 @@ CACHE_CONFIG = {'CACHE_TYPE': 'null'} try: - from dashed_config import * # noqa + from caravel_config import * # noqa except Exception: pass diff --git a/caravel/data/__init__.py b/caravel/data/__init__.py index 9fd40e12e5f7e..7d1f06994890d 100644 --- a/caravel/data/__init__.py +++ b/caravel/data/__init__.py @@ -1,4 +1,4 @@ -"""Loads datasets, dashboards and slices in a new dashed instance""" +"""Loads datasets, dashboards and slices in a new caravel instance""" import gzip import json @@ -8,7 +8,7 @@ import pandas as pd from sqlalchemy import String, DateTime, Float -from dashed import app, db, models, utils +from caravel import app, db, models, utils # Shortcuts DB = models.Database diff --git a/caravel/forms.py b/caravel/forms.py index c4df90b405900..fe7146ba6ed72 100644 --- a/caravel/forms.py +++ b/caravel/forms.py @@ -5,7 +5,7 @@ BooleanField, IntegerField, HiddenField) from wtforms import validators, widgets from copy import copy -from dashed import app +from caravel import app from collections import OrderedDict config = app.config @@ -73,7 +73,7 @@ def pre_validate(self, form): class OmgWtForm(Form): - """Dashedification of the WTForm Form object""" + """Caravelification of the WTForm Form object""" fieldsets = {} css_classes = dict() @@ -101,13 +101,13 @@ class FormFactory(object): def __init__(self, viz): self.viz = viz - from dashed.viz import viz_types + from caravel.viz import viz_types viz = self.viz datasource = viz.datasource default_metric = datasource.metrics_combo[0][0] default_groupby = datasource.groupby_column_names[0] group_by_choices = [(s, s) for s in datasource.groupby_column_names] - # Pool of all the fields that can be used in Dashed + # Pool of all the fields that can be used in Caravel self.field_dict = { 'viz_type': SelectField( 'Viz', @@ -180,7 +180,7 @@ def __init__(self, viz): ('cca3', 'code ISO 3166-1 alpha-3 (cca3)'), ), description=( - "The country code standard that Dashed should expect " + "The country code standard that Caravel should expect " "to find in the [country] column")), 'groupby': SelectMultipleSortableField( 'Group by', @@ -581,7 +581,7 @@ def add_to_form(attrs): "applies a date transformation to alter " "your time column and defines a new time granularity." "The options here are defined on a per database " - "engine basis in the Dashed source code")) + "engine basis in the Caravel source code")) add_to_form(time_fields) field_css_classes['time_grain_sqla'] = ['form-control', 'select2'] field_css_classes['granularity_sqla'] = ['form-control', 'select2'] diff --git a/caravel/models.py b/caravel/models.py index 4142d8edc8216..e8973c4891606 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -1,4 +1,4 @@ -"""A collection of ORM sqlalchemy models for Dashed""" +"""A collection of ORM sqlalchemy models for Caravel""" from copy import deepcopy, copy from collections import namedtuple @@ -29,8 +29,8 @@ from sqlalchemy.sql.elements import ColumnClause from sqlalchemy_utils import EncryptedType -from dashed import app, db, get_session, utils -from dashed.viz import viz_types +from caravel import app, db, get_session, utils +from caravel.viz import viz_types from sqlalchemy.ext.declarative import declared_attr config = app.config @@ -186,7 +186,7 @@ def slice_url(self): slice_params['slice_name'] = self.slice_name from werkzeug.urls import Href href = Href( - "/dashed/explore/{self.datasource_type}/" + "/caravel/explore/{self.datasource_type}/" "{self.datasource_id}/".format(self=self)) return href(slice_params) @@ -229,7 +229,7 @@ def __repr__(self): @property def url(self): - return "/dashed/dashboard/{}/".format(self.slug or self.id) + return "/caravel/dashboard/{}/".format(self.slug or self.id) @property def metadata_dejson(self): @@ -352,7 +352,7 @@ def sqlalchemy_uri_decrypted(self): @property def sql_url(self): - return '/dashed/sql/{}/'.format(self.id) + return '/caravel/sql/{}/'.format(self.id) @property def sql_link(self): @@ -437,7 +437,7 @@ def name(self): @property def table_link(self): - url = "/dashed/explore/{self.type}/{self.id}/".format(self=self) + url = "/caravel/explore/{self.type}/{self.id}/".format(self=self) return '{self.table_name}'.format( url=url, self=self) @@ -848,7 +848,7 @@ def __repr__(self): @property def datasource_link(self): - url = "/dashed/explore/{self.type}/{self.id}/".format(self=self) + url = "/caravel/explore/{self.type}/{self.id}/".format(self=self) return '{self.datasource_name}'.format( url=url, self=self) @@ -884,7 +884,7 @@ def generate_metrics(self): @classmethod def sync_to_db(cls, name, cluster): - """Fetches metadata for that datasource and merges the Dashed db""" + """Fetches metadata for that datasource and merges the Caravel db""" print("Syncing Druid datasource [{}]".format(name)) session = get_session() datasource = session.query(cls).filter_by(datasource_name=name).first() @@ -1074,7 +1074,7 @@ def query( class Log(Model): - """ORM object used to log Dashed actions to the database""" + """ORM object used to log Caravel actions to the database""" __tablename__ = 'logs' diff --git a/caravel/templates/appbuilder/general/widgets/list.html b/caravel/templates/appbuilder/general/widgets/list.html index b0c28eda927fc..51c958772c28c 100644 --- a/caravel/templates/appbuilder/general/widgets/list.html +++ b/caravel/templates/appbuilder/general/widgets/list.html @@ -64,7 +64,7 @@ {{'checked' if item[value] }} name="{{ '{}__{}'.format(pk, value) }}" id="{{ '{}__{}'.format(pk, value) }}" - onchange="$.get('/dashed/checkbox/{{ modelview_name }}/{{ pk }}/{{ value }}/' + $('#{{ '{}__{}'.format(pk, value) }}')[0].checked ) + '/';"> + onchange="$.get('/caravel/checkbox/{{ modelview_name }}/{{ pk }}/{{ value }}/' + $('#{{ '{}__{}'.format(pk, value) }}')[0].checked ) + '/';"> {% else %} {{ item[value]|safe }} {% endif %} diff --git a/caravel/templates/caravel/base.html b/caravel/templates/caravel/base.html index 9ac1eef969a52..bab571bbce51f 100644 --- a/caravel/templates/caravel/base.html +++ b/caravel/templates/caravel/base.html @@ -2,7 +2,7 @@ {% block head_css %} - + {{super()}} {% endblock %} diff --git a/caravel/templates/caravel/dashboard.html b/caravel/templates/caravel/dashboard.html index a4ff39b42a4b6..9859fc77eb297 100644 --- a/caravel/templates/caravel/dashboard.html +++ b/caravel/templates/caravel/dashboard.html @@ -1,4 +1,4 @@ -{% extends "dashed/basic.html" %} +{% extends "caravel/basic.html" %} {% block head_js %} {{ super() }} diff --git a/caravel/templates/caravel/explore.html b/caravel/templates/caravel/explore.html index c2519f2464a3c..a8fe55f7e3d2d 100644 --- a/caravel/templates/caravel/explore.html +++ b/caravel/templates/caravel/explore.html @@ -1,4 +1,4 @@ -{% extends "dashed/basic.html" %} +{% extends "caravel/basic.html" %} {% block title %} {% if slice %} diff --git a/caravel/templates/caravel/index.html b/caravel/templates/caravel/index.html index 71ed52780ee2c..1c82a1df89827 100644 --- a/caravel/templates/caravel/index.html +++ b/caravel/templates/caravel/index.html @@ -1,4 +1,4 @@ -{% extends "dashed/basic.html" %} +{% extends "caravel/basic.html" %} {% block tail_js %} {{ super() }} diff --git a/caravel/templates/caravel/models/database/add.html b/caravel/templates/caravel/models/database/add.html index 79b6cf6cbcce6..f4388ece38ae5 100644 --- a/caravel/templates/caravel/models/database/add.html +++ b/caravel/templates/caravel/models/database/add.html @@ -1,6 +1,6 @@ {% extends "appbuilder/general/model/add.html" %} -{% import "dashed/models/database/macros.html" as macros %} +{% import "caravel/models/database/macros.html" as macros %} {% block tail_js %} {{ super() }} {{ macros.testconn() }} diff --git a/caravel/templates/caravel/models/database/edit.html b/caravel/templates/caravel/models/database/edit.html index b1db50f2bc630..46a3693bb5456 100644 --- a/caravel/templates/caravel/models/database/edit.html +++ b/caravel/templates/caravel/models/database/edit.html @@ -1,6 +1,6 @@ {% extends "appbuilder/general/model/edit.html" %} -{% import "dashed/models/database/macros.html" as macros %} +{% import "caravel/models/database/macros.html" as macros %} {% block tail_js %} {{ super() }} {{ macros.testconn() }} diff --git a/caravel/templates/caravel/models/database/macros.html b/caravel/templates/caravel/models/database/macros.html index dac8b6d50f34c..c066870613bad 100644 --- a/caravel/templates/caravel/models/database/macros.html +++ b/caravel/templates/caravel/models/database/macros.html @@ -3,7 +3,7 @@ $("#sqlalchemy_uri").parent() .append(''); $("#testconn").click(function() { - var url = "/dashed/testconn"; + var url = "/caravel/testconn"; $.ajax({ method: "POST", url: url, diff --git a/caravel/templates/caravel/no_data.html b/caravel/templates/caravel/no_data.html index a8de807a68eb2..a846e9b8e50a4 100644 --- a/caravel/templates/caravel/no_data.html +++ b/caravel/templates/caravel/no_data.html @@ -1,4 +1,4 @@ -{% extends "dashed/datasource.html" %} +{% extends "caravel/datasource.html" %} {% block viz %} No data: review your incantations. diff --git a/caravel/templates/caravel/sql.html b/caravel/templates/caravel/sql.html index fd660eac35d31..683de3bcc4357 100644 --- a/caravel/templates/caravel/sql.html +++ b/caravel/templates/caravel/sql.html @@ -1,4 +1,4 @@ -{% extends "dashed/basic.html" %} +{% extends "caravel/basic.html" %} {% block head_css %} {{super()}} diff --git a/caravel/templates/caravel/standalone.html b/caravel/templates/caravel/standalone.html index 319aad13c49a5..d159fc0fef770 100644 --- a/caravel/templates/caravel/standalone.html +++ b/caravel/templates/caravel/standalone.html @@ -1,7 +1,7 @@ - + {% set CSS_THEME = appbuilder.get_app.config.get("CSS_THEME") %} {% set height = request.args.get("height", 700) %} {% if CSS_THEME %} diff --git a/caravel/templates/caravel/welcome.html b/caravel/templates/caravel/welcome.html index 6184a24815d26..efafb86f3dab9 100644 --- a/caravel/templates/caravel/welcome.html +++ b/caravel/templates/caravel/welcome.html @@ -1,4 +1,4 @@ -{% extends "dashed/basic.html" %} +{% extends "caravel/basic.html" %} {% block head_js %} {{ super() }} diff --git a/caravel/templates/index.html b/caravel/templates/index.html index e2f16ba7e40a2..5bded9cb6cd19 100644 --- a/caravel/templates/index.html +++ b/caravel/templates/index.html @@ -18,7 +18,7 @@