示例#1
0
文件: loaders.py 项目: pnhowe/disks
 def load(self, environment, name, globals=None):
     for loader in self.loaders:
         try:
             return loader.load(environment, name, globals)
         except TemplateNotFound:
             pass
     raise TemplateNotFound(name)
示例#2
0
文件: loaders.py 项目: pnhowe/disks
 def get_loader(self, template):
     try:
         prefix, name = template.split(self.delimiter, 1)
         loader = self.mapping[prefix]
     except (ValueError, KeyError):
         raise TemplateNotFound(template)
     return loader, name
示例#3
0
文件: loaders.py 项目: pnhowe/disks
 def get_source(self, environment, template):
     for loader in self.loaders:
         try:
             return loader.get_source(environment, template)
         except TemplateNotFound:
             pass
     raise TemplateNotFound(template)
示例#4
0
文件: loaders.py 项目: pnhowe/disks
 def get_source(self, environment, template):
     rv = self.load_func(template)
     if rv is None:
         raise TemplateNotFound(template)
     elif isinstance(rv, string_types):
         return rv, None, None
     return rv
示例#5
0
文件: loaders.py 项目: pnhowe/disks
 def load(self, environment, name, globals=None):
     loader, local_name = self.get_loader(name)
     try:
         return loader.load(environment, local_name, globals)
     except TemplateNotFound:
         # re-raise the exception with the correct filename here.
         # (the one that includes the prefix)
         raise TemplateNotFound(name)
示例#6
0
文件: loaders.py 项目: pnhowe/disks
 def get_source(self, environment, template):
     loader, name = self.get_loader(template)
     try:
         return loader.get_source(environment, name)
     except TemplateNotFound:
         # re-raise the exception with the correct filename here.
         # (the one that includes the prefix)
         raise TemplateNotFound(template)
示例#7
0
文件: loaders.py 项目: pnhowe/disks
def split_template_path(template):
    """Split a path into segments and perform a sanity check.  If it detects
    '..' in the path it will raise a `TemplateNotFound` error.
    """
    pieces = []
    for piece in template.split('/'):
        if path.sep in piece \
           or (path.altsep and path.altsep in piece) or \
           piece == path.pardir:
            raise TemplateNotFound(template)
        elif piece and piece != '.':
            pieces.append(piece)
    return pieces
示例#8
0
文件: loaders.py 项目: pnhowe/disks
    def load(self, environment, name, globals=None):
        key = self.get_template_key(name)
        module = '%s.%s' % (self.package_name, key)
        mod = getattr(self.module, module, None)
        if mod is None:
            try:
                mod = __import__(module, None, None, ['root'])
            except ImportError:
                raise TemplateNotFound(name)

            # remove the entry from sys.modules, we only want the attribute
            # on the module object we have stored on the loader.
            sys.modules.pop(module, None)

        return environment.template_class.from_module_dict(
            environment, mod.__dict__, globals)
示例#9
0
文件: loaders.py 项目: pnhowe/disks
    def get_source(self, environment, template):
        pieces = split_template_path(template)
        p = '/'.join((self.package_path, ) + tuple(pieces))
        if not self.provider.has_resource(p):
            raise TemplateNotFound(template)

        filename = uptodate = None
        if self.filesystem_bound:
            filename = self.provider.get_resource_filename(self.manager, p)
            mtime = path.getmtime(filename)

            def uptodate():
                try:
                    return path.getmtime(filename) == mtime
                except OSError:
                    return False

        source = self.provider.get_resource_string(self.manager, p)
        return source.decode(self.encoding), filename, uptodate
示例#10
0
文件: loaders.py 项目: pnhowe/disks
    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)
示例#11
0
文件: loaders.py 项目: pnhowe/disks
    def get_source(self, environment, template):
        pieces = split_template_path(template)
        for searchpath in self.searchpath:
            filename = path.join(searchpath, *pieces)
            f = open_if_exists(filename)
            if f is None:
                continue
            try:
                contents = f.read().decode(self.encoding)
            finally:
                f.close()

            mtime = path.getmtime(filename)

            def uptodate():
                try:
                    return path.getmtime(filename) == mtime
                except OSError:
                    return False

            return contents, filename, uptodate
        raise TemplateNotFound(template)
示例#12
0
文件: loaders.py 项目: pnhowe/disks
 def get_source(self, environment, template):
     if template in self.mapping:
         source = self.mapping[template]
         return source, None, lambda: source == self.mapping.get(template)
     raise TemplateNotFound(template)