Add Bottle recipe

Bottle is a python wsgi micro-framework for developing web
applications.
diff --git a/common/recipes-devtools/python/bottle/LICENSE b/common/recipes-devtools/python/bottle/LICENSE
new file mode 100644
index 0000000..5f3e8de
--- /dev/null
+++ b/common/recipes-devtools/python/bottle/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014, Marcel Hellkamp.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/common/recipes-devtools/python/bottle/json-format.patch b/common/recipes-devtools/python/bottle/json-format.patch
new file mode 100644
index 0000000..9e754a9
--- /dev/null
+++ b/common/recipes-devtools/python/bottle/json-format.patch
@@ -0,0 +1,31 @@
+Index: bottle-0.12.9/bottle.py
+===================================================================
+--- bottle-0.12.9.orig/bottle.py
++++ bottle-0.12.9/bottle.py
+@@ -1721,8 +1721,10 @@ class JSONPlugin(object):
+     name = 'json'
+     api  = 2
+ 
+-    def __init__(self, json_dumps=json_dumps):
++    def __init__(self, json_dumps=json_dumps, **kw):
+         self.json_dumps = json_dumps
++        self.json_kw = { x:y for x,y in kw.iteritems() \
++                     if x in ['indent','sort_keys'] }
+ 
+     def apply(self, callback, route):
+         dumps = self.json_dumps
+@@ -1735,12 +1737,12 @@ class JSONPlugin(object):
+ 
+             if isinstance(rv, dict):
+                 #Attempt to serialize, raises exception on failure
+-                json_response = dumps(rv)
++                json_response = dumps(rv, **self.json_kw)
+                 #Set content type only if serialization succesful
+                 response.content_type = 'application/json'
+                 return json_response
+             elif isinstance(rv, HTTPResponse) and isinstance(rv.body, dict):
+-                rv.body = dumps(rv.body)
++                rv.body = dumps(rv.body, **self.json_kw)
+                 rv.content_type = 'application/json'
+             return rv
+