class_docstr: Baseclass for all loaders.  Subclass this and override `get_source` to
  implement a custom loading mechanism.  The environment provides a
  `get_template` method that calls the loader's `load` method to get the
  :class:`Template` object.
  
  A very basic example for a loader that looks up templates on the file
  system could look like this::
  
      from jinja2 import BaseLoader, TemplateNotFound
      from os.path import join, exists, getmtime
  
      class MyLoader(BaseLoader):
  
          def __init__(self, path):
              self.path = path
  
          def get_source(self, environment, template):
              path = join(self.path, template)
              if not exists(path):
                  raise TemplateNotFound(template)
              mtime = getmtime(path)
              with file(path) as f:
                  source = f.read().decode('utf-8')
              return source, path, lambda: mtime == getmtime(path)
class_docstr_tok: ["Baseclass","for","all","loaders",".","Subclass","this","and","override","`","get_source","`","to","implement","a","custom","loading","mechanism",".","The","environment","provides","a","`","get_template","`","method","that","calls","the","loader","'s","`","load","`","method","to","get","the",":","class",":","`","Template","`","object",".","A","very","basic","example","for","a","loader","that","looks","up","templates","on","the","file","system","could","look","like","this",":",":","from","jinja2","import","BaseLoader",",","TemplateNotFound","from","os.path","import","join",",","exists",",","getmtime","class","MyLoader","(","BaseLoader",")",":","def","__init__","(","self",",","path",")",":","self.path","=","path","def","get_source","(","self",",","environment",",","template",")",":","path","=","join","(","self.path",",","template",")","if","not","exists","(","path",")",":","raise","TemplateNotFound","(","template",")","mtime","=","getmtime","(","path",")","with","file","(","path",")","as","f",":","source","=","f.read","(",")",".decode","(","'utf-8","'",")","return","source",",","path",",","lambda",":","mtime","==","getmtime","(","path",")"]
docstr: Get the template source, filename and reload helper for a template.
  It's passed the environment and template name and has to return a
  tuple in the form ``(source, filename, uptodate)`` or raise a
  `TemplateNotFound` error if it can't locate the template.
  
  The source part of the returned tuple must be the source of the
  template as unicode string or a ASCII bytestring.  The filename should
  be the name of the file on the filesystem if it was loaded from there,
  otherwise `None`.  The filename is used by python for the tracebacks
  if no loader extension is used.
  
  The last item in the tuple is the `uptodate` function.  If auto
  reloading is enabled it's always called to check if the template
  changed.  No arguments are passed so the function must store the
  old state somewhere (for example in a closure).  If it returns `False`
  the template will be reloaded.
code: def get_source(self, environment, template):
      """Get the template source, filename and reload helper for a template.
      It's passed the environment and template name and has to return a
      tuple in the form ``(source, filename, uptodate)`` or raise a
      `TemplateNotFound` error if it can't locate the template.
  
      The source part of the returned tuple must be the source of the
      template as unicode string or a ASCII bytestring.  The filename should
      be the name of the file on the filesystem if it was loaded from there,
      otherwise `None`.  The filename is used by python for the tracebacks
      if no loader extension is used.
  
      The last item in the tuple is the `uptodate` function.  If auto
      reloading is enabled it's always called to check if the template
      changed.  No arguments are passed so the function must store the
      old state somewhere (for example in a closure).  If it returns `False`
      the template will be reloaded.
      """
      if not self.has_source_access:
          raise RuntimeError(
              "%s cannot provide access to the source"
              % self.__class__.__name__
          )
      raise TemplateNotFound(template)
  
imports: import os
  import sys
  import weakref
  from hashlib import sha1
  from os import path
  from types import ModuleType
  from ._compat import abc
  from ._compat import fspath
  from ._compat import iteritems
  from ._compat import string_types
  from .exceptions import TemplateNotFound
  from .utils import internalcode
  from .utils import open_if_exists
label_desc: Use image node_id 1 for calling the BaseLoader obj's underlying member method code with example usage: obj.get_source(environment, template) without return types