Source code for obspy.core.util.decorator

# -*- coding: utf-8 -*-
"""
Decorator used in ObsPy.

:copyright:
    The ObsPy Development Team (devs@obspy.org)
:license:
    GNU Lesser General Public License, Version 3
    (http://www.gnu.org/copyleft/lesser.html)
"""

from obspy.core.util.base import NamedTemporaryFile
import functools
import os
import unittest
import warnings


[docs]def deprecated(func, warning_msg=None): """ This is a decorator which can be used to mark functions as deprecated. It will result in a warning being emitted when the function is used. """ @functools.wraps(func) def new_func(*args, **kwargs): if 'deprecated' in str(func.__doc__).lower(): msg = func.__doc__ elif warning_msg: msg = warning_msg else: msg = "Call to deprecated function %s." % func.__name__ warnings.warn(msg, category=DeprecationWarning) return func(*args, **kwargs) new_func.__name__ = func.__name__ new_func.__doc__ = func.__doc__ new_func.__dict__.update(func.__dict__) return new_func
[docs]def deprecated_keywords(keywords): """ Decorator for marking keywords as deprecated. :type keywords: dict :param keywords: old/new keyword names as key/value pairs. """ def fdec(func): fname = func.func_name msg = "Deprecated keyword %s in %s() call - please use %s instead." msg2 = "Deprecated keyword %s in %s() call - ignoring." @functools.wraps(func) def echo_func(*args, **kwargs): for kw in kwargs.keys(): if kw in keywords: nkw = keywords[kw] if nkw is None: warnings.warn(msg2 % (kw, fname), category=DeprecationWarning) else: warnings.warn(msg % (kw, fname, nkw), category=DeprecationWarning) kwargs[nkw] = kwargs[kw] del(kwargs[kw]) return func(*args, **kwargs) return echo_func return fdec
[docs]def skipIf(condition, reason): """ Skip a test if the condition is true. """ if condition: return skip(reason) def _id(obj): return obj return _id
[docs]def uncompressFile(func): """ Decorator used for temporary uncompressing file if .gz or .bz2 archive. """ def wrapped_func(filename, *args, **kwargs): if not isinstance(filename, basestring): return func(filename, *args, **kwargs) elif not os.path.exists(filename): msg = "File not found '%s'" % (filename) raise IOError(msg) # check if we got a compressed file unpacked_data = None if filename.endswith('.bz2'): # bzip2 try: import bz2 unpacked_data = bz2.decompress(open(filename, 'rb').read()) except: pass elif filename.endswith('.gz'): # gzip try: import gzip unpacked_data = gzip.open(filename, 'rb').read() except: pass if unpacked_data: # we unpacked something without errors - create temporary file tempfile = NamedTemporaryFile() tempfile._fileobj.write(unpacked_data) tempfile.close() # call wrapped function try: result = func(tempfile.name, *args, **kwargs) except: # clean up unpacking procedure if unpacked_data: tempfile.close() os.remove(tempfile.name) raise # clean up unpacking procedure if unpacked_data: tempfile.close() os.remove(tempfile.name) else: # call wrapped function with original filename result = func(filename, *args, **kwargs) return result return wrapped_func
if __name__ == '__main__': import doctest doctest.testmod(exclude_empty=True)