Skip to content

Commit 7b545c0

Browse files
committed
Adding support for any Jinja2 filters + adding RegexMustacheRemover
1 parent 9067bdf commit 7b545c0

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

pre_commit_hooks/validate_html.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import print_function
2-
import argparse, contextlib, logging, os, shutil, sys
2+
import argparse, contextlib, logging, os, re, shutil, sys
3+
from collections import defaultdict
34
from six import raise_from, text_type
45
from jinja2 import Environment, FileSystemLoader
56
from jinja2.defaults import DEFAULT_NAMESPACE
@@ -29,7 +30,7 @@ def main(argv=None):
2930
parser.add_argument('-lll', action='store_const', dest='stack_size', const=32768,
3031
help='run on larger files: sets Java stack size to 32768k')
3132
parser.add_argument('--remove-mustaches', action='store_true', default=False)
32-
parser.add_argument('--mustache-remover', choices=('pybar', 'jinja2'), default='pybar')
33+
parser.add_argument('--mustache-remover', choices=('jinja2', 'pybar', 'regex'), default='regex')
3334
parser.add_argument('--mustache-remover-env', action='append', nargs=2, help='Predefined KEY VALUE pair to substitute in the template')
3435
parser.add_argument('--mustache-remover-copy-ext', default='~~')
3536
parser.add_argument('--mustache-remover-default-value', default='DUMMY')
@@ -75,7 +76,12 @@ def __init__(self, mustache_remover_name, mustache_remover_copy_ext, mustache_re
7576
Validator.__init__(self, *args, **kwargs)
7677
self.mustache_remover_copy_ext = mustache_remover_copy_ext
7778
self.mustache_remover_placeholder = mustache_remover_placeholder
78-
self.mustache_remover = Jinja2MustacheRemover(templates_include_dir) if mustache_remover_name == 'jinja2' else PybarMustacheRemover()
79+
if mustache_remover_name == 'jinja2':
80+
self.mustache_remover = Jinja2MustacheRemover(templates_include_dir)
81+
elif mustache_remover_name == 'pybar':
82+
self.mustache_remover = PybarMustacheRemover()
83+
else:
84+
self.mustache_remover = RegexMustacheRemover()
7985

8086
def validate(self, files=None, remove_mustaches=False):
8187
if not files:
@@ -108,6 +114,13 @@ def generate_mustachefree_tmpfiles(filepaths, mustache_remover, copy_ext, placeh
108114
os.remove(tmpfile)
109115

110116

117+
class RegexMustacheRemover:
118+
@staticmethod
119+
def clean_template(filepath, placeholder):
120+
with open(filepath) as file:
121+
return re.sub('{{.+?}}', placeholder.default_value, file.read())
122+
123+
111124
class PybarMustacheRemover:
112125
def __init__(self):
113126
self.tmplt_compiler = PybarCompiler()
@@ -142,6 +155,10 @@ class Jinja2PlaceholderEnvironment(Environment):
142155
def __init__(self, placeholder, *args, **kwargs):
143156
Environment.__init__(self, *args, **kwargs)
144157
self.placeholder = placeholder
158+
filters = DefaultDict(lambda: (lambda _: ''))
159+
# pylint: disable=access-member-before-definition
160+
filters.update(self.filters)
161+
self.filters = filters
145162
def getattr(self, *_, **__):
146163
return RecursiveDefaultPlaceholder(self.placeholder.default_value)
147164

@@ -171,6 +188,10 @@ def __getslice__(self, *_):
171188
return self
172189

173190

191+
class DefaultDict(defaultdict):
192+
get = defaultdict.__getitem__ # so that d.get(foo) is the same as d[foo]
193+
194+
174195
class MustacheSubstitutionFail(Exception):
175196
pass
176197

0 commit comments

Comments
 (0)