I didn't test the code bellow, but hopefully you get the idea:
----------------------

def foo(templates_dict, *args, **kwargs):
    print(templates_dict['ds'])

op = PythonOperator('a_task_id', python_callable=foo, templates_dict={'ds':
'{{ ds }}'})
# All of the values in the `templates_dict` should get templated by the
Airflow engine, meaning that in this context, `foo` should print the value
of the `ds`.

Max

On Thu, Jan 19, 2017 at 6:22 AM, Boris Tyukin <bo...@boristyukin.com> wrote:

> Maxime, I have a related question. Can you explain how template_dict work
> with PythonOperator? Documentation is very vague about it. Example would be
> nice. I could not find a way to use jinja template with Python operator
> i.e. passing templated parameters to a pythonoperator callable. Someone
> told me the only way to do it is to create a wrapper function and use xcom
> or macro from there
>
> On Wed, Jan 18, 2017 at 10:09 PM, Maxime Beauchemin <
> maximebeauche...@gmail.com> wrote:
>
> > Here's the list of variables and macros exposed in the jinja context:
> > https://airflow.apache.org/code.html#macros
> >
> > Those are all exposed by the framework, meaning they are usable for any
> > templated field without doing anything special.
> >
> > There are ways to pass your own variables and methods using the `params`
> > attribute of any operator as shown in the tutorial here
> > <https://airflow.apache.org/tutorial.html#example-pipeline-definition>,
> > and
> > there's also a `user_defined_macros` parameter as a dict you can pass
> while
> > creating the DAG object. Every key in that dictionary is made available
> in
> > the global jinja namespace.
> >
> > https://airflow.apache.org/code.html#airflow.models.DAG
> >
> > Max
> >
> > On Wed, Jan 18, 2017 at 11:31 AM, Boris Tyukin <bo...@boristyukin.com>
> > wrote:
> >
> > > Hi Guilherme,
> > >
> > > I guess it depends what exactly you want to do as not everything works
> > with
> > > jinja.
> > >
> > > From documentation:
> > >
> > > https://pythonhosted.org/airflow/concepts.html#jinja-templating
> > >
> > > You can use Jinja templating with every parameter that is marked as
> > > “templated” in the documentation.
> > >
> > > You can open source code for operators and see what parameters are
> > actually
> > > templated.
> > >
> > > For example, if you open source code for BashOperator
> > > https://pythonhosted.org/airflow/_modules/bash_
> > operator.html#BashOperator
> > > you will see this line of code:
> > > template_fields = ('bash_command', 'env')
> > >
> > > It means only bash_command and env will work with jinja templates.
> > >
> > > On Wed, Jan 18, 2017 at 12:45 PM, Guilherme Marthe <
> > > guilherme.mar...@enjoei.com.br> wrote:
> > >
> > > > Hey folks!
> > > >
> > > > I am trying to write a dag that works well with jinja templating,
> since
> > > > through my study of the documentation, is the best way to ensure
> > > > compatibility with the back-fill function.
> > > >
> > > > Are you guys aware of any examples online with this functionality
> > > working?
> > > > The, documentation is still a bit dry on insightful examples, and I
> am
> > a
> > > > noobie developer, so I am trying to make the best use of the tool in
> > the
> > > > "correct way".
> > > >
> > > > Thank you in advance for any resources you guys can share!
> > > >
> > > > Gui
> > > >
> > > > Ps: I ve been told I can email you guys with questions like these :)
> > Hope
> > > > this is not a hassle ^_^
> > > >
> > >
> >
>

Reply via email to