def test_validate_userinfo(self): self.assertRaises(InvalidURI, parse_userinfo, "foo@") self.assertRaises(InvalidURI, parse_userinfo, ":password") self.assertRaises(InvalidURI, parse_userinfo, "user:"******"fo::o:p@ssword") self.assertRaises(InvalidURI, parse_userinfo, ":") self.assert_(parse_userinfo("user:password")) self.assertEqual(("us:r", "p@ssword"), parse_userinfo("us%3Ar:p%40ssword"))
def test_validate_userinfo(self): self.assertRaises(InvalidURI, parse_userinfo, 'foo@') self.assertRaises(InvalidURI, parse_userinfo, ':password') self.assertRaises(InvalidURI, parse_userinfo, 'user:'******'fo::o:p@ssword') self.assertRaises(InvalidURI, parse_userinfo, ':') self.assert_(parse_userinfo('user:password')) self.assertEqual(('us:r', 'p@ssword'), parse_userinfo('us%3Ar:p%40ssword'))
def extract_user_password(uri: str): """ extract username, password and host with port from mongo uri :param uri: mongo uri :return: username, password, scheme, hosts """ if uri.startswith(SCHEME): scheme_free = uri[SCHEME_LEN:] scheme = uri[:SCHEME_LEN] elif uri.startswith(SRV_SCHEME): scheme_free = uri[SRV_SCHEME_LEN:] scheme = uri[:SRV_SCHEME_LEN] else: raise InvalidURI("Invalid URI scheme: URI must " "begin with '%s' or '%s'" % (SCHEME, SRV_SCHEME)) if not scheme_free: raise InvalidURI("Must provide at least one hostname or IP.") host_part, _, _ = scheme_free.partition("/") if "@" in host_part: userinfo, _, hosts = host_part.rpartition("@") user, passwd = parse_userinfo(userinfo) return user, passwd, scheme + hosts else: return None, None, scheme + host_part
def test_validate_userinfo(self): self.assertRaises(InvalidURI, parse_userinfo, 'foo@') self.assertRaises(InvalidURI, parse_userinfo, ':password') self.assertRaises(InvalidURI, parse_userinfo, 'fo::o:p@ssword') self.assertRaises(InvalidURI, parse_userinfo, ':') self.assertTrue(parse_userinfo('user:password')) self.assertEqual(('us:r', 'p@ssword'), parse_userinfo('us%3Ar:p%40ssword')) self.assertEqual(('us er', 'p ssword'), parse_userinfo('us+er:p+ssword')) self.assertEqual(('us er', 'p ssword'), parse_userinfo('us%20er:p%20ssword')) self.assertEqual(('us+er', 'p+ssword'), parse_userinfo('us%2Ber:p%2Bssword')) self.assertEqual(('*****@*****.**', ''), parse_userinfo('dev1%40FOO.COM')) self.assertEqual(('*****@*****.**', ''), parse_userinfo('dev1%40FOO.COM:'))
def extract_db_config(uri: str): """ extract username, password and host with port from mongo uri :param uri: mongo uri :return: username, password, scheme, hosts """ user = None passwd = None dbase = None collection = None options = _CaseInsensitiveDictionary() is_mock = False if uri.startswith("mongomock://"): uri = uri.replace("mongomock://", "mongodb://", 1) is_mock = True if uri.startswith(SCHEME): scheme_free = uri[SCHEME_LEN:] scheme = uri[:SCHEME_LEN] elif uri.startswith(SRV_SCHEME): scheme_free = uri[SRV_SCHEME_LEN:] scheme = uri[:SRV_SCHEME_LEN] else: raise InvalidURI("Invalid URI scheme: URI must " "begin with '%s' or '%s'" % (SCHEME, SRV_SCHEME)) if not scheme_free: raise InvalidURI("Must provide at least one hostname or IP.") host_part, _, _ = scheme_free.partition("/") host_part, _, path_part = scheme_free.partition("/") if not host_part: host_part = path_part path_part = "" if not path_part and '?' in host_part: raise InvalidURI("A '/' is required between " "the host list and any options.") if path_part: dbase, _, opts = path_part.partition('?') if dbase: dbase = unquote_plus(dbase) if '.' in dbase: dbase, collection = dbase.split('.', 1) if _BAD_DB_CHARS.search(dbase): raise InvalidURI('Bad database name "%s"' % dbase) else: dbase = None if opts: options.update(split_options(opts, True, False, True)) if "@" in host_part: userinfo, _, hosts = host_part.rpartition("@") user, passwd = parse_userinfo(userinfo) hosts = scheme + hosts else: hosts = scheme + host_part settings = { "username": user, "password": passwd, "host": hosts, "db": dbase, "options": options, "collection": collection } if is_mock: settings['is_mock'] = is_mock return settings