code: def interpolate_string(self, testString, section):
          
  
          # First check if any interpolation is needed and abort if not
          reObj = re.search(r"\$\{.*?\}", testString)
          while reObj:
              # Not really sure how this works, but this will obtain the first
              # instance of a string contained within ${....}
              repString = (reObj).group(0)[2:-1]
              # Need to test which of the two formats we have
              splitString = repString.split('|')
              if len(splitString) == 1:
                  try:
                      testString = testString.replace('${'+repString+'}',\
                                              self.get(section,splitString[0]))
                  except ConfigParser.NoOptionError:
                      print("Substitution failed")
                      raise
              if len(splitString) == 2:
                  try:
                      testString = testString.replace('${'+repString+'}',\
                                         self.get(splitString[0],splitString[1]))
                  except ConfigParser.NoOptionError:
                      print("Substitution failed")
                      raise
              reObj = re.search(r"\$\{.*?\}", testString)
  
          return testString
docs: Take a string and replace all example of ExtendedInterpolation
          formatting within the string with the exact value.
  
          For values like ${example} this is replaced with the value that
          corresponds to the option called example ***in the same section***
  
          For values like ${common|example} this is replaced with the value that
          corresponds to the option example in the section [common]. Note that
          in the python3 config parser this is ${common:example} but python2.7
          interprets the : the same as a = and this breaks things
  
          Nested interpolation is not supported here.
  
          Parameters
          ----------
          testString : String
              The string to parse and interpolate
          section : String
              The current section of the ConfigParser object
  
          Returns
          ----------
          testString : String
              Interpolated string