1616except ImportError :
1717 snappy = None
1818
19+ try :
20+ import lz4 .frame as lz4
21+ except ImportError :
22+ lz4 = None
23+
1924try :
2025 import lz4f
21- import xxhash
2226except ImportError :
2327 lz4f = None
2428
29+ try :
30+ import xxhash
31+ except ImportError :
32+ xxhash = None
33+
2534PYPY = bool (platform .python_implementation () == 'PyPy' )
2635
2736def has_gzip ():
@@ -33,7 +42,11 @@ def has_snappy():
3342
3443
3544def has_lz4 ():
36- return lz4f is not None
45+ if lz4 is not None :
46+ return True
47+ if lz4f is not None :
48+ return True
49+ return False
3750
3851
3952def gzip_encode (payload , compresslevel = None ):
@@ -181,13 +194,15 @@ def snappy_decode(payload):
181194 return snappy .decompress (payload )
182195
183196
184- def lz4_encode (payload ):
185- """Encode payload using interoperable LZ4 framing. Requires Kafka >= 0.10"""
186- # pylint: disable-msg=no-member
187- return lz4f .compressFrame (payload )
197+ if lz4 :
198+ lz4_encode = lz4 .compress # pylint: disable-msg=no-member
199+ elif lz4f :
200+ lz4_encode = lz4f .compressFrame # pylint: disable-msg=no-member
201+ else :
202+ lz4_encode = None
188203
189204
190- def lz4_decode (payload ):
205+ def lz4f_decode (payload ):
191206 """Decode payload using interoperable LZ4 framing. Requires Kafka >= 0.10"""
192207 # pylint: disable-msg=no-member
193208 ctx = lz4f .createDecompContext ()
@@ -201,8 +216,17 @@ def lz4_decode(payload):
201216 return data ['decomp' ]
202217
203218
219+ if lz4 :
220+ lz4_decode = lz4 .decompress # pylint: disable-msg=no-member
221+ elif lz4f :
222+ lz4_decode = lz4f_decode
223+ else :
224+ lz4_decode = None
225+
226+
204227def lz4_encode_old_kafka (payload ):
205228 """Encode payload for 0.8/0.9 brokers -- requires an incorrect header checksum."""
229+ assert xxhash is not None
206230 data = lz4_encode (payload )
207231 header_size = 7
208232 if isinstance (data [4 ], int ):
@@ -224,6 +248,7 @@ def lz4_encode_old_kafka(payload):
224248
225249
226250def lz4_decode_old_kafka (payload ):
251+ assert xxhash is not None
227252 # Kafka's LZ4 code has a bug in its header checksum implementation
228253 header_size = 7
229254 if isinstance (payload [4 ], int ):
0 commit comments