def _find_substitution(self, query): max_distance = min(3, len(query) / 4) scenarios = scenario_base.Scenario.list_benchmark_scenarios() scenario_groups = list(set(s.split(".")[0] for s in scenarios)) scenario_methods = list(set(s.split(".")[1] for s in scenarios)) deploy_engines = [cls.__name__ for cls in utils.itersubclasses( deploy.EngineFactory)] server_providers = [cls.__name__ for cls in utils.itersubclasses( serverprovider.ProviderFactory)] candidates = (scenarios + scenario_groups + scenario_methods + deploy_engines + server_providers) suggestions = [] # NOTE(msdubov): Incorrect query may either have typos or be truncated. for candidate in candidates: if ((utils.distance(query, candidate) <= max_distance or candidate.startswith(query))): suggestions.append(candidate) return suggestions
def test_distance_deletion(self): dist = utils.distance("abcde", "abc") self.assertEqual(2, dist)
def test_distance_insertion(self): dist = utils.distance("abcde", "ab__cde") self.assertEqual(2, dist)
def test_distance_replacement(self): dist = utils.distance("abcde", "__cde") self.assertEqual(2, dist)
def test_distance_equal_strings(self): dist = utils.distance("abcde", "abcde") self.assertEqual(0, dist)
def test_distance_empty_strings(self): dist = utils.distance("", "") self.assertEqual(0, dist)