From 42ac46c1e15b6b446491b6d3f7020f59f45e41b4 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 26 Apr 2016 09:29:19 -0700 Subject: [PATCH 01/51] [bugfix] fix context confusion in Slice --- caravel/assets/javascripts/modules/caravel.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/caravel/assets/javascripts/modules/caravel.js b/caravel/assets/javascripts/modules/caravel.js index 4931dfcdcddbe..b6b881077eab6 100644 --- a/caravel/assets/javascripts/modules/caravel.js +++ b/caravel/assets/javascripts/modules/caravel.js @@ -301,6 +301,7 @@ var px = (function () { }, bindResizeToWindowResize: function () { var resizeTimer; + var slice = this; $(window).on('resize', function (e) { clearTimeout(resizeTimer); resizeTimer = setTimeout(function () { @@ -314,7 +315,7 @@ var px = (function () { } this.force = force; token.find("img.loading").show(); - container.css('height', slice.height()); + container.css('height', this.height()); dttm = 0; timer = setInterval(stopwatch, 10); $('#timer').removeClass('btn-danger btn-success'); @@ -323,7 +324,7 @@ var px = (function () { }, resize: function () { token.find("img.loading").show(); - container.css('height', slice.height()); + container.css('height', this.height()); this.viz.render(); this.viz.resize(); }, From c0fb9eeca484c00647117645ce620edb6cdaba24 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 26 Apr 2016 09:29:40 -0700 Subject: [PATCH 02/51] [bugfix] big_number doesn't fadeout on hover --- caravel/assets/visualizations/big_number.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/caravel/assets/visualizations/big_number.js b/caravel/assets/visualizations/big_number.js index 32941cae5cf34..7351100924f71 100644 --- a/caravel/assets/visualizations/big_number.js +++ b/caravel/assets/visualizations/big_number.js @@ -72,7 +72,9 @@ function bigNumberVis(slice) { var g = svg.append('g'); var y = height / 2; //Printing big number - g.append('text') + g.append("g").attr("class", "digits") + .attr('opacity', 1) + .append('text') .attr('x', width / 2) .attr('y', y) .attr('class', 'big') @@ -159,17 +161,17 @@ function bigNumberVis(slice) { div.on('mouseover', function (d) { var div = d3.select(this); - div.select('path').transition().duration(500).attr('opacity', 1) + div.selectAll('path').transition().duration(500).attr('opacity', 1) .style('stroke-width', '2px'); - div.select('g.digits').transition().duration(500).attr('opacity', 0.1); - div.select('g.axis').transition().duration(500).attr('opacity', 1); + div.selectAll('g.digits').transition().duration(500).attr('opacity', 0.1); + div.selectAll('g.axis').transition().duration(500).attr('opacity', 1); }) .on('mouseout', function (d) { var div = d3.select(this); div.select('path').transition().duration(500).attr('opacity', 0.5) .style('stroke-width', '5px'); - div.select('g.digits').transition().duration(500).attr('opacity', 1); - div.select('g.axis').transition().duration(500).attr('opacity', 0); + div.selectAll('g.digits').transition().duration(500).attr('opacity', 1); + div.selectAll('g.axis').transition().duration(500).attr('opacity', 0); }); } slice.done(payload); From a2f2ad84da3e98d6fa51af670a7d1a4f51826243 Mon Sep 17 00:00:00 2001 From: andrewhn Date: Wed, 27 Apr 2016 01:51:01 +0700 Subject: [PATCH 03/51] add navigation, zoom to treemap (#396) * add navigation, zoom to treemap * don't use stale form data --- caravel/assets/visualizations/treemap.css | 56 +++-- caravel/assets/visualizations/treemap.js | 259 +++++++++++++++++----- caravel/forms.py | 23 +- caravel/viz.py | 13 ++ 4 files changed, 283 insertions(+), 68 deletions(-) diff --git a/caravel/assets/visualizations/treemap.css b/caravel/assets/visualizations/treemap.css index 3293492939a68..c385780c82a77 100644 --- a/caravel/assets/visualizations/treemap.css +++ b/caravel/assets/visualizations/treemap.css @@ -1,15 +1,43 @@ -.node { - border: solid 1px white; - font: 10px sans-serif; - line-height: 12px; - overflow: hidden; - position: absolute; - text-indent: 2px; - padding: 0px; /* form div giving top 1px */ - box-sizing: content-box; /* otherwise inheriting border-box */ -} - -.treemap-container { - position: relative; - margin: auto; +text { + pointer-events: none; +} + +.grandparent text { + font-weight: bold; +} + +rect { + fill: none; + stroke: #fff; +} + +rect.parent, +.grandparent rect { + stroke-width: 2px; +} + +rect.parent { + pointer-events: none; +} + +.grandparent rect { + fill: #eee; +} + +.grandparent:hover rect { + fill: #aaa; +} + +.children rect.parent, +.grandparent rect { + cursor: pointer; +} + +.children rect.parent { + fill: #bbb; + fill-opacity: .5; +} + +.children:hover rect.child { + fill: #bbb; } diff --git a/caravel/assets/visualizations/treemap.js b/caravel/assets/visualizations/treemap.js index 172b78e4cee73..88ed230060a85 100644 --- a/caravel/assets/visualizations/treemap.js +++ b/caravel/assets/visualizations/treemap.js @@ -5,68 +5,222 @@ var px = window.px || require('../javascripts/modules/caravel.js'); // CSS require('./treemap.css'); -/* Modified from https://bl.ocks.org/mbostock/4063582 */ +/* Modified from http://bl.ocks.org/ganeshv/6a8e9ada3ab7f2d88022 */ function treemap(slice) { var div = d3.select(slice.selector); - var _draw = function (data, eltWidth, eltHeight, includeTitle) { + var _draw = function (data, eltWidth, eltHeight, formData) { var margin = { top: 0, right: 0, bottom: 0, left: 0 }, - headerHeight = includeTitle ? 30 : 0, + navBarHeight = 36, + navBarTitleSize = navBarHeight / 3, + navBarBuffer = 10, width = eltWidth - margin.left - margin.right, - height = eltHeight - headerHeight - margin.top - margin.bottom; + height = eltHeight - navBarHeight - navBarBuffer - + margin.top - margin.bottom, + transitioning, + formatNumber = d3.format(formData.number_format); + + var x = d3.scale.linear() + .domain([0, width]) + .range([0, width]); + + var y = d3.scale.linear() + .domain([0, height]) + .range([0, height]); var treemap = d3.layout.treemap() - .size([width, height]) - .value(function (d) { return d.value; }); - - var root = div.append("div") - .classed("treemap-container", true); - - var header = root.append("div") - .style("width", (width + margin.left + margin.right) + "px") - .style("height", headerHeight + "px"); - - var container = root.append("div") - .style("position", "relative") - .style("width", (width + margin.left + margin.right) + "px") - .style("height", (height + margin.top + margin.bottom) + "px") - .style("left", margin.left + "px") - .style("top", margin.top + "px"); - - var position = function (selection) { - selection.style("left", function (d) { return d.x + "px"; }) - .style("top", function (d) { return d.y + "px"; }) - .style("width", function (d) { return Math.max(0, d.dx - 1) + "px"; }) - .style("height", function (d) { return Math.max(0, d.dy - 1) + "px"; }); + .children(function (d, depth) { return depth ? null : d._children; }) + .sort(function (a, b) { return a.value - b.value; }) + .ratio(formData.treemap_ratio) + .mode("squarify") + .round(false); + + var svg = div.append("svg") + .attr("width", eltWidth) + .attr("height", eltHeight); + + var chartContainer = svg.append("g") + .attr("transform", "translate(" + margin.left + "," + + (margin.top + navBarHeight + navBarBuffer) + ")") + .style("shape-rendering", "crispEdges"); + + var grandparent = svg.append("g") + .attr("class", "grandparent") + .attr("transform", "translate(0," + (margin.top + navBarBuffer / 2) + ")"); + + grandparent.append("rect") + .attr("width", width) + .attr("height", navBarHeight); + + grandparent.append("text") + .attr("x", width / 2) + .attr("y", navBarHeight / 2 + navBarTitleSize / 2) + .style("font-size", navBarTitleSize + "px") + .style("text-anchor", "middle"); + + var initialize = function (root) { + root.x = root.y = 0; + root.dx = width; + root.dy = height; + root.depth = 0; + }; + + // Aggregate the values for internal nodes. This is normally done by the + // treemap layout, but not here because of our custom implementation. + // We also take a snapshot of the original children (_children) to avoid + // the children being overwritten when when layout is computed. + var accumulate = function (d) { + return (d._children = d.children) + ? d.value = d.children.reduce(function (p, v) { return p + accumulate(v); }, 0) + : d.value; + }; + + // Compute the treemap layout recursively such that each group of siblings + // uses the same size (1x1) rather than the dimensions of the parent cell. + // This optimizes the layout for the current zoom state. Note that a wrapper + // object is created for the parent node for each group of siblings so that + // the parents dimensions are not discarded as we recurse. Since each group + // of sibling was laid out in 1x1, we must rescale to fit using absolute + // coordinates. This lets us use a viewport to zoom. + var layout = function (d) { + if (d._children) { + treemap.nodes({ _children: d._children }); + d._children.forEach(function (c) { + c.x = d.x + c.x * d.dx; + c.y = d.y + c.y * d.dy; + c.dx *= d.dx; + c.dy *= d.dy; + c.parent = d; + layout(c); + }); + } + }; + + var display = function (d) { + + var transition = function (d) { + if (transitioning || !d) { return; } + transitioning = true; + + var g2 = display(d), + t1 = g1.transition().duration(750), + t2 = g2.transition().duration(750); + + // Update the domain only after entering new elements. + x.domain([d.x, d.x + d.dx]); + y.domain([d.y, d.y + d.dy]); + + // Enable anti-aliasing during the transition. + chartContainer.style("shape-rendering", null); + + // Draw child nodes on top of parent nodes. + chartContainer.selectAll(".depth").sort(function (a, b) { return a.depth - b.depth; }); + + // Fade-in entering text. + g2.selectAll("text").style("fill-opacity", 0); + + // Transition to the new view. + t1.selectAll(".ptext").call(text).style("fill-opacity", 0); + t1.selectAll(".ctext").call(text2).style("fill-opacity", 0); + t2.selectAll(".ptext").call(text).style("fill-opacity", 1); + t2.selectAll(".ctext").call(text2).style("fill-opacity", 1); + t1.selectAll("rect").call(rect); + t2.selectAll("rect").call(rect); + + // Remove the old node when the transition is finished. + t1.remove().each("end", function () { + chartContainer.style("shape-rendering", "crispEdges"); + transitioning = false; + }); + }; + + grandparent + .datum(d.parent) + .on("click", transition) + .select("text") + .text(name(d)); + + var g1 = chartContainer.append("g") + .datum(d) + .attr("class", "depth"); + + var g = g1.selectAll("g") + .data(d._children) + .enter().append("g"); + + g.filter(function (d) { return d._children; }) + .classed("children", true) + .on("click", transition); + + var children = g.selectAll(".child") + .data(function (d) { return d._children || [d]; }) + .enter().append("g"); + + children.append("rect") + .attr("class", "child") + .call(rect) + .append("title") + .text(function (d) { return d.name + " (" + formatNumber(d.value) + ")"; }); + + children.append("text") + .attr("class", "ctext") + .text(function (d) { return d.name; }) + .call(text2); + + g.append("rect") + .attr("class", "parent") + .call(rect); + + var t = g.append("text") + .attr("class", "ptext") + .attr("dy", ".75em"); + + t.append("tspan") + .text(function (d) { return d.name; }); + t.append("tspan") + .attr("dy", "1.0em") + .text(function (d) { return formatNumber(d.value); }); + t.call(text); + + g.selectAll("rect") + .style("fill", function (d) { return px.color.category21(d.name); }); + + return g; + }; + + var text = function (selection) { + selection.selectAll("tspan") + .attr("x", function (d) { return x(d.x) + 6; }); + selection.attr("x", function (d) { return x(d.x) + 6; }) + .attr("y", function (d) { return y(d.y) + 6; }) + .style("opacity", function (d) { return this.getComputedTextLength() < x(d.x + d.dx) - x(d.x) ? 1 : 0; }); + }; + + var text2 = function (selection) { + selection.attr("x", function (d) { return x(d.x + d.dx) - this.getComputedTextLength() - 6; }) + .attr("y", function (d) { return y(d.y + d.dy) - 6; }) + .style("opacity", function (d) { return this.getComputedTextLength() < x(d.x + d.dx) - x(d.x) ? 1 : 0; }); + }; + + var rect = function (selection) { + selection.attr("x", function (d) { return x(d.x); }) + .attr("y", function (d) { return y(d.y); }) + .attr("width", function (d) { return x(d.x + d.dx) - x(d.x); }) + .attr("height", function (d) { return y(d.y + d.dy) - y(d.y); }); + }; + + var name = function (d) { + return d.parent + ? name(d.parent) + " / " + d.name + " (" + formatNumber(d.value) + ")" + : d.name + " (" + formatNumber(d.value) + ")"; }; - container.datum(data).selectAll(".node") - .data(treemap.nodes) - .enter().append("div") - .attr("class", "node") - .call(position) - .style("background", function (d) { - return d.children ? px.color.category21(d.name) : null; - }) - .style("color", function (d) { - // detect if our background is dark and we need a - // light text color or vice-versa - var bg = d.parent ? px.color.category21(d.parent.name) : null; - if (bg) { - return d3.hsl(bg).l < 0.35 ? '#d3d3d3' : '#111111'; - } - }) - .text(function (d) { return d.children ? null : d.name; }); - - if (includeTitle) { - // title to help with multiple metrics (if any) - header.append("span") - .style("font-size", "18px") - .style("font-weight", "bold") - .text(data.name); - } + initialize(data); + accumulate(data); + layout(data); + display(data); }; @@ -83,9 +237,8 @@ function treemap(slice) { var width = slice.width(); // facet muliple metrics (no sense in combining) var height = slice.height() / json.data.length; - var includeTitles = json.data.length > 1; for (var i = 0, l = json.data.length; i < l; i ++) { - _draw(json.data[i], width, height, includeTitles); + _draw(json.data[i], width, height, json.form_data); } slice.done(json); diff --git a/caravel/forms.py b/caravel/forms.py index 171da1f00caea..c6c96665298ee 100644 --- a/caravel/forms.py +++ b/caravel/forms.py @@ -6,10 +6,11 @@ from collections import OrderedDict from copy import copy +import math from wtforms import ( Form, SelectMultipleField, SelectField, TextField, TextAreaField, - BooleanField, IntegerField, HiddenField) + BooleanField, IntegerField, HiddenField, DecimalField) from wtforms import validators, widgets from caravel import app @@ -336,6 +337,26 @@ def __init__(self, viz): '9/91 percentiles', ]) ), + 'treemap_ratio': DecimalField( + 'Ratio', + default=0.5 * (1 + math.sqrt(5)), # d3 default, golden ratio + description='Target aspect ratio for treemap tiles.', + ), + 'number_format': FreeFormSelectField( + 'Number format', + default='.3s', + choices=[ + ('.3s', '".3s" | 12.3k'), + ('.3%', '".3%" | 1234543.210%'), + ('.4r', '".4r" | 12350'), + ('.3f', '".3f" | 12345.432'), + ('+,', '"+," | +12,345.4321'), + ('$,.2f', '"$,.2f" | $12,345.43'), + ], + description="D3 format syntax for numbers " + "https://github.com/mbostock/\n" + "d3/wiki/Formatting"), + 'row_limit': FreeFormSelectField( 'Row limit', diff --git a/caravel/viz.py b/caravel/viz.py index 4839899948426..70504f6f3042d 100644 --- a/caravel/viz.py +++ b/caravel/viz.py @@ -501,6 +501,19 @@ class TreemapViz(BaseViz): verbose_name = "Treemap" credits = 'd3.js' is_timeseries = False + fieldsets = ({ + 'label': None, + 'fields': ( + 'metrics', + 'groupby', + ), + }, { + 'label': 'Chart Options', + 'fields': ( + 'treemap_ratio', + 'number_format', + ) + },) def get_df(self, query_obj=None): df = super(TreemapViz, self).get_df(query_obj) From ab64a26b5b7d5cad88e5fd8f48865a685c339bea Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 26 Apr 2016 16:14:40 -0700 Subject: [PATCH 04/51] fix img loading overlay in explore view (#403) --- caravel/assets/javascripts/dashboard.js | 2 + caravel/assets/javascripts/explore.js | 1 + caravel/assets/stylesheets/caravel.css | 47 ------------------------ caravel/assets/stylesheets/dashboard.css | 47 ++++++++++++++++++++++++ caravel/assets/stylesheets/explore.css | 9 +++++ 5 files changed, 59 insertions(+), 47 deletions(-) create mode 100644 caravel/assets/stylesheets/dashboard.css create mode 100644 caravel/assets/stylesheets/explore.css diff --git a/caravel/assets/javascripts/dashboard.js b/caravel/assets/javascripts/dashboard.js index da711d725faa1..6d010e1afe4b8 100644 --- a/caravel/assets/javascripts/dashboard.js +++ b/caravel/assets/javascripts/dashboard.js @@ -13,6 +13,8 @@ require('./caravel-select2.js'); require('../node_modules/gridster/dist/jquery.gridster.min.css'); require('../node_modules/gridster/dist/jquery.gridster.min.js'); +require('../stylesheets/dashboard.css'); + var Dashboard = function (dashboardData) { var dashboard = $.extend(dashboardData, { filters: {}, diff --git a/caravel/assets/javascripts/explore.js b/caravel/assets/javascripts/explore.js index 1f655b5ab9810..55c71b90e0c81 100644 --- a/caravel/assets/javascripts/explore.js +++ b/caravel/assets/javascripts/explore.js @@ -18,6 +18,7 @@ require('../node_modules/bootstrap-toggle/js/bootstrap-toggle.min.js'); // css require('../vendor/pygments.css'); +require('../stylesheets/explore.css'); require('../node_modules/bootstrap-toggle/css/bootstrap-toggle.min.css'); var slice; diff --git a/caravel/assets/stylesheets/caravel.css b/caravel/assets/stylesheets/caravel.css index 533f43a9a9976..d8fdc1475df1b 100644 --- a/caravel/assets/stylesheets/caravel.css +++ b/caravel/assets/stylesheets/caravel.css @@ -156,36 +156,6 @@ span.title-block { img.loading { width: 40px; } -.dashboard a i { - cursor: pointer; -} -.dashboard i.drag { - cursor: move !important; -} -.dashboard .gridster .preview-holder { - z-index: 1; - position: absolute; - background-color: #AAA; - border-color: #AAA; - opacity: 0.3; -} -.gridster li.widget{ - list-style-type: none; - border-radius: 0; - margin: 5px; - border: 1px solid #ccc; - box-shadow: 2px 1px 5px -2px #aaa; - background-color: #fff; -} -.dashboard .gridster .dragging, -.dashboard .gridster .resizing { - opacity: 0.5; -} -.dashboard img.loading { - width: 20px; - margin: 5px; - position: absolute; -} img.viz-thumb-option { width: 100px; border: 1px solid gray; @@ -196,23 +166,6 @@ img.viz-thumb-option { max-height: 700px; } -.dashboard .title { - text-align: center; -} -.dashboard .slice_title { - text-align: center; - font-weight: bold; - font-size: 14px; - padding: 5px; -} -.dashboard div.slice_content { - width: 100%; - height: 100%; -} - -.dashboard div.nvtooltip { - z-index: 888; /* this lets tool tips go on top of other slices */ -} div.header { font-weight: bold; diff --git a/caravel/assets/stylesheets/dashboard.css b/caravel/assets/stylesheets/dashboard.css new file mode 100644 index 0000000000000..e9376487fd547 --- /dev/null +++ b/caravel/assets/stylesheets/dashboard.css @@ -0,0 +1,47 @@ +.dashboard a i { + cursor: pointer; +} +.dashboard i.drag { + cursor: move !important; +} +.dashboard .gridster .preview-holder { + z-index: 1; + position: absolute; + background-color: #AAA; + border-color: #AAA; + opacity: 0.3; +} +.gridster li.widget{ + list-style-type: none; + border-radius: 0; + margin: 5px; + border: 1px solid #ccc; + box-shadow: 2px 1px 5px -2px #aaa; + background-color: #fff; +} +.dashboard .gridster .dragging, +.dashboard .gridster .resizing { + opacity: 0.5; +} +.dashboard img.loading { + width: 20px; + margin: 5px; + position: absolute; +} +.dashboard .title { + text-align: center; +} +.dashboard .slice_title { + text-align: center; + font-weight: bold; + font-size: 14px; + padding: 5px; +} +.dashboard div.slice_content { + width: 100%; + height: 100%; +} + +.dashboard div.nvtooltip { + z-index: 888; /* this lets tool tips go on top of other slices */ +} diff --git a/caravel/assets/stylesheets/explore.css b/caravel/assets/stylesheets/explore.css new file mode 100644 index 0000000000000..1666f9fc4774a --- /dev/null +++ b/caravel/assets/stylesheets/explore.css @@ -0,0 +1,9 @@ +.widget { + position: relative; +} + +.slice_container { + position: absolute; + left: 0; + top: 0; +} From b634d03ac3d5ce36b8b44805e18bb26bc0c08be4 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 26 Apr 2016 16:44:51 -0700 Subject: [PATCH 05/51] Show only Slices and Dashboards users have access to (#404) * 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 --- .../4fa88fe24e94_owners_many_to_many.py | 38 ++++++++++ .../c3a8f8611885_materializing_permission.py | 33 +++++++++ caravel/models.py | 44 +++++++++-- caravel/views.py | 74 +++++++++++++------ tests/core_tests.py | 58 +++++++++++---- 5 files changed, 205 insertions(+), 42 deletions(-) create mode 100644 caravel/migrations/versions/4fa88fe24e94_owners_many_to_many.py create mode 100644 caravel/migrations/versions/c3a8f8611885_materializing_permission.py diff --git a/caravel/migrations/versions/4fa88fe24e94_owners_many_to_many.py b/caravel/migrations/versions/4fa88fe24e94_owners_many_to_many.py new file mode 100644 index 0000000000000..8cd1123097f8e --- /dev/null +++ b/caravel/migrations/versions/4fa88fe24e94_owners_many_to_many.py @@ -0,0 +1,38 @@ +"""owners_many_to_many + +Revision ID: 4fa88fe24e94 +Revises: b4456560d4f3 +Create Date: 2016-04-15 17:58:33.842012 + +""" + +# revision identifiers, used by Alembic. +revision = '4fa88fe24e94' +down_revision = 'b4456560d4f3' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.create_table('dashboard_user', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('dashboard_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['dashboard_id'], [u'dashboards.id'], ), + sa.ForeignKeyConstraint(['user_id'], [u'ab_user.id'], ), + sa.PrimaryKeyConstraint('id'), + ) + op.create_table('slice_user', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('slice_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['slice_id'], [u'slices.id'], ), + sa.ForeignKeyConstraint(['user_id'], [u'ab_user.id'], ), + sa.PrimaryKeyConstraint('id'), + ) + + +def downgrade(): + op.drop_table('slice_user') + op.drop_table('dashboard_user') diff --git a/caravel/migrations/versions/c3a8f8611885_materializing_permission.py b/caravel/migrations/versions/c3a8f8611885_materializing_permission.py new file mode 100644 index 0000000000000..33084ffea94da --- /dev/null +++ b/caravel/migrations/versions/c3a8f8611885_materializing_permission.py @@ -0,0 +1,33 @@ +"""Materializing permission + +Revision ID: c3a8f8611885 +Revises: 4fa88fe24e94 +Create Date: 2016-04-25 08:54:04.303859 + +""" + +# revision identifiers, used by Alembic. +revision = 'c3a8f8611885' +down_revision = '4fa88fe24e94' + +from alembic import op +import sqlalchemy as sa +from caravel import db +from caravel import models + + +def upgrade(): + bind = op.get_bind() + op.add_column('slices', sa.Column('perm', sa.String(length=2000), nullable=True)) + session = db.Session(bind=bind) + + for slc in session.query(models.Slice).all(): + if slc.datasource: + slc.perm = slc.datasource.perm + session.merge(slc) + session.commit() + db.session.close() + + +def downgrade(): + op.drop_column('slices', 'perm') diff --git a/caravel/models.py b/caravel/models.py index 6bf8f88247012..619682a12be4a 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -22,6 +22,7 @@ from flask.ext.appbuilder import Model from flask.ext.appbuilder.models.mixins import AuditMixin from pydruid.client import PyDruid +from flask.ext.appbuilder.models.decorators import renders from pydruid.utils.filters import Dimension, Filter from six import string_types from sqlalchemy import ( @@ -66,15 +67,15 @@ def changed_by_fk(cls): # noqa Integer, ForeignKey('ab_user.id'), default=cls.get_user_id, onupdate=cls.get_user_id, nullable=True) - @property - def created_by_(self): # noqa + @renders('created_by') + def creator(self): # noqa return '{}'.format(self.created_by or '') - @property # noqa + @renders('changed_by') def changed_by_(self): return '{}'.format(self.changed_by or '') - @property + @renders('changed_on') def modified(self): s = humanize.naturaltime(datetime.now() - self.changed_on) return '{}'.format(s) @@ -110,6 +111,13 @@ class CssTemplate(Model, AuditMixinNullable): css = Column(Text, default='') +slice_user = Table('slice_user', Model.metadata, + Column('id', Integer, primary_key=True), + Column('user_id', Integer, ForeignKey('ab_user.id')), + Column('slice_id', Integer, ForeignKey('slices.id')) +) + + class Slice(Model, AuditMixinNullable): """A slice is essentially a report or a view on data""" @@ -125,11 +133,13 @@ class Slice(Model, AuditMixinNullable): params = Column(Text) description = Column(Text) cache_timeout = Column(Integer) + perm = Column(String(2000)) table = relationship( 'SqlaTable', foreign_keys=[table_id], backref='slices') druid_datasource = relationship( 'DruidDatasource', foreign_keys=[druid_datasource_id], backref='slices') + owners = relationship("User", secondary=slice_user) def __repr__(self): return self.slice_name @@ -211,6 +221,20 @@ def slice_link(self): url=url, obj=self) +def set_perm(mapper, connection, target): # noqa + if target.table_id: + src_class = SqlaTable + id_ = target.table_id + elif target.druid_datasource_id: + src_class = DruidDatasource + id_ = target.druid_datasource_id + ds = db.session.query(src_class).filter_by(id=int(id_)).first() + target.perm = ds.perm + +sqla.event.listen(Slice, 'before_insert', set_perm) +sqla.event.listen(Slice, 'before_update', set_perm) + + dashboard_slices = Table( 'dashboard_slices', Model.metadata, Column('id', Integer, primary_key=True), @@ -218,6 +242,13 @@ def slice_link(self): Column('slice_id', Integer, ForeignKey('slices.id')), ) +dashboard_user = Table( + 'dashboard_user', Model.metadata, + Column('id', Integer, primary_key=True), + Column('user_id', Integer, ForeignKey('ab_user.id')), + Column('dashboard_id', Integer, ForeignKey('dashboards.id')) +) + class Dashboard(Model, AuditMixinNullable): @@ -233,6 +264,7 @@ class Dashboard(Model, AuditMixinNullable): slug = Column(String(255), unique=True) slices = relationship( 'Slice', secondary=dashboard_slices, backref='dashboards') + owners = relationship("User", secondary=dashboard_user) def __repr__(self): return self.dashboard_title @@ -1165,11 +1197,13 @@ def wrapper(*args, **kwargs): user_id = g.user.id d = request.args.to_dict() d.update(kwargs) + slice_id = d.get('slice_id', 0) + slice_id = int(slice_id) if slice_id else 0 log = cls( action=f.__name__, json=json.dumps(d), dashboard_id=d.get('dashboard_id') or None, - slice_id=d.get('slice_id') or None, + slice_id=slice_id, user_id=user_id) db.session.add(log) db.session.commit() diff --git a/caravel/views.py b/caravel/views.py index 6908e086a08c9..6d6ef5d7d7d7e 100644 --- a/caravel/views.py +++ b/caravel/views.py @@ -19,9 +19,9 @@ from flask.ext.appbuilder.actions import action from flask.ext.appbuilder.models.sqla.interface import SQLAInterface from flask.ext.appbuilder.security.decorators import has_access +from flask_appbuilder.models.sqla.filters import BaseFilter from pydruid.client import doublesum -from sqlalchemy import create_engine -from sqlalchemy import select, text +from sqlalchemy import create_engine, select, text from sqlalchemy.sql.expression import TextAsFrom from werkzeug.routing import BaseConverter from wtforms.validators import ValidationError @@ -32,6 +32,42 @@ log_this = models.Log.log_this +class CaravelFilter(BaseFilter): + def get_perms(self): + perms = [] + for role in g.user.roles: + for perm_view in role.permissions: + if perm_view.permission.name == 'datasource_access': + perms.append(perm_view.view_menu.name) + return perms + + +class FilterSlice(CaravelFilter): + def apply(self, query, func): # noqa + if any([r.name in ('Admin', 'Alpha') for r in g.user.roles]): + return query + qry = query.filter(self.model.perm.in_(self.get_perms())) + print(qry) + return qry + + +class FilterDashboard(CaravelFilter): + def apply(self, query, func): # noqa + if any([r.name in ('Admin', 'Alpha') for r in g.user.roles]): + return query + Slice = models.Slice # noqa + slice_ids_qry = ( + db.session + .query(Slice.id) + .filter(Slice.perm.in_(self.get_perms())) + ) + return query.filter( + self.model.slices.any( + models.Slice.id.in_(slice_ids_qry) + ) + ) + + def validate_json(form, field): # noqa try: json.loads(field.data) @@ -136,8 +172,7 @@ class DruidMetricInlineView(CompactCRUDMixin, CaravelModelView): # noqa class DatabaseView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Database) - list_columns = ['database_name', 'sql_link', 'created_by_', 'changed_on'] - order_columns = utils.list_minus(list_columns, ['created_by_']) + list_columns = ['database_name', 'sql_link', 'creator', 'changed_on'] add_columns = [ 'database_name', 'sqlalchemy_uri', 'cache_timeout', 'extra'] search_exclude_columns = ('password',) @@ -183,7 +218,7 @@ class TableModelView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.SqlaTable) list_columns = [ 'table_link', 'database', 'sql_link', 'is_featured', - 'changed_by_', 'changed_on'] + 'changed_by_', 'changed_on', 'perm'] add_columns = [ 'table_name', 'database', 'schema', 'default_endpoint', 'offset', 'cache_timeout'] @@ -246,21 +281,19 @@ class DruidClusterModelView(CaravelModelView, DeleteMixin): # noqa category_icon='fa-database',) + class SliceModelView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Slice) add_template = "caravel/add_slice.html" can_add = False label_columns = { - 'created_by_': 'Creator', 'datasource_link': 'Datasource', } list_columns = [ - 'slice_link', 'viz_type', - 'datasource_link', 'created_by_', 'modified'] - order_columns = utils.list_minus(list_columns, ['created_by_', 'modified']) + 'slice_link', 'viz_type', 'datasource_link', 'creator', 'modified'] edit_columns = [ 'slice_name', 'description', 'viz_type', 'druid_datasource', - 'table', 'dashboards', 'params', 'cache_timeout'] + 'table', 'owners', 'dashboards', 'params', 'cache_timeout'] base_order = ('changed_on', 'desc') description_columns = { 'description': Markup( @@ -269,6 +302,7 @@ class SliceModelView(CaravelModelView, DeleteMixin): # noqa "" "markdown"), } + base_filters = [['id', FilterSlice, lambda: []]] appbuilder.add_view( SliceModelView, @@ -281,10 +315,9 @@ class SliceModelView(CaravelModelView, DeleteMixin): # noqa class SliceAsync(SliceModelView): # noqa list_columns = [ 'slice_link', 'viz_type', - 'created_by_', 'modified', 'icons'] + 'creator', 'modified', 'icons'] label_columns = { 'icons': ' ', - 'created_by_': 'Creator', 'viz_type': 'Type', 'slice_link': 'Slice', } @@ -294,13 +327,9 @@ class SliceAsync(SliceModelView): # noqa class DashboardModelView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Dashboard) - label_columns = { - 'created_by_': 'Creator', - } - list_columns = ['dashboard_link', 'created_by_', 'modified'] - order_columns = utils.list_minus(list_columns, ['created_by_', 'modified']) + list_columns = ['dashboard_link', 'creator', 'modified'] edit_columns = [ - 'dashboard_title', 'slug', 'slices', 'position_json', 'css', + 'dashboard_title', 'slug', 'slices', 'owners', 'position_json', 'css', 'json_metadata'] add_columns = edit_columns base_order = ('changed_on', 'desc') @@ -316,6 +345,7 @@ class DashboardModelView(CaravelModelView, DeleteMixin): # noqa "visible"), 'slug': "To get a readable URL for your dashboard", } + base_filters = [['slice', FilterDashboard, lambda: []]] def pre_add(self, obj): obj.slug = obj.slug.strip() or None @@ -336,9 +366,8 @@ def pre_update(self, obj): class DashboardModelViewAsync(DashboardModelView): # noqa - list_columns = ['dashboard_link', 'created_by_', 'modified'] + list_columns = ['dashboard_link', 'creator', 'modified'] label_columns = { - 'created_by_': 'Creator', 'dashboard_link': 'Dashboard', } @@ -362,11 +391,10 @@ class DruidDatasourceModelView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.DruidDatasource) list_columns = [ 'datasource_link', 'cluster', 'owner', - 'created_by_', 'created_on', + 'creator', 'created_on', 'changed_by_', 'changed_on', 'offset'] - related_views = [ - DruidColumnInlineView, DruidMetricInlineView] + related_views = [DruidColumnInlineView, DruidMetricInlineView] edit_columns = [ 'datasource_name', 'cluster', 'description', 'owner', 'is_featured', 'is_hidden', 'default_endpoint', 'offset', diff --git a/tests/core_tests.py b/tests/core_tests.py index d9a4e95855396..b25c85799cb77 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -32,18 +32,36 @@ class CaravelTestCase(unittest.TestCase): def __init__(self, *args, **kwargs): super(CaravelTestCase, self).__init__(*args, **kwargs) self.client = app.test_client() - role_admin = appbuilder.sm.find_role('Admin') - user = appbuilder.sm.find_user('admin') - if not user: + + utils.init(caravel) + admin = appbuilder.sm.find_user('admin') + if not admin: appbuilder.sm.add_user( 'admin', 'admin',' user', 'admin@fab.org', - role_admin, 'general') + appbuilder.sm.find_role('Admin'), + password='general') - def login(self): - self.client.post( + gamma = appbuilder.sm.find_user('gamma') + if not gamma: + appbuilder.sm.add_user( + 'gamma', 'gamma', 'user', 'gamma@fab.org', + appbuilder.sm.find_role('Gamma'), + password='general') + utils.init(caravel) + + def login_admin(self): + resp = self.client.post( '/login/', data=dict(username='admin', password='general'), follow_redirects=True) + assert 'Welcome' in resp.data.decode('utf-8') + + def login_gamma(self): + resp = self.client.post( + '/login/', + data=dict(username='gamma', password='general'), + follow_redirects=True) + assert 'Welcome' in resp.data.decode('utf-8') class CoreTests(CaravelTestCase): @@ -55,7 +73,6 @@ def __init__(self, *args, **kwargs): .query(models.SqlaTable) .all() )} - utils.init(caravel) self.load_examples() def setUp(self): @@ -68,9 +85,13 @@ def load_examples(self): cli.load_examples(sample=True) def test_save_slice(self): - self.login() + self.login_admin() + + slice_id = ( + db.session.query(models.Slice.id) + .filter_by(slice_name="Energy Sankey") + .scalar()) - slice_id = db.session.query(models.Slice.id).filter_by(slice_name="Energy Sankey").scalar() copy_name = "Test Sankey Save" tbl_id = self.table_ids.get('energy_usage') url = "/caravel/explore/table/{}/?viz_type=sankey&groupby=source&groupby=target&metric=sum__value&row_limit=5000&where=&having=&flt_col_0=source&flt_op_0=in&flt_eq_0=&slice_id={}&slice_name={}&collapsed_fieldsets=&action={}&datasource_name=energy_usage&datasource_id=1&datasource_type=table&previous_viz_type=sankey" @@ -87,7 +108,7 @@ def test_save_slice(self): def test_slices(self): # Testing by running all the examples - self.login() + self.login_admin() Slc = models.Slice urls = [] for slc in db.session.query(Slc).all(): @@ -99,7 +120,7 @@ def test_slices(self): self.client.get(url) def test_dashboard(self): - self.login() + self.login_admin() urls = {} for dash in db.session.query(models.Dashboard).all(): urls[dash.dashboard_title] = dash.url @@ -118,19 +139,28 @@ def test_misc(self): assert self.client.get('/ping').data.decode('utf-8') == "OK" def test_shortner(self): - self.login() + self.login_admin() data = "//caravel/explore/table/1/?viz_type=sankey&groupby=source&groupby=target&metric=sum__value&row_limit=5000&where=&having=&flt_col_0=source&flt_op_0=in&flt_eq_0=&slice_id=78&slice_name=Energy+Sankey&collapsed_fieldsets=&action=&datasource_name=energy_usage&datasource_id=1&datasource_type=table&previous_viz_type=sankey" resp = self.client.post('/r/shortner/', data=data) assert '/r/' in resp.data.decode('utf-8') def test_save_dash(self): - self.login() + self.login_admin() dash = db.session.query(models.Dashboard).filter_by(slug="births").first() data = """{"positions":[{"slice_id":"131","col":8,"row":8,"size_x":2,"size_y":4},{"slice_id":"132","col":10,"row":8,"size_x":2,"size_y":4},{"slice_id":"133","col":1,"row":1,"size_x":2,"size_y":2},{"slice_id":"134","col":3,"row":1,"size_x":2,"size_y":2},{"slice_id":"135","col":5,"row":4,"size_x":3,"size_y":3},{"slice_id":"136","col":1,"row":7,"size_x":7,"size_y":4},{"slice_id":"137","col":9,"row":1,"size_x":3,"size_y":3},{"slice_id":"138","col":5,"row":1,"size_x":4,"size_y":3},{"slice_id":"139","col":1,"row":3,"size_x":4,"size_y":4},{"slice_id":"140","col":8,"row":4,"size_x":4,"size_y":4}],"css":"None","expanded_slices":{}}""" url = '/caravel/save_dash/{}/'.format(dash.id) resp = self.client.post(url, data=dict(data=data)) assert "SUCCESS" in resp.data.decode('utf-8') + def test_gamma(self): + self.login_gamma() + resp = self.client.get('/slicemodelview/list/') + print(resp.data.decode('utf-8')) + assert "List Slice" in resp.data.decode('utf-8') + + resp = self.client.get('/dashboardmodelview/list/') + assert "List Dashboard" in resp.data.decode('utf-8') + SEGMENT_METADATA = [{ "id": "some_id", @@ -188,7 +218,7 @@ def __init__(self, *args, **kwargs): @patch('caravel.models.PyDruid') def test_client(self, PyDruid): - self.login() + self.login_admin() instance = PyDruid.return_value instance.time_boundary.return_value = [ {'result': {'maxTime': '2016-01-01'}}] From 89d1a77281b83a3d86835a70a936b71cee67b3e1 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Wed, 27 Apr 2016 13:41:06 -0700 Subject: [PATCH 06/51] [hotfix] filter_immune_slices fix --- caravel/assets/javascripts/dashboard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/caravel/assets/javascripts/dashboard.js b/caravel/assets/javascripts/dashboard.js index 6d010e1afe4b8..89b96f324d1d5 100644 --- a/caravel/assets/javascripts/dashboard.js +++ b/caravel/assets/javascripts/dashboard.js @@ -94,7 +94,7 @@ var Dashboard = function (dashboardData) { fetchAndRender(); }, refreshExcept: function (slice_id) { - var immune = this.metadata.filter_immune_slice || []; + var immune = this.metadata.filter_immune_slices || []; this.slices.forEach(function (slice) { if (slice.data.slice_id !== slice_id && immune.indexOf(slice.data.slice_id) === -1) { slice.render(); From 54860a874c69e7d13e2bd0c57eb29c9d6f472511 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Wed, 27 Apr 2016 18:12:24 -0700 Subject: [PATCH 07/51] Adding reference to another docker image in READMEM --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 066c272ab675b..e398dff8a9067 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,8 @@ Resources ------------- * [Caravel Google Group](https://groups.google.com/forum/#!forum/airbnb_caravel) * [Gitter (live chat) Channel](https://gitter.im/airbnb/caravel) -* [Docker image](https://hub.docker.com/r/kochalex/caravel/) (community contributed) +* [Docker image 1](https://hub.docker.com/r/kochalex/caravel/) + [Docker image 2](https://hub.docker.com/r/amancevice/caravel/) (community contributed) * [Slides from Strata (March 2016)](https://drive.google.com/open?id=0B5PVE0gzO81oOVJkdF9aNkJMSmM) From 337c9d59ae68778ecea84afee999c9799fcf9d5f Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Wed, 27 Apr 2016 19:38:36 -0700 Subject: [PATCH 08/51] v0.8.9 --- caravel/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/caravel/version.py b/caravel/version.py index 3913c568f8d1e..c7866104f2fe2 100644 --- a/caravel/version.py +++ b/caravel/version.py @@ -1,6 +1,6 @@ VERSION_MAJOR = 0 VERSION_MINOR = 8 -VERSION_BUILD = 8 +VERSION_BUILD = 9 VERSION_INFO = (VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD) VERSION_STRING = "%d.%d.%d" % VERSION_INFO From bd47a29076c4558b907554d97eccb35bf67f8b50 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Wed, 27 Apr 2016 19:43:03 -0700 Subject: [PATCH 09/51] CHANGELOG update --- CHANGELOG.md | 1010 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 847 insertions(+), 163 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 887db010005d5..934459b7df003 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,44 @@ ## Change Log +### 0.8.9 (2016/04/28 02:38 +00:00) +- [89d1a77](https://github.com/airbnb/caravel/commit/89d1a77281b83a3d86835a70a936b71cee67b3e1) [hotfix] filter_immune_slices fix (@mistercrunch) +- [b634d03](https://github.com/airbnb/caravel/commit/b634d03ac3d5ce36b8b44805e18bb26bc0c08be4) Show only Slices and Dashboards users have access to (#404) (@mistercrunch) +- [ab64a26](https://github.com/airbnb/caravel/commit/ab64a26b5b7d5cad88e5fd8f48865a685c339bea) fix img loading overlay in explore view (#403) (@mistercrunch) +- [a2f2ad8](https://github.com/airbnb/caravel/commit/a2f2ad84da3e98d6fa51af670a7d1a4f51826243) add navigation, zoom to treemap (#396) (@andrewhn) +- [c0fb9ee](https://github.com/airbnb/caravel/commit/c0fb9eeca484c00647117645ce620edb6cdaba24) [bugfix] big_number doesn't fadeout on hover (@mistercrunch) +- [42ac46c](https://github.com/airbnb/caravel/commit/42ac46c1e15b6b446491b6d3f7020f59f45e41b4) [bugfix] fix context confusion in Slice (@mistercrunch) +- [7b10759](https://github.com/airbnb/caravel/commit/7b1075990cfb89a6bd12761c12e25dd38e9a169f) [hotfix] periodic refresh dashboard feature had broken caching (@mistercrunch) +- [37be01b](https://github.com/airbnb/caravel/commit/37be01bc1261599dd381181e3dc9eeb4506c31c3) [hotfix] adding cache_key in payload (@mistercrunch) +- [7d90f26](https://github.com/airbnb/caravel/commit/7d90f265548d38c89999867e16b31f5c00ef78fb) Fixing #388 (#391) (@mistercrunch) +- [f1e10d8](https://github.com/airbnb/caravel/commit/f1e10d8d25eba04fd5326d77ee3028bef893b9d2) One more Druid test (#387) (@mistercrunch) +- [b01d378](https://github.com/airbnb/caravel/commit/b01d3784756f8ea5d8e7eab391c1823df22aa38a) Fix the label of the periodic-refresh button (#386) (@x4base) +- [a5f33fe](https://github.com/airbnb/caravel/commit/a5f33fecd81ce1c86859856bdc1a3a4f73b7893c) Adding login call for Druid test (@mistercrunch) +- [f4177bf](https://github.com/airbnb/caravel/commit/f4177bfa9481a04cd3293216ad25fb671dcb6ac0) More examples / tests (#385) (@mistercrunch) +- [d8a2b62](https://github.com/airbnb/caravel/commit/d8a2b621d8b4895560be0eca6529e8a52d62be2b) Periodically update the slices in the dashboard (#374) (@x4base) +- [9a33557](https://github.com/airbnb/caravel/commit/9a335571128a012aa042ba95b44daf21624b9546) Removing forgotten print statement (@mistercrunch) +- [efc6bf4](https://github.com/airbnb/caravel/commit/efc6bf4eb8f9b4619e334c2e896242dc1a08c80b) Redirect application log to stderr, which is picked up by gunicorn. (#335) (@coleslaw) +- [17e711f](https://github.com/airbnb/caravel/commit/17e711fda2659cd025410ec8c4002475164cbb7f) Druid unit tests using Mock (#384) (@mistercrunch) +- [01a8c96](https://github.com/airbnb/caravel/commit/01a8c96820f13639d33fcaeb3faf11f6494eb8f1) Specifying python versions supported in setup.py (#382) (@mistercrunch) +- [d96b634](https://github.com/airbnb/caravel/commit/d96b634ded33353881907ba6c683f45d4ea32aaf) split sunburst breadcrumb names on '_' to apply ' '-dependent wrapping more freqently (#376) (@williaster) +- [afcdcf0](https://github.com/airbnb/caravel/commit/afcdcf06a17319a19001f19e0cccbc7050b251b8) Fixing overwrite and save slice permissions for a give role (#298) (@sid88in) +- [5597eb4](https://github.com/airbnb/caravel/commit/5597eb4cc4f8739016c66a5e18d3875fcca059f7) Fix db upgrade script b4456560d4f3 (#370) (@mistercrunch) +- [3f0171b](https://github.com/airbnb/caravel/commit/3f0171b77be43adbce17a98b0e109e1935a6d96f) Configure Visualizations (#365) (@sid88in) +- [badcd8b](https://github.com/airbnb/caravel/commit/badcd8bfa19ee7725509fe83bdd686a33482845d) Storing version number in only one place (#362) (@mistercrunch) +- [04f1b17](https://github.com/airbnb/caravel/commit/04f1b176c49fc3d005178e18db39d08b8fc7de30) Fixes issue #364 (@mistercrunch) +- [899fe19](https://github.com/airbnb/caravel/commit/899fe19afb5f0ded2e02a054d9c00060ed362590) [WiP] Attempting to support Druid's granularity origin as a hidden url param (#194) (@mistercrunch) +- [f316851](https://github.com/airbnb/caravel/commit/f3168518e2d2dd45fa522d694db2bac433e87ea8) New url default for iframe viz (@mistercrunch) +- [04d769f](https://github.com/airbnb/caravel/commit/04d769ff249e8c9e616133dc17639088438667cb) Some more error handling when rendering the explore view (#361) (@mistercrunch) +- [01c2c7b](https://github.com/airbnb/caravel/commit/01c2c7baf88d3876d2f73ccf802376648797d060) Fixing unique constraint in SqlaTable model (#360) (@mistercrunch) + +### 0.8.8 (2016/04/15 04:25 +00:00) +- [2d420ee](https://github.com/airbnb/caravel/commit/2d420eee25b4c039350c72c5dea30d5eaaff88d8) v0.8.8 (@mistercrunch) +- [1a6757f](https://github.com/airbnb/caravel/commit/1a6757f10a6e68377776cd498a5bb3cba66b7b09) Better type detection for inference of column matrix (#353) (@mistercrunch) +- [63e5e93](https://github.com/airbnb/caravel/commit/63e5e932cb0c6ba80e4f21c1dcf740f54568af5b) Hide password from database 'show' view (#355) (@mistercrunch) +- [e6e8ec9](https://github.com/airbnb/caravel/commit/e6e8ec96205f5a83e09362994a224857a266b8f3) [bugfix] missing redirect when datasource is missing (#352) (@mistercrunch) +- [4b48e9f](https://github.com/airbnb/caravel/commit/4b48e9f1e9c5a4d2474f487d816b58c52accf821) Updating CHANGELOG (@mistercrunch) + ### 0.8.7 (2016/04/14 05:45 +00:00) +- [ffdae19](https://github.com/airbnb/caravel/commit/ffdae19312ce4ad7e0b8a6f75eb8cfa076e4e5ca) v0.8.7 (@mistercrunch) - [e5fabf3](https://github.com/airbnb/caravel/commit/e5fabf39df1b0fadc8b3bac02e21592cd61c3196) Adjusting positioning in the examples (@mistercrunch) - [eb5a417](https://github.com/airbnb/caravel/commit/eb5a41728edc46dbcf837a78a7229a8129ed4dbf) Change the size of the column datasource_name in datasource creation … (#345) (@gyzmau) - [91a3594](https://github.com/airbnb/caravel/commit/91a3594be34c18ea9a7b008b5f3a42149295a5e3) Fixing the thumbs and the galery (#346) (@mistercrunch) @@ -12,6 +50,7 @@ - [8fe5790](https://github.com/airbnb/caravel/commit/8fe5790ec35b00f2f86df8ac4ab7444601ddc539) Don't die on malformed json in the extras field. Give feedback to user (#338) (@deniszgonjanin) - [1e08b3e](https://github.com/airbnb/caravel/commit/1e08b3e8c589fc70d7cd4a14a5a9de49e2a93a45) add tooltips to sankey (#341) (@williaster) - [77828b6](https://github.com/airbnb/caravel/commit/77828b630ab0f151c0377b6d1304c39e1cfdf65a) [bugfix] druid granularity form field should be select2_freeform (@mistercrunch) +- [3c72751](https://github.com/airbnb/caravel/commit/3c72751c26c94e550a6869ff114cef961ce35bcd) [bugfix] druid granularity form field should be select2Sortable (@mistercrunch) - [af417b6](https://github.com/airbnb/caravel/commit/af417b6b58b4b4de4885d7d5ae16dd12626df401) Adding expression column description in the CRUD (@mistercrunch) - [3d1fc99](https://github.com/airbnb/caravel/commit/3d1fc99353557aa42c14e760e01774fd624d7805) Adding not in docs about connecting to dbs over SSL (@mistercrunch) - [1dd4165](https://github.com/airbnb/caravel/commit/1dd416570a3b4f5d431135459e9049e3eaf8f3a8) Json dumps iso date for Table view (#328) (@mistercrunch) @@ -25,6 +64,8 @@ - [c6da811](https://github.com/airbnb/caravel/commit/c6da8117b7d827f98984126d656470d93c9adc8f) Adding missing dep to dev-reqs.txt (@mistercrunch) - [a9af6b1](https://github.com/airbnb/caravel/commit/a9af6b1b9697ad2f5c8808555f0f83b6fb83a3dc) Fix for undefined inner_time_filter on missing granularity in models.SqlaTable (#309) (@antbell) - [fe045ad](https://github.com/airbnb/caravel/commit/fe045ad076d2c7d3810feb49dda84170e1595b6b) New viz: box plot (#312) (@andrewhn) +- [dab31eb](https://github.com/airbnb/caravel/commit/dab31eb66dd9ca8e988e3a7eb03bc13049cc4dbf) Bugfix, link pointing to json (@mistercrunch) +- [da421bb](https://github.com/airbnb/caravel/commit/da421bb9afd02b5919b1a30dac18840bc7ec02ad) Updating TODO (@mistercrunch) - [f8e5d30](https://github.com/airbnb/caravel/commit/f8e5d30e2eb4ef7c7d3312dc57d45bafe4c390cc) Revert previous css commit (@mistercrunch) - [bfd1c87](https://github.com/airbnb/caravel/commit/bfd1c8711bf3de1218eb2f091c013b15d02a883c) Forcing widget overflow to be visible (@mistercrunch) - [542b66e](https://github.com/airbnb/caravel/commit/542b66ef6800a7256ea307445536b0f6b85992e6) Giving credit where credit is due (#307) (@mistercrunch) @@ -39,12 +80,12 @@ - [ef64884](https://github.com/airbnb/caravel/commit/ef64884e532f2ff09a54cb4bc60a52e8534d95a6) [heatmap] fix bug to display this view properly in dashboards. fix bug to display their d3-tip tooltips in dashboards. don't show empty tooltips on heatmap. update logic for margins so they fit dynamically based on label size. (#301) (@williaster) - [0afa5d2](https://github.com/airbnb/caravel/commit/0afa5d2cbaf1f4e009d81fe9c117f28178f3cbba) Added FAQ and db dependencies to docs (@mistercrunch) - [eff0beb](https://github.com/airbnb/caravel/commit/eff0beb195b85f831d14e147a6dbecceb02dbc4e) Optimizing import statements for better readability and to avoid unused, excessive and duplicating imports in the project. (#294) (@sid88in) +- [ee42aa7](https://github.com/airbnb/caravel/commit/ee42aa790aa63abae7fe84b867331c4521536c08) Updating CHANGELOG (@mistercrunch) - [2972122](https://github.com/airbnb/caravel/commit/2972122f40780a5d0f56e5037311764fb7e46781) Adding link to Strata slides (@mistercrunch) - ### 0.8.6 (2016/04/07 21:26 +00:00) -- [d933a21](https://github.com/airbnb/caravel/commit/d933a2121608de06946850792c059ce26be7b473) Prettyfying an image in the docs (@mistercrunch) - [c5dead4](https://github.com/airbnb/caravel/commit/c5dead4791b9d1444c0f42e4c34790160c63bbb6) v0.8.6 (@mistercrunch) +- [d933a21](https://github.com/airbnb/caravel/commit/d933a2121608de06946850792c059ce26be7b473) Prettyfying an image in the docs (@mistercrunch) - [59169bf](https://github.com/airbnb/caravel/commit/59169bfc96a5dd682f551a42def9623aaa1e0b4c) Merge pull request #212 from airbnb/big_number_total (@michellethomas) - [bcca840](https://github.com/airbnb/caravel/commit/bcca840f01547399a56c5273b006b2711d3df171) Adding from __future__ imports (#288) (@mistercrunch) - [90a3b9f](https://github.com/airbnb/caravel/commit/90a3b9f2c4ab2b8bf2888852bbacfd53afeaf85a) Update INTHEWILD.md (@mherr) @@ -93,187 +134,830 @@ - [dafdb51](https://github.com/airbnb/caravel/commit/dafdb51f350778ba26684c3ccbc91c44a444897b) Adding Caravel Docker link to README (@mistercrunch) - [2d0fdf7](https://github.com/airbnb/caravel/commit/2d0fdf7e59ab88651a914835a685cfee61ad68aa) Adding a CHANGELOG.md (@mistercrunch) - ### 0.8.5 (2016/04/01 20:30 +00:00) -- [#234](https://github.com/airbnb/caravel/pull/234) Pin pandas, remove numpy (@mistercrunch) -- [#229](https://github.com/airbnb/caravel/pull/229) Remove "requirements.txt" mention from README (@jmcomets) -- [#225](https://github.com/airbnb/caravel/pull/225) remove power units from sankey diagram (@williaster) -- [#219](https://github.com/airbnb/caravel/pull/219) Add 'Percent of previous' to sunburst vis. Appease npm warnings for data tables and d3.layout.cloud (@williaster) -- [#224](https://github.com/airbnb/caravel/pull/224) Fixing minor typos in the readme (@cyrusstoller) -- [#214](https://github.com/airbnb/caravel/pull/214) Fix an installation bug. (@kim-pham-airbnb) -- [#218](https://github.com/airbnb/caravel/pull/218) Redirecting URL from previous names to caravel (@mistercrunch) -- [#223](https://github.com/airbnb/caravel/pull/223) Fixed typo in README (@thebucknerlife) -- [#222](https://github.com/airbnb/caravel/pull/222) remove duplicate Druid.io section in README.md (@brchristian) -- [#213](https://github.com/airbnb/caravel/pull/213) Fix a bug when loading DruidDatasource. (@kim-pham-airbnb) -- [#204](https://github.com/airbnb/caravel/pull/204) Fixing the order and coverage report for the unit tests (@mistercrunch) -- [#209](https://github.com/airbnb/caravel/pull/209) Fresh screenshots (@mistercrunch) -- [#206](https://github.com/airbnb/caravel/pull/206) Caravel (@mistercrunch) -- [#205](https://github.com/airbnb/caravel/pull/205) fix sunburst error. add `less` to package.json (@williaster) -- [#203](https://github.com/airbnb/caravel/pull/203) Fixing mysql install (@mistercrunch) -- [#202](https://github.com/airbnb/caravel/pull/202) Using setup.py nosetests to run tests (@mistercrunch) -- [#199](https://github.com/airbnb/caravel/pull/199) Fix a few minor bugs (@mistercrunch) -- [#200](https://github.com/airbnb/caravel/pull/200) Add a sankey example (@mistercrunch) -- [#192](https://github.com/airbnb/caravel/pull/192) Fix Druid metadata refresh. (@kim-pham-airbnb) -- [#198](https://github.com/airbnb/caravel/pull/198) A welcome page (@mistercrunch) -- [#197](https://github.com/airbnb/caravel/pull/197) Adding a DRUID_IS_ACTIVE flag and changing nav bar (@NiharikaRay) -- [#196](https://github.com/airbnb/caravel/pull/196) Fixing issues around fk nullable=False on audit fields (@mistercrunch) +- [718de6c](https://github.com/airbnb/caravel/commit/718de6cd50fe522001d32b6cf89578aa11d373cd) v0.8.5 (@mistercrunch) +- [38062f1](https://github.com/airbnb/caravel/commit/38062f160a490ebc6c4c721b0a0fbcc609d47daa) Adding an INTHEWILD file (@mistercrunch) +- [#234](https://github.com/airbnb/caravel/pull/234) Merge pull request #234 from airbnb/pinpandas (@airbnb) +- [481d821](https://github.com/airbnb/caravel/commit/481d821721b1fdbcee92da67096b4b94f3229b5f) Tweaking docs (@mistercrunch) +- [7b111b7](https://github.com/airbnb/caravel/commit/7b111b790e7e896778fe538f825c28b4306e3d82) Adding an OS dependencies section to the install docs (@mistercrunch) +- [ab92e7a](https://github.com/airbnb/caravel/commit/ab92e7a94d211cf8e7f8558a27201c3e83735683) Pin pandas, remove numpy (@mistercrunch) +- [#229](https://github.com/airbnb/caravel/pull/229) Merge pull request #229 from jmcomets/patch-1 (@jmcomets) +- [23319ee](https://github.com/airbnb/caravel/commit/23319eed109a0dac7c15b930c614618bd816cbca) Remove "requirements.txt" mention from README (@jmcomets) +- [#225](https://github.com/airbnb/caravel/pull/225) Merge pull request #225 from airbnb/chris/remove-random-power-units (@airbnb) +- [#219](https://github.com/airbnb/caravel/pull/219) Merge pull request #219 from airbnb/chris/sunburst-conditional-percent (@airbnb) +- [#224](https://github.com/airbnb/caravel/pull/224) Merge pull request #224 from cyrusstoller/typo_fix (@cyrusstoller) +- [#214](https://github.com/airbnb/caravel/pull/214) Merge pull request #214 from airbnb/kim/fix_druid_datasource_bug (@airbnb) +- [0e2c0ce](https://github.com/airbnb/caravel/commit/0e2c0ce8587755219ad64762808333e70936aead) remove power units from sankey diagram (@williaster) +- [807f4dd](https://github.com/airbnb/caravel/commit/807f4dd0e57c57a3a70dece1503a8582b0d272af) Fixing minor typos in the readme (@cyrusstoller) +- [b87d8a0](https://github.com/airbnb/caravel/commit/b87d8a0fbf1960371d38806c72545c6ced8c2640) change 'of previous' to 'of parent' (@williaster) +- [0b3e2e0](https://github.com/airbnb/caravel/commit/0b3e2e00cc431257d71faf4c26858c4f1f99b330) Add 'Percent of previous' to sunburst vis. Appease npm warnings for data tables and d3-sankey. (@williaster) +- [#218](https://github.com/airbnb/caravel/pull/218) Merge pull request #218 from airbnb/redirects (@airbnb) +- [eeba80c](https://github.com/airbnb/caravel/commit/eeba80c487c1c97246247ea6089fc25a8e560d3f) Merge branch 'master' into redirects (@mistercrunch) +- [#223](https://github.com/airbnb/caravel/pull/223) Merge pull request #223 from thebucknerlife/master (@thebucknerlife) +- [#222](https://github.com/airbnb/caravel/pull/222) Merge pull request #222 from brchristian/patch-1 (@brchristian) +- [9595dcf](https://github.com/airbnb/caravel/commit/9595dcff4dd7ee27dda7df5a8f15fcdb9ce37803) Fixed typo in README (@thebucknerlife) +- [58ab4e2](https://github.com/airbnb/caravel/commit/58ab4e2415f03273ddb892fdc0395f5d8e234dd1) remove duplicate Druid.io section in README.md (@brchristian) +- [2b71b72](https://github.com/airbnb/caravel/commit/2b71b7206523273442705229e65fd0d812f4e958) Redirecting URL from previous names to caravel (@mistercrunch) +- [bd9051a](https://github.com/airbnb/caravel/commit/bd9051a16818d77dfe896884b6b337d981774731) Fixing README link (@mistercrunch) +- [6f63b30](https://github.com/airbnb/caravel/commit/6f63b3033f93e47d1f3b7c4a20ab6b1cf00eb772) Dedupping info in README by pointing to docs (@mistercrunch) +- [f659caa](https://github.com/airbnb/caravel/commit/f659caa06bb3b9b12652fc6225c1c80a9ccddc25) Fix an installation bug. (@kim-pham-airbnb) +- [#213](https://github.com/airbnb/caravel/pull/213) Merge pull request #213 from airbnb/kim/fix_druid_datasource_bug (@airbnb) +- [e5553ab](https://github.com/airbnb/caravel/commit/e5553ab45eadc1dc46db72cba18eabaf0d51830d) Fix lint warning. (@kim-pham-airbnb) +- [4a77b70](https://github.com/airbnb/caravel/commit/4a77b70046054f655c292917b8b3de0027d18433) A better fix. (@kim-pham-airbnb) +- [f67c6b5](https://github.com/airbnb/caravel/commit/f67c6b5f46bd5609ef4ec7709c03b33ed0b3f832) Fix a bug when loading DruidDatasource. (@kim-pham-airbnb) +- [fd40742](https://github.com/airbnb/caravel/commit/fd407424add807728593a7115c9aa7900d7f1117) A few replacements related to the rename (@mistercrunch) +- [e1b8719](https://github.com/airbnb/caravel/commit/e1b871982e821d0751f32a8af6e53d65ed68616d) Adding docs link badge (@mistercrunch) +- [b164244](https://github.com/airbnb/caravel/commit/b164244cd85c023cad2da55e0f01b4eb1fbc564e) Renaming forgotten doc file (@mistercrunch) +- [00226cc](https://github.com/airbnb/caravel/commit/00226cce7fbc8404bac63949f63a52ca680293cb) Changing image size, second try (@mistercrunch) +- [3a3d5cd](https://github.com/airbnb/caravel/commit/3a3d5cd7fbb6ab84f8f7f98312315f308fe4b575) Changing image size (@mistercrunch) +- [c6b7720](https://github.com/airbnb/caravel/commit/c6b77206eafc3ca689626f6281a57302ca98157f) Adding build status badge and image to README (@mistercrunch) +- [d885dd3](https://github.com/airbnb/caravel/commit/d885dd34f9ddb24988de7cab71a347bbdebc99fe) Getting coveralls to work (@mistercrunch) +- [54fe234](https://github.com/airbnb/caravel/commit/54fe2348fca994bf381b93b3f0b3a122e13202f2) Dummy commit to trigger travis (@mistercrunch) +- [6e1413d](https://github.com/airbnb/caravel/commit/6e1413d2ddeea0179ab37d70461161ca76150371) Adding dev-reqs.txt to build (@mistercrunch) +- [0296b83](https://github.com/airbnb/caravel/commit/0296b839ec30517fb8920fe81e3ff77a2c261b50) Changing repo token for coveralls (@mistercrunch) +- [#204](https://github.com/airbnb/caravel/pull/204) Merge pull request #204 from airbnb/fixes (@airbnb) +- [#209](https://github.com/airbnb/caravel/pull/209) Merge pull request #209 from airbnb/screenshots (@airbnb) +- [cda1bd5](https://github.com/airbnb/caravel/commit/cda1bd59f948cb96fe61607d3dd0028051a3a52e) Fresh screenshots (@mistercrunch) +- [8e27099](https://github.com/airbnb/caravel/commit/8e27099866c793dc04db9d809a2a5d4ffc9cc839) Fixing the tests for py3 (@mistercrunch) +- [60bce9e](https://github.com/airbnb/caravel/commit/60bce9ed5900abd4f87cabb5483cd02e5175c336) Fixing the order and coverage report for the unit tests (@mistercrunch) +- [#206](https://github.com/airbnb/caravel/pull/206) Merge pull request #206 from airbnb/caravel (@airbnb) +- [619d358](https://github.com/airbnb/caravel/commit/619d35878f928048a3a96865fe1a29857b0f6fe7) [dashed->caravel] Replace in files (@mistercrunch) +- [d48796f](https://github.com/airbnb/caravel/commit/d48796f00e391d3c254aa226e671b0b336e9fbf6) Caravel - renaming files (@mistercrunch) +- [#205](https://github.com/airbnb/caravel/pull/205) Merge pull request #205 from airbnb/chris/sunburst-fix (@airbnb) +- [1aee5b7](https://github.com/airbnb/caravel/commit/1aee5b7801d9d80d2296232dfb11709196964a46) fix sunburst error. add less to package.json because less-loader complains if it's not there. (@williaster) +- [#203](https://github.com/airbnb/caravel/pull/203) Merge pull request #203 from airbnb/fixes (@airbnb) +- [09021aa](https://github.com/airbnb/caravel/commit/09021aacad81840e55900b57419f8a25fca75a7c) Adding LONG to list of numeric types, updating TODO (@mistercrunch) +- [26c7251](https://github.com/airbnb/caravel/commit/26c725171ba8a5a3c706e3ea3faa7fd7b475ac26) Fixing mysql install (@mistercrunch) +- [#202](https://github.com/airbnb/caravel/pull/202) Merge pull request #202 from airbnb/better_tests (@airbnb) +- [301dce2](https://github.com/airbnb/caravel/commit/301dce2dd1e1ac457862354c58ce3b52ca4e9558) Using setup.py nosetests to run tests (@mistercrunch) +- [6dce6df](https://github.com/airbnb/caravel/commit/6dce6df6b28ba1af20ecb4557f95d9b315a7e3d3) JS Lint breaks the build (@mistercrunch) +- [2102e04](https://github.com/airbnb/caravel/commit/2102e04feca95ae335854426107892e3d7d2b4bd) Adding tests for ping and health enpoint (@mistercrunch) +- [2397645](https://github.com/airbnb/caravel/commit/2397645ed45fc038f6079300d673cefd6d90b265) Fix intermitent bug with npm locks (@mistercrunch) +- [#199](https://github.com/airbnb/caravel/pull/199) Merge pull request #199 from airbnb/touchups (@airbnb) +- [#200](https://github.com/airbnb/caravel/pull/200) Merge pull request #200 from airbnb/sankey (@airbnb) +- [48210d5](https://github.com/airbnb/caravel/commit/48210d5275f02fa10ba807b9716de78aa42dc219) Add a sankey example (@mistercrunch) +- [5804991](https://github.com/airbnb/caravel/commit/5804991b19358278f730d3c424b5c795cfdcf4ce) Fix a few minor bugs (@mistercrunch) +- [5be7b03](https://github.com/airbnb/caravel/commit/5be7b03ba4fb5094f64f9cc5aff0100abeee673a) [hotfix] Fix tooltip overflow to be visible outside widget (@mistercrunch) +- [a898c27](https://github.com/airbnb/caravel/commit/a898c27403aebbaf30f6e4d988534954633884cd) Minor CSS for navbar brand to not decorate the link (@mistercrunch) +- [4974715](https://github.com/airbnb/caravel/commit/49747150ae2250df2654842a6580353eaa88aa66) [hotfix] merging 2 migration scripts (@mistercrunch) +- [#192](https://github.com/airbnb/caravel/pull/192) Merge pull request #192 from airbnb/kim/misc_hack (@airbnb) +- [#198](https://github.com/airbnb/caravel/pull/198) Merge pull request #198 from airbnb/welcome (@airbnb) +- [#197](https://github.com/airbnb/caravel/pull/197) Merge pull request #197 from NiharikaRay/master (@NiharikaRay) +- [#196](https://github.com/airbnb/caravel/pull/196) Merge pull request #196 from airbnb/fix_audit (@airbnb) +- [e7bed92](https://github.com/airbnb/caravel/commit/e7bed925191dde972d0eedf5147e93a649f5f884) [hotfix] can't back out of history after entering explore (@mistercrunch) +- [8c0870e](https://github.com/airbnb/caravel/commit/8c0870e6eac82f16d597b1fd75faf6a693ccb69d) Linting to perfection (@mistercrunch) +- [c920355](https://github.com/airbnb/caravel/commit/c9203554e74e9753b561cc1df608d69e134680ab) a welcome page (@mistercrunch) +- [2378fdf](https://github.com/airbnb/caravel/commit/2378fdf9ce83d8f99672c0b5606c72c02ed9ec37) Disable polymorphism in DruidMetric as well (@kim-pham-airbnb) +- [23b6bca](https://github.com/airbnb/caravel/commit/23b6bca89ec70b9543a3c3f49efd4b05c59c9594) Fix style warning (@kim-pham-airbnb) +- [7a7eb33](https://github.com/airbnb/caravel/commit/7a7eb3334834e014aff0adbec2fd558199827c98) Disable Datasource sql polymorphism & Fix refresh Druid metadata. (@kim-pham-airbnb) +- [fee6b3f](https://github.com/airbnb/caravel/commit/fee6b3fafaee3fca18454a70d9c3de2a8ea3a267) Adding a DRUID_IS_ACTIVE flag and changing nav bar +- [0f637bd](https://github.com/airbnb/caravel/commit/0f637bdd2e7207a4d553214d82e20c6cf5f0930c) Fixing issues around fk nullable=False on audit fields (@mistercrunch) +- [10a1edd](https://github.com/airbnb/caravel/commit/10a1eddaa741959989e015158dff9f3c8e95e5ce) Improving the docs build script (@mistercrunch) ### 0.8.4 (2016/03/24 05:26 +00:00) -- [#193](https://github.com/airbnb/caravel/pull/193) Adding favorites for Slices and Dashboards (@mistercrunch) +- [21d1c0a](https://github.com/airbnb/caravel/commit/21d1c0a1b502ed90616f067f95ee09e52a597481) 0.8.4 (@mistercrunch) +- [#193](https://github.com/airbnb/caravel/pull/193) Merge pull request #193 from airbnb/favstar (@airbnb) +- [2362b5a](https://github.com/airbnb/caravel/commit/2362b5a15799f4e443c2204d329a3941317cf1fb) Tunning tooltips (@mistercrunch) +- [7ede732](https://github.com/airbnb/caravel/commit/7ede732892fe1e1e81529e470c8ea31619f9ece7) Adding favorites for Slices and Dashboards (@mistercrunch) +- [5b10b19](https://github.com/airbnb/caravel/commit/5b10b19ed722da40310201c6f25e5b7b33cf7601) Fixing the docs (@mistercrunch) +- [14f298b](https://github.com/airbnb/caravel/commit/14f298b3855de9730e5dd8433714ec83ed192c2a) dashboard bug fixes and better page titles (@mistercrunch) +- [89da51f](https://github.com/airbnb/caravel/commit/89da51f8d790d403bfd8a13ab9b35fd38f09fcc6) Pointing landscape badge to the right branch (@mistercrunch) + +### 0.8.3 (2016/03/23 21:11 +00:00) +- [a244f3a](https://github.com/airbnb/caravel/commit/a244f3aafb8b3e8c29e7cd62743156e6b17f6c6c) Fixing build issues with preventive rm /Users/maxime_beauchemin/.npm/*.lock (@mistercrunch) +- [d5487c6](https://github.com/airbnb/caravel/commit/d5487c6b25b8680d9a70525528a2937122f168d5) 0.8.3 (@mistercrunch) ### 0.8.2 (2016/03/23 20:43 +00:00) -- [#188](https://github.com/airbnb/caravel/pull/188) Introducing a caching layer! (@mistercrunch) +- [9d3bf77](https://github.com/airbnb/caravel/commit/9d3bf7763cc42589702b2f1a7260ebff8f4785c7) Fixing build issues with preventive rm /Users/maxime_beauchemin/.npm/*.lock (@mistercrunch) +- [#188](https://github.com/airbnb/caravel/pull/188) Merge pull request #188 from airbnb/caching (@airbnb) +- [417749f](https://github.com/airbnb/caravel/commit/417749f880ef208eaa633244356ea173103f3770) Explore mode should only expose cache on first load (@mistercrunch) +- [fded04a](https://github.com/airbnb/caravel/commit/fded04a51d14ebb7ca638cc56da3a758775a858c) Hack to get the force refresh in the explore view (@mistercrunch) +- [d8192ec](https://github.com/airbnb/caravel/commit/d8192eca0a07e313d899826495aee498dc61a92c) Introducing a caching layer (@mistercrunch) +- [2d3edf3](https://github.com/airbnb/caravel/commit/2d3edf3a2ed35664d3c461e909a92dbf120d7540) js lint breaks the build (@mistercrunch) ### 0.8.1 (2016/03/21 23:41 +00:00) -- [#191](https://github.com/airbnb/caravel/pull/191) Add week ending and week start to grain (@airbnb) -- [#190](https://github.com/airbnb/caravel/pull/190) Cranking up version numbers (@mistercrunch) -- [#184](https://github.com/airbnb/caravel/pull/184) sunburst improvements (@williaster) -- [#186](https://github.com/airbnb/caravel/pull/186) Adding docstrings ! (@mistercrunch) -- [#181](https://github.com/airbnb/caravel/pull/181) Dynamic time granularity on any datetime column (@mistercrunch) -- [#182](https://github.com/airbnb/caravel/pull/182) more css fixes (@williaster) -- [#178](https://github.com/airbnb/caravel/pull/178) Allowing all extra fields in AuditMixin to be nullable (@mistercrunch) -- [#175](https://github.com/airbnb/caravel/pull/175) refactor dashboard chart html, make several css improvements. (@williaster) +- [#191](https://github.com/airbnb/caravel/pull/191) Merge pull request #191 from airbnb/week-grain (@airbnb) +- [bad3128](https://github.com/airbnb/caravel/commit/bad3128df9562582b6fc3c1995ddbaba196f2d61) Update grain label name +- [48c8a90](https://github.com/airbnb/caravel/commit/48c8a9024785e61ee9339aa783d94a8b9ff9de1b) Fix multi-line statement +- [a9ba47f](https://github.com/airbnb/caravel/commit/a9ba47fe120338326c3f897a38a6179ff6b6a217) Add week ending and week start to grain +- [#190](https://github.com/airbnb/caravel/pull/190) Merge pull request #190 from airbnb/vnum (@airbnb) +- [e17d78e](https://github.com/airbnb/caravel/commit/e17d78e196ba96f99edd2f2cdfa106ba79d16c17) Cranking up version numbers (@mistercrunch) +- [9450c12](https://github.com/airbnb/caravel/commit/9450c12552dda9219044769cf0491fd4dde40d49) note about the previous name in README (@mistercrunch) +- [f01b418](https://github.com/airbnb/caravel/commit/f01b41827e062d4a4790e9f2793b60fdfb0f9851) Adding reqs badge (@mistercrunch) +- [b5f4d3b](https://github.com/airbnb/caravel/commit/b5f4d3b5151ee6c4747f821a4745d33f4f2b73c5) Adding reqs badge (@mistercrunch) +- [28e5a87](https://github.com/airbnb/caravel/commit/28e5a87cd07d8ffb611d85e05d40e8024f44a086) pypi badges (@mistercrunch) +- [10c48f0](https://github.com/airbnb/caravel/commit/10c48f04cde28a71e4d84a6a67273f42e1146615) [renaming] (@mistercrunch) +- [f79aca1](https://github.com/airbnb/caravel/commit/f79aca179632527bc5cbc3d9ba25859d0cc0398a) rename - 2nd phase (@mistercrunch) +- [be6b2fe](https://github.com/airbnb/caravel/commit/be6b2fe5560829e5b0bae2fb6613a8a32dcf4f69) [panoramix] -> [dashed] (@mistercrunch) +- [#184](https://github.com/airbnb/caravel/pull/184) Merge pull request #184 from mistercrunch/chris/sunburst-fixes (@mistercrunch) +- [2b1dcf0](https://github.com/airbnb/caravel/commit/2b1dcf0d2ec1f005a10d516829366e08a2713924) [hotfix] granularity fix (@mistercrunch) +- [987a1af](https://github.com/airbnb/caravel/commit/987a1afbb7d6d379f08f8296691b1ba5b9cae28d) [hotfix] granularity fix (@mistercrunch) +- [f453932](https://github.com/airbnb/caravel/commit/f453932589ef3e14c01bb569b4fa862467696605) [hotfix] druid granularity missing (@mistercrunch) +- [3dc9996](https://github.com/airbnb/caravel/commit/3dc9996e967ad38e15383a8ef54b3759e67ee2e3) hide breadcrumbs on mouseout (@williaster) +- [3197c4b](https://github.com/airbnb/caravel/commit/3197c4b3f9228e566d3d4993b0eed0356ba55867) add utility function for wrapping svg text, apply to sunburst breadcrumbs, and make colors more readable for sunburst. (@williaster) +- [#186](https://github.com/airbnb/caravel/pull/186) Merge pull request #186 from mistercrunch/docstrings (@mistercrunch) +- [1c9c154](https://github.com/airbnb/caravel/commit/1c9c154f0f76c111e79e1c58069ece0a97dcaff2) More docstrings (@mistercrunch) +- [ebf55bf](https://github.com/airbnb/caravel/commit/ebf55bf20dead58b2ceb93d0aad9cbafe2c7e028) Adding docstrings ! (@mistercrunch) +- [3461538](https://github.com/airbnb/caravel/commit/3461538fed4789fb2a917ec0f9eef85129316271) [hotfix] appbuilder modal z-index fix (@mistercrunch) +- [7cdb23f](https://github.com/airbnb/caravel/commit/7cdb23f585fbc0b25e9f6bf34584e5dbe30fa5f7) [hotfix] grouping by grain, filtering on raw expression (@mistercrunch) +- [73daf2f](https://github.com/airbnb/caravel/commit/73daf2f8d1a22956688f2564f7ab18aaae6e7c1a) [hotfix] casting dates for presto grain functions (@mistercrunch) +- [#181](https://github.com/airbnb/caravel/pull/181) Merge pull request #181 from mistercrunch/time_grain (@mistercrunch) +- [0608094](https://github.com/airbnb/caravel/commit/06080945b6db24fe276a35d1e0a9381469e419b5) fix misc sunburst bugs from refactor. (@williaster) +- [61ab06d](https://github.com/airbnb/caravel/commit/61ab06d640cf6e80267ae1af7cd85fb73278d87e) Removing unicode from country data (@mistercrunch) +- [0c045a9](https://github.com/airbnb/caravel/commit/0c045a9e52a181c1ba52e099c02dfd2062303a62) trim '0' groups from sunburst paths to show null groups. add ability to map color to sunburst groupby groups. add fancier breadcrumbs to sunburst. (@williaster) +- [27fb810](https://github.com/airbnb/caravel/commit/27fb810dd7b318e9065babeaf91f31d2ecd617a5) Dynamic time granularity on any datetime column (@mistercrunch) +- [#182](https://github.com/airbnb/caravel/pull/182) Merge pull request #182 from mistercrunch/chris/modal-and-dashboard-css-fixes (@mistercrunch) +- [417b5a5](https://github.com/airbnb/caravel/commit/417b5a5e090283d84ce148383dcaaff2e11f0ad9) Adding linting note to CONTRIBUTING.md (@mistercrunch) +- [#178](https://github.com/airbnb/caravel/pull/178) Merge pull request #178 from mistercrunch/fix_audit (@mistercrunch) +- [1a58b6d](https://github.com/airbnb/caravel/commit/1a58b6d441d0aea93da4613ccee8c8af2800eeed) fix overflow scroll bars on all dashboard charts. make dashboard chart control toggle interaction nicer. make sure user-stylesheets are applied last. remove ace css editor error/warning parsing. make filters look nicer in dashboards. fix some linting. (@williaster) +- [1ab8963](https://github.com/airbnb/caravel/commit/1ab89631b950a1a126b79cf602627eb05a37f624) Adding caching to TODO (@mistercrunch) +- [#175](https://github.com/airbnb/caravel/pull/175) Merge pull request #175 from mistercrunch/chris/css-fixes (@mistercrunch) +- [95b7b97](https://github.com/airbnb/caravel/commit/95b7b9779bb67dc24fd9dab5ff509aea30adb03d) Allowing all extra fields in AuditMixin to be nullable (@mistercrunch) +- [b0fa4bc](https://github.com/airbnb/caravel/commit/b0fa4bc9241192dff85fbd3ef51fca0c81749808) remove unused css (@williaster) +- [49590e2](https://github.com/airbnb/caravel/commit/49590e28e3b97e99131efae95dcd47d72aa45a9e) refactor dashboard chart html, make several css improvements. (@williaster) ### 0.8.0 (2016/03/11 03:33 +00:00) -- [#172](https://github.com/airbnb/caravel/pull/172) Fixing the python and js packaging (@mistercrunch) -- [#171](https://github.com/airbnb/caravel/pull/171) Fixing multiple refresh bug in filter_box (@mistercrunch) -- [#169](https://github.com/airbnb/caravel/pull/169) Fixing the look of select2 components (@mistercrunch) -- [#168](https://github.com/airbnb/caravel/pull/168) Getting travis to build the npm related stuff (@mistercrunch) -- [#166](https://github.com/airbnb/caravel/pull/166) make css theme customization easier by using less for bootstrap themes (@williaster) -- [#163](https://github.com/airbnb/caravel/pull/163) Shipping with CSS templates out of the box (@mistercrunch) -- [#164](https://github.com/airbnb/caravel/pull/164) Improving the docs (@mistercrunch) -- [#165](https://github.com/airbnb/caravel/pull/165) Fixing window resize for explore and standalone (@mistercrunch) -- [#161](https://github.com/airbnb/caravel/pull/161) Add linting to package.json, do all of the linting. (@williaster) -- [#160](https://github.com/airbnb/caravel/pull/160) Fixing the dashed line when using time compare (@mistercrunch) -- [#159](https://github.com/airbnb/caravel/pull/159) Fixing the standalone mode (@mistercrunch) -- [#158](https://github.com/airbnb/caravel/pull/158) Refactor (@mistercrunch) -- [#154](https://github.com/airbnb/caravel/pull/154) Digging into leap year bug and improvming tests (@mistercrunch) -- [#157](https://github.com/airbnb/caravel/pull/157) add button to auto-copy short URLs in /explore page (@williaster) -- [#149](https://github.com/airbnb/caravel/pull/149) Allowing to make certain widgets immune to filter (@mistercrunch) -- [#151](https://github.com/airbnb/caravel/pull/151) Linting (@mistercrunch) -- [#153](https://github.com/airbnb/caravel/pull/153) Improve README (@tay) -- [#139](https://github.com/airbnb/caravel/pull/139) NPMification & Reactification (@williaster, @mistercrunch) -- [#147](https://github.com/airbnb/caravel/pull/147) Tackling Featured Datasets (@mistercrunch) -- [#148](https://github.com/airbnb/caravel/pull/148) Fix typo (@tay) -- [#145](https://github.com/airbnb/caravel/pull/145) Moving files around ... yay! (@mistercrunch) -- [#142](https://github.com/airbnb/caravel/pull/142) A few cosmetic fixes (nvd3 tooltips, buttons, tables) (@mistercrunch) -- [#141](https://github.com/airbnb/caravel/pull/141) A simple base template for npm (@mistercrunch) -- [#140](https://github.com/airbnb/caravel/pull/140) use the latest segment to extract metadata (@dayzzz) -- [#136](https://github.com/airbnb/caravel/pull/136) Improved the bar char to allow for dimensional breakdowns (@mistercrunch) -- [#134](https://github.com/airbnb/caravel/pull/134) Fixing the roles auto maintenance (@mistercrunch) -- [#132](https://github.com/airbnb/caravel/pull/132) [nvd3] fixing the legend toggle bug (@mistercrunch) -- [#131](https://github.com/airbnb/caravel/pull/131) More tests using doctests! (@mistercrunch) -- [#130](https://github.com/airbnb/caravel/pull/130) Logging more (@mistercrunch) -- [#129](https://github.com/airbnb/caravel/pull/129) Renaming Classes related to Druid (@mistercrunch) -- [#127](https://github.com/airbnb/caravel/pull/127) SQL editor, eventually will be tied to a flow to create views (@mistercrunch) -- [#128](https://github.com/airbnb/caravel/pull/128) Allowing definition of css templates (@mistercrunch) -- [#126](https://github.com/airbnb/caravel/pull/126) New viz: Heatmap! (@mistercrunch) -- [#125](https://github.com/airbnb/caravel/pull/125) Consistent colors rendered client side (@mistercrunch) -- [#124](https://github.com/airbnb/caravel/pull/124) A more cohesive color strategy (@mistercrunch) +- [#172](https://github.com/airbnb/caravel/pull/172) Merge pull request #172 from mistercrunch/packaging (@mistercrunch) +- [9e4b38b](https://github.com/airbnb/caravel/commit/9e4b38b5e6174d9f6d8eb662748522a439567fbb) Adjusting css for display not to flicker on dashboard load (@mistercrunch) +- [e2cd14d](https://github.com/airbnb/caravel/commit/e2cd14d3207b582df0a909fd2563ec9d9f4ea405) Fixing the python and js packaging (@mistercrunch) +- [370c5af](https://github.com/airbnb/caravel/commit/370c5af425b226050c9253a0aae38426fcbf1f98) [hotfix] fix utils.markdown function chokes on None (@mistercrunch) +- [e53a1cc](https://github.com/airbnb/caravel/commit/e53a1cc75b7304d157f58bbc6083a7f0667d8a3b) Adding a TODO entry for viz selector (@mistercrunch) +- [#171](https://github.com/airbnb/caravel/pull/171) Merge pull request #171 from mistercrunch/fix_filter (@mistercrunch) +- [8292714](https://github.com/airbnb/caravel/commit/829271417eb9d9c6c53e8c6a293fd7e33af03384) Fixing bug in filter_box (@mistercrunch) +- [#169](https://github.com/airbnb/caravel/pull/169) Merge pull request #169 from mistercrunch/select2-style (@mistercrunch) +- [d6db3a9](https://github.com/airbnb/caravel/commit/d6db3a9cf1de4c9a8eb9237f9471f5751d0bfd79) semicolon (@mistercrunch) +- [c0e4aca](https://github.com/airbnb/caravel/commit/c0e4aca7e47f80c3aa43539c2e0cdc3b951cd4e0) Using dash - instead of _ on filename, making input form-control white (@mistercrunch) +- [9855a60](https://github.com/airbnb/caravel/commit/9855a60013e1a1588e4ce704b912885c60469689) Fixing the look of select2 components (@mistercrunch) +- [#168](https://github.com/airbnb/caravel/pull/168) Merge pull request #168 from mistercrunch/travis_npm (@mistercrunch) +- [b2d72fb](https://github.com/airbnb/caravel/commit/b2d72fbfe120630a77a23b51c4a2a1bcab7eaca1) Tweaks (@mistercrunch) +- [78e01ab](https://github.com/airbnb/caravel/commit/78e01ab0a15f3b30fb2094b587b46b027e8ec590) Caching node_modules (@mistercrunch) +- [454bb10](https://github.com/airbnb/caravel/commit/454bb10f5a89a6b6dab462d191ec0487ebb7b33b) Getting travis to build the npm related stuff (@mistercrunch) +- [ee025b3](https://github.com/airbnb/caravel/commit/ee025b33319be4c1c76c745e118c545652cf0e7e) Fixing REST api and unsortable columns (@mistercrunch) +- [#166](https://github.com/airbnb/caravel/pull/166) Merge pull request #166 from mistercrunch/chris/css (@mistercrunch) +- [9095cd3](https://github.com/airbnb/caravel/commit/9095cd3bca55dc1670c45e1e2045a5611485eae0) update contributing.md to explain updated LESS/CSS customization (@williaster) +- [#163](https://github.com/airbnb/caravel/pull/163) Merge pull request #163 from mistercrunch/css (@mistercrunch) +- [d3f7bbd](https://github.com/airbnb/caravel/commit/d3f7bbd3f15e7bd708292d2aabafaf61dfea6f7a) remove pre-compiled bootstrap themes, use npm/wepack to compile from less variables instead. also fix a few css style bugs. (@williaster) +- [#164](https://github.com/airbnb/caravel/pull/164) Merge pull request #164 from mistercrunch/docs (@mistercrunch) +- [#165](https://github.com/airbnb/caravel/pull/165) Merge pull request #165 from mistercrunch/window_resize (@mistercrunch) +- [9de19b1](https://github.com/airbnb/caravel/commit/9de19b169f3616b8124614ef73f713eb5e86a97f) setResizeOnWindowResize -> bindResizeToWindowResize (@mistercrunch) +- [722c16a](https://github.com/airbnb/caravel/commit/722c16a6e5a0a0e9f7202a527a7d63c47e033d6d) Fixing window resize for explore and standalone (@mistercrunch) +- [5486e5c](https://github.com/airbnb/caravel/commit/5486e5cac8785506bece39a5256a60dd470df2fc) barol -> tirol (@mistercrunch) +- [#161](https://github.com/airbnb/caravel/pull/161) Merge pull request #161 from mistercrunch/chris/eslint (@mistercrunch) +- [0a8ab6c](https://github.com/airbnb/caravel/commit/0a8ab6c499a230eafbbad9ed11f2386833f0202c) Shipping with a CSS template out of the box (@mistercrunch) +- [486fb8b](https://github.com/airbnb/caravel/commit/486fb8bfb452f351a7f3270c93af022a3e02efce) [hotfix] fixing the examples (@mistercrunch) +- [a7e75a2](https://github.com/airbnb/caravel/commit/a7e75a2bc5b4db75e8264e046715fff85d37fe5e) [hotfix] cosmetic fitting for nvd3 line chart overflowing (@mistercrunch) +- [bd29672](https://github.com/airbnb/caravel/commit/bd296720b8ef6e0345053688e1fe04c72961475b) Improving the docs (@mistercrunch) +- [68f8937](https://github.com/airbnb/caravel/commit/68f8937a2e3a7011652afc57de26e86bc17e0fec) lint standalone.js (@williaster) +- [#160](https://github.com/airbnb/caravel/pull/160) Merge pull request #160 from mistercrunch/fix_dashed (@mistercrunch) +- [673f741](https://github.com/airbnb/caravel/commit/673f741aa6084c913749dd3bd1c9ce73cbe2074a) Add linting to package.json, run 'npm run lint' to run (will try to add commit hook later). Do all of the linting... (@williaster) +- [b61ddd0](https://github.com/airbnb/caravel/commit/b61ddd00091230b0a0701f0de4e2e53ce8155709) semicolon (@mistercrunch) +- [e1e1746](https://github.com/airbnb/caravel/commit/e1e17469672f570c0fb264d0ea9971d6dbe25817) Fixing the dashed line when using time compare (@mistercrunch) +- [b6a2521](https://github.com/airbnb/caravel/commit/b6a2521722adc8d57c07e43151b2e46435604a40) hotfix - forgot to add standalone.js (@mistercrunch) +- [#159](https://github.com/airbnb/caravel/pull/159) Merge pull request #159 from mistercrunch/standalone (@mistercrunch) +- [51797ca](https://github.com/airbnb/caravel/commit/51797ca9a5ae6b3e1433448f568dbbcdbaa517ca) Fixing the standalone mode (@mistercrunch) +- [#158](https://github.com/airbnb/caravel/pull/158) Merge pull request #158 from mistercrunch/refactor (@mistercrunch) +- [b44d48c](https://github.com/airbnb/caravel/commit/b44d48c7249c464b3f520dac5e9803c04deb8243) Using vim-jsbeautify (@mistercrunch) +- [a68d742](https://github.com/airbnb/caravel/commit/a68d7428c33fb3f40f8577d466c3c800238a73ee) Javascript refactor (@mistercrunch) +- [e434cbe](https://github.com/airbnb/caravel/commit/e434cbe268a5956946d05e33a4488e1d01206e11) Better filtering (@mistercrunch) +- [#154](https://github.com/airbnb/caravel/pull/154) Merge pull request #154 from mistercrunch/fix_dates (@mistercrunch) +- [4fe89a3](https://github.com/airbnb/caravel/commit/4fe89a38117963ea45c026d1fa62856d47fa60ca) Pinning parsedatetime to 2.0 (@mistercrunch) +- [8c525b7](https://github.com/airbnb/caravel/commit/8c525b7b8ffc4f72fe3ef5a5253784bf7fc4e71c) Hotfix nvd3's secondary xaxis uses the wrong formating (@mistercrunch) +- [#157](https://github.com/airbnb/caravel/pull/157) Merge pull request #157 from mistercrunch/chris/copy-short-url (@mistercrunch) +- [88f9442](https://github.com/airbnb/caravel/commit/88f94422972453ba8a8871cc9eef8fc6b387e075) add button to auto-copy short URLs in /explore page (@williaster) +- [32cd9f5](https://github.com/airbnb/caravel/commit/32cd9f5e73769b5b7253aad7ddad785dd56d8d5d) Updating TODO.md (@mistercrunch) +- [eccf9c2](https://github.com/airbnb/caravel/commit/eccf9c2ac7b1c7f73f610a95059aee7aa95d0419) [hotfix] saving as new bugfix (@mistercrunch) +- [#149](https://github.com/airbnb/caravel/pull/149) Merge pull request #149 from mistercrunch/immune_to_filter (@mistercrunch) +- [be4a7a4](https://github.com/airbnb/caravel/commit/be4a7a407705f82a7c87a9010ff31b4f87e27606) Linting (@mistercrunch) +- [69cfcab](https://github.com/airbnb/caravel/commit/69cfcabb72f6b955974e9c8494b4d4d4bfc11c78) Making Dashboard look better (@mistercrunch) +- [3a38c60](https://github.com/airbnb/caravel/commit/3a38c601e06e6d45ea085775d31513f93befde83) Fixing tooltips (@mistercrunch) +- [22327e2](https://github.com/airbnb/caravel/commit/22327e204f134633b3a1983e1c1cc84e27b85b3d) Transfering all the json in one point (@mistercrunch) +- [bd06f99](https://github.com/airbnb/caravel/commit/bd06f995eefa51d76156727e16125f637c876b1e) Allowing to make certain widgets immune to filter (@mistercrunch) +- [9f809e9](https://github.com/airbnb/caravel/commit/9f809e9f8bd77cc58783ffaab809c4b5d1666ca0) hotfix, readme pointing to the right landscape branch (@mistercrunch) +- [34709c8](https://github.com/airbnb/caravel/commit/34709c8846b35a0df0e4c9bfe0c541afdc95facb) Digging into leap year bug and improvming tests (@mistercrunch) +- [#151](https://github.com/airbnb/caravel/pull/151) Merge pull request #151 from mistercrunch/lint (@mistercrunch) +- [#153](https://github.com/airbnb/caravel/pull/153) Merge pull request #153 from tay/patch-1 (@tay) +- [ca124f2](https://github.com/airbnb/caravel/commit/ca124f271b74111244674615a6059748cbce424e) Improve README (@tay) +- [0a84259](https://github.com/airbnb/caravel/commit/0a842598df457546e2c0a3bf30dc91e2e86edc04) More linting (@mistercrunch) +- [cb46a61](https://github.com/airbnb/caravel/commit/cb46a61728e92a76d1f3f16fea230a5adc567283) Linting (@mistercrunch) +- [8bf629c](https://github.com/airbnb/caravel/commit/8bf629c0b26da6003b73b57bc561adee9ea93c16) [hotfix] fixing explore view (@mistercrunch) +- [#139](https://github.com/airbnb/caravel/pull/139) Merge pull request #139 from mistercrunch/chris/npm-ify2 (@mistercrunch) +- [#147](https://github.com/airbnb/caravel/pull/147) Merge pull request #147 from mistercrunch/npm (@mistercrunch) +- [bc41820](https://github.com/airbnb/caravel/commit/bc4182060a937342028c28572e1574aece14fa07) Rolling back to previous theme until we polish bootswarch.paper (@mistercrunch) +- [58c7b8c](https://github.com/airbnb/caravel/commit/58c7b8c4362f446adae8485a557c9ab1b40ef1c6) Removing js_files and css_files entries from viz.py (@mistercrunch) +- [c304cc4](https://github.com/airbnb/caravel/commit/c304cc493a6c04eb00070278f7be8e8e5013b250) Moving content of assets/readme.md to contributing.md (@mistercrunch) +- [4f4c67c](https://github.com/airbnb/caravel/commit/4f4c67ce15dfeaa57af5260f9925f90006f3a6d3) Moving html assets back to flask template folder (@mistercrunch) +- [c929b2a](https://github.com/airbnb/caravel/commit/c929b2a9c9d8fac095262b623f82815753e279b6) npmify datamaps dependency (@mistercrunch) +- [fd0e680](https://github.com/airbnb/caravel/commit/fd0e680cf0a26c6274836bc49b7a9f0c0f686cb7) Cleaning up assets/vendors (@mistercrunch) +- [70e1aa3](https://github.com/airbnb/caravel/commit/70e1aa37e32bb4f6bd22097f335dba73b25cc2a4) Adding missing fonts (@mistercrunch) +- [e4e7b91](https://github.com/airbnb/caravel/commit/e4e7b911c585517254bf5d87c8adf2020c96c16a) Fixing dashboard.html (@mistercrunch) +- [d8409c1](https://github.com/airbnb/caravel/commit/d8409c1e0a8ff67997b6c28265eb5bdfcf3e65b5) Fixing table and pivot_table (@mistercrunch) +- [8dcd5e0](https://github.com/airbnb/caravel/commit/8dcd5e062871125e37e1c575f143c720aebf5207) Tackling Featured Datasets (@mistercrunch) +- [#148](https://github.com/airbnb/caravel/pull/148) Merge pull request #148 from tay/patch-1 (@tay) +- [7c96a2e](https://github.com/airbnb/caravel/commit/7c96a2eddf509933699897f4a10390098e3d0dde) Fix typo (@tay) +- [#145](https://github.com/airbnb/caravel/pull/145) Merge pull request #145 from mistercrunch/npm (@mistercrunch) +- [e70542d](https://github.com/airbnb/caravel/commit/e70542d743c13631491a8d3167eb8c8f4c0be01e) NPMify sql.html (@mistercrunch) +- [171301b](https://github.com/airbnb/caravel/commit/171301b6cfc46f186ac74a388229f108e6e151f9) Moving files around (@mistercrunch) +- [3e83460](https://github.com/airbnb/caravel/commit/3e834603fcdcd09fd2509c339b60a916900d157e) Remove base.entry.js, declare all JS dependencies in explore using npm. Pin older select2 version to enable select2Sortable. (@williaster) +- [#142](https://github.com/airbnb/caravel/pull/142) Merge pull request #142 from mistercrunch/npm (@mistercrunch) +- [df8ea52](https://github.com/airbnb/caravel/commit/df8ea5287b0d81fa70ab48707e133db42be5bca7) Adjustments based on comment (@mistercrunch) +- [9552d09](https://github.com/airbnb/caravel/commit/9552d09b856722a39a12eb07e4b944340af9a17f) A few cosmetic fixes (nvd3 tooltips, buttons, tables) (@mistercrunch) +- [#141](https://github.com/airbnb/caravel/pull/141) Merge pull request #141 from mistercrunch/npm (@mistercrunch) +- [d582efe](https://github.com/airbnb/caravel/commit/d582efe76b2431863ba2ffa445f74329ef4bbfd4) Fixing 2 links (@mistercrunch) +- [f5e0ed7](https://github.com/airbnb/caravel/commit/f5e0ed7239ecf3b404e56d6d7352079e915648d1) A simple base template for npm (@mistercrunch) +- [79e6fc9](https://github.com/airbnb/caravel/commit/79e6fc986db59fcecac0fca26086257134483efc) huge npm refactor of all visualizations. table views are broken due to broken shimming for jquery/jquery-ui, dashboards are broken due to refactor of explore views. (@williaster) +- [#140](https://github.com/airbnb/caravel/pull/140) Merge pull request #140 from dayzzz/segment_selection (@dayzzz) +- [5c38fc7](https://github.com/airbnb/caravel/commit/5c38fc731a142ea8b98f5345a2d23bf91411f3b1) use the latest segment to extract metadata +- [af34549](https://github.com/airbnb/caravel/commit/af345493773c750d959a7eab5466c33968b9e777) partial refactor of explore page, visualizations not managed with webpack yet. (@williaster) +- [0eb3dcd](https://github.com/airbnb/caravel/commit/0eb3dcd81fdfd3a71549f0fe5ae4c9110af61c35) Update readme.md +- [f40c024](https://github.com/airbnb/caravel/commit/f40c024fdafc8e43e259c379406e708c390d3dd2) Add npm package.json and setup webpack to transpile ES6/JSX and compile JS files for frontend refactor. See readme.md in assets/ for npm setup instructions and visit the panoramix home page for a React sandbox. (@williaster) +- [#136](https://github.com/airbnb/caravel/pull/136) Merge pull request #136 from mistercrunch/barbar (@mistercrunch) +- [7e60b14](https://github.com/airbnb/caravel/commit/7e60b144481f6cc2519e82109b559f00bcfb0ed2) Trying to fix a unicode bug with presto (@mistercrunch) +- [e42d1a1](https://github.com/airbnb/caravel/commit/e42d1a1fc5c576722bcb50ff1f70e1c35aa04111) Improved the bar char to allow for dimensional breakdowns (@mistercrunch) +- [6f4397c](https://github.com/airbnb/caravel/commit/6f4397c7d7ea8889e97f2438edac3843125b9c80) Fixing druid metadata import (@mistercrunch) +- [1f41ce3](https://github.com/airbnb/caravel/commit/1f41ce3a7d1c8108a2e688f2305a7c16f1aaed16) CLI adding refresh_druid command (@mistercrunch) +- [d970e89](https://github.com/airbnb/caravel/commit/d970e896ad3b0b8b1e51b2455d90be3f2dc59939) bugfix - Cluster -> DruidCluster (@mistercrunch) +- [5686dc0](https://github.com/airbnb/caravel/commit/5686dc08650d56509b8a56757ef4754c96d27efa) Bugfix Column -> DruidColumn (@mistercrunch) +- [80651a5](https://github.com/airbnb/caravel/commit/80651a5dc22fe784b4abcec69a365a1568fe8457) More logging (@mistercrunch) +- [2c43968](https://github.com/airbnb/caravel/commit/2c4396882e335179248fd05162a4d030cc0f98e8) More verbose druid metadata refresh (@mistercrunch) +- [ba28fbb](https://github.com/airbnb/caravel/commit/ba28fbbd6b4faf41595af5d19d95e41252ccd404) Fixing link to cluster view (@mistercrunch) +- [#134](https://github.com/airbnb/caravel/pull/134) Merge pull request #134 from mistercrunch/fix_init (@mistercrunch) +- [53a0f81](https://github.com/airbnb/caravel/commit/53a0f81985ef313946cfb9c38a86f342eeba7be6) Fixing the roles auto maintenance (@mistercrunch) +- [baac8c4](https://github.com/airbnb/caravel/commit/baac8c44a549f03804a9969240e43cfd47bb6f08) Desperatly changing view name to avoid proxy odd bug (@mistercrunch) +- [88b8f73](https://github.com/airbnb/caravel/commit/88b8f73489d0fc7d10a17dcfdb2fd72d55add827) Not specifying flask-login version, letting flask-appbuilder do it (@mistercrunch) +- [e02702d](https://github.com/airbnb/caravel/commit/e02702d320365168ca86ea5e1de92328cac57b4c) Pinning appbuilder to 1.6 (@mistercrunch) +- [e39d6db](https://github.com/airbnb/caravel/commit/e39d6dbc3d05de00a960114b573ddf7b873112ef) Hack to log dashboard_ids when slugs are used (@mistercrunch) +- [#132](https://github.com/airbnb/caravel/pull/132) Merge pull request #132 from mistercrunch/fix_legend (@mistercrunch) +- [c7ecb33](https://github.com/airbnb/caravel/commit/c7ecb331e455a9621dd7c6baa05affbdf3767cfd) [nvd3] fixing the legend toggle bug (@mistercrunch) +- [ec05668](https://github.com/airbnb/caravel/commit/ec0566860ad14c2872f6eac10876168448a66792) Fixing legend toggle in nvd3 charts (@mistercrunch) +- [#131](https://github.com/airbnb/caravel/pull/131) Merge pull request #131 from mistercrunch/moretests (@mistercrunch) +- [e039547](https://github.com/airbnb/caravel/commit/e039547762a8ed4abbdbab722d07dd7fce6d09e2) More tests using doctests (@mistercrunch) +- [#130](https://github.com/airbnb/caravel/pull/130) Merge pull request #130 from mistercrunch/log_more (@mistercrunch) +- [#129](https://github.com/airbnb/caravel/pull/129) Merge pull request #129 from mistercrunch/rename_druid_classes (@mistercrunch) +- [b1f88a5](https://github.com/airbnb/caravel/commit/b1f88a53ad6f0b3f0e480cfa9aa2a4769832dbd9) Logging more (@mistercrunch) +- [32442aa](https://github.com/airbnb/caravel/commit/32442aa6b7449c6ed2fdf2830ed535cc823ca015) Adding Metric class as well (@mistercrunch) +- [b18d117](https://github.com/airbnb/caravel/commit/b18d117852d2e5d5cb8ba81dc4e3d8805d3fd4f5) Renaming Classes related to Druid (@mistercrunch) +- [460f6cb](https://github.com/airbnb/caravel/commit/460f6cbed53ad37d550868cb193c3cca02633a63) Updated TODO and color bugfix (@mistercrunch) +- [61b3a85](https://github.com/airbnb/caravel/commit/61b3a85d7a69aee99b92bf56701771a05f29634a) improving the sql view (@mistercrunch) +- [98ba323](https://github.com/airbnb/caravel/commit/98ba32399e6fa58f45b4486e0535b8916eab51ce) Polish (@mistercrunch) +- [b10487c](https://github.com/airbnb/caravel/commit/b10487cf39bf3a6ed37a02f9fb7cc60b6bff970e) Fixing the overflow for tables (@mistercrunch) +- [#127](https://github.com/airbnb/caravel/pull/127) Merge pull request #127 from mistercrunch/sql (@mistercrunch) +- [50d7d0f](https://github.com/airbnb/caravel/commit/50d7d0fb5ba455c226197be4410d8e71bf22218e) Making progress (@mistercrunch) +- [3b9b81f](https://github.com/airbnb/caravel/commit/3b9b81f93e22e1e62dfb11b286e7daaaba30ebfb) Getting the back button to work (@mistercrunch) +- [9c47415](https://github.com/airbnb/caravel/commit/9c47415d62b24cb15b685073e2dfe027649da681) Error handling and table links (@mistercrunch) +- [e8ae49d](https://github.com/airbnb/caravel/commit/e8ae49d18155215c8f7c1b40fa1d2dda64832edd) An airpal like interface (@mistercrunch) +- [354ef9b](https://github.com/airbnb/caravel/commit/354ef9b4bb6bb5c5de7fe9cde94d1a9837a7124a) Polishing the CSS template feature (@mistercrunch) +- [d276be8](https://github.com/airbnb/caravel/commit/d276be8d5080c793d1ec1e9a95861d67ff6e4a01) Moving CSS templates link to Sources (@mistercrunch) +- [#128](https://github.com/airbnb/caravel/pull/128) Merge pull request #128 from mistercrunch/css_templates (@mistercrunch) +- [dbbedc3](https://github.com/airbnb/caravel/commit/dbbedc3ba4d814f2ed18113486fc3443b19cff8e) Allowing definition of css templates (@mistercrunch) +- [9838fbb](https://github.com/airbnb/caravel/commit/9838fbb107950a6ea5e4c0615ade6df670dbeb9f) Fixing bad merge (@mistercrunch) +- [95aa6e0](https://github.com/airbnb/caravel/commit/95aa6e00fa941b91418e74275b1135f090debd60) [fix] can't back out with back button (@mistercrunch) +- [#126](https://github.com/airbnb/caravel/pull/126) Merge pull request #126 from mistercrunch/heatmap (@mistercrunch) +- [4e6e20d](https://github.com/airbnb/caravel/commit/4e6e20daa4f398cdaf1c09c77afed3fbae658905) Allowing for normalizing across x or y (@mistercrunch) +- [44b43a3](https://github.com/airbnb/caravel/commit/44b43a352ab73ea97602ba948cd759207cc78ae4) Adding vid to README.md (@mistercrunch) +- [0714dc6](https://github.com/airbnb/caravel/commit/0714dc62d0a6ffef61aff0d0641a1571f1740e74) Added smoothening option (@mistercrunch) +- [40b28d0](https://github.com/airbnb/caravel/commit/40b28d0afa5896237162f45763296e462b083fac) Allowing different color schemes (@mistercrunch) +- [09c7724](https://github.com/airbnb/caravel/commit/09c77242fc923856425f0571558dcfbe911eaafd) Working without zoom (@mistercrunch) +- [0f58c60](https://github.com/airbnb/caravel/commit/0f58c609d010aa20a2f411e21a6a3738db456349) Heatmap (@mistercrunch) +- [a2f14b3](https://github.com/airbnb/caravel/commit/a2f14b37873fb86943c98bdf2244665f660ab5bf) getting something to show (@mistercrunch) +- [b91460d](https://github.com/airbnb/caravel/commit/b91460db4f86e07b2b97e500a8b4a61ba0fe96b7) [bugfix] sunburst text shows behind arcs (@mistercrunch) +- [#125](https://github.com/airbnb/caravel/pull/125) Merge pull request #125 from mistercrunch/colors_perfect (@mistercrunch) +- [a3c2ee0](https://github.com/airbnb/caravel/commit/a3c2ee0e1d4c9045ea4ce84259842b36b03368f0) Consistent colors rendered client side (@mistercrunch) +- [e6920f8](https://github.com/airbnb/caravel/commit/e6920f8066bdbd7694eccdb3b8a88d5fc694c4da) CRUD views improvements (@mistercrunch) +- [0ca59bc](https://github.com/airbnb/caravel/commit/0ca59bcc210452e5b2b43fe9469e01316e7f29bd) Curating list of fields (@mistercrunch) +- [#124](https://github.com/airbnb/caravel/pull/124) Merge pull request #124 from mistercrunch/colors (@mistercrunch) +- [32e4b9f](https://github.com/airbnb/caravel/commit/32e4b9f2bcd957beebbf728ecaf70e0ebcbb4479) A more cohesive color strategy (@mistercrunch) ### 0.7.0 (2016/01/23 15:16 +00:00) -- [#123](https://github.com/airbnb/caravel/pull/123) Adding a color factory (@mistercrunch) -- [#122](https://github.com/airbnb/caravel/pull/122) Adding Parallel coordinates viz (@mistercrunch) -- [#121](https://github.com/airbnb/caravel/pull/121) Iframe (@mistercrunch) -- [#120](https://github.com/airbnb/caravel/pull/120) Slice information can be displayed in dashboard (@mistercrunch) -- [#117](https://github.com/airbnb/caravel/pull/117) Doing some refactoring (@mistercrunch) -- [#115](https://github.com/airbnb/caravel/pull/115) Providing options for Y axis number formating (@mistercrunch) -- [#112](https://github.com/airbnb/caravel/pull/112) Adding an URL shortner (@mistercrunch) -- [#113](https://github.com/airbnb/caravel/pull/113) Prettier checkboxes (@mistercrunch) -- [#111](https://github.com/airbnb/caravel/pull/111) Loading another example amazing dash (@mistercrunch) -- [#109](https://github.com/airbnb/caravel/pull/109) Getting browser history to work on the explore view (@mistercrunch) -- [#108](https://github.com/airbnb/caravel/pull/108) pulling to the front on hover (@BradBaker) -- [#104](https://github.com/airbnb/caravel/pull/104) simplifying tooltip code (@BradBaker) -- [#105](https://github.com/airbnb/caravel/pull/105) adding stagger for all charts that have a date axis (@BradBaker) -- [#102](https://github.com/airbnb/caravel/pull/102) Fix for 2-axis charts where it shrinks them a little bit (@bradmbaker, @BradBaker) -- [#101](https://github.com/airbnb/caravel/pull/101) Add a Gitter chat badge to README.md (@gitter-badger) -- [#100](https://github.com/airbnb/caravel/pull/100) Update tooltips with new classes (@bradmbaker) -- [#99](https://github.com/airbnb/caravel/pull/99) Time resampling as in Pandas (@mistercrunch) -- [#98](https://github.com/airbnb/caravel/pull/98) Change Scaling to Operate on SVG instead of Div (@bradmbaker) -- [#96](https://github.com/airbnb/caravel/pull/96) Adding a filter box widget (@mistercrunch) -- [#95](https://github.com/airbnb/caravel/pull/95) Working on docs (@mistercrunch) -- [#94](https://github.com/airbnb/caravel/pull/94) Massive js refactor + Dashboard filters (@mistercrunch) -- [#93](https://github.com/airbnb/caravel/pull/93) Controller (@mistercrunch) -- [#92](https://github.com/airbnb/caravel/pull/92) Allowing not to group by on table view (@mistercrunch) -- [#91](https://github.com/airbnb/caravel/pull/91) Exports (@mistercrunch) -- [#90](https://github.com/airbnb/caravel/pull/90) A basic squeleton for the docs (@mistercrunch) -- [#89](https://github.com/airbnb/caravel/pull/89) Featured datasets (@michellethomas) -- [#87](https://github.com/airbnb/caravel/pull/87) fixing a few bugs with tool tip overflow (@BradBaker) -- [#88](https://github.com/airbnb/caravel/pull/88) World Map viz with bubbles (@mistercrunch) -- [#86](https://github.com/airbnb/caravel/pull/86) adjusting date formats (@BradBaker) -- [#85](https://github.com/airbnb/caravel/pull/85) Adding sankey diagrams (@mistercrunch) -- [#84](https://github.com/airbnb/caravel/pull/84) Adding directed force layout viz (@mistercrunch) -- [#83](https://github.com/airbnb/caravel/pull/83) Big JS refactor (@mistercrunch) -- [#82](https://github.com/airbnb/caravel/pull/82) letting tooltips in the dashboard overflow (@BradBaker) -- [#81](https://github.com/airbnb/caravel/pull/81) Slightly better layout for explore page (@mistercrunch) -- [#80](https://github.com/airbnb/caravel/pull/80) Checkboxes everywhere (@mistercrunch) -- [#79](https://github.com/airbnb/caravel/pull/79) Cleanup around multiple select fields (@mistercrunch) +- [012a651](https://github.com/airbnb/caravel/commit/012a651586b0332b6f7753111fd008f7597019b5) v0.7.0 (@mistercrunch) +- [#123](https://github.com/airbnb/caravel/pull/123) Merge pull request #123 from mistercrunch/color_factory (@mistercrunch) +- [2df3cfd](https://github.com/airbnb/caravel/commit/2df3cfd774f312a6333dfb47bd31646b41a542e6) Adding a color factory (@mistercrunch) +- [#122](https://github.com/airbnb/caravel/pull/122) Merge pull request #122 from mistercrunch/para (@mistercrunch) +- [73989f4](https://github.com/airbnb/caravel/commit/73989f41ac0f6eb6f07b92b3b101c6f13b0be493) Adding Parallel coordinates viz (@mistercrunch) +- [2885227](https://github.com/airbnb/caravel/commit/2885227050a865cca8c4d72f77d162bce10a3987) Autodocs (@mistercrunch) +- [#121](https://github.com/airbnb/caravel/pull/121) Merge pull request #121 from mistercrunch/iframe (@mistercrunch) +- [5f88068](https://github.com/airbnb/caravel/commit/5f880682c0887c5ef8e34168ad40da377a474cda) Fixing a bug (@mistercrunch) +- [5f9f95b](https://github.com/airbnb/caravel/commit/5f9f95b717ee54f20e43e72a1e2d87a888e04c8a) Adding a basic ifram viz (@mistercrunch) +- [#120](https://github.com/airbnb/caravel/pull/120) Merge pull request #120 from mistercrunch/sliceinfo (@mistercrunch) +- [110be35](https://github.com/airbnb/caravel/commit/110be3551a66f792a1a65ffbe035c530f2c4b63e) bugfix in explore view (@mistercrunch) +- [8d40717](https://github.com/airbnb/caravel/commit/8d40717a9226bef08d75766ab7e80b3b2e2179a6) Adding description for new field in crud (@mistercrunch) +- [e40f5bc](https://github.com/airbnb/caravel/commit/e40f5bc6d6db98c985156dd9496279b20d0b6c7a) Displaying markdown slice info on dash view (@mistercrunch) +- [ba1dfcb](https://github.com/airbnb/caravel/commit/ba1dfcb8456e225c055069ce021f2333c6920445) Refactor + timeformating options (@mistercrunch) +- [b594b8a](https://github.com/airbnb/caravel/commit/b594b8a93b6c8420ae6359dffe400cf227a98cae) BigNumber tweaks (@mistercrunch) +- [#117](https://github.com/airbnb/caravel/pull/117) Merge pull request #117 from mistercrunch/refact (@mistercrunch) +- [085430c](https://github.com/airbnb/caravel/commit/085430cb53864f124a0c0b3ec230b01165546898) Doing some refactoring (@mistercrunch) +- [#115](https://github.com/airbnb/caravel/pull/115) Merge pull request #115 from mistercrunch/y_format (@mistercrunch) +- [d9e4c75](https://github.com/airbnb/caravel/commit/d9e4c7512280654e54cb5e30a89ca3189b333a22) Parameterizing the number of gunicorn workers (@mistercrunch) +- [976b777](https://github.com/airbnb/caravel/commit/976b7772f0716fb063a88fdae1c92a1128c41056) Weeding some useless lines (@mistercrunch) +- [02e519a](https://github.com/airbnb/caravel/commit/02e519ab61814a1094cd2a4665c9a66e5ef98237) Fixing the bug where filters don't apply on load (@mistercrunch) +- [5910bf0](https://github.com/airbnb/caravel/commit/5910bf007acd15676d14ece67801cb85355f4abd) Providing options for Y axis number formating (@mistercrunch) +- [69a385b](https://github.com/airbnb/caravel/commit/69a385bade2d6e5e35e45289ff25574b3f4b5fe3) [hotfix] date casting (@mistercrunch) +- [#112](https://github.com/airbnb/caravel/pull/112) Merge pull request #112 from mistercrunch/url_shortner (@mistercrunch) +- [#113](https://github.com/airbnb/caravel/pull/113) Merge pull request #113 from mistercrunch/check (@mistercrunch) +- [#111](https://github.com/airbnb/caravel/pull/111) Merge pull request #111 from mistercrunch/load_ex_dash (@mistercrunch) +- [df797c0](https://github.com/airbnb/caravel/commit/df797c0ae0e4bd8fb720ac7d3dcb6a2e8f8e1ecb) Prettier checkboxes (@mistercrunch) +- [f4ef1c0](https://github.com/airbnb/caravel/commit/f4ef1c02a27a934ccb63f8252a82fd6e6d8c01c7) Adding an URL shortner (@mistercrunch) +- [a3727fc](https://github.com/airbnb/caravel/commit/a3727fc0919dd5004f13cc26848bd1fed9a72d60) Making sqlite work (@mistercrunch) +- [ef5511c](https://github.com/airbnb/caravel/commit/ef5511cccf68b170a71fcbc6b884b84e928dc7f0) Getting stuff to load (@mistercrunch) +- [a38a8d4](https://github.com/airbnb/caravel/commit/a38a8d476e04c242a154b9c509ae1b68f55e0878) Loading another example amazing dash (@mistercrunch) +- [d726bd0](https://github.com/airbnb/caravel/commit/d726bd0e0512cbfe8fda92c8e717bcf369549d62) NVD3 form optinos for stacked/expanded/grouped ... (@mistercrunch) +- [7982dee](https://github.com/airbnb/caravel/commit/7982dee83495584de18a7ca6cd8085c8c4eb1c58) Updating the CONTRIBUTING.md (@mistercrunch) +- [4f7a5f3](https://github.com/airbnb/caravel/commit/4f7a5f33bb57ea532d6cded8399f4cad623d9356) Refactoring (@mistercrunch) +- [b6b8d04](https://github.com/airbnb/caravel/commit/b6b8d046c86e8fbc0121eddb2cf334c1d4d3b768) Tunning timeseries settings (@mistercrunch) +- [089a8c6](https://github.com/airbnb/caravel/commit/089a8c677cc911e62880c8a29d28e835adc3c707) [hotfix] no data (@mistercrunch) +- [f434f3c](https://github.com/airbnb/caravel/commit/f434f3c7561b060f8b48646b2adfe25cb19df084) Raising earlier on no data (@mistercrunch) +- [ffe9a68](https://github.com/airbnb/caravel/commit/ffe9a68712a36634893681f1910f36fe6dd89197) Adding a picture for who dataset (@mistercrunch) +- [2b01340](https://github.com/airbnb/caravel/commit/2b01340bb61a928f29d33f9e1cb5b74c8093b94d) Allowing TableViz to show time granularity (@mistercrunch) +- [0e0ae7b](https://github.com/airbnb/caravel/commit/0e0ae7bc929b126c57a4f873690ab5c20af0ac68) Increasing page_size to 500 in crud (@mistercrunch) +- [4941565](https://github.com/airbnb/caravel/commit/4941565a419e554b26e9f57e52bd15361c297693) Making TableViz support a time_series (@mistercrunch) +- [299ad09](https://github.com/airbnb/caravel/commit/299ad095760f1ed6d1f43549a4c979df508bd624) [bugfix] columns dupplicated in Druid df (@mistercrunch) +- [552a309](https://github.com/airbnb/caravel/commit/552a3094df104eb42c597153d35dd481a4dcf0ca) Getting the markdown to do what it should (@mistercrunch) +- [2b0c550](https://github.com/airbnb/caravel/commit/2b0c550a0bb67a4ab4e46e3e9fd4ee168e5d38b5) Improvments to load_examples (@mistercrunch) +- [2b69912](https://github.com/airbnb/caravel/commit/2b69912c460fcc453f39e46e5d51f0c0ae828379) Minor bug fixes (@mistercrunch) +- [ceb0dc1](https://github.com/airbnb/caravel/commit/ceb0dc198562043b4661218e8747782421f42709) Touchups on field list (@mistercrunch) +- [ed96f9b](https://github.com/airbnb/caravel/commit/ed96f9b92fa052909f12612a5ff1ceb86fe5afb8) Fixing the word bad assumptions about field ordering (@mistercrunch) +- [4aa70d0](https://github.com/airbnb/caravel/commit/4aa70d0f43fcf919670995a3acf348c109b52a25) Ordering columns in the Druid pandas df (@mistercrunch) +- [6c92fa4](https://github.com/airbnb/caravel/commit/6c92fa471d23196e3e319fbfb82728ef18e38386) some error handling for WordCloud (@mistercrunch) +- [3efaec8](https://github.com/airbnb/caravel/commit/3efaec8983dd77ee728d5ad21368d3d168e05735) Minor fix + TODO alterations (@mistercrunch) +- [#109](https://github.com/airbnb/caravel/pull/109) Merge pull request #109 from mistercrunch/hash_change (@mistercrunch) +- [f0cdf43](https://github.com/airbnb/caravel/commit/f0cdf4318d712c35ab38c96c31fc7b85c9334e57) Getting browser history to work on the explore view (@mistercrunch) +- [#108](https://github.com/airbnb/caravel/pull/108) Merge pull request #108 from bradmbaker/brad_baker_final_fix_for_tooltip (@bradmbaker) +- [7fb845f](https://github.com/airbnb/caravel/commit/7fb845f38d630fc3234276283bc05d9730ab72e4) pulling to the front on hover (@BradBaker) +- [af55285](https://github.com/airbnb/caravel/commit/af5528519dd6c3b06d2df1eb197dbf3b25aa801e) Made json csv and standalone button more dynamic (@mistercrunch) +- [4c8b275](https://github.com/airbnb/caravel/commit/4c8b275f8837b23dd1a606fac9d959addb458165) Minor tweaks (@mistercrunch) +- [a4c7964](https://github.com/airbnb/caravel/commit/a4c79648a9f4fb0f2b8a16d34852c6e2c802f88a) Minor cosmetic changes (@mistercrunch) +- [fc038a6](https://github.com/airbnb/caravel/commit/fc038a6e78a3f9fb68665df155d16c146aa93af5) JS bugfixes (@mistercrunch) +- [#104](https://github.com/airbnb/caravel/pull/104) Merge pull request #104 from bradmbaker/brad_baker_fixing_tooltips_v2 (@bradmbaker) +- [#105](https://github.com/airbnb/caravel/pull/105) Merge pull request #105 from bradmbaker/brad_baker_adding_stagger_to_all_date_charts (@bradmbaker) +- [99aa6f7](https://github.com/airbnb/caravel/commit/99aa6f71e22ef693736da04218151c3e3cf633f6) adding stagger for all charts that have a date axis (@BradBaker) +- [e4f45ac](https://github.com/airbnb/caravel/commit/e4f45ac2858d65473180745c6de6534f1a486215) simplifying tooltip code (@BradBaker) +- [#102](https://github.com/airbnb/caravel/pull/102) Merge pull request #102 from bradmbaker/brad_baker_adding_two_x_axis_rescaling_to_nvd3_file (@bradmbaker) +- [7e827da](https://github.com/airbnb/caravel/commit/7e827da3b12cf8aadd524aa2a999ca6a2bd23760) fixing indents (@bradmbaker) +- [#101](https://github.com/airbnb/caravel/pull/101) Merge pull request #101 from gitter-badger/gitter-badge (@gitter-badger) +- [98809cb](https://github.com/airbnb/caravel/commit/98809cb3f4886f3e0ff33724342da73acce85bb0) Fix for 2-axis charts where it shrinks them a little bit (@BradBaker) +- [#100](https://github.com/airbnb/caravel/pull/100) Merge pull request #100 from bradmbaker/patch-1 (@bradmbaker) +- [09b8ed5](https://github.com/airbnb/caravel/commit/09b8ed55487acf0e724d0ad6b73a59ee9d414f97) Adding link to Gitter channel in README (@mistercrunch) +- [05b391c](https://github.com/airbnb/caravel/commit/05b391cf1ccf918cff35bb9eec2c27bbb1ac175c) Add Gitter badge (@gitter-badger) +- [9bc2f08](https://github.com/airbnb/caravel/commit/9bc2f08b10f1f9a8feaa47215c2d438f278fb9f9) Improving the Test Connection button (@mistercrunch) +- [a04cf27](https://github.com/airbnb/caravel/commit/a04cf2706ff221b5f8c9a54192db35968a28d821) Update tooltips with new classes (@bradmbaker) +- [27ceb15](https://github.com/airbnb/caravel/commit/27ceb150c3114f33986611605d1b83bbb0cd77b9) Fixing jumpy clock number (@mistercrunch) +- [3fa3ce1](https://github.com/airbnb/caravel/commit/3fa3ce1a12b809d0d5e802425b096ef0bccefa85) Fixing resampling options (@mistercrunch) +- [51e9cb3](https://github.com/airbnb/caravel/commit/51e9cb3d3e3f1713461b1b66f64c160e46decda0) Making all nvd3 timeseries have the full fieldset (@mistercrunch) +- [ee73b6f](https://github.com/airbnb/caravel/commit/ee73b6fd1205adf75e824d771aa8c9b7c3f24d89) Changing the time range selector default to False (@mistercrunch) +- [#99](https://github.com/airbnb/caravel/pull/99) Merge pull request #99 from mistercrunch/resample (@mistercrunch) +- [3216fa2](https://github.com/airbnb/caravel/commit/3216fa2140463fdb29b495ff0171ebd6b22006d2) Allowing line breaks in fieldsets (@mistercrunch) +- [#98](https://github.com/airbnb/caravel/pull/98) Merge pull request #98 from bradmbaker/patch-1 (@bradmbaker) +- [ade9175](https://github.com/airbnb/caravel/commit/ade917582f2c0a619de074f066be05bae1986bdb) Adding basic resampling capabilities from pandas (@mistercrunch) +- [9959d26](https://github.com/airbnb/caravel/commit/9959d266f0ced7f8a13265b72c5d44b3988f2c4f) Change Scaling to Operate on SVG instead of Div (@bradmbaker) +- [4f12e78](https://github.com/airbnb/caravel/commit/4f12e78a648f9ba953287227afd2e0d8432c21ce) Fixed left panel in explore view (@mistercrunch) +- [3a3e7c8](https://github.com/airbnb/caravel/commit/3a3e7c8964bb173fd106b64ba2364d87eba0ef3a) A much more clear TODO.md (@mistercrunch) +- [#96](https://github.com/airbnb/caravel/pull/96) Merge pull request #96 from mistercrunch/filter_box (@mistercrunch) +- [37cbf61](https://github.com/airbnb/caravel/commit/37cbf61480d05a355d64e1a01f5a9a59b30286a2) Adding markdown support for table descriptions (@mistercrunch) +- [6df3e67](https://github.com/airbnb/caravel/commit/6df3e67bdbcdb39f97ca44c43363eddac494cb87) Fixing the filters (@mistercrunch) +- [ef14c21](https://github.com/airbnb/caravel/commit/ef14c212814179ccc03cea701d14517bcd93f08f) Adding volume indicators on filter box (@mistercrunch) +- [5ad4f38](https://github.com/airbnb/caravel/commit/5ad4f38c49644de5c4aa8d515b939529dc7ee609) Fixing images in docs (@mistercrunch) +- [07df0f1](https://github.com/airbnb/caravel/commit/07df0f109f78aa8a1ff28107872c2bb04cc17e87) Adding a filter box widget (@mistercrunch) +- [#95](https://github.com/airbnb/caravel/pull/95) Merge pull request #95 from mistercrunch/docs2 (@mistercrunch) +- [e96494e](https://github.com/airbnb/caravel/commit/e96494e0cfdf6137f77533836bec53c5cb059d2d) Working on docs (@mistercrunch) +- [0a9600d](https://github.com/airbnb/caravel/commit/0a9600d994dc2bdfffcb6fd3f5ada93df0cba880) Minor improvements on the bubble plot (@mistercrunch) +- [#94](https://github.com/airbnb/caravel/pull/94) Merge pull request #94 from mistercrunch/context (@mistercrunch) +- [010fbc3](https://github.com/airbnb/caravel/commit/010fbc369350fe76bdedfc7e1f6aea04428f7a34) Fixed standalone view (@mistercrunch) +- [dfee55d](https://github.com/airbnb/caravel/commit/dfee55df1af17705816fc8a8e8f5692212aac8d4) Fixing save ops (@mistercrunch) +- [9427cd6](https://github.com/airbnb/caravel/commit/9427cd6216424dae36fe5f956b73cc81a5ddc474) Fixing date processing (@mistercrunch) +- [e7ccbef](https://github.com/airbnb/caravel/commit/e7ccbefe87b746c6c28787a381c218d76ca5dace) Achieving ASYNC explore (@mistercrunch) +- [527bc14](https://github.com/airbnb/caravel/commit/527bc141628034b88ea82c65a78d9e70c4b6a225) TODO (@mistercrunch) +- [b88f282](https://github.com/airbnb/caravel/commit/b88f2825ea92103fb011a81b70a284823cc62426) Improvements to bubble chart (@mistercrunch) +- [c3bec3e](https://github.com/airbnb/caravel/commit/c3bec3e35b679e65ed3bdb7cefaf92a964d889fb) refactoring the imports (@mistercrunch) +- [a5c1358](https://github.com/airbnb/caravel/commit/a5c13582297bc798d04c77a3fd8fc505fa9486f3) Fixing py3 error (@mistercrunch) +- [0f892c6](https://github.com/airbnb/caravel/commit/0f892c6a4d57b49a8f86a5488db08af7b2726093) Fixing sqlite error msg (@mistercrunch) +- [afae892](https://github.com/airbnb/caravel/commit/afae89239d1b0831b5615d1ab24d2534ebc8c6be) Adding another example file (@mistercrunch) +- [8682196](https://github.com/airbnb/caravel/commit/8682196eb88e3046f9c4e6b6fc471804531c928c) Getting filters to a reasonable place (@mistercrunch) +- [e0586ec](https://github.com/airbnb/caravel/commit/e0586ec6664657e8d942e1438eebbf32d70e5be8) Working state (@mistercrunch) +- [4e21fb4](https://github.com/airbnb/caravel/commit/4e21fb42850a898ccaf3c86076222a2e6ff16f18) Adding support for quoted field names (@mistercrunch) +- [6a28ad3](https://github.com/airbnb/caravel/commit/6a28ad3f4e295f8401555c4fd51c946ea01a90c6) Adding standalone mode (@mistercrunch) +- [fffb0a7](https://github.com/airbnb/caravel/commit/fffb0a7a804df8fce09e2d464e20ccee7e225670) Getting rid of the template heavy approach (@mistercrunch) +- [458703d](https://github.com/airbnb/caravel/commit/458703d9c864055870e0ada0ad08b40e095d9486) Getting the dashboard filters to work (@mistercrunch) +- [b1399b9](https://github.com/airbnb/caravel/commit/b1399b97a9de9b26a8eca583b858e4fc19725897) Progress (@mistercrunch) +- [48f5fcf](https://github.com/airbnb/caravel/commit/48f5fcfcc7907feb20858de25b9ff86ee564e753) Some major refactoring (@mistercrunch) +- [4b481e9](https://github.com/airbnb/caravel/commit/4b481e938a37617c696f23cbfd6b10f1244eda02) Getting in a working state (@mistercrunch) +- [973f1a6](https://github.com/airbnb/caravel/commit/973f1a62352cb7e226b4fc7bbcd79665914a9d6f) removing table-info from featured datasets (@mistercrunch) +- [#93](https://github.com/airbnb/caravel/pull/93) Merge pull request #93 from mistercrunch/controller (@mistercrunch) +- [c108063](https://github.com/airbnb/caravel/commit/c1080638ae5c94b7a6e1f213f0125a4daa35a059) Passing a ctrl to the js (@mistercrunch) +- [5435f53](https://github.com/airbnb/caravel/commit/5435f53702160660e52f38d5b62dcc833b5fc664) Passing a controller object to widget (@mistercrunch) +- [#92](https://github.com/airbnb/caravel/pull/92) Merge pull request #92 from mistercrunch/nogroupby (@mistercrunch) +- [19eb177](https://github.com/airbnb/caravel/commit/19eb177fe362ec942c7ce7d9ba388f8bab5760fe) Changing resize action to do nothing (@mistercrunch) +- [bd75a58](https://github.com/airbnb/caravel/commit/bd75a58f241b2c4072334cc39f87db674600f2f4) Re writting table viz (@mistercrunch) +- [55c4433](https://github.com/airbnb/caravel/commit/55c4433b0bcf66200ff07445451faa823745e8fd) Allowing to not group by on table view (@mistercrunch) +- [#91](https://github.com/airbnb/caravel/pull/91) Merge pull request #91 from mistercrunch/exports (@mistercrunch) +- [d933810](https://github.com/airbnb/caravel/commit/d933810cae4c1035113c4ccba1e51602964398eb) updating TODO (@mistercrunch) +- [1cd63c3](https://github.com/airbnb/caravel/commit/1cd63c3e4a6ead15151d139e5881d451b81558bd) Adding a unit test (@mistercrunch) +- [5f6236c](https://github.com/airbnb/caravel/commit/5f6236c80bbe143c283bcb0e8bd36b4195f1aaf2) Export to csv or json (@mistercrunch) +- [#90](https://github.com/airbnb/caravel/pull/90) Merge pull request #90 from mistercrunch/docs (@mistercrunch) +- [880c739](https://github.com/airbnb/caravel/commit/880c7397e1d3e97b74df0293140670d987054cc8) A basic squeleton for the docs (@mistercrunch) +- [#89](https://github.com/airbnb/caravel/pull/89) Merge pull request #89 from mistercrunch/featured_datasets (@mistercrunch) +- [79e7818](https://github.com/airbnb/caravel/commit/79e7818ba83237c78092a66a391d5bfa809038c5) Changes to the layout of the featured datasets page (@michellethomas) +- [2a30908](https://github.com/airbnb/caravel/commit/2a309083283606a067d6e3ede6a7a160aff6d750) Merge branch 'master' of github.com:mistercrunch/panoramix (@mistercrunch) +- [4e3d284](https://github.com/airbnb/caravel/commit/4e3d284785c5b6cd815b5ec1bc06e86223cf5ad6) Restoring error bubbling (@mistercrunch) +- [e5256ef](https://github.com/airbnb/caravel/commit/e5256ef6da462a7259436c10f5e435eb3023a0d1) Fixing alignment of a hanging indent for code quality (@michellethomas) +- [f24e58a](https://github.com/airbnb/caravel/commit/f24e58abf295a048d31d980e291adc83adb15d3a) Fixes to the downgrade migration for user_id in sqlatables (@michellethomas) +- [#87](https://github.com/airbnb/caravel/pull/87) Merge pull request #87 from bradmbaker/brad_adding_js_to_allow_overflow_to_actually_work (@bradmbaker) +- [#88](https://github.com/airbnb/caravel/pull/88) Merge pull request #88 from mistercrunch/map (@mistercrunch) +- [b3edc07](https://github.com/airbnb/caravel/commit/b3edc077dcec61c99bc33477137c006983860e94) Touchups (@mistercrunch) +- [48c1481](https://github.com/airbnb/caravel/commit/48c1481caaf5a4521f07e41ff2aad4d702257a80) World Map with bubbles (@mistercrunch) +- [6f948f0](https://github.com/airbnb/caravel/commit/6f948f07838ae037ba92f2c2cedd2bddaf1fc948) Changing DataTables to default to show all and sort by database (@michellethomas) +- [6bbcbe5](https://github.com/airbnb/caravel/commit/6bbcbe524a4027a1b19e18c365d7a085230ab135) Fixing the button on the featured datasets page (@michellethomas) +- [30df7be](https://github.com/airbnb/caravel/commit/30df7be25842ca9087fc0aa1ba46147e3ea2d69d) Adding a view for featured datasets +- [6155ff8](https://github.com/airbnb/caravel/commit/6155ff8de6a9d7c8c18f6bfcb15e5938c2404bc8) Adding owner to sqlatables and changing some of the formatting using DataTables +- [e0f8f2c](https://github.com/airbnb/caravel/commit/e0f8f2cdcafe0ae2412c9b0086e2cd6e13078c96) fixing a few bugs with tool tip overflow (@BradBaker) +- [#86](https://github.com/airbnb/caravel/pull/86) Merge pull request #86 from bradmbaker/brad_adding_new_and_improved_date_formats (@bradmbaker) +- [d6b6433](https://github.com/airbnb/caravel/commit/d6b6433d52404c75c90cdb8706674bc581713339) Better list view for druid datasurces (@mistercrunch) +- [e2220de](https://github.com/airbnb/caravel/commit/e2220ded7f916d0eea093318c83f7e1b54f1fe00) adjusting date formats (@BradBaker) +- [#85](https://github.com/airbnb/caravel/pull/85) Merge pull request #85 from mistercrunch/sankey (@mistercrunch) +- [c09ff2b](https://github.com/airbnb/caravel/commit/c09ff2b7eb77209633e4e7074a4be5fe2f7de8c4) Getting the query to show (@mistercrunch) +- [0b0a095](https://github.com/airbnb/caravel/commit/0b0a0951639816abecfd2a5b897dd7799cdc3e99) Adding sankey diagrams (@mistercrunch) +- [eb6890f](https://github.com/airbnb/caravel/commit/eb6890f7428ef5aba418e5ed20956070fc8521d8) Namespacing sunburst CSS (@mistercrunch) +- [c2736b3](https://github.com/airbnb/caravel/commit/c2736b34cd43bdbd31e14ad24ea2093632ee4609) Making row_limit freeform (@mistercrunch) +- [#84](https://github.com/airbnb/caravel/pull/84) Merge pull request #84 from mistercrunch/force (@mistercrunch) +- [c563057](https://github.com/airbnb/caravel/commit/c563057099089c18f6461ed163afbc73d916e6fd) Adding directed force layout viz (@mistercrunch) +- [#83](https://github.com/airbnb/caravel/pull/83) Merge pull request #83 from mistercrunch/js (@mistercrunch) +- [51b273b](https://github.com/airbnb/caravel/commit/51b273b5b8f21350e1f33a1ba7b1dd38450d73cb) Big JS refactor (@mistercrunch) +- [#82](https://github.com/airbnb/caravel/pull/82) Merge pull request #82 from bradmbaker/letting_tool_tips_overflow (@bradmbaker) +- [65be15c](https://github.com/airbnb/caravel/commit/65be15cc8d290b425fe76d8f6d6b46a484d8ec80) letting tooltips in the dashboard overflow (@BradBaker) +- [c6d007c](https://github.com/airbnb/caravel/commit/c6d007cc8b48c9831de27050c46f9391163d52fa) Style (@mistercrunch) +- [eb13ce1](https://github.com/airbnb/caravel/commit/eb13ce1840e6937c244d2dfc7c62f857853693e1) Cleaning up the html indentation on explore.html (@mistercrunch) +- [6b069c6](https://github.com/airbnb/caravel/commit/6b069c6741dbf87cb2206b30a83c5aee3b3b168b) Cosmetics on dropdowns (@mistercrunch) +- [#81](https://github.com/airbnb/caravel/pull/81) Merge pull request #81 from mistercrunch/layout (@mistercrunch) +- [d50a768](https://github.com/airbnb/caravel/commit/d50a768df9057ae575f30abab59e214bdabadfda) Fix td align (@mistercrunch) +- [#80](https://github.com/airbnb/caravel/pull/80) Merge pull request #80 from mistercrunch/checkboxes (@mistercrunch) +- [0d6720a](https://github.com/airbnb/caravel/commit/0d6720ad37a2b16ecea8ff1be2943f6481c54ea9) Checkboxes everywhere (@mistercrunch) +- [c97b0b6](https://github.com/airbnb/caravel/commit/c97b0b6026f634f16b7cd48bcea23a408878d7dc) Slightly better layout for explore page (@mistercrunch) +- [#79](https://github.com/airbnb/caravel/pull/79) Merge pull request #79 from mistercrunch/freeform_dropd (@mistercrunch) +- [5701696](https://github.com/airbnb/caravel/commit/5701696c7982805bcb291a3892470dbaad4dbbfe) py3 compatibility (@mistercrunch) +- [f4e4c52](https://github.com/airbnb/caravel/commit/f4e4c529a04f38fc4f7411b7bf5215063560a6d2) Cleanup around multiple select fields (@mistercrunch) + +### 0.6.1 (2015/12/12 17:44 +00:00) +- [08fd4d1](https://github.com/airbnb/caravel/commit/08fd4d125870c9c30240d26483bf9dacc22bf98c) 0.6.1 (@mistercrunch) +- [18a2670](https://github.com/airbnb/caravel/commit/18a2670f419b8d1f28ede6ed948ec9ebb1f741f3) [bugfix] sqlite ALTER issue (@mistercrunch) +- [65c1c42](https://github.com/airbnb/caravel/commit/65c1c42bc816241943553515f490462382bbe35e) Align dashboard title (@mistercrunch) +- [1fe1549](https://github.com/airbnb/caravel/commit/1fe15496cefe073959699ea909962fea114b5149) Formatting change_on column in list views (@mistercrunch) +- [b628713](https://github.com/airbnb/caravel/commit/b62871368550a5c2ac848d558776d88ffafb3d92) Adding a link section to readme (@mistercrunch) +- [59c1ee3](https://github.com/airbnb/caravel/commit/59c1ee3c0375a9743b82e9379a17cf397e0bdc69) fix migrations (@mistercrunch) ### 0.6.0 (2015/12/11 01:17 +00:00) -- [#77](https://github.com/airbnb/caravel/pull/77) Better tooltips and more ways to integrate them easily (@mistercrunch) -- [#76](https://github.com/airbnb/caravel/pull/76) Introducing form overrides for label and tooltips (@mistercrunch) -- [#75](https://github.com/airbnb/caravel/pull/75) New viz: sunbursts (@mistercrunch) -- [#74](https://github.com/airbnb/caravel/pull/74) Introducing fieldsets (@mistercrunch) -- [#73](https://github.com/airbnb/caravel/pull/73) Airflowlike theme (@mistercrunch) -- [#72](https://github.com/airbnb/caravel/pull/72) Logging slice and dash views (@mistercrunch) -- [#70](https://github.com/airbnb/caravel/pull/70) Adding url slug support for dashboard model (@mistercrunch) -- [#71](https://github.com/airbnb/caravel/pull/71) Add option to show minmax on x axis (@mistercrunch) -- [#69](https://github.com/airbnb/caravel/pull/69) Allowing for [Save AS] and [Overwrite] (@mistercrunch) -- [#68](https://github.com/airbnb/caravel/pull/68) Adding cumsum to rolling functions (@mistercrunch) -- [#67](https://github.com/airbnb/caravel/pull/67) Fix debug mode calls get_json twice (@mistercrunch) -- [#66](https://github.com/airbnb/caravel/pull/66) Adding a PivotTableViz (@mistercrunch) -- [#65](https://github.com/airbnb/caravel/pull/65) Adding custom HAVING clause (@mistercrunch) -- [#64](https://github.com/airbnb/caravel/pull/64) Preserving the ordering in selectmultiple (@mistercrunch) -- [#63](https://github.com/airbnb/caravel/pull/63) Encrypting the passwords out of connection strings (@mistercrunch) -- [#61](https://github.com/airbnb/caravel/pull/61) BetterBooleanField to fix html omitting non-checked (@patrickleotardif) -- [#60](https://github.com/airbnb/caravel/pull/60) Fix Markup Widget bug (@NiharikaRay) -- [#59](https://github.com/airbnb/caravel/pull/59) Adding y-axis format option (@patrickleotardif) -- [#58](https://github.com/airbnb/caravel/pull/58) Setting min_periods to 1 for rolling windows (@mistercrunch) -- [#56](https://github.com/airbnb/caravel/pull/56) adding sort order of the slices on changed_on field (@mistercrunch) +- [a4065e4](https://github.com/airbnb/caravel/commit/a4065e4be6552efacd3c3351cfb08d16c231edc7) v0.6.0 (@mistercrunch) +- [#77](https://github.com/airbnb/caravel/pull/77) Merge pull request #77 from mistercrunch/tooltips (@mistercrunch) +- [fc93f36](https://github.com/airbnb/caravel/commit/fc93f36339d6dc8bf4146db6afc89bc9ac889146) Better tooltips and more ways to integrate them easily (@mistercrunch) +- [c64473c](https://github.com/airbnb/caravel/commit/c64473c49e9635c48d6ee99827f156e8e0b06885) [sunburst] limit -> row_limit (@mistercrunch) +- [c3f9607](https://github.com/airbnb/caravel/commit/c3f96074b95d7030e9cd142964d91ac9da7597fa) Insuring column order (@mistercrunch) +- [#76](https://github.com/airbnb/caravel/pull/76) Merge pull request #76 from mistercrunch/form_overrides (@mistercrunch) +- [d476dd2](https://github.com/airbnb/caravel/commit/d476dd2b8ad46644446fb15b3bd85c8516dfee3e) Introducing form overrides for label and tooltips (@mistercrunch) +- [#75](https://github.com/airbnb/caravel/pull/75) Merge pull request #75 from mistercrunch/sunburst (@mistercrunch) +- [f5b4a02](https://github.com/airbnb/caravel/commit/f5b4a0290e5aaa6ae35527ff66a2f96769903767) New viz: sunbursts (@mistercrunch) +- [d526711](https://github.com/airbnb/caravel/commit/d526711f1e7816102a31fe07533ff724de3773c5) Changing default sort order for databases (@mistercrunch) +- [2833bd3](https://github.com/airbnb/caravel/commit/2833bd3825081c40691d47367c900ca21e221dbe) bugfix - empty slug field (@mistercrunch) +- [#74](https://github.com/airbnb/caravel/pull/74) Merge pull request #74 from mistercrunch/fieldsets (@mistercrunch) +- [a32712d](https://github.com/airbnb/caravel/commit/a32712d9cb97eb725f69ab7f45b4152ee05995c2) Cleaning up (@mistercrunch) +- [b666508](https://github.com/airbnb/caravel/commit/b66650808516a47242ba2a0ca45827ea0026cb45) Introducing field sets (@mistercrunch) +- [#73](https://github.com/airbnb/caravel/pull/73) Merge pull request #73 from mistercrunch/theme (@mistercrunch) +- [1a62d5f](https://github.com/airbnb/caravel/commit/1a62d5f74fa1d52219e1acbf1e622350a77ebb10) Bugfix pivot table with no groupby (@mistercrunch) +- [04c0c05](https://github.com/airbnb/caravel/commit/04c0c05c01712026b1e27eb1b427d8757ec2813e) Airflowlike theme (@mistercrunch) +- [#72](https://github.com/airbnb/caravel/pull/72) Merge pull request #72 from mistercrunch/log (@mistercrunch) +- [f882ff1](https://github.com/airbnb/caravel/commit/f882ff13ff2bc3ad91a4b3d393000534afd26c28) Logging slice and dash views (@mistercrunch) +- [#70](https://github.com/airbnb/caravel/pull/70) Merge pull request #70 from mistercrunch/dash_slug (@mistercrunch) +- [#71](https://github.com/airbnb/caravel/pull/71) Merge pull request #71 from mistercrunch/showminmax (@mistercrunch) +- [66089a8](https://github.com/airbnb/caravel/commit/66089a89488556a7e1b0088083de5b6647952285) Adding migration file (@mistercrunch) +- [#69](https://github.com/airbnb/caravel/pull/69) Merge pull request #69 from mistercrunch/save_as (@mistercrunch) +- [63b27bb](https://github.com/airbnb/caravel/commit/63b27bbecea64d88cfeeee7ae1b517db1ef6d0bb) Add option to show minmax on x axis (@mistercrunch) +- [2743b24](https://github.com/airbnb/caravel/commit/2743b2412f23e2f486b5cf500c63b4346261de7a) Adding url slug support for dashboard model (@mistercrunch) +- [b9d7253](https://github.com/airbnb/caravel/commit/b9d7253a485df391d32741cc70777d1d98eb546d) Save AS and Overwrite (@mistercrunch) +- [#68](https://github.com/airbnb/caravel/pull/68) Merge pull request #68 from mistercrunch/cumsum (@mistercrunch) +- [03e13cb](https://github.com/airbnb/caravel/commit/03e13cb957a63a2afa77fa3ae0d7ae3eef252364) Adding cumsum to rolling functions (@mistercrunch) +- [#67](https://github.com/airbnb/caravel/pull/67) Merge pull request #67 from mistercrunch/fix_debug_dup_call (@mistercrunch) +- [2002f5e](https://github.com/airbnb/caravel/commit/2002f5e369169327151f7fef6d96661fa08d10b4) Fix debug mode calls get_json twice (@mistercrunch) +- [#66](https://github.com/airbnb/caravel/pull/66) Merge pull request #66 from mistercrunch/pivot_table (@mistercrunch) +- [7cd3696](https://github.com/airbnb/caravel/commit/7cd3696dd2de550b326f9f401846a6547c1a0f56) Adding missing jquery-ui images (@mistercrunch) +- [139e594](https://github.com/airbnb/caravel/commit/139e594ccee5f375ef76265c5399498d789ce74b) Bugfix, wrong css reference (@mistercrunch) +- [b0f7b3c](https://github.com/airbnb/caravel/commit/b0f7b3c595ff467870acb751527c7e6c3cf295e6) A little bit more explicit error handling (@mistercrunch) +- [8b0b13e](https://github.com/airbnb/caravel/commit/8b0b13eedc65b237d2e48262bba64b6bef9a3a49) Adding a PivotTableViz (@mistercrunch) +- [#65](https://github.com/airbnb/caravel/pull/65) Merge pull request #65 from mistercrunch/custom_having (@mistercrunch) +- [#64](https://github.com/airbnb/caravel/pull/64) Merge pull request #64 from mistercrunch/sort_select2 (@mistercrunch) +- [4819be2](https://github.com/airbnb/caravel/commit/4819be2fb2ac76fd029b5a5f66317d13b4caf8c5) Adding groupby to select2Sortable (@mistercrunch) +- [3cc5db5](https://github.com/airbnb/caravel/commit/3cc5db5bbf795c9acad29e9a3e8291d38587e638) Adding custom HAVING clause (@mistercrunch) +- [c8faeed](https://github.com/airbnb/caravel/commit/c8faeed5b3ff7eb6ff24c47a8b25ab8950a0b6e9) Preserving the ordering in selectmultiple (@mistercrunch) +- [de52449](https://github.com/airbnb/caravel/commit/de52449c2a782d4e68380bd4fffde246b7f6210b) Removing dups in color array (@mistercrunch) +- [#63](https://github.com/airbnb/caravel/pull/63) Merge pull request #63 from mistercrunch/hide_pass (@mistercrunch) +- [8522791](https://github.com/airbnb/caravel/commit/85227912b3c6d0fcecc9c2904c93277f99771f7a) Encrypting the passwords out of connection strings (@mistercrunch) +- [#61](https://github.com/airbnb/caravel/pull/61) Merge pull request #61 from mistercrunch/better-boolean-field (@mistercrunch) +- [f592aa1](https://github.com/airbnb/caravel/commit/f592aa1012073b136433d57ca022edae904e63a2) Add BetterBooleanField (@patrickleotardif) +- [d8c79cd](https://github.com/airbnb/caravel/commit/d8c79cd26e0aea4f3ec2375ac41708dc65b1a2a8) bugfix for error msg not surfaced (@mistercrunch) +- [1842628](https://github.com/airbnb/caravel/commit/184262844a73d8e188782a6945c52215b5fbff67) Fixing resize for nvd3 widgets (@mistercrunch) +- [#60](https://github.com/airbnb/caravel/pull/60) Merge pull request #60 from NiharikaRay/fix_markup_widget (@NiharikaRay) +- [54e45ba](https://github.com/airbnb/caravel/commit/54e45babe742fe6b7d341e389dc51022fd25ab8f) Fix Markup Widget bug +- [#59](https://github.com/airbnb/caravel/pull/59) Merge pull request #59 from patrickleotardif/y_axis_format (@patrickleotardif) +- [93c660f](https://github.com/airbnb/caravel/commit/93c660f2c7d241bc231157ac5e073128eb5eb965) make y axis format one col width only (@patrickleotardif) +- [4233d34](https://github.com/airbnb/caravel/commit/4233d3467865c1b7ee35442d210d511cb81623f4) handle y2axis for y axis format (@patrickleotardif) +- [6b13d78](https://github.com/airbnb/caravel/commit/6b13d78f699ebd4433a63e3f5b1d64c452e55e79) verbose explanation and link for d3 format" (@patrickleotardif) +- [38a4157](https://github.com/airbnb/caravel/commit/38a4157ac670a1bf291f49bd7732ce9ffaceca79) Adding y-axis format option (@patrickleotardif) +- [#58](https://github.com/airbnb/caravel/pull/58) Merge pull request #58 from mistercrunch/min_periods (@mistercrunch) +- [d75c5c8](https://github.com/airbnb/caravel/commit/d75c5c8da85ccbba03f1cd1627a78e553704e821) Setting min_periods to 1 for rolling windows (@mistercrunch) +- [a18cf2d](https://github.com/airbnb/caravel/commit/a18cf2d26bcee005dc6e18a480d1a1a25c465923) Adding audit info to a few list views (@mistercrunch) +- [0889947](https://github.com/airbnb/caravel/commit/088994739475ce088a16960734f11edaef47b532) Clarifying time filters, small refactor (@mistercrunch) +- [4e6aa4c](https://github.com/airbnb/caravel/commit/4e6aa4c5b5b6c8a88567978e088eec22f451add5) Improvments around date handling for nvd3 charts (@mistercrunch) +- [#56](https://github.com/airbnb/caravel/pull/56) Merge pull request #56 from mistercrunch/kp_enable_sort_order (@mistercrunch) +- [6ecea91](https://github.com/airbnb/caravel/commit/6ecea9123c89fd18754fcb2c0d1330583be6ece3) adding sort order of the slices on changed_on field + +### 0.5.3 (2015/10/24 15:02 +00:00) +- [5057593](https://github.com/airbnb/caravel/commit/5057593ec9deee8cbb7e8a834356553fa4bced43) v0.5.3 (@mistercrunch) +- [ec805d3](https://github.com/airbnb/caravel/commit/ec805d3bd850d02dbc715052d7e323fc969c2dc9) pinning flask-sqlalchemy==2.0 (@mistercrunch) +- [774f205](https://github.com/airbnb/caravel/commit/774f205d24af8d5fa3971289dfef05973359438d) pinning sqla (@mistercrunch) ### 0.5.2 (2015/10/24 01:06 +00:00) -- [#53](https://github.com/airbnb/caravel/pull/53) Py3 (@mistercrunch) -- [#51](https://github.com/airbnb/caravel/pull/51) Adding timezone offset as a datasource param (@mistercrunch) -- [#52](https://github.com/airbnb/caravel/pull/52) Speed up travis builds with wheels (@mistercrunch) -- [#48](https://github.com/airbnb/caravel/pull/48) Allowing to specify the gunicorn timeout in CLI and config (@mistercrunch) +- [c07770e](https://github.com/airbnb/caravel/commit/c07770e52a4a2f141225cabf5044bd8e9c682b5f) v0.5.2 (@mistercrunch) +- [0ec69a4](https://github.com/airbnb/caravel/commit/0ec69a4ac513296a4485a29641ceedfa73056080) druid bugfix (@mistercrunch) +- [3051311](https://github.com/airbnb/caravel/commit/30513116f941729d1dc30c2d8950710506e33bf4) Using mysqlclient instead of pymysql (@mistercrunch) +- [c3903ef](https://github.com/airbnb/caravel/commit/c3903eff4f024dcc213f843803e56b2bd3b1be72) Adding forgotten template (@mistercrunch) +- [#53](https://github.com/airbnb/caravel/pull/53) Merge pull request #53 from mistercrunch/py3 (@mistercrunch) +- [4d89663](https://github.com/airbnb/caravel/commit/4d8966376fc11c3ddf875f4c060789cb83902f55) Aiming at python 3.4 - test (@mistercrunch) +- [a58d184](https://github.com/airbnb/caravel/commit/a58d184711e021ad11878b42958b01fb737961cc) Removing references to basestring (@mistercrunch) +- [fc76e87](https://github.com/airbnb/caravel/commit/fc76e87653fff7c1a45b6b3ca601bac84040bf3a) Trying mode='rt' (@mistercrunch) +- [e3e3d0b](https://github.com/airbnb/caravel/commit/e3e3d0b1f543e8a9a2c6122de894ef3c26d718bd) py3 compat changes (@mistercrunch) +- [5a96703](https://github.com/airbnb/caravel/commit/5a967031c8ea0a71d4d8aa2bef5823941831c507) Adding python 3.5 to build matrix (@mistercrunch) +- [1ffb9a0](https://github.com/airbnb/caravel/commit/1ffb9a0fc6ca043ea64edc5cbee5887f2df7f236) Reverting to old deps notation as server is on 2.7.3 (@mistercrunch) +- [2ddebc1](https://github.com/airbnb/caravel/commit/2ddebc1a4c402c6a8791788c9246cf015ffcedd8) Pinning flask version (@mistercrunch) +- [#51](https://github.com/airbnb/caravel/pull/51) Merge pull request #51 from mistercrunch/offset (@mistercrunch) +- [#52](https://github.com/airbnb/caravel/pull/52) Merge pull request #52 from mistercrunch/travis_speedup (@mistercrunch) +- [bdd5b08](https://github.com/airbnb/caravel/commit/bdd5b087875bde924185ad4d6b3208d85581b283) Cleaning up reqs versions (@mistercrunch) +- [ea18aad](https://github.com/airbnb/caravel/commit/ea18aad3b2c721bedfd6dc0947857341b33f1e13) Speed up travis builds with wheels (@mistercrunch) +- [a7fca30](https://github.com/airbnb/caravel/commit/a7fca30010e0878e3d4573bf86a45b3a1e5b030d) Tweaks (@mistercrunch) +- [06e57bf](https://github.com/airbnb/caravel/commit/06e57bf890b74520ca6cd44c0436b18de95bc721) Adding timezone offset as a datasource param (@mistercrunch) +- [8aa97f7](https://github.com/airbnb/caravel/commit/8aa97f7e0847a4936f14730b0a53ff9450fb2cf9) Better defaults for Druid endpoints and better error handling (@mistercrunch) +- [9d61ee2](https://github.com/airbnb/caravel/commit/9d61ee2323457ce624bce2a8a8c03c2d002e42f2) Bugfix for time series bar chart (@mistercrunch) +- [9605962](https://github.com/airbnb/caravel/commit/960596228ee77bad1de9cb0abb7e84a34471c641) +entry in TODO (@mistercrunch) +- [#48](https://github.com/airbnb/caravel/pull/48) Merge pull request #48 from mistercrunch/timeout (@mistercrunch) +- [0a1eb64](https://github.com/airbnb/caravel/commit/0a1eb64da0634fc3afd8a8e09bcacf751c51986c) Bumping timeout to 60 (@mistercrunch) +- [686069d](https://github.com/airbnb/caravel/commit/686069d283ab6792adb0c6c8310c3c9af4512a6a) Allowing to specify the gunicorn timeout in CLI and config (@mistercrunch) +- [7793e24](https://github.com/airbnb/caravel/commit/7793e243ad90f4c385a6a77cbb9b521b8baa62c9) Note about python version support (@mistercrunch) + +### 0.5.1 (2015/10/13 15:05 +00:00) +- [37629fb](https://github.com/airbnb/caravel/commit/37629fb548bed9194a09d370b523e87f258aa4f9) v0.5.1 (@mistercrunch) + +### rm (2015/10/13 14:55 +00:00) +- [8cd27db](https://github.com/airbnb/caravel/commit/8cd27db8937093deabcadd130a7e186a7046454d) Stop attribution of datasource_access to gamma on init (@mistercrunch) +- [b25393b](https://github.com/airbnb/caravel/commit/b25393be082ffa6907390b7d3d775acb15e3ab59) Adding a note to run init script in installation process (@mistercrunch) +- [179622d](https://github.com/airbnb/caravel/commit/179622da7790f555bc29de6573bf5afdcdcc14ff) Bugfix around empty compare_lag (@mistercrunch) +- [7137d75](https://github.com/airbnb/caravel/commit/7137d7597e574cfada498871f94301ae00f52e6f) Adding missing installation step (@mistercrunch) ### 0.5.0 (2015/10/13 01:09 +00:00) -- [#46](https://github.com/airbnb/caravel/pull/46) Allowing to change the "Time Column" on SqlA (@mistercrunch) -- [#45](https://github.com/airbnb/caravel/pull/45) Bootstrapping widgets from javascript initializer. (@akuhn) -- [#43](https://github.com/airbnb/caravel/pull/43) Supporting arbitrary expressions (@mistercrunch) -- [#42](https://github.com/airbnb/caravel/pull/42) Adding ability to style a dashboard with CSS (@mistercrunch) -- [#41](https://github.com/airbnb/caravel/pull/41) Cleaning up the static folder (@mistercrunch) -- [#35](https://github.com/airbnb/caravel/pull/35) A first draft on default security roles (@mistercrunch) -- [#40](https://github.com/airbnb/caravel/pull/40) Introducing time comparison (@mistercrunch) -- [#39](https://github.com/airbnb/caravel/pull/39) Adding interpolation choice for line charts (@mistercrunch) -- [#38](https://github.com/airbnb/caravel/pull/38) Extract css rules and scripts into separate files. (@akuhn) -- [#37](https://github.com/airbnb/caravel/pull/37) Viz type (@mistercrunch) -- [#36](https://github.com/airbnb/caravel/pull/36) Extract widget javascript to separate files. (@akuhn) -- [#34](https://github.com/airbnb/caravel/pull/34) Ripping out Highcharts. (@mistercrunch) +- [51d7225](https://github.com/airbnb/caravel/commit/51d7225f06584962045d352f15f5c40d68bb860b) v0.5.0 (@mistercrunch) +- [85f3857](https://github.com/airbnb/caravel/commit/85f3857285ff4ad4f3b84785315d57ae99bf73db) Removing raise statement used for testing (@mistercrunch) +- [7a4eaf4](https://github.com/airbnb/caravel/commit/7a4eaf41b260cf15677c35515277b1ab47fceabe) Adding error handler that shows the stacktrace (@mistercrunch) +- [e5aa49f](https://github.com/airbnb/caravel/commit/e5aa49fb0801b4b8693502649e097eb78a29516a) Descriptions for confusing columns (@mistercrunch) +- [93b7672](https://github.com/airbnb/caravel/commit/93b76727d419039a1eccbcb202a5bec0a73174e5) Removing done items from TODO (@mistercrunch) +- [#46](https://github.com/airbnb/caravel/pull/46) Merge pull request #46 from mistercrunch/time_grain (@mistercrunch) +- [f0d84f6](https://github.com/airbnb/caravel/commit/f0d84f634f9ff6cfb880fde61d78469a3a575a68) Forcing pandas versino (@mistercrunch) +- [cb92cac](https://github.com/airbnb/caravel/commit/cb92cac77663d4de5eb643788ae0d6602fe9754d) Allowing to define multiple time columns for time series on Sqla (@mistercrunch) +- [b84ede1](https://github.com/airbnb/caravel/commit/b84ede1aef2fe3b74148fad6b5742721acef8596) Bugfix druid datasource onsave (@mistercrunch) +- [#45](https://github.com/airbnb/caravel/pull/45) Merge pull request #45 from mistercrunch/px_render_refresh (@mistercrunch) +- [694f82e](https://github.com/airbnb/caravel/commit/694f82ec6582ed12047d66f2a90620bdc2689b47) Boostrapping widgets from javascript initializer (RFC). (@akuhn) +- [4679635](https://github.com/airbnb/caravel/commit/467963533b97403e44f29465bb7d19b86f61ba75) Button Druidify\!->Slice\! (@mistercrunch) +- [#43](https://github.com/airbnb/caravel/pull/43) Merge pull request #43 from mistercrunch/expr (@mistercrunch) +- [6db1b97](https://github.com/airbnb/caravel/commit/6db1b97a0e7df38a905a6da88c6ea3743e1cf90d) Supporting arbitrary expressions (@mistercrunch) +- [36c7406](https://github.com/airbnb/caravel/commit/36c7406786fc24a5d6d3c0400cbb2ec90231896f) Upgrading nvd3 to dev version fixes a bug around classed series (@mistercrunch) +- [0b87ea6](https://github.com/airbnb/caravel/commit/0b87ea6e9b41a1b61009c1feeff5c75624985e94) Bugfix around specific datasource access permissions (@mistercrunch) +- [#42](https://github.com/airbnb/caravel/pull/42) Merge pull request #42 from mistercrunch/dash_css (@mistercrunch) +- [bd32170](https://github.com/airbnb/caravel/commit/bd32170b36f909a67502801241b8e0e0bd97cbdc) Adding ability to style a dashboard with CSS (@mistercrunch) +- [a033282](https://github.com/airbnb/caravel/commit/a0332823ff35472c7103fa6816b2c088c13ea1cd) Changing default for time_compare to empty (@mistercrunch) +- [096f697](https://github.com/airbnb/caravel/commit/096f6977c4f5d1adde82c0ea970214ff78887a36) Bugfix, missing WHERE CLAUSE field in form (@mistercrunch) +- [d810a9d](https://github.com/airbnb/caravel/commit/d810a9d5ad62ea388ab92adff89fc25effe6ae5c) Adding perm property to Datasource model (@mistercrunch) +- [#41](https://github.com/airbnb/caravel/pull/41) Merge pull request #41 from mistercrunch/cosmetico (@mistercrunch) +- [2bb2992](https://github.com/airbnb/caravel/commit/2bb299225a3010beb4fc286605d04b9694194ff1) Cleaning up the static folder (@mistercrunch) +- [c9b7c5d](https://github.com/airbnb/caravel/commit/c9b7c5daa82cf9220c6a806ce420c87170f33847) Adjusting width of dashboard view controls (@mistercrunch) +- [5f62a1f](https://github.com/airbnb/caravel/commit/5f62a1fe0223c4f536274283277782c9be842b26) Adding css file for viz_nvd3 (@mistercrunch) +- [#35](https://github.com/airbnb/caravel/pull/35) Merge pull request #35 from mistercrunch/roles (@mistercrunch) +- [459048a](https://github.com/airbnb/caravel/commit/459048abe0f8873ada861edc712d5abcf0456216) Bugfix (@mistercrunch) +- [6ea178e](https://github.com/airbnb/caravel/commit/6ea178eced0dcb512915c042aa8db2a6114cfb5d) Perms are kept from getting duped, created on save (@mistercrunch) +- [b4c8d7a](https://github.com/airbnb/caravel/commit/b4c8d7a81e0062608d0d666e412697cae74e8e38) Cosmetics (@mistercrunch) +- [c2049f8](https://github.com/airbnb/caravel/commit/c2049f837c0152a400fbba0a075389c8f2812158) Automate Panoramix role creation (@mistercrunch) +- [71cf515](https://github.com/airbnb/caravel/commit/71cf515d0d48cb26467eaed08ee613afd77e170d) Getting this thing to work (@mistercrunch) +- [e3cdf5b](https://github.com/airbnb/caravel/commit/e3cdf5bb2c1b699d8c747f1157f425373fd9d871) Progress (@mistercrunch) +- [45b5950](https://github.com/airbnb/caravel/commit/45b595001986d68f48278e1c217eb4ab5e0c5a40) Definining a Gamma role (@mistercrunch) +- [#40](https://github.com/airbnb/caravel/pull/40) Merge pull request #40 from mistercrunch/time_compare (@mistercrunch) +- [ede6768](https://github.com/airbnb/caravel/commit/ede6768cbea5c2f97c137bdf07a1fb98f788db83) Small improvements to dashboard controls (@mistercrunch) +- [959418c](https://github.com/airbnb/caravel/commit/959418cc4e9d8b15ed0c16a265542fe2ff287e6a) Making sure to alert only once (@mistercrunch) +- [f83d933](https://github.com/airbnb/caravel/commit/f83d93327f350528cb35c6b8d92e30c7a2581597) Updating TODO (@mistercrunch) +- [2eb8c1b](https://github.com/airbnb/caravel/commit/2eb8c1be8de5c6269171c217991559394afd87a1) Introducing time comparison (@mistercrunch) +- [46ee9d2](https://github.com/airbnb/caravel/commit/46ee9d2c133792b9648cdd50c43a461f3f7ede17) Improved free form date parsing (@mistercrunch) +- [bc8f9d2](https://github.com/airbnb/caravel/commit/bc8f9d2e1a9e8fdcbf0f893b522f6b53272a3eed) Specifying the fields for DistributionBarViz as it was showing donut (@mistercrunch) +- [#39](https://github.com/airbnb/caravel/pull/39) Merge pull request #39 from mistercrunch/interpolation (@mistercrunch) +- [e1900fc](https://github.com/airbnb/caravel/commit/e1900fcfe96ad32bdb959ec8a63bf3faf5818479) Bugfix, distributino bar chart shows NaN on xAxis (@mistercrunch) +- [774b1ef](https://github.com/airbnb/caravel/commit/774b1ef9d9aacc1b92beb10891a2bb5948e5de84) removing console.log (@mistercrunch) +- [bb535a3](https://github.com/airbnb/caravel/commit/bb535a373dd1790b67066165ad92096c33a8da97) Adding an option for line_interpolation in line chart (@mistercrunch) +- [3f9c838](https://github.com/airbnb/caravel/commit/3f9c83828ad2a43ee3c49ad7a50bb78515e8930a) Removing leftover print statetments (@mistercrunch) +- [33a4577](https://github.com/airbnb/caravel/commit/33a45772ab6e7298669c0e251ef471cb3146862d) py3 (@mistercrunch) +- [#38](https://github.com/airbnb/caravel/pull/38) Merge pull request #38 from mistercrunch/px_javascript_css_files_2 (@mistercrunch) +- [4a256b1](https://github.com/airbnb/caravel/commit/4a256b1dc46073fd404d9d5fc93369975b51a135) Reformat javascript code. (@akuhn) +- [ad1ebaa](https://github.com/airbnb/caravel/commit/ad1ebaa6dadc843748d98375bdab420000970c58) Extract scripts into javascript file. (@akuhn) +- [367c256](https://github.com/airbnb/caravel/commit/367c2562e18b3cefcd685fe9eb6547b5c5b29d14) Extract css rules into stylesheet file. (@akuhn) +- [#37](https://github.com/airbnb/caravel/pull/37) Merge pull request #37 from mistercrunch/viz_type (@mistercrunch) +- [ee6cc15](https://github.com/airbnb/caravel/commit/ee6cc157f692d1707ba5447fbdd130a59fbe945b) Removing chart_kind artefact (@mistercrunch) +- [f3e3415](https://github.com/airbnb/caravel/commit/f3e3415712b87cbf91f001d2dbbb8d176003bacd) Re-adding images, mistakenly did mv instead of git mv (@mistercrunch) +- [c4ff8d1](https://github.com/airbnb/caravel/commit/c4ff8d1760eeb49e1e40452ea6aa5f6917fed163) Moving static jpg/pngs to static/img (@mistercrunch) +- [d3c420e](https://github.com/airbnb/caravel/commit/d3c420ea01b8ed49ebbc169bb45fcf2193849d5c) Adding hint to not consider a bakced up function for coverage accounting (@mistercrunch) +- [f36ea7a](https://github.com/airbnb/caravel/commit/f36ea7aa50049be502d2e8e12f221351fbffbf27) Aligingin stackedAreaChart with area (@mistercrunch) +- [04f914f](https://github.com/airbnb/caravel/commit/04f914fb5c6bcaa2a3388e835069aeaa2db5cbd3) Viz type clarifications (@mistercrunch) +- [601e30a](https://github.com/airbnb/caravel/commit/601e30aa3732d03f699128a19608f948b485dacd) Changing 'since' default to 7 days (@mistercrunch) +- [fa08d35](https://github.com/airbnb/caravel/commit/fa08d353e86e9e5fd3e3780d1522a2b6fdc0143a) Bug fixes (@mistercrunch) +- [#36](https://github.com/airbnb/caravel/pull/36) Merge pull request #36 from mistercrunch/px_javascript_css_files (@mistercrunch) +- [ad2cc10](https://github.com/airbnb/caravel/commit/ad2cc107883dc258e6c69a1ad64c4dac216cad01) Fix unit tests for viz without json endpoint. (@akuhn) +- [83d7bf3](https://github.com/airbnb/caravel/commit/83d7bf3a1a4633dd9502916afcf067f72726e908) Extract nvd3 javascript to separate file. (@akuhn) +- [669a0a4](https://github.com/airbnb/caravel/commit/669a0a4e2c783f9efe77d90189f122c5c9b4a6ef) Extract bignumber javascript to separate file. (@akuhn) +- [b75c89b](https://github.com/airbnb/caravel/commit/b75c89b81f6b3fa5eed86d3b561d42feccbfd4a6) Extract word cloud javascript to separate file. (@akuhn) +- [7172be9](https://github.com/airbnb/caravel/commit/7172be9705d7ed7729c4a92ba867adca9cbe09a9) Bugfix for nvd3 charts (@mistercrunch) +- [c9e4239](https://github.com/airbnb/caravel/commit/c9e42390258e6327f841fcd9576d3ea5d8759fd8) Moving button to the right (@mistercrunch) +- [ca28d9c](https://github.com/airbnb/caravel/commit/ca28d9c524a71ede74318a1f32f5673e45c2c400) Penguins under construction (@mistercrunch) +- [2243623](https://github.com/airbnb/caravel/commit/224362343011984b4bfd5be4216530cc1c8e189c) Temporary hack to see the query for NVD3 vizs (@mistercrunch) +- [5cf5019](https://github.com/airbnb/caravel/commit/5cf5019ff162ea4484217c496d6ed384ab626e43) Done fixing form continuity (@mistercrunch) +- [74e5a3e](https://github.com/airbnb/caravel/commit/74e5a3e868a60d295493c55ffb668e36ff0c6cd1) Mostly working (@mistercrunch) +- [f3f807d](https://github.com/airbnb/caravel/commit/f3f807d0425d98ea8b5f16d1d323ba9b876ba99f) Forms (@mistercrunch) +- [c3f0597](https://github.com/airbnb/caravel/commit/c3f0597c072e1422d27691855f51ce2950b000b0) Small improvments to tests (@mistercrunch) +- [4a9987a](https://github.com/airbnb/caravel/commit/4a9987affaf9430ecc4d8dfb394f197bf400084d) Bugfix around using an Int in a groupby (@mistercrunch) +- [4d62adb](https://github.com/airbnb/caravel/commit/4d62adb618751a37a57d5785bfb87aec25c3e77a) Removing last highcharts file standing (@mistercrunch) +- [0033c92](https://github.com/airbnb/caravel/commit/0033c927cce6b67e9ef611c4207c285f128cb15d) Adding missing dependency (@mistercrunch) +- [af98972](https://github.com/airbnb/caravel/commit/af989726249bd7c85c51d783ea969b3b5af0d70d) Cleaning up previous hack (@mistercrunch) +- [391b31e](https://github.com/airbnb/caravel/commit/391b31e3507e82b6fb24c10f1fc6f5daaab4ca87) Forgot the .coveralls.yml file (@mistercrunch) +- [ac2446c](https://github.com/airbnb/caravel/commit/ac2446cf093626f861456b13e68dd14c35001ac7) Adding coverage badge (@mistercrunch) +- [930dad4](https://github.com/airbnb/caravel/commit/930dad4eb0dd37a648522be1a488850445af6b8e) Further CI integration (@mistercrunch) +- [db272f8](https://github.com/airbnb/caravel/commit/db272f831bbc40bc3ac7746a498e6ea5ab0b214e) Adding markdown dep (@mistercrunch) +- [e473a82](https://github.com/airbnb/caravel/commit/e473a828e773c220b201e996bbf673e5f25f631c) Adding flask-testing to list of deps (@mistercrunch) +- [50adfdc](https://github.com/airbnb/caravel/commit/50adfdc662f4aa0ae66737ab67e37252d98fdeba) Explicit flask dependency (@mistercrunch) +- [80228ac](https://github.com/airbnb/caravel/commit/80228ac29368ee8b3cd6224a8d1598409a5e0ab7) Adapting command (@mistercrunch) +- [a2a0545](https://github.com/airbnb/caravel/commit/a2a0545323bd95eff141e34204e63dbd2bf00309) Integrating with travis-ci (@mistercrunch) +- [#34](https://github.com/airbnb/caravel/pull/34) Merge pull request #34 from mistercrunch/nvd3_2 (@mistercrunch) +- [a674fca](https://github.com/airbnb/caravel/commit/a674fca26df18cf2530f68bcbf89f12616122e71) Better form handling (@mistercrunch) +- [721113d](https://github.com/airbnb/caravel/commit/721113db0d93edfe040c059b1b98372f9600bc3d) About to rip out args (@mistercrunch) +- [625bd9d](https://github.com/airbnb/caravel/commit/625bd9dd82006d2f287f54538640d87c8239f68d) Period ratio compare (@mistercrunch) +- [7143972](https://github.com/airbnb/caravel/commit/7143972341a8cbd1774c3c16bbb937d7e75f5a1f) Adding contribution to total (@mistercrunch) +- [4cd7c3d](https://github.com/airbnb/caravel/commit/4cd7c3d098089a0d3cedbe6c8734fdaa6d435661) Introducing compare (@mistercrunch) +- [495c2df](https://github.com/airbnb/caravel/commit/495c2dfeca3dc30c0c4041f947e8e55652e59182) Ripping highcharts out (@mistercrunch) +- [bf8ce17](https://github.com/airbnb/caravel/commit/bf8ce1716a479bac34480ebb79c3252bc4e9f156) nvd3 Stacked Area chart (@mistercrunch) ### 0.4.0 (2015/09/27 04:39 +00:00) -- [#33](https://github.com/airbnb/caravel/pull/33) Adding nvd3 support (@mistercrunch) -- [#32](https://github.com/airbnb/caravel/pull/32) Adding a foundation for unit tests (@mistercrunch) -- [#31](https://github.com/airbnb/caravel/pull/31) Adding a button to test connections (@mistercrunch) -- [#30](https://github.com/airbnb/caravel/pull/30) Word cloud widget! (@mistercrunch) -- [#29](https://github.com/airbnb/caravel/pull/29) Adding support for markup (html/markdown) widgets (@mistercrunch) -- [#28](https://github.com/airbnb/caravel/pull/28) Fix default Sqlite path. (@noddi) -- [#27](https://github.com/airbnb/caravel/pull/27) More refactor and bugfixes (@mistercrunch) -- [#26](https://github.com/airbnb/caravel/pull/26) Bugfix (@mistercrunch) -- [#25](https://github.com/airbnb/caravel/pull/25) Adding basic dashboarding support! (@mistercrunch) -- [#23](https://github.com/airbnb/caravel/pull/23) Custom WHERE clause for tables (not druid) + error handling refactor (@mistercrunch) -- [#22](https://github.com/airbnb/caravel/pull/22) Form factory refactor (@mistercrunch) -- [#20](https://github.com/airbnb/caravel/pull/20) add tzinfo config, useful when start druid without utc timezone (@wbchn) +- [e643671](https://github.com/airbnb/caravel/commit/e64367149e54401736cc8f2edf78a0a78e644ff5) v0.4.0 (@mistercrunch) +- [#33](https://github.com/airbnb/caravel/pull/33) Merge pull request #33 from mistercrunch/nvd3 (@mistercrunch) +- [89e9290](https://github.com/airbnb/caravel/commit/89e92904e1316bfbd88da45a41526bd28404e6f3) Adding nvd3 support (@mistercrunch) +- [703b6f6](https://github.com/airbnb/caravel/commit/703b6f612bca37df9f239ea9154aa5076ca1ad42) Forgot to add some files for unit tests (@mistercrunch) +- [f1a64c0](https://github.com/airbnb/caravel/commit/f1a64c0988181f6626400b308e9718aaf065e2ad) Allowing 2 widgets to overflow (@mistercrunch) +- [8d4c3ea](https://github.com/airbnb/caravel/commit/8d4c3ea381a3fecb535ef72dc126fd48a851fba1) Increasing test coverage to 68% (@mistercrunch) +- [aea304d](https://github.com/airbnb/caravel/commit/aea304d8145814d0560562eb5176cbf92bfa6659) Making sum metrics for numeric columns (@mistercrunch) +- [1d6d821](https://github.com/airbnb/caravel/commit/1d6d8210081a1e6ae3a3dafd0a5bd5e15c0c6f15) Changing default to 100 items per page (@mistercrunch) +- [82bf543](https://github.com/airbnb/caravel/commit/82bf5437cd21df1f3ce299efff04e0262e109549) More screenshots (@mistercrunch) +- [#32](https://github.com/airbnb/caravel/pull/32) Merge pull request #32 from mistercrunch/tests (@mistercrunch) +- [c4b24cb](https://github.com/airbnb/caravel/commit/c4b24cb9cca3797dbfa85fd3f0c15d7ffb99369b) Adding a foundation for unit tests (@mistercrunch) +- [f95e844](https://github.com/airbnb/caravel/commit/f95e84442fc0cdd2ae9b1cb7f3af85443c33f713) Trying POST instead of GET for testconn (@mistercrunch) +- [83e37f6](https://github.com/airbnb/caravel/commit/83e37f66fa5663906af3821341096efe5fe66e67) Adding fields to list_columns of DatabaseView (@mistercrunch) +- [74ae4ee](https://github.com/airbnb/caravel/commit/74ae4ee7049c306aa023ced6791f281b1e3d0b37) ADding help text around sqlalchemy URI (@mistercrunch) +- [#31](https://github.com/airbnb/caravel/pull/31) Merge pull request #31 from mistercrunch/test_connection (@mistercrunch) +- [e854798](https://github.com/airbnb/caravel/commit/e854798730f0d2f1d73cff9edd033cc018b79568) Adding a button to test connections (@mistercrunch) +- [caafb1e](https://github.com/airbnb/caravel/commit/caafb1ef4c568ee1d4b5a2a45b9d2c33f77007be) Changing title (@mistercrunch) +- [63d55c9](https://github.com/airbnb/caravel/commit/63d55c9f93bcce1adec039a11ad8dcd8a7550a77) Polish (@mistercrunch) +- [71274ae](https://github.com/airbnb/caravel/commit/71274ae6098e3739c5a98b76b75cea92d8e7d2a2) Beautifying the index page (@mistercrunch) +- [e126ab4](https://github.com/airbnb/caravel/commit/e126ab4eb8aed5f8514004a4a366f45f2d5cc256) Improvements (@mistercrunch) +- [f395c83](https://github.com/airbnb/caravel/commit/f395c83bae344a0e20f2090e7f0f350583da5ced) Improving the main page (@mistercrunch) +- [#30](https://github.com/airbnb/caravel/pull/30) Merge pull request #30 from mistercrunch/word_cloud (@mistercrunch) +- [2cbc2e3](https://github.com/airbnb/caravel/commit/2cbc2e36e35b503c58df8adb9f50075427cbd987) Adding a word cloud widget (@mistercrunch) +- [a28d9d4](https://github.com/airbnb/caravel/commit/a28d9d4bb1d0e61ae4daa1f5bdbc0235a04442ff) Bugfix (@mistercrunch) +- [#29](https://github.com/airbnb/caravel/pull/29) Merge pull request #29 from mistercrunch/markup_widgets (@mistercrunch) +- [2488288](https://github.com/airbnb/caravel/commit/24882884b823415bd0d68d37c1826909da5f1833) Forgot to git add viz_markup.html (@mistercrunch) +- [f5e355a](https://github.com/airbnb/caravel/commit/f5e355a26f518c6d9b667e3ffd8e19fe4680e7a1) Forgot to git add viz_markup.html (@mistercrunch) +- [e4a5f34](https://github.com/airbnb/caravel/commit/e4a5f34f71fdc2a89398128bab5d7fe1145e9d41) Uncommenting try block (@mistercrunch) +- [449441f](https://github.com/airbnb/caravel/commit/449441fed5097b30eb9600a6a0225647423c8801) Adding support for markup (html/markdown) widgets (@mistercrunch) +- [3d8fbaa](https://github.com/airbnb/caravel/commit/3d8fbaa96650299c58289fca813751a34ff1b0d9) Improvments to the dashboard view (@mistercrunch) +- [ff29f90](https://github.com/airbnb/caravel/commit/ff29f905c9ec2d346d6702006110cd04dba061e8) Loading examples with a CLI subcommand (@mistercrunch) +- [4d1d3ad](https://github.com/airbnb/caravel/commit/4d1d3ad0f67b6fba197236b3e3d94c97bd9f3401) Minor bugfix (@mistercrunch) +- [e1b3c7e](https://github.com/airbnb/caravel/commit/e1b3c7e63b83082dbe1aa79e25e6d634933a23cf) Bugfixes+ better docs (@mistercrunch) +- [2cbe25c](https://github.com/airbnb/caravel/commit/2cbe25c6b59fba3991224dfd673ba6b9469e1766) Changing an icon (@mistercrunch) +- [c09dca5](https://github.com/airbnb/caravel/commit/c09dca514d15df1718521a1088fa96ecf8c09cbc) Adding a BigNumber widget (@mistercrunch) +- [72ec6ae](https://github.com/airbnb/caravel/commit/72ec6ae5702b0008e4f1939824cddb2206fd8a1c) Cosmetics (@mistercrunch) +- [#28](https://github.com/airbnb/caravel/pull/28) Merge pull request #28 from noddi/bugfix/default_sqlite_path (@noddi) +- [6c8f268](https://github.com/airbnb/caravel/commit/6c8f26858794ffa3c5b80cf8ab83d685a57a7c01) Fix default Sqlite path in README. (@noddi) +- [8ac35bd](https://github.com/airbnb/caravel/commit/8ac35bd6106254e75e0ef5e4c4a2084d1a6b6b63) Fix default Sqlite path. (@noddi) +- [e0d6d20](https://github.com/airbnb/caravel/commit/e0d6d209939f6536b8a2a30b990a790190834da3) Adding a command to load a sample dataset (@mistercrunch) +- [4edbbd3](https://github.com/airbnb/caravel/commit/4edbbd350db0a356bed4d6b60a8feed02f512bd3) More bug squashing (@mistercrunch) +- [#27](https://github.com/airbnb/caravel/pull/27) Merge pull request #27 from mistercrunch/dash (@mistercrunch) +- [e5e2988](https://github.com/airbnb/caravel/commit/e5e2988e2df1097ae7a2afcf95f649840d1de3a3) More refactor and bugfixes (@mistercrunch) +- [#26](https://github.com/airbnb/caravel/pull/26) Merge pull request #26 from mistercrunch/dash (@mistercrunch) +- [16550b9](https://github.com/airbnb/caravel/commit/16550b9753b92e203ad8844fada4d865e34fcd1e) Bugfix (@mistercrunch) +- [#25](https://github.com/airbnb/caravel/pull/25) Merge pull request #25 from mistercrunch/dash (@mistercrunch) +- [cd09b0d](https://github.com/airbnb/caravel/commit/cd09b0ddef97c67d4340154fc6697adb92ffc65a) Bugfixes (@mistercrunch) +- [f6753af](https://github.com/airbnb/caravel/commit/f6753afa75dc1229f5b5ab4188808b66b9be9962) Panoramix v1 dashboards is up (@mistercrunch) +- [521b000](https://github.com/airbnb/caravel/commit/521b000ab6733026e00ec9db38dd0388828bcdc6) Checkpoint (@mistercrunch) +- [359a81e](https://github.com/airbnb/caravel/commit/359a81eee3ff04cf92dd5db0569c3fdd58b14379) Getting back into a working state (@mistercrunch) +- [0bc2e71](https://github.com/airbnb/caravel/commit/0bc2e71ac6dbb74e651cd428f8180a42a24a64db) Changing the way viz templates are defined using macros instead (@mistercrunch) +- [6daf92e](https://github.com/airbnb/caravel/commit/6daf92e3c1fdbd76079bbeb4dd6f8790f6551871) About to start ajaxifying (@mistercrunch) +- [a5b8964](https://github.com/airbnb/caravel/commit/a5b896414d1ae73783c9a26bd74342bd4c05d75f) Dashboards (@mistercrunch) +- [95b0801](https://github.com/airbnb/caravel/commit/95b080160f6b1cd144631f13cf5c5a4545d473ec) Pinning flask-login (@mistercrunch) +- [3635191](https://github.com/airbnb/caravel/commit/36351918c92504af27603c35a981f25ff31e732f) Dashboards (@mistercrunch) +- [e755854](https://github.com/airbnb/caravel/commit/e755854c29206195a872c7b754486f80ac1391a0) Save and embed (@mistercrunch) +- [5f20a08](https://github.com/airbnb/caravel/commit/5f20a080f408fe21dc799cbf45cb3f860f91440c) Setting up alembic (@mistercrunch) +- [ca39597](https://github.com/airbnb/caravel/commit/ca3959783ccaa3662b256de67df2bf1b20b4b8a8) New script (@mistercrunch) +- [9a63a31](https://github.com/airbnb/caravel/commit/9a63a312b6518c58d4423d2297f5482e468f56db) Warn on row limit reached (@mistercrunch) +- [5825f45](https://github.com/airbnb/caravel/commit/5825f4539de92edcf784a43f3570ec745b4c50dc) Allowing for form field description and tooltips (@mistercrunch) +- [#23](https://github.com/airbnb/caravel/pull/23) Merge pull request #23 from mistercrunch/where (@mistercrunch) +- [fab0670](https://github.com/airbnb/caravel/commit/fab067066934ccdd8b118b41c9642db2a711f4f5) Custom WHERE clause for tables (not druid) + error handling refactor (@mistercrunch) +- [67c5f63](https://github.com/airbnb/caravel/commit/67c5f637d12a286896b1fe7487c1bf50d46cf3b9) Linting (@mistercrunch) +- [#22](https://github.com/airbnb/caravel/pull/22) Merge pull request #22 from mistercrunch/forms (@mistercrunch) +- [#20](https://github.com/airbnb/caravel/pull/20) Merge pull request #20 from wbchn/master (@wbchn) +- [1283bc0](https://github.com/airbnb/caravel/commit/1283bc07889714a6f0c6232b5a892b7b0e0ff226) Form factory refactor (@mistercrunch) +- [6dd81a3](https://github.com/airbnb/caravel/commit/6dd81a3e95a9d67be743815ff9bfcd465278b3e9) Adding argparse for port and debug mode on bin/panoramix (@mistercrunch) +- [483935c](https://github.com/airbnb/caravel/commit/483935cc12a3cebc92f7d26c0e4d9ac5cb36b510) Marking distribution as is_timeseries=False (@mistercrunch) +- [bca1e15](https://github.com/airbnb/caravel/commit/bca1e15e44710d90d8c57afadb6d3f9dd7bec0ca) Temp DB in /tmp (@mistercrunch) +- [11aaaf3](https://github.com/airbnb/caravel/commit/11aaaf3e11595d1f7f5a26749ff6fea649fc6a55) add tzinfo config, useful when start druid without utc timezone ### 0.2.1 (2015/09/05 22:08 +00:00) -- [#19](https://github.com/airbnb/caravel/pull/19) Preparing pypi package (@mistercrunch) +- [c95c252](https://github.com/airbnb/caravel/commit/c95c2522ab61349376686bdfd30cca7db229a3a6) v0.2.1 (@mistercrunch) +- [58c2186](https://github.com/airbnb/caravel/commit/58c2186f564b509a6738a9b024f987656def9a4b) Adding a few screenshots to README (@mistercrunch) +- [#19](https://github.com/airbnb/caravel/pull/19) Merge pull request #19 from mistercrunch/setup (@mistercrunch) ### 0.2.0 (2015/09/05 20:43 +00:00) -- [#16](https://github.com/airbnb/caravel/pull/16) Adding Bubble charts (@mistercrunch) -- [#13](https://github.com/airbnb/caravel/pull/13) Now supporting SQL Multiple database (@mistercrunch) -- [#12](https://github.com/airbnb/caravel/pull/12) Cosmetricks (@mistercrunch) -- [#11](https://github.com/airbnb/caravel/pull/11) Fixing the ways metrics are autogenerated (@mistercrunch) -- [#10](https://github.com/airbnb/caravel/pull/10) Now enabling multi-cluster, connection info managed in UI (@mistercrunch) -- [#9](https://github.com/airbnb/caravel/pull/9) Multi delete action on datasources (@mistercrunch) -- [#8](https://github.com/airbnb/caravel/pull/8) Preventing bad json from creating problems (@mistercrunch) -- [#3](https://github.com/airbnb/caravel/pull/3) Implementing my own highcharts wrapper (@mistercrunch) +- [efc54e0](https://github.com/airbnb/caravel/commit/efc54e0f65f7c9df18b2a15d230350fd19f51426) Preparing pypi package (@mistercrunch) +- [d419279](https://github.com/airbnb/caravel/commit/d419279d706e3a0ea5f1d23fc4a5cacb1b8ec952) Minor improvments (@mistercrunch) +- [e1e2980](https://github.com/airbnb/caravel/commit/e1e298044e2dfbc449a4e8770bd13efc3059dd93) Making x in timeseries non-ordinal (@mistercrunch) +- [b7acbd8](https://github.com/airbnb/caravel/commit/b7acbd8d100fc8690863a8a396096fa3df3a895a) Bugfix on timeseries where granularity=all (@mistercrunch) +- [8e5a827](https://github.com/airbnb/caravel/commit/8e5a827b7515f9ed621000a134a87425deee54ac) Adding gunicorn as a multi-threaded production server (@mistercrunch) +- [acd14af](https://github.com/airbnb/caravel/commit/acd14afd4efe24afc046b06b88ccbdfa3a63598f) More readable long error msg (@mistercrunch) +- [39a9b3b](https://github.com/airbnb/caravel/commit/39a9b3b1e98f9f10d1d39f60ced56e4655fc3f88) Better automation around database table semantic layer (@mistercrunch) +- [b240265](https://github.com/airbnb/caravel/commit/b240265d84db394626a7d148a91bc82997de5e38) Squashing a small bug (@mistercrunch) +- [4ecf9d1](https://github.com/airbnb/caravel/commit/4ecf9d1beb18162638a12ab3da4c561a4af04f74) Table view now shows metrics histograms (@mistercrunch) +- [584ced5](https://github.com/airbnb/caravel/commit/584ced5eab4c1c6f481cb09c10daace52c862a1e) Fillna (@mistercrunch) +- [0517f1c](https://github.com/airbnb/caravel/commit/0517f1ca00a585144e985d6f3753871df9389306) Bugfix (@mistercrunch) +- [6510ee6](https://github.com/airbnb/caravel/commit/6510ee64279c45b237e816b7bfea63cdb653d9c9) Sizes first (@mistercrunch) +- [#16](https://github.com/airbnb/caravel/pull/16) Merge pull request #16 from mistercrunch/scatter (@mistercrunch) +- [56bfc31](https://github.com/airbnb/caravel/commit/56bfc31966d661973e8a1be0071a828563b519fb) Adding Bubble charts (@mistercrunch) +- [#15](https://github.com/airbnb/caravel/pull/15) Merge pull request #15 from mistercrunch/scatter (@mistercrunch) +- [0cfa0e6](https://github.com/airbnb/caravel/commit/0cfa0e618a048aac7cf243d49a29551200646ec7) Adding Bubble charts (@mistercrunch) +- [36a58e8](https://github.com/airbnb/caravel/commit/36a58e88850f9a09bac37f5cd2dee8bdb1677cb1) Minor fixes and improvments (@mistercrunch) +- [59efbcd](https://github.com/airbnb/caravel/commit/59efbcdead99ed9e5e185c0052c27b872eb37029) Using sqlalchemy expression API to support all SQL dialects (@mistercrunch) +- [3a0eb07](https://github.com/airbnb/caravel/commit/3a0eb07fe9f04540ebea1bbf0712c05209a963e7) Bugfixes (@mistercrunch) +- [221b86b](https://github.com/airbnb/caravel/commit/221b86b55100320fc428f76047a461c9371f68e8) Using default permission names (@mistercrunch) +- [3321a56](https://github.com/airbnb/caravel/commit/3321a56782debe12db16b531378f485a7c673f0c) Final touches on getting decent database support (@mistercrunch) +- [9e22749](https://github.com/airbnb/caravel/commit/9e227494cae4c3b8a66e1a6ab810360dc03dec92) Refreshing the docs after adding support for SQLA (@mistercrunch) +- [fac6dd1](https://github.com/airbnb/caravel/commit/fac6dd102d18cb0f290753d188133520425752d6) Adding a compare by value viz (@mistercrunch) +- [b4e7623](https://github.com/airbnb/caravel/commit/b4e76236a754a267d3e409fca03ff62655b7ed4a) Adding query time (@mistercrunch) +- [055d760](https://github.com/airbnb/caravel/commit/055d760d64057a4b675c57e4475256eb9fbe4304) Adding AuditMixin everywhere (@mistercrunch) +- [db56e84](https://github.com/airbnb/caravel/commit/db56e84fa863ef66885d88da73ffaf2a1afde112) Fixing FKs (@mistercrunch) +- [#13](https://github.com/airbnb/caravel/pull/13) Merge pull request #13 from mistercrunch/sql (@mistercrunch) +- [8ea0157](https://github.com/airbnb/caravel/commit/8ea0157f1c084a2edaee40c485f1cf21e2f5bcc6) SQL working ! (@mistercrunch) +- [b70b270](https://github.com/airbnb/caravel/commit/b70b270b1aa85512eb51c2aa7249e7858257c6bc) Pivoting into sqla instead of sql (@mistercrunch) +- [f39b241](https://github.com/airbnb/caravel/commit/f39b24175b4463e80576a0b393e4bf3442bd7695) About to mess with filters (@mistercrunch) +- [34acc90](https://github.com/airbnb/caravel/commit/34acc90f3fa22747e243f4750937cd70ab7aaf09) ALL OF SQL is coming along nicely (@mistercrunch) +- [2d192d1](https://github.com/airbnb/caravel/commit/2d192d1ae85eebb31f9e5350a8486d136ff9fa83) Query obj (@mistercrunch) +- [28c0292](https://github.com/airbnb/caravel/commit/28c0292920ee6748b7d83097c105e71776ab413f) Getting ready to gut panoramix (@mistercrunch) +- [#12](https://github.com/airbnb/caravel/pull/12) Merge pull request #12 from mistercrunch/cluster (@mistercrunch) +- [b734ace](https://github.com/airbnb/caravel/commit/b734aceff3ca99c81c7b904cd1cb8b5250c829ed) Cosmetics (@mistercrunch) +- [b1d009f](https://github.com/airbnb/caravel/commit/b1d009ffb8070882744731249a1235cead89ef26) Bug fixes (@mistercrunch) +- [#11](https://github.com/airbnb/caravel/pull/11) Merge pull request #11 from mistercrunch/cluster (@mistercrunch) +- [f851d20](https://github.com/airbnb/caravel/commit/f851d20a02feefb65a41279de7a286ac3817361b) Fixing the ways metrics are autogenerated (@mistercrunch) +- [#10](https://github.com/airbnb/caravel/pull/10) Merge pull request #10 from mistercrunch/cluster (@mistercrunch) +- [5e8fcab](https://github.com/airbnb/caravel/commit/5e8fcabf10eed37b585d83230345400630252098) Removing compare feature (@mistercrunch) +- [374802e](https://github.com/airbnb/caravel/commit/374802e437720ebe4a230115e3b4d7c61f2fff2c) Now enabling multi-cluster, connection info managed in UI (@mistercrunch) +- [6032daf](https://github.com/airbnb/caravel/commit/6032daf5f01266fc4414973ac84afed5041ada82) Multi clusters (@mistercrunch) +- [#9](https://github.com/airbnb/caravel/pull/9) Merge pull request #9 from mistercrunch/actions (@mistercrunch) +- [e8f480f](https://github.com/airbnb/caravel/commit/e8f480fc48dccef2d1e61b7316dedbfe0aa51cf9) Multi delete action on datasources (@mistercrunch) +- [f07ea2b](https://github.com/airbnb/caravel/commit/f07ea2b83e0f18263c306fc8b771a24ca7e3688e) TODO (@mistercrunch) +- [#8](https://github.com/airbnb/caravel/pull/8) Merge pull request #8 from mistercrunch/bad_json (@mistercrunch) +- [6be2224](https://github.com/airbnb/caravel/commit/6be22246e967f6095e0de4fd1c011ce1e3091605) Preventing bad json from creating problems (@mistercrunch) +- [fb365cd](https://github.com/airbnb/caravel/commit/fb365cd17823a1e49e17161262f485b857f145ab) Making DEBUG a configuration (@mistercrunch) +- [0d92bcc](https://github.com/airbnb/caravel/commit/0d92bccbb0bddf2976658cac77a9f90c9adb9de7) Adding health and ping endpoints (@mistercrunch) +- [c379430](https://github.com/airbnb/caravel/commit/c379430a4174bed8dd95a8db8db408322e8bdc83) Removing debug print statement (@mistercrunch) +- [bc1db2d](https://github.com/airbnb/caravel/commit/bc1db2db21843464975a413e68dabd4d7f979ca8) Simplify install (@mistercrunch) +- [1c6177c](https://github.com/airbnb/caravel/commit/1c6177ce4be712e507b69f26ba733736f445a454) All sorts of improvements (@mistercrunch) +- [c29444e](https://github.com/airbnb/caravel/commit/c29444e1a74c104846309a1ffccdf0fb0b196410) Better PORT defaults (@mistercrunch) +- [74a2e7d](https://github.com/airbnb/caravel/commit/74a2e7df54820f2609cedb2a0fc49ca2468b16f9) Managing perms for new views (@mistercrunch) +- [#3](https://github.com/airbnb/caravel/pull/3) Merge pull request #3 from mistercrunch/charts (@mistercrunch) +- [d438520](https://github.com/airbnb/caravel/commit/d438520660cf16dd4376c20a6660c8e47b2331fc) Implementing my own highcharts wrapper (@mistercrunch) +- [9ce4f68](https://github.com/airbnb/caravel/commit/9ce4f684734c9c3000aa9fa30f5e953971410f6a) New Charts (@mistercrunch) +- [056be73](https://github.com/airbnb/caravel/commit/056be737af50967ca7ccc291f2218ec9c9b995b8) Fixing filter for timeseries (@mistercrunch) +- [4bb313c](https://github.com/airbnb/caravel/commit/4bb313cc4492ada5102cc0f6afabc237c9abaeb9) Improving the installation instructions (@mistercrunch) +- [67de93d](https://github.com/airbnb/caravel/commit/67de93d9f1c1864891cc732bb44c995ab5ee9ab4) Minor change in README (@mistercrunch) +- [6b30eec](https://github.com/airbnb/caravel/commit/6b30eec5b217146b79f84a70c9ef9dc0b7d44db3) Adding missing req (@mistercrunch) +- [6031772](https://github.com/airbnb/caravel/commit/60317727ab69f6c209352fad5b3580213d9025e5) Adding installation infromation in README.md (@mistercrunch) +- [34fd113](https://github.com/airbnb/caravel/commit/34fd11364fcfc3e2ca28341522fa5ca75012b448) LICENSE (@mistercrunch) +- [0b6d808](https://github.com/airbnb/caravel/commit/0b6d808d7abeeed2ae9b15bb3b7b133728c68c77) A slightly better README (@mistercrunch) +- [4d6e358](https://github.com/airbnb/caravel/commit/4d6e358fb623b21f7b1dd88cd94a22f0a3d56608) A screenshot in the README (@mistercrunch) +- [c6dca0f](https://github.com/airbnb/caravel/commit/c6dca0f27d6abcbeb392b33b6e9bc2952f247ccd) Improvements (@mistercrunch) +- [bd1d8eb](https://github.com/airbnb/caravel/commit/bd1d8eb2424a330b6cbbb84c1514260c1cf82c04) Better and better (@mistercrunch) +- [4334373](https://github.com/airbnb/caravel/commit/4334373a33264906ddf6ea3d70a3979cc4d697fc) Numerous improvements (@mistercrunch) +- [d268b6b](https://github.com/airbnb/caravel/commit/d268b6b231373c6d7a245a8990d203e289b7d262) Now supporting multi-metric selection (@mistercrunch) +- [8b17563](https://github.com/airbnb/caravel/commit/8b175638cdb5d3f4105d82e7fae43cbf4d05e61c) Humanized time boundaries and granularity (@mistercrunch) +- [16f7bf9](https://github.com/airbnb/caravel/commit/16f7bf9054b2ab2875a90aaa5861ef805954002e) Cosmetics (@mistercrunch) +- [9ad7d54](https://github.com/airbnb/caravel/commit/9ad7d5480b683fd114eeec694abbe786827177cd) A better README (@mistercrunch) +- [c441c5e](https://github.com/airbnb/caravel/commit/c441c5e211351866d1b706a84cba89525ea5f43c) Merge branch 'objects' (@mistercrunch) +- [dd867da](https://github.com/airbnb/caravel/commit/dd867da115f785ab078e5cfa3fd8db07a2fffc3c) Cleaning up (@mistercrunch) +- [29b0bdd](https://github.com/airbnb/caravel/commit/29b0bdd00acb7bb5d103d9d37eb1a5fdaa914bb9) Stable (@mistercrunch) +- [8431800](https://github.com/airbnb/caravel/commit/8431800bd60955a2b932eb407d98cc4a87926626) Starting over (@mistercrunch) +- [4cb380d](https://github.com/airbnb/caravel/commit/4cb380d9ba10bf098a0a9a330c91f469d867da95) Starting over with flask app-builder (@mistercrunch) +- [3bce904](https://github.com/airbnb/caravel/commit/3bce90445478f6f8d4ad930259a25bfb3429068c) Integrated the admin (@mistercrunch) +- [66dca37](https://github.com/airbnb/caravel/commit/66dca37c9c98eae6acf0c8b1698987ffe33a85eb) Refactoring (@mistercrunch) +- [059c02a](https://github.com/airbnb/caravel/commit/059c02aed05093a8ba7973611a0429443db2256b) Checkpoint (@mistercrunch) +- [9f12046](https://github.com/airbnb/caravel/commit/9f1204605f8a22ce87d797cb4d1f6ad580835a2d) Working checkpoint before classifying Viz (@mistercrunch) +- [68c5a48](https://github.com/airbnb/caravel/commit/68c5a48c1ffcc65029c479212e9063074b54eb47) Initial commit (@mistercrunch) +- [447eefc](https://github.com/airbnb/caravel/commit/447eefc79bff4c3fb06b37a2d5d0add380362d65) Initial commit (@mistercrunch) From 2198fd4e3d0ea2d19e3539f05f17a3c2c675ded3 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Thu, 28 Apr 2016 17:55:01 -0700 Subject: [PATCH 10/51] Adding badge for python versions --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e398dff8a9067..32751ae88d322 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Caravel [![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) +[![PyPI](https://img.shields.io/pypi/pyversions/plugout.svg?maxAge=2592000)](https://pypi.python.org/pypi/plugout) [![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) [![Documentation](https://img.shields.io/badge/docs-airbnb.io-blue.svg)](http://airbnb.io/caravel/) From 77e4d4b2d4e0e2f29998896b1089c0a78330144c Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Thu, 28 Apr 2016 17:58:09 -0700 Subject: [PATCH 11/51] Fixgin README link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 32751ae88d322..bf2dc7066fd48 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Caravel [![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) -[![PyPI](https://img.shields.io/pypi/pyversions/plugout.svg?maxAge=2592000)](https://pypi.python.org/pypi/plugout) +[![PyPI](https://img.shields.io/pypi/pyversions/caravel.svg?maxAge=2592000)](https://pypi.python.org/pypi/caravel) [![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) [![Documentation](https://img.shields.io/badge/docs-airbnb.io-blue.svg)](http://airbnb.io/caravel/) From b78ec54650e1602d800f73cc7bd8a49eebdd0835 Mon Sep 17 00:00:00 2001 From: Chris Williams Date: Fri, 29 Apr 2016 10:59:29 -0700 Subject: [PATCH 12/51] Merge pull request #414 from airbnb/chris/fix-sunburst-level-trunc [bugfix] allow repeated values across levels when building sunburst hierarchy --- caravel/assets/visualizations/sunburst.js | 24 ++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/caravel/assets/visualizations/sunburst.js b/caravel/assets/visualizations/sunburst.js index 6b919aea0b275..ccf3b917a155f 100644 --- a/caravel/assets/visualizations/sunburst.js +++ b/caravel/assets/visualizations/sunburst.js @@ -57,7 +57,6 @@ function sunburstVis(slice) { slice.error(error.responseText); return ''; } - createBreadcrumbs(rawData); createVisualization(rawData); @@ -299,7 +298,8 @@ function sunburstVis(slice) { name: "root", children: [] }; - for (var i = 0; i < rows.length; i++) { + + for (var i = 0; i < rows.length; i++) { // each record [groupby1val, groupby2val, ( or 0)n, m1, m2] var row = rows[i]; var m1 = Number(row[row.length - 2]); var m2 = Number(row[row.length - 1]); @@ -308,19 +308,22 @@ function sunburstVis(slice) { continue; } var currentNode = root; - for (var j = 0; j < levels.length; j++) { + for (var level = 0; level < levels.length; level++) { var children = currentNode.children || []; - var nodeName = levels[j]; + var nodeName = levels[level]; // If the next node has the name "0", it will - var isLeafNode = (j >= levels.length - 1) || levels[j+1] === 0; - var childNode; + var isLeafNode = (level >= levels.length - 1) || levels[level+1] === 0; + var childNode, currChild; if (!isLeafNode) { // Not yet at the end of the sequence; move down the tree. var foundChild = false; for (var k = 0; k < children.length; k++) { - if (children[k].name === nodeName) { - childNode = children[k]; + currChild = children[k]; + if (currChild.name === nodeName && + currChild.level === level) { // must match name AND level + + childNode = currChild; foundChild = true; break; } @@ -329,11 +332,13 @@ function sunburstVis(slice) { if (!foundChild) { childNode = { name: nodeName, - children: [] + children: [], + level: level }; children.push(childNode); } currentNode = childNode; + } else if (nodeName !== 0) { // Reached the end of the sequence; create a leaf node. childNode = { @@ -361,6 +366,7 @@ function sunburstVis(slice) { } return [node.m1, node.m2]; } + recurse(root); return root; } From 7b5b602e962c20fc745909994075c7bbdc54d8e5 Mon Sep 17 00:00:00 2001 From: x4base Date: Sat, 30 Apr 2016 23:30:40 +0800 Subject: [PATCH 13/51] Use batch_alter_table to drop column in the migration script (#406) --- .../versions/c3a8f8611885_materializing_permission.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/caravel/migrations/versions/c3a8f8611885_materializing_permission.py b/caravel/migrations/versions/c3a8f8611885_materializing_permission.py index 33084ffea94da..1d65a172a4fa6 100644 --- a/caravel/migrations/versions/c3a8f8611885_materializing_permission.py +++ b/caravel/migrations/versions/c3a8f8611885_materializing_permission.py @@ -30,4 +30,6 @@ def upgrade(): def downgrade(): - op.drop_column('slices', 'perm') + # Use batch_alter_table because dropping columns is not supported in SQLite + with op.batch_alter_table('slices') as batch_op: + batch_op.drop_column('perm') From d7ea47387f13f13e6586cc8d897bcf25dfb45827 Mon Sep 17 00:00:00 2001 From: Siddharth Gupta Date: Sun, 1 May 2016 07:59:08 -0700 Subject: [PATCH 14/51] enable timerotateloghandler (configurable) (#311) * attempt to enchance logging * clean up logging * clean up logging * reset to logger * clean up imports * add comments in config.py * remove redundant declaration of logging.config. Already exists in caravel/__init__.py * replace RotatingFileHandler with TimedRotatingFileHandler * revert back running web server in debug mode * fix debug in bin/caravel * resolve build errors - formatting * need to test * enable time rotateloghandler * revert back print statements - add feature for rotatetimelog which is needed and make it configurable * revert back to default in master * fix build issues * remove extra print statement * change log location to default * configure console log level and format --- caravel/__init__.py | 17 +++++++++++++---- caravel/config.py | 23 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/caravel/__init__.py b/caravel/__init__.py index 74dcbd5584106..72999097b8ea6 100644 --- a/caravel/__init__.py +++ b/caravel/__init__.py @@ -6,6 +6,7 @@ import logging import os +from logging.handlers import TimedRotatingFileHandler from flask import Flask, redirect from flask.ext.appbuilder import SQLA, AppBuilder, IndexView @@ -20,10 +21,6 @@ APP_DIR = os.path.dirname(__file__) CONFIG_MODULE = os.environ.get('CARAVEL_CONFIG', 'caravel.config') -# Logging configuration -logging.basicConfig(format='%(asctime)s:%(levelname)s:%(name)s:%(message)s') -logging.getLogger().setLevel(logging.DEBUG) - app = Flask(__name__) app.config.from_object(CONFIG_MODULE) if not app.debug: @@ -37,6 +34,18 @@ migrate = Migrate(app, db, directory=APP_DIR + "/migrations") +# Logging configuration +logging.basicConfig(format=app.config.get('LOG_FORMAT')) +logging.getLogger().setLevel(app.config.get('LOG_LEVEL')) + +if app.config.get('ENABLE_TIME_ROTATE'): + logging.getLogger().setLevel(app.config.get('TIME_ROTATE_LOG_LEVEL')) + handler = TimedRotatingFileHandler(app.config.get('FILENAME'), + when=app.config.get('ROLLOVER'), + interval=app.config.get('INTERVAL'), + backupCount=app.config.get('BACKUP_COUNT')) + logging.getLogger().addHandler(handler) + class MyIndexView(IndexView): @expose('/') diff --git a/caravel/config.py b/caravel/config.py index 134127f37d5d2..07df0b5bf9c7c 100644 --- a/caravel/config.py +++ b/caravel/config.py @@ -130,6 +130,29 @@ VIZ_TYPE_BLACKLIST = [] +""" +1) http://docs.python-guide.org/en/latest/writing/logging/ +2) https://docs.python.org/2/library/logging.config.html +""" + +# Console Log Settings + +LOG_FORMAT = '%(asctime)s:%(levelname)s:%(name)s:%(message)s' +LOG_LEVEL = 'DEBUG' + +# --------------------------------------------------- +# Enable Time Rotate Log Handler +# --------------------------------------------------- +# LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL + +ENABLE_TIME_ROTATE = False +TIME_ROTATE_LOG_LEVEL = 'DEBUG' +FILENAME = '/tmp/caravel.log' +ROLLOVER = 'midnight' +INTERVAL = 1 +BACKUP_COUNT = 30 + + try: from caravel_config import * # noqa except Exception: From 0ca3f5ec800b5543747a00f24377a86a6f017226 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Mon, 2 May 2016 10:00:28 -0700 Subject: [PATCH 15/51] Improving SQLA query generation (#421) * Improving SQLA query generation * Fixing debug --- caravel/data/__init__.py | 2 +- ...9e13_adding_verbose_name_to_tablecolumn.py | 25 +++++++++ caravel/models.py | 51 +++++++++++-------- caravel/views.py | 4 +- tests/core_tests.py | 7 +-- 5 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 caravel/migrations/versions/f0fbf6129e13_adding_verbose_name_to_tablecolumn.py diff --git a/caravel/data/__init__.py b/caravel/data/__init__.py index 7b68670287f8a..69ad02cb3d2f3 100644 --- a/caravel/data/__init__.py +++ b/caravel/data/__init__.py @@ -372,7 +372,7 @@ def load_world_bank_health_n_pop(): merge_slice(slc) print("Creating a World's Health Bank dashboard") - dash_name = "World's Health Bank Dashboard" + dash_name = "World's Bank Data" dash = db.session.query(Dash).filter_by(dashboard_title=dash_name).first() if not dash: diff --git a/caravel/migrations/versions/f0fbf6129e13_adding_verbose_name_to_tablecolumn.py b/caravel/migrations/versions/f0fbf6129e13_adding_verbose_name_to_tablecolumn.py new file mode 100644 index 0000000000000..51f4923b9cedf --- /dev/null +++ b/caravel/migrations/versions/f0fbf6129e13_adding_verbose_name_to_tablecolumn.py @@ -0,0 +1,25 @@ +"""Adding verbose_name to tablecolumn + +Revision ID: f0fbf6129e13 +Revises: c3a8f8611885 +Create Date: 2016-05-01 12:21:18.331191 + +""" + +# revision identifiers, used by Alembic. +revision = 'f0fbf6129e13' +down_revision = 'c3a8f8611885' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column( + 'table_columns', + sa.Column('verbose_name', sa.String(length=1024), + nullable=True)) + + +def downgrade(): + op.drop_column('table_columns', 'verbose_name') diff --git a/caravel/models.py b/caravel/models.py index 619682a12be4a..928f1075a706a 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -564,15 +564,15 @@ def query( # sqla "and is required by this type of chart") metrics_exprs = [ - literal_column(m.expression).label(m.metric_name) + m.sqla_col for m in self.metrics if m.metric_name in metrics] if metrics: - main_metric_expr = literal_column([ - m.expression for m in self.metrics - if m.metric_name == metrics[0]][0]) + main_metric_expr = [ + m.sqla_col for m in self.metrics + if m.metric_name == metrics[0]][0] else: - main_metric_expr = literal_column("COUNT(*)") + main_metric_expr = literal_column("COUNT(*)").label("ccount") select_exprs = [] groupby_exprs = [] @@ -583,13 +583,8 @@ def query( # sqla inner_groupby_exprs = [] for s in groupby: col = cols[s] - expr = col.expression - if expr: - outer = literal_column(expr).label(s) - inner = literal_column(expr).label('__' + s) - else: - outer = column(s).label(s) - inner = column(s).label('__' + s) + outer = col.sqla_col + inner = col.sqla_col.label('__' + col.column_name) groupby_exprs.append(outer) select_exprs.append(outer) @@ -597,12 +592,12 @@ def query( # sqla inner_select_exprs.append(inner) elif columns: for s in columns: - select_exprs.append(s) + select_exprs.append(cols[s].sqla_col) metrics_exprs = [] if granularity: - dttm_expr = cols[granularity].expression or granularity - timestamp = literal_column(dttm_expr).label('timestamp') + dttm_expr = cols[granularity].sqla_col.label('timestamp') + timestamp = dttm_expr # Transforming time grain into an expression based on configuration time_grain_sqla = extras.get('time_grain_sqla') @@ -646,11 +641,7 @@ def query( # sqla col_obj = cols[col] if op in ('in', 'not in'): values = eq.split(",") - if col_obj.expression: - cond = ColumnClause( - col_obj.expression, is_literal=True).in_(values) - else: - cond = column(col).in_(values) + cond = col_obj.sqla_col.in_(values) if op == 'not in': cond = ~cond where_clause_and.append(cond) @@ -685,7 +676,10 @@ def query( # sqla engine = self.database.get_sqla_engine() sql = "{}".format( - qry.compile(engine, compile_kwargs={"literal_binds": True})) + qry.compile( + engine, compile_kwargs={"literal_binds": True},), + ) + print(sql) df = pd.read_sql_query( sql=sql, con=engine @@ -811,6 +805,11 @@ class SqlMetric(Model, AuditMixinNullable): expression = Column(Text) description = Column(Text) + @property + def sqla_col(self): + name = self.metric_name + return literal_column(self.expression).label(name) + class TableColumn(Model, AuditMixinNullable): @@ -822,6 +821,7 @@ class TableColumn(Model, AuditMixinNullable): table = relationship( 'SqlaTable', backref='columns', foreign_keys=[table_id]) column_name = Column(String(256)) + verbose_name = Column(String(1024)) is_dttm = Column(Boolean, default=False) is_active = Column(Boolean, default=True) type = Column(String(32), default='') @@ -842,6 +842,15 @@ def isnum(self): types = ('LONG', 'DOUBLE', 'FLOAT', 'BIGINT', 'INT') return any([t in self.type.upper() for t in types]) + @property + def sqla_col(self): + name = self.column_name + if not self.expression: + col = column(self.column_name).label(name) + else: + col = literal_column(self.expression).label(name) + return col + class DruidCluster(Model, AuditMixinNullable): diff --git a/caravel/views.py b/caravel/views.py index 6d6ef5d7d7d7e..69ee8e918adfd 100644 --- a/caravel/views.py +++ b/caravel/views.py @@ -102,8 +102,8 @@ class TableColumnInlineView(CompactCRUDMixin, CaravelModelView): # noqa datamodel = SQLAInterface(models.TableColumn) can_delete = False edit_columns = [ - 'column_name', 'description', 'groupby', 'filterable', 'table', - 'count_distinct', 'sum', 'min', 'max', 'expression', 'is_dttm'] + 'column_name', 'verbose_name', 'description', 'groupby', 'filterable', + 'table', 'count_distinct', 'sum', 'min', 'max', 'expression', 'is_dttm'] add_columns = edit_columns list_columns = [ 'column_name', 'type', 'groupby', 'filterable', 'count_distinct', diff --git a/tests/core_tests.py b/tests/core_tests.py index b25c85799cb77..d8e527808e57b 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -113,10 +113,11 @@ def test_slices(self): urls = [] for slc in db.session.query(Slc).all(): urls += [ - slc.slice_url, - slc.viz.json_endpoint, + (slc.slice_name, slc.slice_url), + (slc.slice_name, slc.viz.json_endpoint), ] - for url in urls: + for name, url in urls: + print("Slice: " + name) self.client.get(url) def test_dashboard(self): From 26d273643b9798af24e8e55303e8eeb41297d36d Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Mon, 2 May 2016 10:00:39 -0700 Subject: [PATCH 16/51] Allowing for druid post aggregations (#418) * Druid post aggregations * Fixing tests --- caravel/models.py | 55 ++++++++++++++++++++++++++++++++++++--------- caravel/views.py | 19 +++++++++------- tests/core_tests.py | 2 +- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/caravel/models.py b/caravel/models.py index 928f1075a706a..30494d6f7df41 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -24,6 +24,7 @@ from pydruid.client import PyDruid from flask.ext.appbuilder.models.decorators import renders from pydruid.utils.filters import Dimension, Filter +from pydruid.utils.postaggregator import Postaggregator from six import string_types from sqlalchemy import ( Column, Integer, String, ForeignKey, Text, Boolean, DateTime, Date, @@ -44,6 +45,17 @@ QueryResult = namedtuple('namedtuple', ['df', 'query', 'duration']) +class JavascriptPostAggregator(Postaggregator): + def __init__(self, name, field_names, function): + self.post_aggregator = { + 'type': 'javascript', + 'fieldNames': field_names, + 'name': name, + 'function': function, + } + self.name = name + + class AuditMixinNullable(AuditMixin): """Altering the AuditMixin to use nullable fields @@ -319,6 +331,10 @@ def filterable_column_names(self): def dttm_cols(self): return [] + @property + def url(self): + return '/{}/edit/{}'.format(self.baselink, self.id) + class Database(Model, AuditMixinNullable): @@ -467,10 +483,6 @@ def __repr__(self): def description_markeddown(self): return utils.markdown(self.description) - @property - def url(self): - return '/tablemodelview/edit/{}'.format(self.id) - @property def link(self): return '{self.table_name}'.format(**locals()) @@ -896,7 +908,7 @@ class DruidDatasource(Model, AuditMixinNullable, Queryable): type = "druid" - baselink = "datasourcemodelview" + baselink = "druiddatasourcemodelview" __tablename__ = 'datasources' id = Column(Integer, primary_key=True) @@ -930,10 +942,6 @@ def perm(self): "[{obj.cluster_name}].[{obj.datasource_name}]" "(id:{obj.id})").format(obj=self) - @property - def url(self): - return '/datasourcemodelview/edit/{}'.format(self.id) - @property def link(self): return ( @@ -1047,9 +1055,34 @@ def query( # druid to_dttm = to_dttm.replace(tzinfo=config.get("DRUID_TZ")) query_str = "" + metrics_dict = {m.metric_name: m for m in self.metrics} + all_metrics = [] + post_aggs = {} + for metric_name in metrics: + metric = metrics_dict[metric_name] + if metric.metric_type != 'postagg': + all_metrics.append(metric_name) + else: + conf = metric.json_obj + fields = conf.get('fields', []) + all_metrics += [ + f.get('fieldName') for f in fields + if f.get('type') == 'fieldAccess'] + all_metrics += conf.get('fieldNames', []) + if conf.get('type') == 'javascript': + post_aggs[metric_name] = JavascriptPostAggregator( + name=conf.get('name'), + field_names=conf.get('fieldNames'), + function=conf.get('function')) + else: + post_aggs[metric_name] = Postaggregator( + conf.get('fn', "/"), + conf.get('fields', []), + conf.get('name', '')) aggregations = { m.metric_name: m.json_obj - for m in self.metrics if m.metric_name in metrics + for m in self.metrics + if m.metric_name in all_metrics } granularity = granularity or "all" if granularity != "all": @@ -1067,6 +1100,7 @@ def query( # druid dimensions=groupby, aggregations=aggregations, granularity=granularity, + post_aggregations=post_aggs, intervals=from_dttm.isoformat() + '/' + to_dttm.isoformat(), ) filters = None @@ -1171,7 +1205,6 @@ def query( # druid cols += ['timestamp'] cols += [col for col in groupby if col in df.columns] cols += [col for col in metrics if col in df.columns] - cols += [col for col in df.columns if col not in cols] df = df[cols] return QueryResult( df=df, diff --git a/caravel/views.py b/caravel/views.py index 69ee8e918adfd..3a34f7a6c00da 100644 --- a/caravel/views.py +++ b/caravel/views.py @@ -159,14 +159,20 @@ class DruidMetricInlineView(CompactCRUDMixin, CaravelModelView): # noqa datamodel = SQLAInterface(models.DruidMetric) list_columns = ['metric_name', 'verbose_name', 'metric_type'] edit_columns = [ - 'metric_name', 'description', 'verbose_name', 'metric_type', - 'datasource', 'json'] - add_columns = [ - 'metric_name', 'verbose_name', 'metric_type', 'datasource', 'json'] + 'metric_name', 'description', 'verbose_name', 'metric_type', 'json', + 'datasource'] + add_columns = edit_columns page_size = 500 validators_columns = { 'json': [validate_json], } + description_columns = { + 'metric_type': utils.markdown( + "use `postagg` as the metric type if you are defining a " + "[Druid Post Aggregation]" + "(http://druid.io/docs/latest/querying/post-aggregations.html)", + True), + } appbuilder.add_view_no_menu(DruidMetricInlineView) @@ -390,10 +396,7 @@ class LogModelView(CaravelModelView): class DruidDatasourceModelView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.DruidDatasource) list_columns = [ - 'datasource_link', 'cluster', 'owner', - 'creator', 'created_on', - 'changed_by_', 'changed_on', - 'offset'] + 'datasource_link', 'cluster', 'changed_by_', 'modified', 'offset'] related_views = [DruidColumnInlineView, DruidMetricInlineView] edit_columns = [ 'datasource_name', 'cluster', 'description', 'owner', diff --git a/tests/core_tests.py b/tests/core_tests.py index d8e527808e57b..4d8bd69fc93cb 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -260,7 +260,7 @@ def test_client(self, PyDruid): df = pd.DataFrame(nres) instance.export_pandas.return_value = df instance.query_dict = {} - resp = self.client.get('/caravel/explore/druid/1/?viz_type=table&granularity=one+day&druid_time_origin=&since=7+days+ago&until=now&row_limit=5000&include_search=false&metrics=count&flt_col_0=dim1&flt_op_0=in&flt_eq_0=&slice_id=&slice_name=&collapsed_fieldsets=&action=&datasource_name=test_datasource&datasource_id=1&datasource_type=druid&previous_viz_type=table&json=true&force=true') + resp = self.client.get('/caravel/explore/druid/1/?viz_type=table&granularity=one+day&druid_time_origin=&since=7+days+ago&until=now&row_limit=5000&include_search=false&metrics=count&groupby=name&flt_col_0=dim1&flt_op_0=in&flt_eq_0=&slice_id=&slice_name=&collapsed_fieldsets=&action=&datasource_name=test_datasource&datasource_id=1&datasource_type=druid&previous_viz_type=table&json=true&force=true') print('-'*300) print(resp.data.decode('utf-8')) assert "Canada" in resp.data.decode('utf-8') From ec7dbed800d42b6e0bd6e480939196b5ad1010a6 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Mon, 2 May 2016 10:04:29 -0700 Subject: [PATCH 17/51] Blank theme (#419) * A white theme * Updating TODO * Fixing tests --- TODO.md | 4 ---- caravel/assets/stylesheets/caravel.css | 16 ++++---------- .../assets/stylesheets/less/variables.less | 22 +++++++++---------- caravel/templates/appbuilder/navbar.html | 2 -- 4 files changed, 15 insertions(+), 29 deletions(-) diff --git a/TODO.md b/TODO.md index a12340c544bd1..1e2ab02facd13 100644 --- a/TODO.md +++ b/TODO.md @@ -13,8 +13,6 @@ List of TODO items for Caravel * **Dashboard URL filters:** `{dash_url}#fltin__fieldname__value1,value2` * **Default slice:** choose a default slice for the dataset instead of default endpoint -* **refresh freq**: specifying the refresh frequency of a dashboard and - specific slices within it, some randomization would be nice * **Widget sets / chart grids:** a way to have all charts support making a series of charts and putting them in a grid. The same way that you can groupby for series, you could chart by. The form field set would be @@ -27,8 +25,6 @@ List of TODO items for Caravel some visualizations as annotations. An example of a layer might be "holidays" or "site outages", ... * **Slack integration** - TBD -* **Sexy Viz Selector:** the visualization selector should be a nice large - modal with nice thumbnails for each one of the viz * **Comments:** allow for people to comment on slices and dashes diff --git a/caravel/assets/stylesheets/caravel.css b/caravel/assets/stylesheets/caravel.css index d8fdc1475df1b..e12ebb0610976 100644 --- a/caravel/assets/stylesheets/caravel.css +++ b/caravel/assets/stylesheets/caravel.css @@ -82,14 +82,6 @@ input[type="checkbox"] { form div { padding-top: 1px; } -.navbar-brand a { - color: white; - text-decoration: none; -} -.navbar-brand a:hover { - color: white; - text-decoration: none; -} .header span { margin-left: 5px; @@ -135,10 +127,10 @@ span.title-block { .nvtooltip table td{ font-size: 11px !important; } -.navbar { - -webkit-box-shadow: 0px 3px 3px #AAA; - -moz-box-shadow: 0px 3px 3px #AAA; - box-shadow: 0px 3px 3px #AAA; +div.navbar { + -webkit-box-shadow: 0px 2px 2px #CCC; + -moz-box-shadow: 0px 2px 2px #CCC; + box-shadow: 0px 2px 2px #ccc; z-index: 999; } .panel.panel-primary { diff --git a/caravel/assets/stylesheets/less/variables.less b/caravel/assets/stylesheets/less/variables.less index 305e9926f61f5..3d61578d4d69d 100644 --- a/caravel/assets/stylesheets/less/variables.less +++ b/caravel/assets/stylesheets/less/variables.less @@ -26,7 +26,7 @@ @gray-light: #bbb; @gray-lighter: lighten(@gray-base, 93.5%); // #eee -@brand-primary: darken(@babu, 5%); +@brand-primary: @kazan; @brand-success: darken(@lima, 15%); @brand-info: @beach; @brand-warning: @hackberry; @@ -160,8 +160,8 @@ @btn-default-bg: #fff; @btn-default-border: transparent; -@btn-primary-color: #fff; -@btn-primary-bg: @brand-primary; +@btn-primary-color: #444; +@btn-primary-bg: #eee; @btn-primary-border: transparent; @btn-success-color: #fff; @@ -385,7 +385,7 @@ @navbar-default-link-hover-color: @gray-dark; @navbar-default-link-hover-bg: transparent; @navbar-default-link-active-color: @gray-dark; -@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); +@navbar-default-link-active-bg: darken(@navbar-default-bg, 30%); @navbar-default-link-disabled-color: #ccc; @navbar-default-link-disabled-bg: transparent; @@ -403,12 +403,12 @@ //=== Inverted navbar // Reset inverted navbar basics @navbar-inverse-color: @gray-light; -@navbar-inverse-bg: @brand-primary; +@navbar-inverse-bg: white; @navbar-inverse-border: transparent; // Inverted navbar links -@navbar-inverse-link-color: lighten(@brand-primary, 30%); -@navbar-inverse-link-hover-color: #fff; +@navbar-inverse-link-color: #888; +@navbar-inverse-link-hover-color: #111; @navbar-inverse-link-hover-bg: transparent; @navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; @navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); @@ -417,7 +417,7 @@ // Inverted navbar brand label @navbar-inverse-brand-color: @navbar-inverse-link-color; -@navbar-inverse-brand-hover-color: #fff; +@navbar-inverse-brand-hover-color: @navbar-inverse-link-hover-color; @navbar-inverse-brand-hover-bg: transparent; // Inverted navbar toggle\ @@ -728,9 +728,9 @@ @panel-default-border: #ddd; @panel-default-heading-bg: #f5f5f5; -@panel-primary-text: #fff; -@panel-primary-border: @brand-primary; -@panel-primary-heading-bg: @brand-primary; +@panel-primary-text: black; +@panel-primary-border: gray; +@panel-primary-heading-bg: #eee; @panel-success-text: #fff; @panel-success-border: @state-success-border; diff --git a/caravel/templates/appbuilder/navbar.html b/caravel/templates/appbuilder/navbar.html index c4283b74d3810..90cd397497d9e 100644 --- a/caravel/templates/appbuilder/navbar.html +++ b/caravel/templates/appbuilder/navbar.html @@ -13,9 +13,7 @@ - {{ appbuilder.app_name }} -