Generate spec for the processor as a Python dictionary.

        A spec is a standard way to describe a MountainLab processor in a way
        that is easy to process, yet still understandable by humans.
        This method generates a Python dictionary that complies with a spec
        definition.

def spec(self):
        """
        Generate spec for the processor as a Python dictionary.

        A spec is a standard way to describe a MountainLab processor in a way
        that is easy to process, yet still understandable by humans.
        This method generates a Python dictionary that complies with a spec
        definition.
        """
        pspec = {}
        pspec['name'] = self.NAME
        pspec['version'] = self.VERSION
        pspec['description'] = self.DESCRIPTION
        #if hasattr(self, 'run') and callable(self.run):
        components = [sys.argv[0], self.NAME]
        if self.USE_ARGUMENTS: components.append('$(arguments)')
        pspec['exe_command'] = self.COMMAND or ' '.join(components)

        pspec['inputs'] = [ inp.spec for inp in self.INPUTS ]
        pspec['outputs'] = [ out.spec for out in self.OUTPUTS ]
        pspec['parameters'] = [ param.spec for param in self.PARAMETERS ]
        if hasattr(self, 'test') and callable(self.test):
            pspec['has_test'] = True

        return pspec