Author: tomaz
Date: Thu Feb 2 20:42:19 2012
New Revision: 1239825
URL: http://svn.apache.org/viewvc?rev=1239825&view=rev
Log:
Add a new module for handling decompression of data.
Added:
libcloud/trunk/libcloud/utils/compression.py
Modified:
libcloud/trunk/libcloud/common/base.py
Modified: libcloud/trunk/libcloud/common/base.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/common/base.py?rev=1239825&r1=1239824&r2=1239825&view=diff
==============================================================================
--- libcloud/trunk/libcloud/common/base.py (original)
+++ libcloud/trunk/libcloud/common/base.py Thu Feb 2 20:42:19 2012
@@ -16,8 +16,6 @@
import sys
import ssl
import time
-import zlib
-import gzip
from xml.etree import ElementTree as ET
from pipes import quote as pquote
@@ -38,6 +36,7 @@ from libcloud.utils.py3 import StringIO
from libcloud.utils.py3 import b
from libcloud.utils.misc import lowercase_keys
+from libcloud.utils.compression import decompress_data
from libcloud.common.types import LibcloudError, MalformedResponseError
from libcloud.httplib_ssl import LibcloudHTTPSConnection
@@ -121,16 +120,9 @@ class Response(object):
body = response.read()
if encoding in ['zlib', 'deflate']:
- body = zlib.decompress(body)
+ body = decompress_data('zlib', body)
elif encoding in ['gzip', 'x-gzip']:
- # TODO: Should export BytesIO as StringIO in libcloud.utils.py3
- if PY3:
- from io import BytesIO
- cls = BytesIO
- else:
- cls = StringIO
-
- body = gzip.GzipFile(fileobj=cls(body)).read()
+ body = decompress_data('gzip', body)
else:
body = body.strip()
Added: libcloud/trunk/libcloud/utils/compression.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/utils/compression.py?rev=1239825&view=auto
==============================================================================
--- libcloud/trunk/libcloud/utils/compression.py (added)
+++ libcloud/trunk/libcloud/utils/compression.py Thu Feb 2 20:42:19 2012
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import zlib
+import gzip
+
+from libcloud.utils.py3 import PY3
+from libcloud.utils.py3 import StringIO
+from libcloud.utils.py3 import b
+
+
+__all__ = [
+ 'decompress_data'
+]
+
+
+def decompress_data(compression_type, data):
+ if compression_type == 'zlib':
+ return zlib.decompress(data)
+ elif compression_type == 'gzip':
+ # TODO: Should export BytesIO as StringIO in libcloud.utils.py3
+ if PY3:
+ from io import BytesIO
+ cls = BytesIO
+ else:
+ cls = StringIO
+
+ return gzip.GzipFile(fileobj=cls(data)).read()
+ else:
+ raise Exception('Invalid or onsupported compression type: %s' %
+ (compression_type))