def _filter_non_json_lines(data):
 warnings = []
 lines = data.splitlines()
 for (start, line) in enumerate(lines):
  line = line.strip()
  if line.startswith(u'{'):
   endchar = u'}'
   break
  elif line.startswith(u'['):
   endchar = u']'
   break
 else:
  raise ValueError('No start of json char found')
 lines = lines[start:]
 for (reverse_end_offset, line) in enumerate(reversed(lines)):
  if line.strip().endswith(endchar):
   break
 else:
  raise ValueError('No end of json char found')
 if (reverse_end_offset > 0):
  trailing_junk = lines[(len(lines) - reverse_end_offset):]
  for line in trailing_junk:
   if line.strip():
    warnings.append(('Module invocation had junk after the JSON data: %s' % '\n'.join(trailing_junk)))
    break
 lines = lines[:(len(lines) - reverse_end_offset)]
 return ('\n'.join(lines), warnings)

def _filter_non_json_lines ( data ) : warnings = [ ] lines = data . splitlines ( ) for ( start , line ) in enumerate ( lines ) : line = line . strip ( ) if line . startswith ( u'{' ) : endchar = u'}' break elif line . startswith ( u'[' ) : endchar = u']' break else : raise ValueError ( 'No start of json char found' ) lines = lines [ start : ] for ( reverse_end_offset , line ) in enumerate ( reversed ( lines ) ) : if line . strip ( ) . endswith ( endchar ) : break else : raise ValueError ( 'No end of json char found' ) if ( reverse_end_offset > 0 ) : trailing_junk = lines [ ( len ( lines ) - reverse_end_offset ) : ] for line in trailing_junk : if line . strip ( ) : warnings . append ( ( 'Module invocation had junk after the JSON data: %s' % '\n' . join ( trailing_junk ) ) ) break lines = lines [ : ( len ( lines ) - reverse_end_offset ) ] return ( '\n' . join ( lines ) , warnings )
used to filter unrelated output around module json output .