Skip to content

Commit bb45969

Browse files
committed
Add trivial try...finally...s to cleanup diff
1 parent 13f8e50 commit bb45969

File tree

2 files changed

+107
-88
lines changed

2 files changed

+107
-88
lines changed

numcodecs/blosc.pyx

Lines changed: 59 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -306,40 +306,44 @@ def compress(source, char* cname, int clevel, int shuffle=SHUFFLE,
306306
raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' %
307307
shuffle)
308308

309-
# setup destination
310-
dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD)
311-
dest_ptr = PyBytes_AS_STRING(dest)
312-
313-
# perform compression
314-
if _get_use_threads():
315-
# allow blosc to use threads internally
316-
317-
# N.B., we are using blosc's global context, and so we need to use a lock
318-
# to ensure no-one else can modify the global context while we're setting it
319-
# up and using it.
320-
with get_mutex():
321-
322-
# set compressor
323-
compressor_set = blosc_set_compressor(cname)
324-
if compressor_set < 0:
325-
# shouldn't happen if we checked against list of compressors
326-
# already, but just in case
327-
_err_bad_cname(cname_str)
328-
329-
# set blocksize
330-
blosc_set_blocksize(blocksize)
331-
332-
# perform compression
333-
with nogil:
334-
cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr,
335-
dest_ptr, nbytes + BLOSC_MAX_OVERHEAD)
309+
try:
336310

337-
else:
338-
with nogil:
339-
cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr,
340-
dest_ptr, nbytes + BLOSC_MAX_OVERHEAD,
341-
cname, blocksize, 1)
311+
# setup destination
312+
dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD)
313+
dest_ptr = PyBytes_AS_STRING(dest)
314+
315+
# perform compression
316+
if _get_use_threads():
317+
# allow blosc to use threads internally
318+
319+
# N.B., we are using blosc's global context, and so we need to use a lock
320+
# to ensure no-one else can modify the global context while we're setting it
321+
# up and using it.
322+
with get_mutex():
342323

324+
# set compressor
325+
compressor_set = blosc_set_compressor(cname)
326+
if compressor_set < 0:
327+
# shouldn't happen if we checked against list of compressors
328+
# already, but just in case
329+
_err_bad_cname(cname_str)
330+
331+
# set blocksize
332+
blosc_set_blocksize(blocksize)
333+
334+
# perform compression
335+
with nogil:
336+
cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr,
337+
dest_ptr, nbytes + BLOSC_MAX_OVERHEAD)
338+
339+
else:
340+
with nogil:
341+
cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr,
342+
dest_ptr, nbytes + BLOSC_MAX_OVERHEAD,
343+
cname, blocksize, 1)
344+
345+
finally:
346+
pass
343347

344348
# check compression was successful
345349
if cbytes <= 0:
@@ -403,19 +407,23 @@ def decompress(source, dest=None):
403407
dest_ptr = <char*>dest_pb.buf
404408
dest_nbytes = dest_pb.len
405409

406-
# guard condition
407-
if dest_nbytes < nbytes:
408-
raise ValueError('destination buffer too small; expected at least %s, '
409-
'got %s' % (nbytes, dest_nbytes))
410+
try:
410411

411-
# perform decompression
412-
if _get_use_threads():
413-
# allow blosc to use threads internally
414-
with nogil:
415-
ret = blosc_decompress(source_ptr, dest_ptr, nbytes)
416-
else:
417-
with nogil:
418-
ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1)
412+
# guard condition
413+
if dest_nbytes < nbytes:
414+
raise ValueError('destination buffer too small; expected at least %s, '
415+
'got %s' % (nbytes, dest_nbytes))
416+
417+
# perform decompression
418+
if _get_use_threads():
419+
# allow blosc to use threads internally
420+
with nogil:
421+
ret = blosc_decompress(source_ptr, dest_ptr, nbytes)
422+
else:
423+
with nogil:
424+
ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1)
425+
finally:
426+
pass
419427

420428
# handle errors
421429
if ret <= 0:
@@ -490,10 +498,13 @@ def _decompress_partial(source, start, nitems, dest=None):
490498
dest_nbytes = dest_pb.len
491499

492500
# try decompression
493-
if dest_nbytes < nitems_bytes:
494-
raise ValueError('destination buffer too small; expected at least %s, '
495-
'got %s' % (nitems_bytes, dest_nbytes))
496-
ret = blosc_getitem(source_ptr, start, nitems, dest_ptr)
501+
try:
502+
if dest_nbytes < nitems_bytes:
503+
raise ValueError('destination buffer too small; expected at least %s, '
504+
'got %s' % (nitems_bytes, dest_nbytes))
505+
ret = blosc_getitem(source_ptr, start, nitems, dest_ptr)
506+
finally:
507+
pass
497508

