Add snake_case filter

This is intended to be used by tripleo_metrics_qdr and
tripleo_collectd.
The filter will convert from THTCamelCase to ansible_snake_case

Change-Id: Iec74b239cbcebaeb6c5f5736e3696e013b697c76
Co-authored-by: Chris Sibbitt <csibbitt@redhat.com>
This commit is contained in:
Emma Foley 2021-03-04 14:05:13 +00:00
parent 49f843384f
commit db775f7c84
2 changed files with 29 additions and 1 deletions

View File

@ -51,7 +51,8 @@ class FilterModule(object):
'get_filtered_role_resources': self.get_filtered_role_resources,
'get_node_capabilities': self.get_node_capabilities,
'get_node_profile': self.get_node_profile,
'tht_abspath': self.tht_abspath
'tht_abspath': self.tht_abspath,
'snake_case': self.snake_case,
}
def subsort(self, dict_to_sort, attribute, null_value=0):
@ -519,6 +520,20 @@ class FilterModule(object):
return_list.append({k: v})
return return_list
def snake_case(self, camel_case_string):
"""Convert from THTCamelCase to ansible_snake_case
This filter will return a snake_case version of the input string.
>>> filter_snake_case('CephStorage')
'ceph_storage'
>>> filter_snake_case('HTTPWorker')
'http_worker'
>>> filter_snake_case('MetricsQDR')
'metrics_qdr'
"""
camel_case_string = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2',
camel_case_string)
return re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', camel_case_string).lower()
@staticmethod
def get_filtered_service_chain(resource_chains, role_chain_resources):
"""Returned filtered service chains.

View File

@ -1144,6 +1144,19 @@ class TestHelperFilters(tests_base.TestCase):
result = self.filters.dict_to_list(data=dict)
self.assertEqual(result, expected_list)
def test_snake_case(self):
expected_string = "ceph_storage"
result = self.filters.snake_case("CephStorage")
self.assertEqual(result, expected_string)
expected_string = "http_worker"
result = self.filters.snake_case("HTTPWorker")
self.assertEqual(result, expected_string)
expected_string = "metrics_qdr"
result = self.filters.snake_case("MetricsQdr")
self.assertEqual(result, expected_string)
def test_get_changed_async_task_names_empty(self):
result = self.filters.get_changed_async_task_names(data=[])
self.assertEqual(result, [])