teleport/server/www/packages/packages-linux/x64/mako/ext/autohandler.py

71 lines
1.8 KiB
Python
Raw Normal View History

# ext/autohandler.py
2019-11-20 19:41:46 +00:00
# Copyright 2006-2019 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""adds autohandler functionality to Mako templates.
requires that the TemplateLookup class is used with templates.
2019-11-20 19:41:46 +00:00
usage::
2019-11-20 19:41:46 +00:00
<%!
from mako.ext.autohandler import autohandler
%>
<%inherit file="${autohandler(template, context)}"/>
2019-11-20 19:41:46 +00:00
or with custom autohandler filename::
2019-11-20 19:41:46 +00:00
<%!
from mako.ext.autohandler import autohandler
%>
<%inherit file="${autohandler(template, context, name='somefilename')}"/>
"""
import os
2019-11-20 19:41:46 +00:00
import posixpath
import re
2019-11-20 19:41:46 +00:00
def autohandler(template, context, name="autohandler"):
lookup = context.lookup
_template_uri = template.module._template_uri
if not lookup.filesystem_checks:
try:
return lookup._uri_cache[(autohandler, _template_uri, name)]
except KeyError:
pass
2019-11-20 19:41:46 +00:00
tokens = re.findall(r"([^/]+)", posixpath.dirname(_template_uri)) + [name]
while len(tokens):
2019-11-20 19:41:46 +00:00
path = "/" + "/".join(tokens)
if path != _template_uri and _file_exists(lookup, path):
if not lookup.filesystem_checks:
return lookup._uri_cache.setdefault(
2019-11-20 19:41:46 +00:00
(autohandler, _template_uri, name), path
)
else:
return path
if len(tokens) == 1:
break
tokens[-2:] = [name]
if not lookup.filesystem_checks:
return lookup._uri_cache.setdefault(
2019-11-20 19:41:46 +00:00
(autohandler, _template_uri, name), None
)
else:
return None
def _file_exists(lookup, path):
2019-11-20 19:41:46 +00:00
psub = re.sub(r"^/", "", path)
for d in lookup.directories:
2019-11-20 19:41:46 +00:00
if os.path.exists(d + "/" + psub):
return True
else:
return False