diff --git a/crossplane/__init__.py b/crossplane/__init__.py index 0fc08a5..e8951c7 100644 --- a/crossplane/__init__.py +++ b/crossplane/__init__.py @@ -4,6 +4,7 @@ from .builder import build from .formatter import format from .ext.lua import LuaBlockPlugin +from .ext.by_lua import LuaPlugin __all__ = ['parse', 'lex', 'build', 'format'] @@ -19,6 +20,6 @@ __license__ = 'Apache 2.0' __copyright__ = 'Copyright 2018 NGINX, Inc.' -default_enabled_extensions = [LuaBlockPlugin()] +default_enabled_extensions = [LuaBlockPlugin(), LuaPlugin()] for extension in default_enabled_extensions: extension.register_extension() diff --git a/crossplane/ext/by_lua.py b/crossplane/ext/by_lua.py new file mode 100644 index 0000000..89c1aca --- /dev/null +++ b/crossplane/ext/by_lua.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +from crossplane.analyzer import register_external_directives +from crossplane.builder import register_external_builder +from crossplane.ext.abstract import CrossplaneExtension + + +class LuaPlugin(CrossplaneExtension): + directives = { + 'init_by_lua': [], + 'init_worker_by_lua': [], + 'set_by_lua': [], + 'rewrite_by_lua': [], + 'access_by_lua': [], + 'content_by_lua': [], + 'header_filter_by_lua': [], + 'body_filter_by_lua': [], + 'log_by_lua': [], + } + + def register_extension(self): + register_external_builder(directives=self.directives, builder=self.build) + + def lex(self, token_iterator, directive): + raise NotImplementedError + + def parse(self, stmt, parsing, tokens, ctx=(), consume=False): + raise NotImplementedError + + def build(self, stmt, padding, state, indent=4, tabs=False): + built = stmt['directive'] + if built == 'set_by_lua': + block = stmt['args'][1] + built += " %s" % stmt['args'][0] + else: + block = stmt['args'][0] + return built + " '" + block + "';"