code: def parse(self, file_handle):
          
  
          xbrl_obj = XBRL()
  
          # if no file handle was given create our own
          if not hasattr(file_handle, 'read'):
              file_handler = open(file_handle)
          else:
              file_handler = file_handle
  
          # Store the headers
          xbrl_file = XBRLPreprocessedFile(file_handler)
  
          xbrl = soup_maker(xbrl_file.fh)
          file_handler.close()
          xbrl_base = xbrl.find(name=re.compile("xbrl*:*"))
  
          if xbrl.find('xbrl') is None and xbrl_base is None:
              raise XBRLParserException('The xbrl file is empty!')
  
          # lookahead to see if we need a custom leading element
          lookahead = xbrl.find(name=re.compile("context",
                                re.IGNORECASE | re.MULTILINE)).name
          if ":" in lookahead:
              self.xbrl_base = lookahead.split(":")[0] + ":"
          else:
              self.xbrl_base = ""
  
          return xbrl
docs: parse is the main entry point for an XBRLParser. It takes a file
          handle.