Source code for bob.io.base.test_utils

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# Andre Anjos <andre.anjos@idiap.ch>
# Thu Feb  7 09:58:22 2013
#
# Copyright (C) 2011-2013 Idiap Research Institute, Martigny, Switzerland

"""Re-usable decorators and utilities for bob test code
"""

import os
import functools
import nose.plugins.skip

[docs]def datafile(f, module=None, path='data'): """datafile(f, [module], [data]) -> filename Returns the test file on the "data" subdirectory of the current module. **Parameters:** ``f`` : str This is the filename of the file you want to retrieve. Something like ``'movie.avi'``. ``module``: str [optional] This is the python-style package name of the module you want to retrieve the data from. This should be something like ``bob.io.base``, but you normally refer it using the ``__name__`` property of the module you want to find the path relative to. ``path``: str [Default: ``'data'``] The subdirectory where the datafile will be taken from inside the module. It can be set to ``None`` if it should be taken from the module path root (where the ``__init__.py`` file sits). **Returns:** ``filename`` : str The full path of the file """ resource = __name__ if module is None else module final_path = f if path is None else os.path.join(path, f) import pkg_resources return pkg_resources.resource_filename(resource, final_path)
[docs]def temporary_filename(prefix='bobtest_', suffix='.hdf5'): """temporary_filename([prefix], [suffix]) -> filename Generates a temporary filename to be used in tests, using the default ``temp`` directory (on Unix-like systems, usually ``/tmp``). Please note that you are responsible for deleting the file after your test finished. A common way to assure the file to be deleted is: .. code-block:: py import bob.io.base.test_utils temp = bob.io.base.test_utils.temporary_filename() try: # use the temp file ... finally: if os.path.exist(temp): os.remove(temp) **Parameters:** ``prefix`` : str [Default: ``'bobtest_'``] The file name prefix to be added in front of the random file name ``suffix`` : str [Default: ``'.hdf5'``] The file name extension of the temporary file name **Returns:** ``filename`` : str The name of a temporary file that you can use in your test. Don't forget to delete! """ import tempfile fd, name = tempfile.mkstemp(suffix, prefix) os.close(fd) os.unlink(name) return name
[docs]def extension_available(extension): '''Decorator to check if a extension is available before enabling a test This decorator is mainly used to decorate a test function, in order to skip tests when the extension is not available. The syntax is: .. code-block:: py import bob.io.base.test_utils @bob.io.base.test_utils.extension_available('.ext') def my_test(): ... ''' def test_wrapper(test): @functools.wraps(test) def wrapper(*args, **kwargs): from . import extensions if extension in extensions(): return test(*args, **kwargs) else: raise nose.plugins.skip.SkipTest('Extension to handle "%s" files was not available at compile time' % extension) return wrapper return test_wrapper