diff --git a/report-tools/adaptors/sql/__init__.py b/report-tools/adaptors/sql/__init__.py
new file mode 100644
index 0000000..80ef809
--- /dev/null
+++ b/report-tools/adaptors/sql/__init__.py
@@ -0,0 +1,14 @@
+__copyright__ = """
+/*
+ * Copyright (c) 2021, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+ """
+
+""" __init__.py:
+
+    __init__.py for complexity parser
+
+"""
diff --git a/report-tools/adaptors/sql/yaml_parser.py b/report-tools/adaptors/sql/yaml_parser.py
index b0ce15e..9e6aa17 100755
--- a/report-tools/adaptors/sql/yaml_parser.py
+++ b/report-tools/adaptors/sql/yaml_parser.py
@@ -1,116 +1,113 @@
-##############################################################################
-# Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-##############################################################################
-"""
-Class to parse .yaml file to generate a report.db
-"""
-import sys
-import yaml
-import sqlite
-
-
-class YAMLParser:
-    """
-    Class to represent a YAML Parser and creates database
-
-    Methods:
-        create_table: Creates sqlite db table with necessary fields.
-        parse_file: Parses the yaml file to obtain necessary data for the test result table and updates it.
-        update_test_config_table: Parses the yaml file to obtain necessary data fot the test config table and updates it
-    """
-    root_string = ""
-    test_suite_list = []
-
-    # contents of the test_config table
-    test_config_table = [
-        "build_id",
-        "target",
-        "bitbake_version",
-        "yocto_version"
-    ]
-
-    # contents of test_result table
-    test_result_table = [
-        "build_id",
-        "date",
-        "test_suite",
-        "test_case",
-        "result"
-    ]
-
-    def __init__(self, file_name=sys.argv[1]):
-        """Creates an instance for sqlite_obj and loads the contents of the yamlfile to be parsed """
-
-        try:
-            self.sqlite_obj = sqlite.Database("report.db")
-            with open(file_name) as file:
-                self.contents = yaml.load(file, Loader=yaml.FullLoader)
-                self.root_string = [i for i in self.contents.keys()][0]
-        except Exception as err:
-            print(err)
-
-    def create_table(self):
-        """Creates empty tables in the sqlite database from the contents of test_config_table and test_result_table"""
-
-        test_config_query = """
-        CREATE TABLE `test_configuration` (
-        {0} TEXT,
-        {1} TEXT,
-        {2} TEXT,
-        {3} TEXT,
-        PRIMARY KEY ({0})
-        );
-        """.format(self.test_config_table[0], self.test_config_table[1], self.test_config_table[2],
-                   self.test_config_table[3])
-
-        test_results_query = """
-        CREATE TABLE `test_results` (
-        {0} TEXT,
-        {1} TEXT,
-        {2} TEXT,
-        {3} TEXT,
-        {4} TEXT,
-        FOREIGN KEY ({0}) REFERENCES `test_configuration`({0})
-        );
-        """.format(self.test_result_table[0], self.test_result_table[1], self.test_result_table[2],
-                   self.test_result_table[3], self.test_result_table[4])
-
-        self.sqlite_obj.execute_query(test_config_query)
-        self.sqlite_obj.execute_query(test_results_query)
-
-    def parse_file(self):
-        """Parses the yaml file"""
-
-        build_id = self.contents[self.root_string]['metadata']['CI_PIPELINE_ID']
-        # dependent on the generated yaml file. Code will be uncommented based
-        # on the yaml file
-        # self.contents[self.root_string]['metadata']['CI_COMMIT_TIMESTAMP']
-        date = ""
-        for test_suite in self.contents[self.root_string]['test-suites'].keys():
-            for test_case in self.contents[self.root_string]['test-suites'][test_suite]['test-results'].keys():
-                result = self.contents[self.root_string]['test-suites'][test_suite]['test-results'][test_case]["status"]
-                update_result_table_query = "INSERT INTO test_results VALUES ('{0}', '{1}', '{2}', '{3}', '{4}')". \
-                    format(build_id, date, test_suite, test_case, result)
-                self.sqlite_obj.execute_query(update_result_table_query)
-
-    def update_test_config_table(self):
-        """Updates tables in the report.db with the values from the yaml file"""
-
-        build_id = self.contents[self.root_string]['metadata']['CI_PIPELINE_ID']
-        target = self.contents[self.root_string]['target']['platform'] + \
-            "_" + self.contents[self.root_string]['target']['version']
-
-        bitbake_version = "1.0"
-        yocto_version = "2.0"
-        update_table_query = "INSERT INTO test_configuration VALUES ('{0}', '{1}', '{2}', '{3}')".\
-            format(build_id, target, bitbake_version, yocto_version)
-        self.sqlite_obj.execute_query(update_table_query)
-
-
-if __name__ == "__main__":
-    yaml_obj = YAMLParser()
-    yaml_obj.create_table()
-    yaml_obj.parse_file()
-    yaml_obj.update_test_config_table()
+##############################################################################
+# Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+##############################################################################
+"""
+Class to parse .yaml file to generate a report.db
+"""
+import sys
+import yaml
+import adaptors.sql.sqlite as sqlite
+
+class YAMLParser:
+    """
+    Class to represent a YAML Parser and creates database
+
+    Methods:
+        create_table: Creates sqlite db table with necessary fields.
+        parse_file: Parses the yaml file to obtain necessary data for the test result table and updates it.
+        update_test_config_table: Parses the yaml file to obtain necessary data fot the test config table and updates it
+    """
+    root_string = ""
+    test_suite_list = []
+
+    # contents of the test_config table
+    test_config_table = [
+        "build_id",
+        "target",
+        "bitbake_version",
+        "yocto_version"
+    ]
+
+    # contents of test_result table
+    test_result_table = [
+        "build_id",
+        "date",
+        "test_suite",
+        "test_case",
+        "result"
+    ]
+
+    def __init__(self, file_name=""):
+        """Creates an instance for sqlite_obj and loads the contents of the yamlfile to be parsed """
+
+        try:
+            self.sqlite_obj = sqlite.Database("report.db")
+            with open(file_name) as file:
+                self.contents = yaml.load(file)
+                self.root_string = [i for i in self.contents.keys()][0]
+        except Exception as err:
+            print(err)
+
+    def create_table(self):
+        """Creates empty tables in the sqlite database from the contents of test_config_table and test_result_table"""
+
+        test_config_query = """
+        CREATE TABLE `test_configuration` (
+        {0} TEXT,
+        {1} TEXT,
+        {2} TEXT,
+        {3} TEXT,
+        PRIMARY KEY ({0})
+        );
+        """.format(self.test_config_table[0], self.test_config_table[1], self.test_config_table[2],
+                   self.test_config_table[3])
+
+        test_results_query = """
+        CREATE TABLE `test_results` (
+        {0} TEXT,
+        {1} TEXT,
+        {2} TEXT,
+        {3} TEXT,
+        {4} TEXT,
+        FOREIGN KEY ({0}) REFERENCES `test_configuration`({0})
+        );
+        """.format(self.test_result_table[0], self.test_result_table[1], self.test_result_table[2],
+                   self.test_result_table[3], self.test_result_table[4])
+
+        self.sqlite_obj.execute_query(test_config_query)
+        self.sqlite_obj.execute_query(test_results_query)
+
+    def parse_file(self):
+        """Parses the yaml file"""
+
+        build_id = self.contents[self.root_string]['metadata']['CI_PIPELINE_ID']
+        for test_suite in self.contents[self.root_string]['test-suites'].keys():
+            date = self.contents[self.root_string]['test-suites'][test_suite]['metadata']['DATE']
+            for test_case in self.contents[self.root_string]['test-suites'][test_suite]['test-results'].keys():
+                result = self.contents[self.root_string]['test-suites'][test_suite]['test-results'][test_case]["status"]
+                update_result_table_query = "INSERT INTO test_results VALUES ('{0}', '{1}', '{2}', '{3}', '{4}')". \
+                    format(build_id, date, test_suite, test_case, result)
+                self.sqlite_obj.execute_query(update_result_table_query)
+
+    def update_test_config_table(self):
+        """Updates tables in the report.db with the values from the yaml file"""
+
+        build_id = self.contents[self.root_string]['metadata']['CI_PIPELINE_ID']
+        target = self.contents[self.root_string]['target']['platform'] + \
+            "_" + self.contents[self.root_string]['target']['version']
+
+        bitbake_version = "UNAVAILABLE"
+        yocto_version = "UNAVAILABLE"
+        update_table_query = "INSERT INTO test_configuration VALUES ('{0}', '{1}', '{2}', '{3}')".\
+            format(build_id, target, bitbake_version, yocto_version)
+        self.sqlite_obj.execute_query(update_table_query)
+
+
+if __name__ == "__main__":
+    yaml_obj = YAMLParser()
+    yaml_obj.create_table()
+    yaml_obj.parse_file()
+    yaml_obj.update_test_config_table()
+ 
