class_docstr: A file-ish object that can have new data loaded into it.
  
  You can also push and pop line-matching predicates onto a stack.  When the
  current predicate matches the current line, a false EOF response
  (i.e. empty string) is returned instead.  This lets the parser adhere to a
  simple abstraction -- it parses until EOF closes the current message.
class_docstr_tok: ["A","file-ish","object","that","can","have","new","data","loaded","into","it",".","You","can","also","push","and","pop","line-matching","predicates","onto","a","stack",".","When","the","current","predicate","matches","the","current","line",",","a","false","EOF","response","(","i.e",".","empty","string",")","is","returned","instead",".","This","lets","the","parser","adhere","to","a","simple","abstraction","--","it","parses","until","EOF","closes","the","current","message","."]
code: def pushlines(self, lines):
      # Crack into lines, but preserve the newlines on the end of each
      parts = NLCRE_crack.split(data)
      # The *ahem* interesting behaviour of re.split when supplied grouping
      # parentheses is that the last element of the resulting list is the
      # data after the final RE.  In the case of a NL/CR terminated string,
      # this is the empty string.
      self._partial = parts.pop()
      # GAN 29Mar09  bugs 1555570, 1721862  Confusion at 8K boundary ending with \r:
      # is there a \n to follow later?
      if not self._partial and parts and parts[-1].endswith("\r"):
          self._partial = parts.pop(-2) + parts.pop()
      # parts is a list of strings, alternating between the line contents
      # and the eol character(s).  Gather up a list of lines after
      # re-attaching the newlines.
      lines = []
      for i in range(len(parts) // 2):
          lines.append(parts[i * 2] + parts[i * 2 + 1])
      self.pushlines(lines)
  
imports: import re
  from email import errors
  from email import message
label_desc: Use image node_id 8 for calling the BufferedSubFile obj's underlying member method code with example usage: obj.pushlines(lines) without return types