From 33e68d90694bee56f3e25f47ca2462680a4bb989 Mon Sep 17 00:00:00 2001 From: Luis Bosque Date: Mon, 12 Nov 2012 12:28:32 +0100 Subject: [PATCH 01/23] target v1.1.3 --- NEWS.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 06f90363..e971ca57 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,6 @@ +1.1.3 (DD//MM//YY) +----- + 1.1.2 (DD//MM//YY) ----- * CartoCSS versioning diff --git a/package.json b/package.json index a6c1d7ae..9513607b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "windshaft-cartodb", - "version": "1.1.2", + "version": "1.1.3", "description": "A map tile server for CartoDB", "url": "https://github.com/Vizzuality/Windshaft-cartodb", "licenses": [{ From f9b78e2cb22854ec148e545f69fefe5175785584 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 14 Nov 2012 10:40:48 +0100 Subject: [PATCH 02/23] Use grainstore 0.9.7 for mapnik version dependent default styles --- NEWS.md | 1 + npm-shrinkwrap.json | 7 +++++-- package.json | 5 +++-- test/acceptance/server.js | 23 ++++++++++++++++++----- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/NEWS.md b/NEWS.md index e971ca57..0aa09ead 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ 1.1.3 (DD//MM//YY) ----- +* Mapnik-version dependent default styles 1.1.2 (DD//MM//YY) ----- diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 130d34e2..1ef96b2c 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "windshaft-cartodb", - "version": "1.1.0", + "version": "1.1.3", "dependencies": { "cluster2": { "version": "0.3.5-cdb02", @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.9.6", + "version": "0.9.7", "dependencies": { "semver": { "version": "1.1.0" @@ -323,6 +323,9 @@ "mapnik": { "version": "0.7.16" }, + "semver": { + "version": "1.1.0" + }, "mocha": { "version": "1.2.1", "dependencies": { diff --git a/package.json b/package.json index 9513607b..1caae2aa 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.9.6", + "grainstore" : "~0.9.7", "windshaft" : "~0.7.0", "step": "0.0.x", "generic-pool": "1.0.x", @@ -31,7 +31,8 @@ "mapnik": "~0.7.14" }, "devDependencies": { - "mocha": "1.2.1" + "mocha": "1.2.1", + "semver": "~1.1.0" }, "scripts": { "test": "make check" diff --git a/test/acceptance/server.js b/test/acceptance/server.js index a31eaa46..fff758ce 100644 --- a/test/acceptance/server.js +++ b/test/acceptance/server.js @@ -3,6 +3,9 @@ var tests = module.exports = {}; var _ = require('underscore'); var redis = require('redis'); var querystring = require('querystring'); +var semver = require('semver'); +var mapnik = require('mapnik'); + require(__dirname + '/../support/test_helper'); var CartodbWindshaft = require(__dirname + '/../../lib/cartodb/cartodb_windshaft'); @@ -13,6 +16,15 @@ server.setMaxListeners(0); suite('server', function() { var redis_client = redis.createClient(global.environment.redis.port); + + var default_style = semver.satisfies(mapnik.versions.mapnik, '<2.1.0') + ? + // 2.0.0 default + '#<%= table %>{marker-fill: #FF6600;marker-opacity: 1;marker-width: 8;marker-line-color: white;marker-line-width: 3;marker-line-opacity: 0.9;marker-placement: point;marker-type: ellipse;marker-allow-overlap: true;}' + : + // 2.1.0 default + '#<%= table %>[mapnik-geometry-type=1] {marker-fill: #FF6600;marker-opacity: 1;marker-width: 16;marker-line-color: white;marker-line-width: 3;marker-line-opacity: 0.9;marker-placement: point;marker-type: ellipse;marker-allow-overlap: true;}#<%= table %>[mapnik-geometry-type=2] {line-color:#FF6600; line-width:1; line-opacity: 0.7;}#<%= table %>[mapnik-geometry-type=3] {polygon-fill:#FF6600; polygon-opacity: 0.7; line-opacity:1; line-color: #FFFFFF;}'; + suiteSetup(function(){ }); @@ -78,8 +90,8 @@ suite('server', function() { headers: { 'X-Cache-Channel': 'cartodb_test_user_1_db:my_table' }, }, function(res) { var parsed = JSON.parse(res.body); - assert.equal(parsed.style, "#my_table {marker-fill: #FF6600;marker-opacity: 1;marker-width: 8;marker-line-color: white;marker-line-width: 3;marker-line-opacity: 0.9;marker-placement: point;marker-type: ellipse;marker-allow-overlap: true;}"); - assert.equal(parsed.style_version, '2.0.0'); + assert.equal(parsed.style, _.template(default_style, {table: 'my_table'})); + assert.equal(parsed.style_version, mapnik.versions.mapnik); done(); }); }); @@ -128,8 +140,9 @@ suite('server', function() { }, function(res) { assert.equal(res.statusCode, 200, res.body); var parsed = JSON.parse(res.body); - assert.equal(parsed.style, "#test_table_private_1 {marker-fill: #FF6600;marker-opacity: 1;marker-width: 8;marker-line-color: white;marker-line-width: 3;marker-line-opacity: 0.9;marker-placement: point;marker-type: ellipse;marker-allow-overlap: true;}"); - assert.equal(parsed.style_version, '2.0.0'); + var style = _.template(default_style, {table: 'test_table_private_1'}); + assert.equal(parsed.style, style); + assert.equal(parsed.style_version, mapnik.versions.mapnik); done(); }); }); @@ -319,7 +332,7 @@ suite('server', function() { test("delete'ing style returns 200 then getting returns default style", function(done){ // this is the default style - var style = '#my_table5 {marker-fill: #FF6600;marker-opacity: 1;marker-width: 8;marker-line-color: white;marker-line-width: 3;marker-line-opacity: 0.9;marker-placement: point;marker-type: ellipse;marker-allow-overlap: true;}' + var style = _.template(default_style, {table: 'my_table5'}); assert.response(server, { url: '/tiles/my_table5/style?map_key=1234', method: 'DELETE', From 2f0ef03cd31a106f8c0d680bd6cdeb859c9afe6e Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 14 Nov 2012 13:41:46 +0100 Subject: [PATCH 03/23] Accept style_convert parameter to GET /styl request Require grainstore-0.10 and windshaft-0.8 to allow for it --- npm-shrinkwrap.json | 7 ++----- package.json | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 1ef96b2c..034d05f8 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,11 +182,8 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.9.7", + "version": "0.10.0", "dependencies": { - "semver": { - "version": "1.1.0" - }, "carto": { "version": "0.9.3-cdb1", "from": "git://github.com/CartoDB/carto.git#cdb-0.9", @@ -251,7 +248,7 @@ } }, "windshaft": { - "version": "0.7.1", + "version": "0.8.0", "dependencies": { "express": { "version": "2.5.11", diff --git a/package.json b/package.json index 1caae2aa..fb0b7d38 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.9.7", - "windshaft" : "~0.7.0", + "grainstore" : "~0.10.0", + "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", "redis": "0.7.2", From 1ebe862594ca5745b71afe60028883bc24b035ed Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 14 Nov 2012 13:45:11 +0100 Subject: [PATCH 04/23] Add style_convert and style_version parameters in the docs --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e1f66eeb..4366ad51 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ Args: Args: * style - the style in CartoCSS you want to set +* style_version - the version of the style for POST +* style_convert - request conversion to target version (both POST and GET) **INFOWINDOW** From 19436a8b1447790deb66a8d0f4f92613a4139823 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 14 Nov 2012 15:28:58 +0100 Subject: [PATCH 05/23] Let "style_convert" pass by, add tests for GET and POST with it --- lib/cartodb/server_options.js | 2 +- test/acceptance/server.js | 46 ++++++++++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/lib/cartodb/server_options.js b/lib/cartodb/server_options.js index 7550d871..79141a2c 100644 --- a/lib/cartodb/server_options.js +++ b/lib/cartodb/server_options.js @@ -65,7 +65,7 @@ module.exports = function(){ me.req2params = function(req, callback){ // Whitelist query parameters and attach format - var good_query = ['sql', 'geom_type', 'cache_buster', 'cache_policy', 'callback', 'interactivity', 'map_key', 'api_key', 'style', 'style_version']; + var good_query = ['sql', 'geom_type', 'cache_buster', 'cache_policy', 'callback', 'interactivity', 'map_key', 'api_key', 'style', 'style_version', 'style_convert' ]; var bad_query = _.difference(_.keys(req.query), good_query); _.each(bad_query, function(key){ delete req.query[key]; }); diff --git a/test/acceptance/server.js b/test/acceptance/server.js index fff758ce..b0291133 100644 --- a/test/acceptance/server.js +++ b/test/acceptance/server.js @@ -275,8 +275,7 @@ suite('server', function() { method: 'POST', headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, data: querystring.stringify({style: style, style_version: '2.0.2'}) - },{ - }, function(res) { + },{}, function(res) { assert.equal(res.statusCode, 200, res.body); @@ -284,19 +283,54 @@ suite('server', function() { headers: {host: 'localhost'}, url: '/tiles/my_table5/style', method: 'GET' - },{ - status: 200, - }, function(res) { + },{}, function(res) { + assert.equal(res.statusCode, 200, res.body); var parsed = JSON.parse(res.body); assert.equal(parsed.style, style); assert.equal(parsed.style_version, '2.0.2'); - done(); + + assert.response(server, { + headers: {host: 'localhost'}, + url: '/tiles/my_table5/style?style_convert=true', + method: 'GET' + },{}, function(res) { + assert.equal(res.statusCode, 200, res.body); + var parsed = JSON.parse(res.body); + assert.equal(parsed.style, style); + assert.equal(parsed.style_version, mapnik.versions.mapnik); + done(); + }); }); }); }); + test("post'ing good style with style_convert returns 200 then getting returns converted style", function(done){ + var style = 'Map {background-color:#fff;}'; + assert.response(server, { + url: '/tiles/my_table5/style?map_key=1234', + method: 'POST', + headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, + data: querystring.stringify({style: style, style_version: '2.0.2', style_convert: true}) + },{}, function(res) { + + assert.equal(res.statusCode, 200, res.body); + assert.response(server, { + headers: {host: 'localhost'}, + url: '/tiles/my_table5/style', + method: 'GET' + },{}, function(res) { + assert.equal(res.statusCode, 200, res.body); + var parsed = JSON.parse(res.body); + // NOTE: no transform expected for the specific style + assert.equal(parsed.style, style); + assert.equal(parsed.style_version, mapnik.versions.mapnik); + done(); + }); + }); + }); + ///////////////////////////////////////////////////////////////////////////////// // // DELETE STYLE From 635b5db3e62e9c4854b9430a384645342fa68317 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Thu, 15 Nov 2012 16:01:34 +0100 Subject: [PATCH 06/23] Nicer indent in CartoCSS (less likely to be converted) --- test/acceptance/server.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/acceptance/server.js b/test/acceptance/server.js index b0291133..203f7d0a 100644 --- a/test/acceptance/server.js +++ b/test/acceptance/server.js @@ -210,7 +210,7 @@ suite('server', function() { url: '/tiles/my_table5/style?map_key=1234', method: 'POST', headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, - data: querystring.stringify({style: 'Map {background-color:#fff;}'}) + data: querystring.stringify({style: 'Map { background-color:#fff; }'}) },{ }, function(res) { assert.equal(res.statusCode, 200, res.body); @@ -224,7 +224,7 @@ suite('server', function() { url: '/tiles/my_table5/style?api_key=1234', method: 'POST', headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, - data: querystring.stringify({style: 'Map {background-color:#fff;}'}) + data: querystring.stringify({style: 'Map { background-color:#fff; }'}) },{}, function(res) { assert.equal(res.statusCode, 200, res.body); done(); @@ -237,7 +237,7 @@ suite('server', function() { url: '/tiles/my_table5/style?map_key=1234', method: 'POST', headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, - data: querystring.stringify({style: 'Map {background-color:#fff;}'}) + data: querystring.stringify({style: 'Map { background-color:#fff; }'}) },{ }, function(res) { assert.equal(res.statusCode, 200, res.body); @@ -245,7 +245,7 @@ suite('server', function() { url: '/tiles/my_table5/style', method: 'POST', headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, - data: querystring.stringify({style: 'Map {background-color:#aaa;}'}) + data: querystring.stringify({style: 'Map { background-color:#aaa; }'}) },{}, function(res) { // FIXME: should be 401 Unauthorized assert.equal(res.statusCode, 500, res.body); @@ -259,7 +259,7 @@ suite('server', function() { status: 200, }, function(res) { var parsed = JSON.parse(res.body); - assert.equal(parsed.style, 'Map {background-color:#fff;}'); + assert.equal(parsed.style, 'Map { background-color:#fff; }'); assert.equal(parsed.style_version, '2.0.0'); done(); }); @@ -269,7 +269,7 @@ suite('server', function() { }); test("post'ing good style returns 200 then getting returns original style", function(done){ - var style = 'Map {background-color:#fff;}'; + var style = 'Map { background-color:#fff; }'; assert.response(server, { url: '/tiles/my_table5/style?map_key=1234', method: 'POST', @@ -307,7 +307,7 @@ suite('server', function() { }); test("post'ing good style with style_convert returns 200 then getting returns converted style", function(done){ - var style = 'Map {background-color:#fff;}'; + var style = 'Map { background-color:#fff; }'; assert.response(server, { url: '/tiles/my_table5/style?map_key=1234', method: 'POST', @@ -357,7 +357,7 @@ suite('server', function() { status: 200, }, function(res) { var parsed = JSON.parse(res.body); - assert.equal(parsed.style, 'Map {background-color:#fff;}'); + assert.equal(parsed.style, 'Map { background-color:#fff; }'); //assert.equal(parsed.version, '2.0.0'); done(); }); From 9645d0fb5867c340263fb0742c057beccaab1378 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Thu, 15 Nov 2012 16:12:55 +0100 Subject: [PATCH 07/23] Require grainstore 0.10.1 to handle conditional markers in style transform --- NEWS.md | 5 ++++- npm-shrinkwrap.json | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index 0aa09ead..55e958ad 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,9 @@ 1.1.3 (DD//MM//YY) ----- -* Mapnik-version dependent default styles +* CartoCSS versioning + * Mapnik-version dependent default styles + * Enhance 2.0 -> 2.1 transforms: + * styles with conditional markers 1.1.2 (DD//MM//YY) ----- diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 034d05f8..fd4c9323 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.0", + "version": "0.10.1", "dependencies": { "carto": { "version": "0.9.3-cdb1", diff --git a/package.json b/package.json index fb0b7d38..1e3c4d84 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.0", + "grainstore" : "~0.10.1", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From bb5952491438284e62d7e395958c14dd68a39658 Mon Sep 17 00:00:00 2001 From: David Arango Date: Mon, 19 Nov 2012 12:54:27 +0100 Subject: [PATCH 08/23] Adds script to convert single tables --- tools/convert_database_styles | 81 +++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 tools/convert_database_styles diff --git a/tools/convert_database_styles b/tools/convert_database_styles new file mode 100755 index 00000000..1335263c --- /dev/null +++ b/tools/convert_database_styles @@ -0,0 +1,81 @@ +#!/usr/bin/env node + +var path = require('path'); + +var grainstore = require('grainstore'); +var mapnik = require('mapnik'); +var redis = require('redis'); + +function usage(me, exitcode) { + console.log("Usage: " + me + " []"); + process.exit(exitcode); +} + +var node_path = process.argv.shift(); +var script_path = process.argv.shift(); +var me = path.basename(script_path); + +var database_name = process.argv.shift() +var table_name = process.argv.shift() +var MAPNIK_VERSION = process.argv.shift() + + +if ( ! MAPNIK_VERSION ) { + MAPNIK_VERSION = mapnik.versions.mapnik; +} + +if ( ! database_name || ! table_name) { + usage(me, 1); +} + +var REDIS_PORT = 6379; // TODO: make a command line parameter + +var dbnum = 0; + +var mml_store = new grainstore.MMLStore({port:REDIS_PORT}, {mapnik_version:MAPNIK_VERSION}); + +var failures = []; + +var client = redis.createClient(REDIS_PORT, 'localhost'); +client.on('connect', function() { + client.select(dbnum); + client.keys('map_style|${database_name}|${table_name}', function(err, matches) { + + processNext = function() { + if ( ! matches.length ) process.exit(failures.length); + var k = matches.shift(); + + if ( /map_style\|.*\|.*\|/.test(k) ) { + //console.warn("Key " + k + " is EXTENDED, skipping"); + processNext(); + } + + var out = 'map_style|' + database_name + '|' + table_name + ': '; + + var mml_builder = mml_store.mml_builder({ + dbname:database_name, + table:table_name}, + function(err, payload) { + if ( err ) { + console.warn(out + err.message); + failures.push(k); processNext(); + } + else { + mml_builder.resetStyle(function(err, data) { + if ( err ) { + console.warn(out + err.message); + failures.push(k); + } + else console.log(out + 'OK'); + processNext(); + }, true); + } + }); + + }; + + processNext(); + + }); + +}); From 6ccb7f6f15c186d5236b5a31c746ca88f8435e8f Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 20 Nov 2012 19:07:06 +0100 Subject: [PATCH 09/23] Shrinkwrap latest grainstore, to not be fooled by CartoCSS comments --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index fd4c9323..9d03b501 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.1", + "version": "0.10.3", "dependencies": { "carto": { "version": "0.9.3-cdb1", diff --git a/package.json b/package.json index 1e3c4d84..543a5e31 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.1", + "grainstore" : "~0.10.3", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From 2be0ebb80896fd447ff741e0fee9f4e81959c2e6 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 21 Nov 2012 13:23:04 +0100 Subject: [PATCH 10/23] Add --with-mapnik-version configure switch --- configure | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 81e2f432..3f07bba0 100755 --- a/configure +++ b/configure @@ -17,16 +17,18 @@ # --strk(2012-07-23) # +PGPORT=5432 +MAPNIK_VERSION= + usage() { echo "Usage: $0 [OPTION]" echo echo "Configuration:" - echo " --help display this help and exit" - echo " --with-pgport=NUM access PostgreSQL server on TCP port NUM" + echo " --help display this help and exit" + echo " --with-pgport=NUM access PostgreSQL server on TCP port NUM [$PGPORT]" + echo " --with-mapnik-version=STRING set mapnik version string [$MAPNIK_VERSION]" } -PGPORT=5432 - while test -n "$1"; do case "$1" in --help|-h) @@ -36,6 +38,9 @@ while test -n "$1"; do --with-pgport=*) PGPORT=`echo "$1" | cut -d= -f2` ;; + --with-mapnik-version=*) + MAPNIK_VERSION=`echo "$1" | cut -d= -f2` + ;; *) echo "Unknown option '$1'" >&2 usage >&2 @@ -45,11 +50,16 @@ while test -n "$1"; do done echo "PGPORT: $PGPORT" +echo "MAPNIK_VERSION: $MAPNIK_VERSION" # TODO: allow specifying configuration settings ! for f in config/environments/*.example; do o=`dirname "$f"`/`basename "$f" .example` echo "Writing $o" + # See http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/ - sed -n "1h;1!H;\${;g;s/\(,postgres: {[^}]*port: *'\?\)[^',]*\('\?,\)/\1$PGPORT\2/;p;}" < "$f" > "$o" + sed -n "1h;1!H;\${;g;s/\(,postgres: {[^}]*port: *'\?\)[^',]*\('\?,\)/\1$PGPORT\2/;p;}" < "$f" \ + | sed "s/mapnik_version:.*/mapnik_version: '$MAPNIK_VERSION'/" \ + > "$o" + done From 59a1911950c182ef4ae2a22bcbaa0d2eb750f507 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Thu, 22 Nov 2012 16:39:00 +0100 Subject: [PATCH 11/23] Add test for #57 (succeeds) The ticket is actually invalid, there's no such bug here... --- test/acceptance/server.js | 145 +++++++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 3 deletions(-) diff --git a/test/acceptance/server.js b/test/acceptance/server.js index 203f7d0a..5ea8cb51 100644 --- a/test/acceptance/server.js +++ b/test/acceptance/server.js @@ -5,6 +5,7 @@ var redis = require('redis'); var querystring = require('querystring'); var semver = require('semver'); var mapnik = require('mapnik'); +var Step = require('step'); require(__dirname + '/../support/test_helper'); @@ -25,6 +26,9 @@ suite('server', function() { // 2.1.0 default '#<%= table %>[mapnik-geometry-type=1] {marker-fill: #FF6600;marker-opacity: 1;marker-width: 16;marker-line-color: white;marker-line-width: 3;marker-line-opacity: 0.9;marker-placement: point;marker-type: ellipse;marker-allow-overlap: true;}#<%= table %>[mapnik-geometry-type=2] {line-color:#FF6600; line-width:1; line-opacity: 0.7;}#<%= table %>[mapnik-geometry-type=3] {polygon-fill:#FF6600; polygon-opacity: 0.7; line-opacity:1; line-color: #FFFFFF;}'; + // A couple of styles to use during testing + var test_style_black_200 = "#test_table{marker-fill:black;marker-line-color:red;marker-width:10}"; + var test_style_black_210 = "#test_table{marker-fill:black;marker-line-color:red;marker-width:20}"; suiteSetup(function(){ }); @@ -736,9 +740,6 @@ suite('server', function() { }); }); - var test_style_black_200 = "#test_table{marker-fill:black;marker-line-color:red;marker-width:10}"; - var test_style_black_210 = "#test_table{marker-fill:black;marker-line-color:red;marker-width:20}"; - test("get'ing a tile with url specified 2.0.0 style should return an expected tile", function(done){ var style = querystring.stringify({style: test_style_black_200, style_version: '2.0.0'}); assert.response(server, { @@ -777,6 +778,144 @@ suite('server', function() { }); }); + // See http://github.com/Vizzuality/Windshaft-cartodb/issues/57 + test("GET'ing a tile as anonymous with style set by POST", function(done){ + var style = querystring.stringify({style: test_style_black_210, style_version: '2.1.0'}); + Step ( + function postStyle1() { + var next = this; + assert.response(server, { + method: 'POST', + url: '/tiles/test_table/style', + headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, + data: querystring.stringify({style: 'Map { background-color:#fff; }', map_key: 1234}) + },{}, function(res) { + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + next(); + }); + }, + // Load the new cache with results from Style1 above + function getTileAnon1(err) { + if ( err ) throw err; + var next = this; + assert.response(server, { + headers: {host: 'localhost'}, + url: '/tiles/test_table/15/16046/12354.png', + method: 'GET', + encoding: 'binary' + },{}, function(res){ + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + var ct = res.headers['content-type']; + assert.equal(ct, 'image/png'); + assert.imageEqualsFile(res.body, './test/fixtures/blank.png', 0, + function(err, similarity) { + if (err) next(err); + else next(); + }); + }); + }, + // Get again with authentication + function getTileAuth1(err) { + if ( err ) throw err; + var next = this; + assert.response(server, { + headers: {host: 'localhost'}, + url: '/tiles/test_table/15/16046/12354.png?map_key=1234', + method: 'GET', + encoding: 'binary' + },{}, function(res){ + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + var ct = res.headers['content-type']; + assert.equal(ct, 'image/png'); + assert.imageEqualsFile(res.body, './test/fixtures/blank.png', 0, + function(err, similarity) { + if (err) next(err); + else next(); + }); + }); + }, + // Change the style + function postStyle2(err) { + if ( err ) throw err; + var next = this; + assert.response(server, { + method: 'POST', + url: '/tiles/test_table/style', + headers: {host: 'localhost', 'Content-Type': 'application/x-www-form-urlencoded' }, + data: querystring.stringify({style: test_style_black_200, map_key: 1234}) + },{}, function(res) { + try { + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + next(); + } + catch (err) { next(err); } + }); + }, + // Verify the Style2 is applied. NOTE: pass the SAME cache_buster as before! + function getTileAnon2(err) { + if ( err ) throw err; + var next = this; + assert.response(server, { + headers: {host: 'localhost'}, + url: '/tiles/test_table/15/16046/12354.png', + method: 'GET', + encoding: 'binary' + },{}, function(res){ + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + var ct = res.headers['content-type']; + assert.equal(ct, 'image/png'); + assert.imageEqualsFile(res.body, './test/fixtures/test_table_15_16046_12354_styled_black.png', 2, + function(err, similarity) { + // NOTE: we expect them to be EQUAL here + if (err) { next(err); return; } + next(); + }); + }); + }, + // Delete the style + function delStyle(err) { + if ( err ) throw err; + var next = this; + assert.response(server, { + method: 'DELETE', + url: '/tiles/test_table/style?map_key=1234', + headers: {host: 'localhost'} + },{}, function(res) { + try { + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + next(); + } + catch (err) { next(err); } + }); + }, + // Verify the default style is applied. + function getTileAnon3(err) { + if ( err ) throw err; + var next = this; + assert.response(server, { + headers: {host: 'localhost'}, + url: '/tiles/test_table/15/16046/12354.png?cache_buster=2314' + cb, + method: 'GET', + encoding: 'binary' + },{}, function(res){ + assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); + var ct = res.headers['content-type']; + assert.equal(ct, 'image/png'); + assert.imageEqualsFile(res.body, './test/fixtures/test_table_15_16046_12354_styled_black.png', 2, + function(err, similarity) { + // NOTE: we expect them to be different here + if (err) next(); + else next(new Error('Last posted style still in effect after delete')); + }); + }); + }, + function finish(err) { + if ( err ) done(err); + else done(); + } + ); + }); + ///////////////////////////////////////////////////////////////////////////////// // // DELETE CACHE From 32007403c076564b864128ac1c5e10702be909a4 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Thu, 22 Nov 2012 19:12:21 +0100 Subject: [PATCH 12/23] Fix testcase --- test/acceptance/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/acceptance/server.js b/test/acceptance/server.js index 5ea8cb51..7f5ccf03 100644 --- a/test/acceptance/server.js +++ b/test/acceptance/server.js @@ -894,7 +894,7 @@ suite('server', function() { var next = this; assert.response(server, { headers: {host: 'localhost'}, - url: '/tiles/test_table/15/16046/12354.png?cache_buster=2314' + cb, + url: '/tiles/test_table/15/16046/12354.png?cache_buster=2314', method: 'GET', encoding: 'binary' },{}, function(res){ From c3169745ee39705a9216f806272975766b62dd23 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Fri, 23 Nov 2012 12:32:33 +0100 Subject: [PATCH 13/23] Require grainstore ~0.10.4 for mapnik-2.1.1 support --- npm-shrinkwrap.json | 13 +++++++------ package.json | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 9d03b501..fac455ca 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,15 +182,12 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.3", + "version": "0.10.4", "dependencies": { "carto": { - "version": "0.9.3-cdb1", + "version": "0.9.3-cdb2", "from": "git://github.com/CartoDB/carto.git#cdb-0.9", "dependencies": { - "mapnik-reference": { - "version": "5.0.0" - }, "xml2js": { "version": "0.1.14", "dependencies": { @@ -201,6 +198,10 @@ } } }, + "mapnik-reference": { + "version": "5.0.0-cdb1", + "from": "git://github.com/CartoDB/mapnik-reference.git#cdb-5.0" + }, "millstone": { "version": "0.5.11", "dependencies": { @@ -273,7 +274,7 @@ } }, "tilelive": { - "version": "4.3.1", + "version": "4.3.3", "dependencies": { "optimist": { "version": "0.3.5", diff --git a/package.json b/package.json index 543a5e31..ced6bc09 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.3", + "grainstore" : "~0.10.4", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From 08c75843de1e568e61769e93c784addc129f938d Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Mon, 26 Nov 2012 12:51:55 +0100 Subject: [PATCH 14/23] Really skip extended keys --- tools/reset_styles | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/reset_styles b/tools/reset_styles index 863312ef..3a475a9f 100755 --- a/tools/reset_styles +++ b/tools/reset_styles @@ -55,7 +55,10 @@ client.on('connect', function() { if ( /map_style\|.*\|.*\|/.test(k) ) { //console.warn("Key " + k + " is EXTENDED, skipping"); + // TODO: drop instead ? + // See https://github.com/Vizzuality/Windshaft-cartodb/issues/58 processNext(); + return; } var params = RegExp(/map_style\|(.*)\|(.*)/).exec(k); From 11025eb7c4b8b4f9aa807cb1015947263f4d8d5b Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Mon, 26 Nov 2012 13:20:39 +0100 Subject: [PATCH 15/23] Update with the change in reset_styles --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 55e958ad..bbbafb96 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ 1.1.3 (DD//MM//YY) ----- +* Fix reset_styles script to really skip extended keys * CartoCSS versioning * Mapnik-version dependent default styles * Enhance 2.0 -> 2.1 transforms: From c976506c67d0db38ebeb94cc5d4fbde1a1608847 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 27 Nov 2012 17:31:53 +0100 Subject: [PATCH 16/23] Require grainstore-0.10.5 to resize arrow markers ( 2.0 -> 2.1 ) --- NEWS.md | 1 + npm-shrinkwrap.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index bbbafb96..e730c575 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,6 +5,7 @@ * Mapnik-version dependent default styles * Enhance 2.0 -> 2.1 transforms: * styles with conditional markers + * scale arrow markers by 50% 1.1.2 (DD//MM//YY) ----- diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index fac455ca..48531977 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.4", + "version": "0.10.5", "dependencies": { "carto": { "version": "0.9.3-cdb2", diff --git a/package.json b/package.json index ced6bc09..cb550e74 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.4", + "grainstore" : "~0.10.5", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From bbdc29faae6243558f499903a8d03aea083be994 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 27 Nov 2012 18:30:08 +0100 Subject: [PATCH 17/23] Set max_size=500 in the example configurations TODO: add a ./configure switch to set it --- config/environments/development.js.example | 3 ++- config/environments/production.js.example | 3 ++- config/environments/staging.js.example | 3 ++- config/environments/test.js.example | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/config/environments/development.js.example b/config/environments/development.js.example index caed4f92..0a2c36ee 100644 --- a/config/environments/development.js.example +++ b/config/environments/development.js.example @@ -17,7 +17,8 @@ var config = { extent: "-180,-90,180,90", srid: 4326, */ - simplify: true + simplify: true, + max_size: 500 } ,mapnik_version: undefined ,millstone: { diff --git a/config/environments/production.js.example b/config/environments/production.js.example index 8d910b7b..8e7c0c8f 100644 --- a/config/environments/production.js.example +++ b/config/environments/production.js.example @@ -11,7 +11,8 @@ var config = { host: '127.0.0.1', port: 6432, extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", - simplify: true + simplify: true, + max_size: 500 } ,mapnik_version: undefined ,millstone: { diff --git a/config/environments/staging.js.example b/config/environments/staging.js.example index 9c10dad7..9ba1ddfa 100644 --- a/config/environments/staging.js.example +++ b/config/environments/staging.js.example @@ -11,7 +11,8 @@ var config = { host: '127.0.0.1', port: 6432, extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", - simplify: true + simplify: true, + max_size: 500 } ,mapnik_version: undefined ,millstone: { diff --git a/config/environments/test.js.example b/config/environments/test.js.example index 908d39a6..befe1e4d 100644 --- a/config/environments/test.js.example +++ b/config/environments/test.js.example @@ -11,7 +11,8 @@ var config = { host: '127.0.0.1', port: 5432, extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", - simplify: true + simplify: true, + max_size: 500 } ,mapnik_version: '2.0.2' ,millstone: { From 820c83605076ffaf676e75b8724b58b3d53991ea Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 28 Nov 2012 10:06:43 +0100 Subject: [PATCH 18/23] Require grainstore-0.10.6 to enhance marker type transform (2.0 -> 2.1) See https://github.com/Vizzuality/grainstore/issues/39 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 48531977..04a56945 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.5", + "version": "0.10.6", "dependencies": { "carto": { "version": "0.9.3-cdb2", diff --git a/package.json b/package.json index cb550e74..8976ba9d 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.5", + "grainstore" : "~0.10.6", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From a0cd4354a73a9ee1c9000b359a8ced87a1d9baf0 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 28 Nov 2012 11:24:04 +0100 Subject: [PATCH 19/23] Enlarge default map extent See https://github.com/Vizzuality/grainstore/issues/42 --- config/environments/development.js.example | 2 +- config/environments/production.js.example | 2 +- config/environments/staging.js.example | 2 +- config/environments/test.js.example | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/environments/development.js.example b/config/environments/development.js.example index 0a2c36ee..fd863822 100644 --- a/config/environments/development.js.example +++ b/config/environments/development.js.example @@ -11,7 +11,7 @@ var config = { user: "publicuser", host: '127.0.0.1', port: 5432, - extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", + extent: "-20037508.5,-20037508.5,20037508.5,20037508.5", /* experimental geometry_field: "the_geom", extent: "-180,-90,180,90", diff --git a/config/environments/production.js.example b/config/environments/production.js.example index 8e7c0c8f..ece7766b 100644 --- a/config/environments/production.js.example +++ b/config/environments/production.js.example @@ -10,7 +10,7 @@ var config = { user: "publicuser", host: '127.0.0.1', port: 6432, - extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", + extent: "-20037508.5,-20037508.5,20037508.5,20037508.5", simplify: true, max_size: 500 } diff --git a/config/environments/staging.js.example b/config/environments/staging.js.example index 9ba1ddfa..17b59546 100644 --- a/config/environments/staging.js.example +++ b/config/environments/staging.js.example @@ -10,7 +10,7 @@ var config = { user: "publicuser", host: '127.0.0.1', port: 6432, - extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", + extent: "-20037508.5,-20037508.5,20037508.5,20037508.5", simplify: true, max_size: 500 } diff --git a/config/environments/test.js.example b/config/environments/test.js.example index befe1e4d..44969cc4 100644 --- a/config/environments/test.js.example +++ b/config/environments/test.js.example @@ -10,7 +10,7 @@ var config = { user: "publicuser", host: '127.0.0.1', port: 5432, - extent: "-20005048.4188,-20005048.4188,20005048.4188,20005048.4188", + extent: "-20037508.5,-20037508.5,20037508.5,20037508.5", simplify: true, max_size: 500 } From a3d09339dee3839d3fe4a6918709c2549d1ef9e3 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 28 Nov 2012 12:36:47 +0100 Subject: [PATCH 20/23] Require grainstore-0.10.7 to enhance marker type transform (2.0 -> 2.1) See https://github.com/Vizzuality/grainstore/blob/0.10.7/NEWS.md --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 04a56945..96adfb30 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.6", + "version": "0.10.7", "dependencies": { "carto": { "version": "0.9.3-cdb2", diff --git a/package.json b/package.json index 8976ba9d..716c6bcd 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.6", + "grainstore" : "~0.10.7", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From 72cf824235a853ad86f1ace9b009a58b97638441 Mon Sep 17 00:00:00 2001 From: David Arango Date: Wed, 28 Nov 2012 15:33:20 +0100 Subject: [PATCH 21/23] Fix on convert_database_styles script --- tools/convert_database_styles | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/convert_database_styles b/tools/convert_database_styles index 1335263c..db6c14c6 100755 --- a/tools/convert_database_styles +++ b/tools/convert_database_styles @@ -39,7 +39,7 @@ var failures = []; var client = redis.createClient(REDIS_PORT, 'localhost'); client.on('connect', function() { client.select(dbnum); - client.keys('map_style|${database_name}|${table_name}', function(err, matches) { + client.keys('map_style|' + database_name + '|' + table_name, function(err, matches) { processNext = function() { if ( ! matches.length ) process.exit(failures.length); From 2f706403403b0a05d9431930a305e8fc03fe8008 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 28 Nov 2012 20:17:02 +0100 Subject: [PATCH 22/23] Require grainstore-0.10.8 to workaround bubble map bug See https://github.com/Vizzuality/grainstore/issues/44 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 96adfb30..36a10e9a 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -182,7 +182,7 @@ "version": "1.3.3" }, "grainstore": { - "version": "0.10.7", + "version": "0.10.8", "dependencies": { "carto": { "version": "0.9.3-cdb2", diff --git a/package.json b/package.json index 716c6bcd..0e687ed6 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "cluster2": "git://github.com/CartoDB/cluster2.git#cdb_production", "node-varnish": "0.1.1", "underscore" : "~1.3.3", - "grainstore" : "~0.10.7", + "grainstore" : "~0.10.8", "windshaft" : "~0.8.0", "step": "0.0.x", "generic-pool": "1.0.x", From e813209768544e8ebb977c28e3110b4fbb91c5d9 Mon Sep 17 00:00:00 2001 From: Luis Bosque Date: Fri, 30 Nov 2012 16:51:31 +0100 Subject: [PATCH 23/23] Updated NEWS vor 1.1.3 --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index e730c575..e91ce097 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -1.1.3 (DD//MM//YY) +1.1.3 (30//11//12) ----- * Fix reset_styles script to really skip extended keys * CartoCSS versioning