85 lines
2.2 KiB
Python
85 lines
2.2 KiB
Python
![]() |
# This file is part of h5py, a Python interface to the HDF5 library.
|
||
|
#
|
||
|
# http://www.h5py.org
|
||
|
#
|
||
|
# Copyright 2008-2013 Andrew Collette and contributors
|
||
|
#
|
||
|
# License: Standard 3-clause BSD; see "license.txt" for full license terms
|
||
|
# and contributor agreement.
|
||
|
|
||
|
"""
|
||
|
Tests the h5py.File object.
|
||
|
"""
|
||
|
|
||
|
import threading
|
||
|
import h5py
|
||
|
|
||
|
|
||
|
def _access_not_existing_object(filename):
|
||
|
"""Create a file and access not existing key"""
|
||
|
with h5py.File(filename, 'w') as newfile:
|
||
|
try:
|
||
|
doesnt_exist = newfile['doesnt_exist'].value
|
||
|
except KeyError:
|
||
|
pass
|
||
|
|
||
|
|
||
|
def test_unsilence_errors(tmp_path, capfd):
|
||
|
"""Check that HDF5 errors can be muted/unmuted from h5py"""
|
||
|
filename = tmp_path / 'test.h5'
|
||
|
|
||
|
# Unmute HDF5 errors
|
||
|
try:
|
||
|
h5py._errors.unsilence_errors()
|
||
|
|
||
|
_access_not_existing_object(filename)
|
||
|
captured = capfd.readouterr()
|
||
|
assert captured.err != ''
|
||
|
assert captured.out == ''
|
||
|
|
||
|
# Mute HDF5 errors
|
||
|
finally:
|
||
|
h5py._errors.silence_errors()
|
||
|
|
||
|
_access_not_existing_object(filename)
|
||
|
captured = capfd.readouterr()
|
||
|
assert captured.err == ''
|
||
|
assert captured.out == ''
|
||
|
|
||
|
|
||
|
def test_thread_hdf5_silence_error_membership(tmp_path, capfd):
|
||
|
"""Verify the error printing is squashed in all threads.
|
||
|
|
||
|
No console messages should be shown from membership tests
|
||
|
"""
|
||
|
th = threading.Thread(target=_access_not_existing_object,
|
||
|
args=(tmp_path / 'test.h5',))
|
||
|
th.start()
|
||
|
th.join()
|
||
|
|
||
|
captured = capfd.readouterr()
|
||
|
assert captured.err == ''
|
||
|
assert captured.out == ''
|
||
|
|
||
|
|
||
|
def test_thread_hdf5_silence_error_attr(tmp_path, capfd):
|
||
|
"""Verify the error printing is squashed in all threads.
|
||
|
|
||
|
No console messages should be shown for non-existing attributes
|
||
|
"""
|
||
|
def test():
|
||
|
with h5py.File(tmp_path/'test.h5', 'w') as newfile:
|
||
|
newfile['newdata'] = [1, 2, 3]
|
||
|
try:
|
||
|
nonexistent_attr = newfile['newdata'].attrs['nonexistent_attr']
|
||
|
except KeyError:
|
||
|
pass
|
||
|
|
||
|
th = threading.Thread(target=test)
|
||
|
th.start()
|
||
|
th.join()
|
||
|
|
||
|
captured = capfd.readouterr()
|
||
|
assert captured.err == ''
|
||
|
assert captured.out == ''
|