def _det_module_name_with(self, mns_method, ec, force_visible=False):
        """
        Determine module name using specified module naming scheme method, based on supplied easyconfig.
        Returns a string representing the module name, e.g. 'GCC/4.6.3', 'Python/2.7.5-ictce-4.1.13',
        with the following requirements:
            - module name is specified as a relative path
            - string representing module name has length > 0
            - module name only contains printable characters (string.printable, except carriage-control chars)
        """
        """
        Returns a string representing the module name, e.g. 'GCC/4.6.3', 'Python/2.7.5-ictce-4.1.13',
        with the following requirements:
            - module name is specified as a relative path
            - string representing module name has length > 0
            - module name only contains printable characters (string.printable, except carriage-control chars)
        """
        mod_name = mns_method(self.check_ec_type(ec))

        if not is_valid_module_name(mod_name):
            self.log.error("%s is not a valid module name" % str(mod_name))

        # check whether module name should be hidden or not
        # ec may be either a dict or an EasyConfig instance, 'force_visible' argument overrules
        if (ec.get('hidden', False) or getattr(ec, 'hidden', False)) and not force_visible:
            mod_name = det_hidden_modname(mod_name)

        return mod_name
 def det_short_module_name(self, ec):
     """Determine module name according to module naming scheme."""
     self.log.debug("Determining module name for %s" % ec)
     mod_name = self.mns.det_short_module_name(self.check_ec_type(ec))
     if not is_valid_module_name(mod_name):
         self.log.error("%s is not a valid module name" % str(mod_name))
     else:
         self.log.debug("Obtained valid module name %s" % mod_name)
     return mod_name
    def det_full_module_name(self, ec):
        """
        Determine full module name by selected module naming scheme, based on supplied easyconfig.
        Returns a string representing the module name, e.g. 'GCC/4.6.3', 'Python/2.7.5-ictce-4.1.13',
        with the following requirements:
            - module name is specified as a relative path
            - string representing module name has length > 0
            - module name only contains printable characters (string.printable, except carriage-control chars)
        """
        self.log.debug("Determining full module name for %s" % ec)
        mod_name = self.mns.det_full_module_name(self.check_ec_type(ec))

        if not is_valid_module_name(mod_name):
            self.log.error("%s is not a valid full module name" % str(mod_name))
        else:
            self.log.debug("Obtained valid full module name %s" % mod_name)

        return mod_name
    def test_mod_name_validation(self):
        """Test module naming validation."""
        # module name must be a string
        self.assertTrue(not is_valid_module_name(('foo', 'bar')))
        self.assertTrue(not is_valid_module_name(['foo', 'bar']))
        self.assertTrue(not is_valid_module_name(123))

        # module name must be relative
        self.assertTrue(not is_valid_module_name('/foo/bar'))

        # module name must only contain valid characters
        self.assertTrue(not is_valid_module_name('foo\x0bbar'))
        self.assertTrue(not is_valid_module_name('foo\x0cbar'))
        self.assertTrue(not is_valid_module_name('foo\rbar'))
        self.assertTrue(not is_valid_module_name('foo\0bar'))

        # valid module name must be accepted
        self.assertTrue(is_valid_module_name('gzip/goolf-1.4.10-suffix'))
        self.assertTrue(is_valid_module_name('GCC/4.7.2'))
        self.assertTrue(is_valid_module_name('foo-bar/1.2.3'))
        self.assertTrue(is_valid_module_name('ictce'))
    def test_mod_name_validation(self):
        """Test module naming validation."""
        # module name must be a string
        self.assertTrue(not is_valid_module_name(('foo', 'bar')))
        self.assertTrue(not is_valid_module_name(['foo', 'bar']))
        self.assertTrue(not is_valid_module_name(123))

        # module name must be relative
        self.assertTrue(not is_valid_module_name('/foo/bar'))

        # module name must only contain valid characters
        self.assertTrue(not is_valid_module_name('foo\x0bbar'))
        self.assertTrue(not is_valid_module_name('foo\x0cbar'))
        self.assertTrue(not is_valid_module_name('foo\rbar'))
        self.assertTrue(not is_valid_module_name('foo\0bar'))

        # valid module name must be accepted
        self.assertTrue(is_valid_module_name('gzip/goolf-1.4.10-suffix'))
        self.assertTrue(is_valid_module_name('GCC/4.7.2'))
        self.assertTrue(is_valid_module_name('foo-bar/1.2.3'))
        self.assertTrue(is_valid_module_name('ictce'))