russianidiot/only.py

View on GitHub
only/__init__.py

Summary

Maintainability
B
4 hrs
Test Coverage
__all__ = ['linux', 'mac', 'osx', 'unix', 'windows']


import decorator
import detect


def _raise_if(value, f, msg):
    if value:
        name = "%s.%s" % (f.__module__, f.__name__)
        raise OSError("%s %s" % (name, msg))


@decorator.decorator
def linux(f, *args, **kwargs):
    """`@only.linux` decorator. raise OSError in not linux"""
    _raise_if(not detect.linux, f, "is Linux only :(")
    return f(*args, **kwargs)


@decorator.decorator
def mac(f, *args, **kwargs):
    """`@only.mac` decorator. raise OSError in not MacOS"""
    _raise_if(not detect.mac, f, "is MacOS only :(")
    return f(*args, **kwargs)


@decorator.decorator
def osx(f, *args, **kwargs):
    """`@only.osx` decorator. raise OSError in not OSX"""
    _raise_if(not detect.mac, f, "is OSX only :(")
    return f(*args, **kwargs)


@decorator.decorator
def windows(f, *args, **kwargs):
    """`@only.windows` decorator. raise OSError in not Windows"""
    _raise_if(not detect.mac, f, "is OSX only :(")
    return f(*args, **kwargs)


@decorator.decorator
def unix(f, *args, **kwargs):
    """`@only.unix` decorator. raise OSError in not Unix"""
    _raise_if(not detect.unix, f, "is OSX only :(")
    return f(*args, **kwargs)