def __init__(self, obj):
        if not callable(obj):
            raise TypeError('Object not callable: %s' % obj)

        # Save some attributes about the task
        self.name = obj.__name__
        self.doc = inspect.getdoc(obj) or ''

        # If the provided object is a type (like a class), we'll treat
        # it a little differently from if it's a pure function. The
        # assumption is that the class will be instantiated wit no
        # arguments, and then called with the provided arguments
        if isinstance(obj, type):
            try:
                self._obj = obj()
            except:
                raise TypeError(
                    self.name % '%s => Task classes must take no arguments')
            self.spec = inspect.getargspec(self._obj.__call__)
            self.doc = inspect.getdoc(self._obj.__call__) or self.doc
            self.line = 'Unknown line'
            self.file = 'Unknown file'
        else:
            self.spec = inspect.getargspec(obj)
            self._obj = obj
            self.line = obj.__code__.co_firstlineno
            self.file = obj.__code__.co_filename

        self.module = self._obj.__module__
        self.fullname = self.name

        # What module / etc. this overrides, if any
        self.overrides = None
dataset/ETHPy150Open seomoz/shovel/shovel/tasks.py/Task.__init__/swapped operands of `%`