498509
# ret refers to the number of bytes returned from blosc_getitem.
499510
if ret <= 0:

numcodecs/lz4.pyx

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,20 @@ def compress(source, int acceleration=DEFAULT_ACCELERATION):
8686
source_ptr = <const char*>source_pb.buf
8787
source_size = source_pb.len
8888

89-
# setup destination
90-
dest_size = LZ4_compressBound(source_size)
91-
dest = PyBytes_FromStringAndSize(NULL, dest_size + sizeof(uint32_t))
92-
dest_ptr = PyBytes_AS_STRING(dest)
93-
store_le32(<uint8_t*>dest_ptr, source_size)
94-
dest_start = dest_ptr + sizeof(uint32_t)
95-
96-
# perform compression
97-
with nogil:
98-
compressed_size = LZ4_compress_fast(source_ptr, dest_start, source_size, dest_size,
99-
acceleration)
89+
try:
90+
# setup destination
91+
dest_size = LZ4_compressBound(source_size)
92+
dest = PyBytes_FromStringAndSize(NULL, dest_size + sizeof(uint32_t))
93+
dest_ptr = PyBytes_AS_STRING(dest)
94+
store_le32(<uint8_t*>dest_ptr, source_size)
95+
dest_start = dest_ptr + sizeof(uint32_t)
96+
97+
# perform compression
98+
with nogil:
99+
compressed_size = LZ4_compress_fast(source_ptr, dest_start, source_size, dest_size,
100+
acceleration)
101+
finally:
102+
pass
100103

101104
# check compression was successful
102105
if compressed_size <= 0:
@@ -145,35 +148,40 @@ def decompress(source, dest=None):
145148
source_ptr = <const char*>source_pb.buf
146149
source_size = source_pb.len
147150

148-
# determine uncompressed size
149-
if source_size < sizeof(uint32_t):
150-
raise ValueError('bad input data')
151-
dest_size = load_le32(<uint8_t*>source_ptr)
152-
if dest_size <= 0:
153-
raise RuntimeError('LZ4 decompression error: invalid input data')
154-
source_start = source_ptr + sizeof(uint32_t)
155-
source_size -= sizeof(uint32_t)
156-
157-
# setup destination buffer
158-
if dest is None:
159-
# allocate memory
160-
dest_1d = dest = PyBytes_FromStringAndSize(NULL, dest_size)
161-
else:
162-
dest_1d = ensure_contiguous_ndarray(dest)
163-
164-
# obtain dest memoryview
165-
dest_mv = memoryview(dest_1d)
166-
dest_pb = PyMemoryView_GET_BUFFER(dest_mv)
167-
dest_ptr = <char*>dest_pb.buf
168-
dest_nbytes = dest_pb.len
169-
170-
if dest_nbytes < dest_size:
171-
raise ValueError('destination buffer too small; expected at least %s, '
172-
'got %s' % (dest_size, dest_nbytes))
173-
174-
# perform decompression
175-
with nogil:
176-
decompressed_size = LZ4_decompress_safe(source_start, dest_ptr, source_size, dest_size)
151+
try:
152+
153+
# determine uncompressed size
154+
if source_size < sizeof(uint32_t):
155+
raise ValueError('bad input data')
156+
dest_size = load_le32(<uint8_t*>source_ptr)
157+
if dest_size <= 0:
158+
raise RuntimeError('LZ4 decompression error: invalid input data')
159+
source_start = source_ptr + sizeof(uint32_t)
160+
source_size -= sizeof(uint32_t)
161+
162+
# setup destination buffer
163+
if dest is None:
164+
# allocate memory
165+
dest_1d = dest = PyBytes_FromStringAndSize(NULL, dest_size)
166+
else:
167+
dest_1d = ensure_contiguous_ndarray(dest)
168+
169+
# obtain dest memoryview
170+
dest_mv = memoryview(dest_1d)
171+
dest_pb = PyMemoryView_GET_BUFFER(dest_mv)
172+
dest_ptr = <char*>dest_pb.buf
173+
dest_nbytes = dest_pb.len
174+
175+
if dest_nbytes < dest_size:
176+
raise ValueError('destination buffer too small; expected at least %s, '
177+
'got %s' % (dest_size, dest_nbytes))
178+
179+
# perform decompression
180+
with nogil:
181+
decompressed_size = LZ4_decompress_safe(source_start, dest_ptr, source_size, dest_size)
182+
183+
finally:
184+
pass
177185

178186
# check decompression was successful
179187
if decompressed_size <= 0:

0 commit comments

Comments
 (0)