예제 #1
0
    def test_using_options(self):
        """Test parsing of connection strings using options.
        """
        # Parse connection using an invalid options object.
        # Only a warning is logged and no options are used.
        cnx_str = 'myuser@localhost:3333'
        expected = {'user': '******', 'host': 'localhost', 'port': 3333}
        result = parse_connection(cnx_str, options=[])
        self.assertEqual(
            result, expected, "Connection string '{0}' parsed to {1}, "
            "expected {2}".format(cnx_str, result, expected))

        # Parse connection using options (valid dictionary).
        cnx_str = 'myuser@localhost:3306'
        test_opts = {
            'charset': 'test-charset',
            'ssl_cert': 'test-cert',
            'ssl_ca': 'test-ca',
            'ssl_key': 'test-key',
            'ssl': 'test-ssl',
        }
        expected = {'user': '******', 'host': 'localhost', 'port': 3306}
        expected.update(test_opts)
        result = parse_connection(cnx_str, options=test_opts)
        self.assertEqual(
            result, expected, "Connection string '{0}' parsed to {1}, "
            "expected {2}".format(cnx_str, result, expected))
예제 #2
0
    def test_using_options(self):
        """Test parsing of connection strings using options.
        """
        # Parse connection using an invalid options object.
        # Only a warning is logged and no options are used.
        cnx_str = 'myuser@localhost:3333'
        expected = {'user': '******', 'host': 'localhost',
                    'port': 3333}
        result = parse_connection(cnx_str, options=[])
        self.assertEqual(result, expected,
                         "Connection string '{0}' parsed to {1}, "
                         "expected {2}".format(cnx_str, result, expected))

        # Parse connection using options (valid dictionary).
        cnx_str = 'myuser@localhost:3306'
        test_opts = {
            'charset': 'test-charset',
            'ssl_cert': 'test-cert',
            'ssl_ca': 'test-ca',
            'ssl_key': 'test-key',
            'ssl': 'test-ssl',
        }
        expected = {'user': '******', 'host': 'localhost',
                    'port': 3306}
        expected.update(test_opts)
        result = parse_connection(cnx_str, options=test_opts)
        self.assertEqual(result, expected,
                         "Connection string '{0}' parsed to {1}, "
                         "expected {2}".format(cnx_str, result, expected))
예제 #3
0
    def test_invalid(self):
        """Test parsing of invalid connection strings.

        A GadgetCnxFormatError should be raised if the connection string is
        invalid.
        """
        for cnx_str in self.invalid_specificers:
            # Expect GadgetCnxFormatError: Error parsing connection string.
            with self.assertRaises(GadgetCnxFormatError):
                parse_connection(cnx_str)
예제 #4
0
    def test_valid(self):
        """Test parsing of valid connection strings.
        """
        for source, expected in self.valid_specifiers:
            result = _cnx_dict_to_str(parse_connection(source))
            self.assertEqual(
                expected, result, u"Connection string '{0}' parsed to {1}, "
                u"expected {2}".format(source, result, expected))

        parse_connection('myuser@localhost:3306', options=[])
예제 #5
0
    def test_invalid(self):
        """Test parsing of invalid connection strings.

        A GadgetCnxFormatError should be raised if the connection string is
        invalid.
        """
        for cnx_str in self.invalid_specificers:
            # Expect GadgetCnxFormatError: Error parsing connection string.
            with self.assertRaises(GadgetCnxFormatError):
                parse_connection(cnx_str)
예제 #6
0
    def test_valid(self):
        """Test parsing of valid connection strings.
        """
        for source, expected in self.valid_specifiers:
            result = _cnx_dict_to_str(parse_connection(source))
            self.assertEqual(expected, result,
                             u"Connection string '{0}' parsed to {1}, "
                             u"expected {2}".format(source, result, expected))

        parse_connection('myuser@localhost:3306', options=[])
예제 #7
0
    def __call__(self, parser_, namespace, values, option_string=None):
        try:
            param_dict = parse_connection(values)
            # Retrieve the set of already parsed connection strings and
            # check throw an error if the connection value is repeated.
            cache_name = "_{0}_cache".format(self.dest)
            # param_dict is a dictionary so it is not hashable.
            # we need a hashable representation of the connection parameters
            # to check if we've passed the same connection string more than
            # once.
            hashable_params = tuple(sorted(param_dict.items()))
            conn_list_cache = getattr(namespace, cache_name, set())
            if hashable_params in conn_list_cache:
                parser_.error("Cannot pass the same connection value more "
                              "than once: {0}".format(values))

            conn_list_cache.add(hashable_params)
            setattr(namespace, cache_name, conn_list_cache)
            # Not a repeated value, so add it to the list of connections
            conn_list = getattr(namespace, self.dest, None)
            conn_list = [] if conn_list is None else conn_list
            conn_list.append(param_dict)
            setattr(namespace, self.dest, conn_list)

            if self.ask_pass:
                # get the existing list of passwords to ask
                password_list = getattr(namespace, _APPEND_PASSWORD_LIST, [])
                # add (argument_name, values ) tuple to the list
                password_list.append((self.dest, values))
                setattr(namespace, _APPEND_PASSWORD_LIST, password_list)
        except GadgetCnxFormatError as e:
            parser_.error(e.errmsg)
예제 #8
0
 def __call__(self, parser_, namespace, values, option_string=None):
     try:
         param_dict = parse_connection(values)
         setattr(namespace, self.dest, param_dict)
         if self.ask_pass:
             # get the existing list of passwords to ask
             password_list = getattr(namespace, _STORE_PASSWORD_LIST, [])
             # add (argument_name, values ) tuple to the list
             password_list.append((self.dest, values))
             setattr(namespace, _STORE_PASSWORD_LIST, password_list)
     except GadgetCnxFormatError as e:
         parser_.error(e.errmsg)