def get_descriptor_by_name(self, identifier, name, namespace='',
                               package_version='', module_version=''):
        """Gets the specified descriptor from the registry.

        If you do not specify package_version, you will get the currently
        loaded version.
        If you do not specify the module_version, you will get the most recent
        version.  Note that module_version is currently only used for
        abstractions.

        :raises ModuleRegistryException: if lookup fails.
        """
        namespace = namespace or ''
        package_version = package_version or ''
        module_version = module_version or ''

        try:
            package = self.packages[identifier]
        except KeyError:
            raise MissingPackage(identifier)
        if package_version:
            try:
                package = self.package_versions[(identifier, package_version)]
            except KeyError:
                raise MissingPackageVersion(identifier, package_version)
        try:
            descriptor = package.descriptors[(name, namespace)]
        except KeyError:
            raise MissingModule(identifier, name, namespace,
                                package_version)
        if module_version:
            descriptor_version_key = (name, namespace, module_version)
            try:
                descriptor = \
                    package.descriptor_versions[descriptor_version_key]
            except __HOLE__:
                raise MissingModuleVersion(identifier, name, namespace,
                                           module_version, package_version)
        return descriptor
dataset/ETHPy150Open VisTrails/VisTrails/vistrails/core/modules/module_registry.py/ModuleRegistry.get_descriptor_by_name