class_docstr: This is the central parsing class Jinja uses.  It's passed to
  extensions and can be used to parse expressions or statements.
class_docstr_tok: ["This","is","the","central","parsing","class","Jinja","uses",".","It","'s","passed","to","extensions","and","can","be","used","to","parse","expressions","or","statements","."]
code: def parse_from(self) -> nodes.FromImport:
      node = nodes.FromImport(lineno=next(self.stream).lineno)
      node.template = self.parse_expression()
      self.stream.expect("name:import")
      node.names = []
  
      def parse_context() -> bool:
          if self.stream.current.value in {
              "with",
              "without",
          } and self.stream.look().test("name:context"):
              node.with_context = next(self.stream).value == "with"
              self.stream.skip()
              return True
          return False
  
      while True:
          if node.names:
              self.stream.expect("comma")
          if self.stream.current.type == "name":
              if parse_context():
                  break
              target = self.parse_assign_target(name_only=True)
              if target.name.startswith("_"):
                  self.fail(
                      "names starting with an underline can not be imported",
                      target.lineno,
                      exc=TemplateAssertionError,
                  )
              if self.stream.skip_if("name:as"):
                  alias = self.parse_assign_target(name_only=True)
                  node.names.append((target.name, alias.name))
              else:
                  node.names.append(target.name)
              if parse_context() or self.stream.current.type != "comma":
                  break
          else:
              self.stream.expect("name")
      if not hasattr(node, "with_context"):
          node.with_context = False
      return node
  
imports: import typing
  import typing
  from .None import nodes
  from .exceptions import TemplateAssertionError
  from .exceptions import TemplateSyntaxError
  from .lexer import describe_token
  from .lexer import describe_token_expr
label_desc: Use image node_id 20 for calling the Parser obj's underlying member method code with example usage: obj.parse_from() and returns: node, False, True