I like it  --> beautyfing of dmi-hw-management.robot
there it is again, my old problem ;) beautyfing of dmi-hw-management.robot
update after review from tthieme
hopefully the last files for beautyfing --> dmi-components-adtran.yaml dmi-components-bbsim.yaml
next file for beautityfing :( -->libraries/utility.py
beautify file dmi-hw-management.robot
add license to file ./tests/data/dmi-components-adtran.yaml
update handling of yaml file, add bbsim- and adtran specific yaml file
corrections due to 'flake8' tool run
add mandatory line in variables.py
cosmetical correction (rflint corrections)
move variable (for dm-bbsim) back to dmi-components.yaml
update grpc/kafka libraries version number in requirement.txt
update name of grpc/kafka libraries (now on pypi.org available)
add variables.py, move variables to file
add device manager test to makefile
second update after second review
update after review
new testcases for the device manager

Signed-off-by: uwe ottrembka <uwe.ottrembka@adtran.com>
Change-Id: I1b9a6187446bbf3dd2794e3f69332d2fcab55e2a
diff --git a/libraries/utility.py b/libraries/utility.py
new file mode 100755
index 0000000..6faec6e
--- /dev/null
+++ b/libraries/utility.py
@@ -0,0 +1,105 @@
+# Copyright 2020 Open Networking Foundation
+# delivered by 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
+# limitations under the License.
+
+from __future__ import absolute_import
+from __future__ import print_function
+import inspect
+import os
+
+# global definition of keys (find in given 'inventory_data')
+_NAME = 'name'
+_CHILDREN = 'children'
+_SENSOR_DATA = 'sensor_data'
+_ROOT = 'root'
+_INVENTORY = 'inventory'
+_UUID = 'uuid'
+
+
+def test(success):
+    if success is True:
+        return True
+    return False
+
+
+def unique():
+    """Returns the current filename and line number in our program."""
+    trace = str(os.path.basename(__file__) +
+                "[" + str(inspect.currentframe().f_back.f_lineno) + "]:")
+    return trace
+
+
+# check if given paramter exist in inventory data, search recursive
+def check_in_inventory_Component_data(inventory_data, name, element, value):
+    print(unique(), str(inventory_data), str(name), str(element), str(value))
+    if inventory_data.get(_NAME) == name and inventory_data.get(element) == value:
+        return True
+
+    for child in inventory_data[_CHILDREN]:
+        print(unique(), str(child))
+        if child.get(_NAME) == name and child.get(element) == value:
+            return True
+        if _SENSOR_DATA in child:
+            for sensor_data in child[_SENSOR_DATA]:
+                print(unique(), str(sensor_data))
+                if sensor_data.get(element) == value:
+                    return True
+        if _CHILDREN in child:
+            result = check_in_inventory_Component_data(child, name, element, value)
+            if result is True:
+                return result
+    return False
+
+
+# get uuid out of inventory data, search recursive
+def get_uuid_from_inventory_Component_data(inventory_data, searchFor):
+    print(unique(), str(inventory_data), ', ', str(searchFor))
+    if inventory_data.get(_NAME) == searchFor:
+        return inventory_data.get(_UUID)
+    for child in inventory_data[_CHILDREN]:
+        print(unique(), str(child))
+        result = None
+        if child.get(_NAME) == searchFor:
+            print(unique(), str(child[_NAME]))
+            result = child.get(_UUID)
+        print(unique(), child.keys())
+        if result is None and _CHILDREN in child:
+            result = get_uuid_from_inventory_Component_data(child, searchFor)
+        if result is not None:
+            return result
+    return None
+
+
+def get_uuid_from_Inventory_Element(inventory, searchFor):
+    for children in inventory[_INVENTORY][_ROOT][_CHILDREN]:
+        return get_uuid_from_inventory_Component_data(children, searchFor)
+    return None
+
+
+def check_Inventory_Element(inventory, name, element, value):
+    for childrens in inventory[_INVENTORY][_ROOT][_CHILDREN]:
+        return check_in_inventory_Component_data(childrens, name, element, value)
+    return False
+
+
+def getWord(line, number):
+    line_in_list = line.split()
+    if len(line_in_list) >= number-1:
+        return line_in_list[number-1]
+    return ""
+
+
+def decode(data):
+    decoded_data = data
+    print(unique(), str(decoded_data))