51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from collections.abc import Generator
 | |
| from contextlib import contextmanager
 | |
| import pathlib
 | |
| import tempfile
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| from pandas.io.pytables import HDFStore
 | |
| 
 | |
| tables = pytest.importorskip("tables")
 | |
| # set these parameters so we don't have file sharing
 | |
| tables.parameters.MAX_NUMEXPR_THREADS = 1
 | |
| tables.parameters.MAX_BLOSC_THREADS = 1
 | |
| tables.parameters.MAX_THREADS = 1
 | |
| 
 | |
| 
 | |
| def safe_close(store):
 | |
|     try:
 | |
|         if store is not None:
 | |
|             store.close()
 | |
|     except OSError:
 | |
|         pass
 | |
| 
 | |
| 
 | |
| # contextmanager to ensure the file cleanup
 | |
| @contextmanager
 | |
| def ensure_clean_store(
 | |
|     path, mode="a", complevel=None, complib=None, fletcher32=False
 | |
| ) -> Generator[HDFStore, None, None]:
 | |
|     with tempfile.TemporaryDirectory() as tmpdirname:
 | |
|         tmp_path = pathlib.Path(tmpdirname, path)
 | |
|         with HDFStore(
 | |
|             tmp_path,
 | |
|             mode=mode,
 | |
|             complevel=complevel,
 | |
|             complib=complib,
 | |
|             fletcher32=fletcher32,
 | |
|         ) as store:
 | |
|             yield store
 | |
| 
 | |
| 
 | |
| def _maybe_remove(store, key):
 | |
|     """
 | |
|     For tests using tables, try removing the table to be sure there is
 | |
|     no content from previous tests using the same table name.
 | |
|     """
 | |
|     try:
 | |
|         store.remove(key)
 | |
|     except (ValueError, KeyError):
 | |
|         pass
 |