Skip to content

Commit 43523a4

Browse files
authored
Merge pull request #207 from alimanfoo/dbm-test-cleanup
Clean up dbm files properly
2 parents 11fc028 + 79374af commit 43523a4

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

zarr/storage.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import sys
1818
import multiprocessing
1919
from threading import Lock, RLock
20+
import glob
2021

2122

2223
import numpy as np
@@ -834,6 +835,20 @@ def atexit_rmtree(path,
834835
rmtree(path)
835836

836837

838+
def atexit_rmglob(path,
839+
glob=glob.glob,
840+
isdir=os.path.isdir,
841+
isfile=os.path.isfile,
842+
remove=os.remove,
843+
rmtree=shutil.rmtree): # pragma: no cover
844+
"""Ensure removal of multiple files at interpreter exit."""
845+
for p in glob(path):
846+
if isfile(p):
847+
remove(p)
848+
elif isdir(p):
849+
rmtree(p)
850+
851+
837852
class TempStore(DirectoryStore):
838853
"""Directory store using a temporary directory for storage.
839854

zarr/tests/test_storage.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
from zarr.storage import (init_array, array_meta_key, attrs_key, DictStore,
2020
DirectoryStore, ZipStore, init_group, group_meta_key,
2121
getsize, migrate_1to2, TempStore, atexit_rmtree,
22-
NestedDirectoryStore, default_compressor, DBMStore, LMDBStore)
22+
NestedDirectoryStore, default_compressor, DBMStore,
23+
LMDBStore, atexit_rmglob)
2324
from zarr.meta import (decode_array_metadata, encode_array_metadata, ZARR_FORMAT,
2425
decode_group_metadata, encode_group_metadata)
2526
from zarr.compat import PY2
@@ -763,11 +764,11 @@ class TestDBMStoreDumb(TestDBMStore):
763764

764765
def create_store(self):
765766
path = tempfile.mktemp(suffix='.dumbdbm')
767+
atexit_rmglob(path + '*')
766768
if PY2: # pragma: py3 no cover
767769
import dumbdbm
768770
else: # pragma: py2 no cover
769771
import dbm.dumb as dumbdbm
770-
atexit.register(os.remove, path)
771772
store = DBMStore(path, flag='n', open=dumbdbm.open)
772773
return store
773774

@@ -798,7 +799,7 @@ class TestDBMStoreNDBM(TestDBMStore):
798799

799800
def create_store(self):
800801
path = tempfile.mktemp(suffix='.ndbm')
801-
atexit.register(os.remove, path)
802+
atexit_rmglob(path + '*')
802803
store = DBMStore(path, flag='n', open=ndbm.open)
803804
return store
804805

0 commit comments

Comments
 (0)