diff --git a/gbpclient/common/__init__.py b/gbpclient/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gbpclient/common/utils.py b/gbpclient/common/utils.py new file mode 100644 index 0000000..e0794b3 --- /dev/null +++ b/gbpclient/common/utils.py @@ -0,0 +1,31 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + + +def str2dict(strdict): + """Convert key1=value1,key2=value2,... string into dictionary. + + :param strdict: key1=value1,key2=value2 + Note: This implementation overrides the original implementation + in the neutronclient such that it is no longer required to append + the key with a = to specify a corresponding empty value. For example, + key1=value1,key2,key3=value3 + key1 + key1,key2 + will also be supported and converted to a dictionary with empty + values for the relevant keys. + """ + if not strdict: + return {} + return dict([kv.split('=', 1) if '=' in kv else [kv, ""] + for kv in strdict.split(',')]) diff --git a/gbpclient/gbp/v2_0/groupbasedpolicy.py b/gbpclient/gbp/v2_0/groupbasedpolicy.py index 14e5b13..b21058a 100644 --- a/gbpclient/gbp/v2_0/groupbasedpolicy.py +++ b/gbpclient/gbp/v2_0/groupbasedpolicy.py @@ -14,11 +14,12 @@ import logging import string -from neutronclient.common import utils from neutronclient.i18n import _ from neutronclient.neutron import v2_0 as neutronV20 from oslo.serialization import jsonutils +from gbpclient.common import utils + def _format_network_service_params(net_svc_policy): try: diff --git a/gbpclient/tests/unit/test_utils.py b/gbpclient/tests/unit/test_utils.py new file mode 100644 index 0000000..c72c712 --- /dev/null +++ b/gbpclient/tests/unit/test_utils.py @@ -0,0 +1,39 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import testtools + +from gbpclient.common import utils + + +class TestUtils(testtools.TestCase): + def test_string_to_dictionary(self): + input_str = 'key1' + expected = {'key1': ''} + self.assertEqual(expected, utils.str2dict(input_str)) + input_str = 'key1,key2' + expected = {'key1': '', 'key2': ''} + self.assertEqual(expected, utils.str2dict(input_str)) + input_str = 'key1=value1,key2' + expected = {'key1': 'value1', 'key2': ''} + self.assertEqual(expected, utils.str2dict(input_str)) + input_str = 'key1=value1,key2=value2' + expected = {'key1': 'value1', 'key2': 'value2'} + self.assertEqual(expected, utils.str2dict(input_str)) + + def test_none_string_to_dictionary(self): + input_str = '' + expected = {} + self.assertEqual(expected, utils.str2dict(input_str)) + input_str = None + expected = {} + self.assertEqual(expected, utils.str2dict(input_str))