support local/package level and serializable python modules/macros #10080
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
resolves #10078
Suppose that we need to remove (dedent) the same number of leading whitespaces in each line of a sql command or a string of documentation. I've been googling for jinja solutions, however the solutions are quite complicated. And it would be quite ease if we can invoke a python module/function.
The proposed method is, we can write a macro in a python file "macros/my_python_module.py":
and then we call call the defined module/function in our model "models/test1.sql":
What's more, as the implementation of this python macro is within the project locally, we can call the macro using
my_project.my_python_module.dedent
if this project is imported to other projects as a package, just as what we do with a jinja macro.Problem
Solution
add a
PythonModule
node class in additional to theMacro
node class, which can be parsed and serialized.However there are some limitations:
Checklist