move the library to ONF

Change-Id: I383437e2934ce04cc1a7dc332134f7308991776f
diff --git a/grpc_robot/tools/robot_tools.py b/grpc_robot/tools/robot_tools.py
new file mode 100644
index 0000000..f5b7b0c
--- /dev/null
+++ b/grpc_robot/tools/robot_tools.py
@@ -0,0 +1,116 @@
+# Copyright 2020-present Open Networking Foundation
+# Original copyright 2020-present ADTRAN, Inc.
+#
+# 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
+from grpc_robot.grpc_robot import _package_version_get
+
+
+class Collections(object):
+    """
+    Tools for collections (list, dict) related functionality.
+    """
+
+    try:
+        ROBOT_LIBRARY_VERSION = _package_version_get('grpc_robot')
+    except NameError:
+        ROBOT_LIBRARY_VERSION = 'unknown'
+
+    @staticmethod
+    def dict_get_key_by_value(input_dict, search_value):
+        """
+        Gets the first key from _input_dict_ which has the value of _search_value_.
+
+        If _search_value_ is not found in _input_dict_, an empty string is returned.
+
+        *Parameters*:
+        - _input_dict_: <dictionary> to be browsed.
+        - _search_value_: <string>, value to be searched for.
+
+        *Return*: key of dictionary if search value is in input_dict else empty string
+        """
+        return_key = ''
+        for key, val in input_dict.items():
+            if val == search_value:
+                return_key = key
+                break
+
+        return return_key
+
+    @staticmethod
+    def dict_get_value(values_dict, key, strict=False):
+        """
+        Returns the value for given _key_ in _values_dict_.
+
+        If _strict_ is set to False (default) it will return given _key_ if its is not in the dictionary.
+        If set to True, an AssertionError is raised.
+
+        *Parameters*:
+        - _key_: <string>, key to be searched in dictionary.
+        - _values_dict_: <dictionary> in which the key is searched.
+        - _strict_: Optional: <boolean> switch to indicate if an exception shall be raised if key is not in values_dict.
+                Default: False
+
+        *Return*:
+        - if key is in values_dict: Value from _values_dict_ for _key_.
+        - else: _key_.
+        - raises AssertionError in case _key_ is not in _values_dict_ and _strict_ is True.
+        """
+        try:
+            return_value = values_dict[key]
+        except KeyError:
+            if strict:
+                raise AssertionError('Error: Value not found for key: %s' % key)
+            else:
+                return_value = key
+
+        return return_value
+
+    @staticmethod
+    def list_get_dict_by_value(input_list, key_name, value, match='first'):
+        """
+        Retrieves a dictionary from a list of dictionaries where _key_name_ has the _value, if _match_ is
+        "first". Else it returns all matching dictionaries.
+
+        *Parameters*:
+        - _input_list_: <list> ; List of dictionaries.
+        - _key_name_: <dictionary> or <list> ; Name of the key to be searched for.
+        - _value_: <string> or <number> ; Any value of key _key_name_ to be searched for.
+
+        *Example*:
+        | ${dict1}    | Create Dictionary      | key_key=master1 | key1=value11 | key2=value12 |          |
+        | ${dict2}    | Create Dictionary      | key_key=master2 | key1=value21 | key2=value22 |          |
+        | ${dict3}    | Create Dictionary      | key_key=master3 | key1=value31 | key2=value32 |          |
+        | ${dict4}    | Create Dictionary      | key_key=master4 | key5=value41 | key6=value42 |          |
+        | ${the_list} | Create List            | ${dict1}        | ${dict2}     | ${dict3}     | ${dict4} |
+        | ${result}   | List Get Dict By Value | ${the_list}     | key_key      | master4      |          |
+
+        Variable ${result} has following structure:
+        | ${result} = {
+        |   'key_key': 'master4',
+        |   'key5': 'value41',
+        |   'key6': 'value42'
+        | }
+        """
+        try:
+            if match == 'first':
+                return input_list[next(index for (index, d) in enumerate(input_list) if d[key_name] == value)]
+            else:
+                return [d for d in input_list if d[key_name] == value]
+        except (KeyError, TypeError, StopIteration):
+            raise KeyError('list does not contain a dictionary with key:value "%s:%s"' % (key_name, value))
+
+    @staticmethod
+    def to_camel_case(snake_str, first_uppercase=False):
+        components = snake_str.split('_')
+        # We capitalize the first letter of each component except the first one
+        # with the 'title' method and join them together.
+        return (components[0] if not first_uppercase else components[0].title()) + ''.join(x.title() for x in components[1:])