File upstream-post-2.2.patch of Package python-papyrus
From a36bed660fc1b7ee404bd4353e3b808c28b255a4 Mon Sep 17 00:00:00 2001
From: Frederic Junod <frederic.junod@camptocamp.com>
Date: Mon, 9 May 2016 08:36:00 +0200
Subject: [PATCH 1/8] Change 'update' HTTP response from 201 to 200
---
papyrus/protocol.py | 2 +-
papyrus/tests/test_protocol.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/papyrus/protocol.py b/papyrus/protocol.py
index c267c6f..40e5b06 100644
--- a/papyrus/protocol.py
+++ b/papyrus/protocol.py
@@ -351,7 +351,7 @@ def update(self, request, id):
self.before_update(request, feature, obj)
obj.__update__(feature)
session.flush()
- request.response.status_int = 201
+ request.response.status_int = 200
return obj
def delete(self, request, id):
diff --git a/papyrus/tests/test_protocol.py b/papyrus/tests/test_protocol.py
index 995e334..d1410c0 100644
--- a/papyrus/tests/test_protocol.py
+++ b/papyrus/tests/test_protocol.py
@@ -793,7 +793,7 @@ def before_update(request, feature, obj):
self.assertTrue(isinstance(request._log["obj"], MappedClass))
# test response status
- self.assertEqual(request.response.status_int, 201)
+ self.assertEqual(request.response.status_int, 200)
def test_delete_forbidden(self):
from papyrus.protocol import Protocol
From 1e3647179ec0e6169f587886f0cb9657ab2e4789 Mon Sep 17 00:00:00 2001
From: Frederic Junod <frederic.junod@camptocamp.com>
Date: Fri, 13 Jan 2017 13:50:34 +0100
Subject: [PATCH 4/8] Fix ST_Transform name in tests
---
papyrus/tests/test_protocol.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/papyrus/tests/test_protocol.py b/papyrus/tests/test_protocol.py
index d1410c0..c3accf3 100644
--- a/papyrus/tests/test_protocol.py
+++ b/papyrus/tests/test_protocol.py
@@ -99,10 +99,10 @@ def test_box_filter_with_epsg(self):
compiled_filter = filter.compile(self._get_engine())
params = compiled_filter.params
filter_str = _compiled_to_string(compiled_filter)
- self.assertEqual(filter_str, b'ST_DWITHIN(ST_Transform("table".geom, %(param_1)s), ST_GeomFromWKB(%(ST_GeomFromWKB_1)s, %(ST_GeomFromWKB_2)s), %(ST_DWITHIN_1)s)') # NOQA
+ self.assertEqual(filter_str, b'ST_DWITHIN(ST_Transform("table".geom, %(ST_Transform_1)s), ST_GeomFromWKB(%(ST_GeomFromWKB_1)s, %(ST_GeomFromWKB_2)s), %(ST_DWITHIN_1)s)') # NOQA
self.assertTrue(wkb.loads(bytes(params["ST_GeomFromWKB_1"])).equals(wkt.loads('POLYGON ((-180 -90, -180 90, 180 90, 180 -90, -180 -90))'))) # NOQA
self.assertEqual(params["ST_GeomFromWKB_2"], 900913)
- self.assertEqual(params["param_1"], 900913)
+ self.assertEqual(params["ST_Transform_1"], 900913)
self.assertEqual(params["ST_DWITHIN_1"], 1)
def test_within_filter(self):
@@ -133,10 +133,10 @@ def test_within_filter_with_epsg(self):
compiled_filter = filter.compile(self._get_engine())
params = compiled_filter.params
filter_str = _compiled_to_string(compiled_filter)
- self.assertEqual(filter_str, b'ST_DWITHIN(ST_Transform("table".geom, %(param_1)s), ST_GeomFromWKB(%(ST_GeomFromWKB_1)s, %(ST_GeomFromWKB_2)s), %(ST_DWITHIN_1)s)') # NOQA
+ self.assertEqual(filter_str, b'ST_DWITHIN(ST_Transform("table".geom, %(ST_Transform_1)s), ST_GeomFromWKB(%(ST_GeomFromWKB_1)s, %(ST_GeomFromWKB_2)s), %(ST_DWITHIN_1)s)') # NOQA
self.assertTrue(wkb.loads(bytes(params["ST_GeomFromWKB_1"])).equals(wkt.loads('POINT (40 5)'))) # NOQA
self.assertEqual(params["ST_GeomFromWKB_2"], 900913)
- self.assertEqual(params["param_1"], 900913)
+ self.assertEqual(params["ST_Transform_1"], 900913)
self.assertEqual(params["ST_DWITHIN_1"], 1)
def test_polygon_filter(self):
@@ -172,10 +172,10 @@ def test_polygon_filter_with_epsg(self):
compiled_filter = filter.compile(self._get_engine())
params = compiled_filter.params
filter_str = _compiled_to_string(compiled_filter)
- self.assertEqual(filter_str, b'ST_DWITHIN(ST_Transform("table".geom, %(param_1)s), ST_GeomFromWKB(%(ST_GeomFromWKB_1)s, %(ST_GeomFromWKB_2)s), %(ST_DWITHIN_1)s)') # NOQA
+ self.assertEqual(filter_str, b'ST_DWITHIN(ST_Transform("table".geom, %(ST_Transform_1)s), ST_GeomFromWKB(%(ST_GeomFromWKB_1)s, %(ST_GeomFromWKB_2)s), %(ST_DWITHIN_1)s)') # NOQA
self.assertTrue(wkb.loads(bytes(params["ST_GeomFromWKB_1"])).equals(poly)) # NOQA
self.assertEqual(params["ST_GeomFromWKB_2"], 900913)
- self.assertEqual(params["param_1"], 900913)
+ self.assertEqual(params["ST_Transform_1"], 900913)
self.assertEqual(params["ST_DWITHIN_1"], 1)
def test_geom_filter_no_params(self):
From e23bac5eb4f8ea53636396276694f6eb5dd34c90 Mon Sep 17 00:00:00 2001
From: Frederic Junod <frederic.junod@camptocamp.com>
Date: Fri, 13 Jan 2017 11:56:16 +0100
Subject: [PATCH 5/8] Fix membership test in create_geom_filter
---
papyrus/protocol.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/papyrus/protocol.py b/papyrus/protocol.py
index 40e5b06..0e4e628 100644
--- a/papyrus/protocol.py
+++ b/papyrus/protocol.py
@@ -85,7 +85,7 @@ def create_geom_filter(request, mapped_class, geom_attr):
shape = Polygon(((box[0], box[1]), (box[0], box[3]),
(box[2], box[3]), (box[2], box[1]),
(box[0], box[1])))
- elif 'lon' and 'lat' in request.params:
+ elif 'lon' in request.params and 'lat' in request.params:
shape = Point(float(request.params['lon']),
float(request.params['lat']))
elif 'geometry' in request.params:
From ecd8fd2fd3940ae83c63b38011f1b06a47f1a6c0 Mon Sep 17 00:00:00 2001
From: Frederic Junod <frederic.junod@camptocamp.com>
Date: Mon, 23 Jan 2017 11:05:11 +0100
Subject: [PATCH 6/8] Change content type to 'application/geo+json'
See https://tools.ietf.org/html/rfc7946#section-12:
> The media type for GeoJSON text is "application/geo+json" [...]
---
papyrus/renderers.py | 2 +-
papyrus/tests/test_renderers.py | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/papyrus/renderers.py b/papyrus/renderers.py
index 7cd28f8..9900c81 100644
--- a/papyrus/renderers.py
+++ b/papyrus/renderers.py
@@ -73,7 +73,7 @@ def _render(value, system):
if ct == response.default_content_type:
callback = request.params.get(self.jsonp_param_name)
if callback is None:
- response.content_type = 'application/json'
+ response.content_type = 'application/geo+json'
else:
response.content_type = 'text/javascript'
ret = ('%(callback)s(%(json)s);' %
diff --git a/papyrus/tests/test_renderers.py b/papyrus/tests/test_renderers.py
index 6a0f8fa..0856329 100644
--- a/papyrus/tests/test_renderers.py
+++ b/papyrus/tests/test_renderers.py
@@ -29,7 +29,7 @@ def test_geojson(self):
result = renderer(f, {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"geometry": {"type": "Point", "coordinates": [53, -4]}, "type": "Feature", "id": 1, "properties": {"title": "Dict 1"}}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
def test_geojson_content_type(self):
renderer = self._callFUT()
@@ -59,7 +59,7 @@ def test_Decimal(self):
result = renderer(f, {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"geometry": {"type": "Point", "coordinates": [53, -4]}, "type": "Feature", "id": 1, "properties": {"decimal": 0.003}}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
def test_date(self):
renderer = self._callFUT()
@@ -74,7 +74,7 @@ def test_date(self):
result = renderer(f, {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"geometry": {"type": "Point", "coordinates": [53, -4]}, "type": "Feature", "id": 1, "properties": {"date": "2011-05-21"}}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
def test_datetime(self):
renderer = self._callFUT()
@@ -90,7 +90,7 @@ def test_datetime(self):
result = renderer(f, {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"geometry": {"type": "Point", "coordinates": [53, -4]}, "type": "Feature", "id": 1, "properties": {"datetime": "2011-05-21T20:55:12"}}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
def test_jsonp(self):
renderer = self._callFUT()
@@ -122,7 +122,7 @@ def test_jsonp_param_name(self):
result = renderer(f, {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"geometry": {"type": "Point", "coordinates": [53, -4]}, "type": "Feature", "id": 1, "properties": {"title": "Dict 1"}}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
request = testing.DummyRequest()
request.params['cb'] = 'jsonp_cb'
result = renderer(f, {'request': request})
@@ -144,7 +144,7 @@ def test_type_for_array_default(self):
result = renderer([f], {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [53, -4]}, "type": "Feature", "id": 1, "properties": {"title": "Dict 1"}}]}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
def test_collection_type(self):
renderer = self._callFUT(collection_type='GeometryCollection')
@@ -156,11 +156,11 @@ def test_collection_type(self):
result_parsed = json.loads(result)
self.assertEqual(result_parsed,
{"type": "Point", "coordinates": [53, -4]})
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
result = renderer([f], {'request': request})
result_parsed = json.loads(result)
self.assertEqual(result_parsed, {"type": "GeometryCollection", "geometries": [{"type": "Point", "coordinates": [53, -4]}]}) # NOQA
- self.assertEqual(request.response.content_type, 'application/json')
+ self.assertEqual(request.response.content_type, 'application/geo+json')
class Test_XSD(unittest.TestCase):