charlesdong1991 opened a new issue, #25409:
URL: https://github.com/apache/airflow/issues/25409
### Apache Airflow version
2.2.2
### What happened
Use a custom operator inherited from BaseOperator, and try to assign a list
of sql files to an attribute that is not defined in `template_fields`, but it
still gets rendered, unless the value assigned to the attribute is a string.
Below is the minimum reproducible example and its output, except with a
query folder next to dag file, and in this example,
- I expect all attributes starting with suffix of original shouldn’t be
rendered
- In fact, only `self.original_inputs_str` doesn’t get rendered (a string is
assigned to it), but the other two, which are assigned a list, somehow both get
rendered.
Not sure if I am misunderstanding the templated_fields, or this might be a
bug.
Version: 2.2.2
Python: 3.7
### What you think should happen instead
Might be a bug? Or I misunderstood how to use it.
### How to reproduce
```
from typing import Sequence
from airflow import DAG
from airflow.models import BaseOperator
from pendulum import datetime
class TestOperator(BaseOperator):
template_fields: Sequence[str] = ("inputs", "inputs_one", "inputs_two")
template_ext: Sequence[str] = (".sql",)
def __init__(self, inputs, inputs_one, inputs_two, **base_operator_kwargs):
super().__init__(**base_operator_kwargs)
# should render
self.inputs = inputs
self.inputs_one = inputs_one
self.inputs_two = inputs_two
# shouldn't render
self.original_inputs_str = inputs
self.original_inputs_one = inputs_one
self.original_inputs_two = inputs_two
def execute(self, context):
# render correctly
print(f"input: {self.inputs}")
print(f"input 1: {self.inputs_one}")
print(f"input 2: {self.inputs_two}")
# expected to be NOT rendered and doesn't get rendered
print(f"original input str: {self.original_inputs_str}")
# both expected to be NOT rendered but get rendered
print(f"original input 1: {self.original_inputs_one}")
print(f"original input 2: {self.original_inputs_two}")
with DAG(
dag_id="test",
description="testing template fields and ext",
start_date=datetime(2022, 7, 28),
catchup=False,
default_args=dict(owner="test"),
tags=["test"],
) as dag:
inputs_str = "query/hahaha.sql"
inputs_one = ["query/hahaha.sql"]
inputs_two = ["query/haha.sql", "query/hahaha.sql"]
TestOperator(
dag=dag,
task_id="test",
inputs=inputs_str,
inputs_one=inputs_one,
inputs_two=inputs_two,
)
```
### Operating System
Amazon Linux AMI
### Versions of Apache Airflow Providers
_No response_
### Deployment
MWAA
### Deployment details
_No response_
### Anything else
_No response_
### Are you willing to submit PR?
- [ ] Yes I am willing to submit a PR!
### Code of Conduct
- [X] I agree to follow this project's [Code of
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]