Add an ability to change len of logs in xml before sending to TR

Change-Id: I3093c4b8518fcb2003098cf97fb02cec05f4f3e4
Related-prod: PRODX-13974
diff --git a/update_testrail_xml/cmd.py b/update_testrail_xml/cmd.py
index 9238200..15fc922 100644
--- a/update_testrail_xml/cmd.py
+++ b/update_testrail_xml/cmd.py
@@ -40,6 +40,7 @@
         'OUTPUT_XUNIT_REPORT': 'output_report.xml',
         'XUNIT_NAME_TEMPLATE': '{id}',
         'TESTRAIL_NAME_TEMPLATE': '{custom_report_label}',
+        'TRACE_LEN': 100,
         'ISO_ID': None,
         'TESTRAIL_PLAN_NAME': None,
         'ENV_DESCRIPTION': '',
@@ -126,6 +127,11 @@
         default=defaults['TESTRAIL_TEST_SUITE'],
         help='testrail project suite name')
     parser.add_argument(
+        '--trace-len',
+        type=int,
+        default=defaults['TRACE_LEN'],
+        help='testrail project name')
+    parser.add_argument(
         '--send-skipped',
         action='store_true',
         default=False,
@@ -181,6 +187,7 @@
         logger_dict['level'] = logging.DEBUG
 
     logging.basicConfig(**logger_dict)
+    trace_len = args.trace_len
 
     reporter = Reporter(
         xunit_report=args.xunit_report,
@@ -206,6 +213,7 @@
 
     reporter.update_testcases(all_empty_cases)
     reporter.delete_duplicates()
+    reporter.cut_long_traces(trace_len)
     reporter.delete_temporary_file()
 
 
diff --git a/update_testrail_xml/reporter.py b/update_testrail_xml/reporter.py
index 0b9710e..beabebb 100644
--- a/update_testrail_xml/reporter.py
+++ b/update_testrail_xml/reporter.py
@@ -190,10 +190,28 @@
 
         logger.info(' Start saving results to the file: {}'.format(self.output_xunit_report))
         tree = ET.ElementTree(root)
-        tree.write(self.output_xunit_report)
+        tree.write(self.temporary_filename)
 
         logger.info(' {} file was created: {}'.format(self.output_xunit_report, self.check_file_exists(self.output_xunit_report)))
 
+    def cut_long_traces(self, trace_len):
+        tree = ET.parse(self.temporary_filename)
+        root = tree.getroot()
+
+        if root[0].tag == 'testsuite':
+            root = root[0]
+
+        for child in root:
+            try:
+                if child[0].text.count('\n') > trace_len:
+                    ind = [m.start() for m in re.finditer('\n', child[0].text)][-trace_len]
+                    old = child[0].text[ind:]
+                    child[0].text = old
+            except IndexError:
+                pass
+            tree = ET.ElementTree(root)
+            tree.write(self.output_xunit_report)
+
     def check_file_exists(self, filename):
         return str(os.path.isfile(filename))