def extract_docstring(filename, ignore_heading=False):
 if six.PY2:
  lines = open(filename).readlines()
 else:
  lines = open(filename, encoding='utf-8').readlines()
 start_row = 0
 if lines[0].startswith('#!'):
  lines.pop(0)
  start_row = 1
 docstring = ''
 first_par = ''
 line_iterator = iter(lines)
 tokens = tokenize.generate_tokens((lambda : next(line_iterator)))
 for (tok_type, tok_content, _, (erow, _), _) in tokens:
  tok_type = token.tok_name[tok_type]
  if (tok_type in ('NEWLINE', 'COMMENT', 'NL', 'INDENT', 'DEDENT')):
   continue
  elif (tok_type == 'STRING'):
   docstring = eval(tok_content)
   paragraphs = '\n'.join((line.rstrip() for line in docstring.split('\n'))).split('\n\n')
   if paragraphs:
    if ignore_heading:
     if (len(paragraphs) > 1):
      first_par = re.sub('\n', ' ', paragraphs[1])
      first_par = ((first_par[:95] + '...') if (len(first_par) > 95) else first_par)
     else:
      raise ValueError("Docstring not found by gallery.\nPlease check the layout of your example file:\n {}\n and make sure it's correct".format(filename))
    else:
     first_par = paragraphs[0]
  break
 return (docstring, first_par, ((erow + 1) + start_row))

def extract_docstring ( filename , ignore_heading = False ) : if six . PY2 : lines = open ( filename ) . readlines ( ) else : lines = open ( filename , encoding = 'utf-8' ) . readlines ( ) start_row = 0 if lines [ 0 ] . startswith ( '#!' ) : lines . pop ( 0 ) start_row = 1 docstring = '' first_par = '' line_iterator = iter ( lines ) tokens = tokenize . generate_tokens ( ( lambda : next ( line_iterator ) ) ) for ( tok_type , tok_content , _ , ( erow , _ ) , _ ) in tokens : tok_type = token . tok_name [ tok_type ] if ( tok_type in ( 'NEWLINE' , 'COMMENT' , 'NL' , 'INDENT' , 'DEDENT' ) ) : continue elif ( tok_type == 'STRING' ) : docstring = eval ( tok_content ) paragraphs = '\n' . join ( ( line . rstrip ( ) for line in docstring . split ( '\n' ) ) ) . split ( '\n\n' ) if paragraphs : if ignore_heading : if ( len ( paragraphs ) > 1 ) : first_par = re . sub ( '\n' , ' ' , paragraphs [ 1 ] ) first_par = ( ( first_par [ : 95 ] + '...' ) if ( len ( first_par ) > 95 ) else first_par ) else : raise ValueError ( "Docstring not found by gallery.\nPlease check the layout of your example file:\n {}\n and make sure it's correct" . format ( filename ) ) else : first_par = paragraphs [ 0 ] break return ( docstring , first_par , ( ( erow + 1 ) + start_row ) )
extract a module-level docstring .