code: def parseLog(logFile, testSuiteElement):
      # Example attrs:
      # errors="0" failures="0" hostname="a437d6835edf" name="pytest" skipped="2" tests="6" time="6.174" timestamp="2019-11-18T19:49:47.946307"
  
      with open(logFile) as lf:
          testSuiteElement.attrib["tests"] = "0"
          testSuiteElement.attrib["errors"] = "0"
          testSuiteElement.attrib["failures"] = "0"
          testSuiteElement.attrib["skipped"] = "0"
          testSuiteElement.attrib["time"] = "0"
          testSuiteElement.attrib["timestamp"] = ""
  
          attrDict = {}
          # setFileNameAttr(attrDict, logFile)
          setFileNameAttr(attrDict, "nbtest")
  
          parserStateEnum = Enum(
              "parserStateEnum",
              "newTest startingLine finishLine exitCode",
          )
          parserState = parserStateEnum.newTest
  
          testOutput = ""
  
          for line in lf.readlines():
              if parserState == parserStateEnum.newTest:
                  m = folderPatt.match(line)
                  if m:
                      setClassNameAttr(attrDict, m.group(1))
                      continue
  
                  m = skippingPatt.match(line)
                  if m:
                      setTestNameAttr(
                          attrDict, getFileBaseName(m.group(1))
                      )
                      setTimeAttr(attrDict, "0m0s")
                      skippedElement = makeTestCaseElement(attrDict)
                      message = m.group(3) or ""
                      skippedElement.append(
                          Element("skipped", message=message, type="")
                      )
                      testSuiteElement.append(skippedElement)
                      incrNumAttr(testSuiteElement, "skipped")
                      incrNumAttr(testSuiteElement, "tests")
                      continue
  
                  m = startingPatt.match(line)
                  if m:
                      parserState = parserStateEnum.startingLine
                      testOutput = ""
                      setTestNameAttr(attrDict, m.group(1))
                      setTimeAttr(attrDict, "0m0s")
                      continue
  
                  continue
  
              elif parserState == parserStateEnum.startingLine:
                  if linePatt.match(line):
                      parserState = parserStateEnum.finishLine
                      testOutput = ""
                  continue
  
              elif parserState == parserStateEnum.finishLine:
                  if linePatt.match(line):
                      parserState = parserStateEnum.exitCode
                  else:
                      testOutput += line
                  continue
  
              elif parserState == parserStateEnum.exitCode:
                  m = exitCodePatt.match(line)
                  if m:
                      testCaseElement = makeTestCaseElement(attrDict)
                      if m.group(1) != "0":
                          failureElement = makeFailureElement(
                              testOutput
                          )
                          testCaseElement.append(failureElement)
                          incrNumAttr(testSuiteElement, "failures")
                      else:
                          systemOutElement = makeSystemOutElement(
                              testOutput
                          )
                          testCaseElement.append(systemOutElement)
  
                      testSuiteElement.append(testCaseElement)
                      parserState = parserStateEnum.newTest
                      testOutput = ""
                      incrNumAttr(testSuiteElement, "tests")
                      continue
  
                  m = timePatt.match(line)
                  if m:
                      setTimeAttr(attrDict, m.group(1))
                      continue
  
                  continue
  
file_path: cugraph/ci/utils/nbtestlog2junitxml.py
imports: import re
  from xml.etree.ElementTree import Element, ElementTree
  from os import path
  import string
  from enum import Enum
label_desc: Use image node_id 10 for calling a global function with example usage: parseLog(logFile, testSuiteElement) without return types