فهرست منبع

Revert "[core] make snappy a first class citizen"

This reverts commit 8d15fcf37fe9deedbd0579f1744db7728642db4b.

Conflicts:
	apps/filebrowser/src/filebrowser/views.py
Abraham Elmahrek 11 سال پیش
والد
کامیت
d09dce2
3فایلهای تغییر یافته به همراه25 افزوده شده و 7 حذف شده
  1. 0 3
      README.rst
  2. 16 3
      apps/filebrowser/src/filebrowser/views.py
  3. 9 1
      apps/filebrowser/src/filebrowser/views_test.py

+ 0 - 3
README.rst

@@ -85,7 +85,6 @@ your system:
       * python-dev
       * python-simplejson
       * python-setuptools
-      * libsnappy-dev
 
     CentOS:
       * ant
@@ -105,7 +104,6 @@ your system:
       * python-devel
       * python-simplejson
       * sqlite-devel
-      * snappy-devel
 
     MacOS (mac port):
       * liblxml
@@ -114,7 +112,6 @@ your system:
       * mysql5-devel
       * simplejson (easy_install)
       * sqlite3
-      * snappy
 
 
 File Layout

+ 16 - 3
apps/filebrowser/src/filebrowser/views.py

@@ -24,7 +24,6 @@ import parquet
 import posixpath
 import re
 import shutil
-import snappy
 import stat as stat_module
 import os
 
@@ -634,9 +633,9 @@ def read_contents(codec_type, path, fs, offset, length):
                 codec_type = 'avro'
             elif path.endswith('.parquet') and detect_parquet(fhandle):
                 codec_type = 'parquet'
-            elif path.endswith('.snappy'):
+            elif snappy_installed() and path.endswith('.snappy'):
                 codec_type = 'snappy'
-            elif stats.size <= MAX_SNAPPY_DECOMPRESSION_SIZE.get() and detect_snappy(fhandle.read()):
+            elif snappy_installed() and stats.size <= MAX_SNAPPY_DECOMPRESSION_SIZE.get() and detect_snappy(fhandle.read()):
                 codec_type = 'snappy'
 
         fhandle.seek(0)
@@ -661,12 +660,16 @@ def read_contents(codec_type, path, fs, offset, length):
 
 def _decompress_snappy(compressed_content):
     try:
+        import snappy
         return snappy.decompress(compressed_content)
     except Exception, e:
         raise PopupException(_('Failed to decompress snappy compressed file.'), detail=e)
 
 
 def _read_snappy(fhandle, path, offset, length, stats):
+    if not snappy_installed():
+        raise PopupException(_('Failed to decompress snappy compressed file. Snappy is not installed.'))
+
     if stats.size > MAX_SNAPPY_DECOMPRESSION_SIZE.get():
         raise PopupException(_('Failed to decompress snappy compressed file. File size is greater than allowed max snappy decompression size of %d.') % MAX_SNAPPY_DECOMPRESSION_SIZE.get())
 
@@ -748,6 +751,7 @@ def detect_snappy(contents):
     This will also return false if snappy decompression if we do not have the library available.
     '''
     try:
+        import snappy
         return snappy.isValidCompressed(contents)
     except:
         return False
@@ -760,6 +764,15 @@ def detect_parquet(fhandle):
     return parquet._check_header_magic_bytes(fhandle)
 
 
+def snappy_installed():
+    '''Snappy is library that isn't supported by python2.4'''
+    try:
+        import snappy
+        return True
+    except:
+        return False
+
+
 def _calculate_navigation(offset, length, size):
     """
     List of (offset, length, string) tuples for suggested navigation through the file.

+ 9 - 1
apps/filebrowser/src/filebrowser/views_test.py

@@ -20,7 +20,6 @@ import json
 import logging
 import os
 import re
-import snappy
 import urlparse
 from avro import schema, datafile, io
 
@@ -36,6 +35,7 @@ from filebrowser.views import location_to_url
 
 from conf import MAX_SNAPPY_DECOMPRESSION_SIZE
 from lib.rwx import expand_mode
+from views import snappy_installed
 
 
 LOG = logging.getLogger(__name__)
@@ -583,6 +583,10 @@ def test_chooser():
 
 @attr('requires_hadoop')
 def test_view_snappy_compressed():
+  if not snappy_installed():
+    raise SkipTest
+  import snappy
+
   cluster = pseudo_hdfs4.shared_cluster()
   finish = []
   try:
@@ -635,6 +639,10 @@ def test_view_snappy_compressed():
 
 @attr('requires_hadoop')
 def test_view_snappy_compressed_avro():
+  if not snappy_installed():
+    raise SkipTest
+  import snappy
+
   cluster = pseudo_hdfs4.shared_cluster()
   finish = []
   try: