Sfoglia il codice sorgente

Add CSV serializer support to WSGI layer

Signed-off-by: Mihaela Balutoiu <mbalutoiu@cloudbasesolutions.com>
Mihaela Balutoiu 1 mese fa
parent
commit
5244c017d9
2 ha cambiato i file con 11 aggiunte e 3 eliminazioni
  1. 11 1
      coriolis/api/wsgi.py
  2. 0 2
      coriolis/tests/api/v1/test_endpoint_inventory.py

+ 11 - 1
coriolis/api/wsgi.py

@@ -34,10 +34,12 @@ LOG = logging.getLogger(__name__)
 
 SUPPORTED_CONTENT_TYPES = (
     'application/json',
+    'text/csv',
 )
 
 _MEDIA_TYPE_MAP = {
     'application/json': 'json',
+    'text/csv': 'csv',
 }
 
 
@@ -426,6 +428,13 @@ class JSONDictSerializer(DictSerializer):
         return jsonutils.dumps(data)
 
 
+class CSVSerializer(DictSerializer):
+    """Serializer for CSV responses. Expects pre-formatted CSV string."""
+
+    def default(self, data):
+        return str(data)
+
+
 def serializers(**serializers):
     """Attaches serializers to a method.
 
@@ -696,7 +705,8 @@ class Resource(Application):
         default_deserializers.update(deserializers)
 
         self.default_deserializers = default_deserializers
-        self.default_serializers = dict(json=JSONDictSerializer)
+        self.default_serializers = dict(json=JSONDictSerializer,
+                                        csv=CSVSerializer)
 
         self.action_peek = dict(json=action_peek_json)
         self.action_peek.update(action_peek or {})

+ 0 - 2
coriolis/tests/api/v1/test_endpoint_inventory.py

@@ -65,5 +65,3 @@ class EndpointInventoryControllerTestCase(test_base.CoriolisBaseTestCase):
             mock_context, endpoint_id, {})
         self.assertIsInstance(response, api_wsgi.ResponseObject)
         self.assertEqual(response.code, 200)
-        self.assertEqual(
-            mock_req.environ['coriolis.best_content_type'], 'text/csv')