Lee-W commented on code in PR #46053:
URL: https://github.com/apache/airflow/pull/46053#discussion_r1940443941
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
+
+
+class XComFilterEndsWith(fab_sqlafilters.FilterEndsWith):
+ """Ends With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value))
+
+
+class XComFilterEqual(fab_sqlafilters.FilterEqual):
+ """Equality filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ value = set_value_to_type(self.datamodel, self.column_name, value)
+ return query.filter(trimmed_value == value)
+
+
+class XComFilterContains(fab_sqlafilters.FilterContains):
+ """Not Equal To filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value + "%"))
Review Comment:
```suggestion
return query.filter(trimmed_value.ilike(f"%{value}%"))
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
+
+
+class XComFilterEndsWith(fab_sqlafilters.FilterEndsWith):
+ """Ends With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value))
+
+
+class XComFilterEqual(fab_sqlafilters.FilterEqual):
+ """Equality filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ value = set_value_to_type(self.datamodel, self.column_name, value)
+ return query.filter(trimmed_value == value)
+
+
+class XComFilterContains(fab_sqlafilters.FilterContains):
+ """Not Equal To filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value + "%"))
+
+
+class XComFilterNotStartsWith(fab_sqlafilters.FilterNotStartsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike(value + "%"))
Review Comment:
```suggestion
return query.filter(~trimmed_value.ilike(f"{value}%"))
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
+
+
+class XComFilterEndsWith(fab_sqlafilters.FilterEndsWith):
+ """Ends With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value))
Review Comment:
```suggestion
return query.filter(trimmed_value.ilike(f"%{value}"))
```
##########
airflow/www/utils.py:
##########
@@ -682,6 +684,12 @@ def get_attr_renderer():
}
+def get_trimmed_field(query: Query, model: Model, column_name: str) ->
tuple[Query, ColumnElement]:
+ query, field = get_field_setup_query(query, model, column_name)
+ trimmed_value = func.btrim(func.convert_from(field, "UTF8"), '"')
+ return query, trimmed_value
Review Comment:
another idea I have is doing something like this
```suggestion
def generate_filter_value_query(
*,
query: Query,
model: Model,
column_name: str,
filter_cond: Callable[str, Query]
) -> Query
query, field = get_field_setup_query(query, model, column_name)
trimmed_value = func.btrim(func.convert_from(field, "UTF8"), '"')
return query.filter(filter_cond(trimmed_value))
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
Review Comment:
```suggestion
return query.filter(trimmed_value.ilike(f"{value}%"))
```
##########
airflow/www/utils.py:
##########
@@ -682,6 +684,12 @@ def get_attr_renderer():
}
+def get_trimmed_field(query: Query, model: Model, column_name: str) ->
tuple[Query, ColumnElement]:
Review Comment:
`get_trimmed_field_setup_query` seems to be a more accurate name 🤔
```suggestion
def get_trimmed_field_setup_query(query: Query, model: Model, column_name:
str) -> tuple[Query, ColumnElement]:
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
+
+
+class XComFilterEndsWith(fab_sqlafilters.FilterEndsWith):
+ """Ends With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value))
+
+
+class XComFilterEqual(fab_sqlafilters.FilterEqual):
+ """Equality filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ value = set_value_to_type(self.datamodel, self.column_name, value)
+ return query.filter(trimmed_value == value)
+
+
+class XComFilterContains(fab_sqlafilters.FilterContains):
+ """Not Equal To filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value + "%"))
+
+
+class XComFilterNotStartsWith(fab_sqlafilters.FilterNotStartsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike(value + "%"))
+
+
+class XComFilterNotEndsWith(fab_sqlafilters.FilterNotEndsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike("%" + value))
Review Comment:
```suggestion
return query.filter(~trimmed_value.ilike(f"%{value}"))
```
##########
airflow/www/utils.py:
##########
@@ -864,6 +951,10 @@ def is_extendedjson(self, col_name):
)
return False
+ def is_xcom_value(self, col_name):
Review Comment:
```suggestion
def is_xcom_value(self, col_name: str) -> bool:
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
+
+
+class XComFilterEndsWith(fab_sqlafilters.FilterEndsWith):
+ """Ends With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value))
+
+
+class XComFilterEqual(fab_sqlafilters.FilterEqual):
+ """Equality filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ value = set_value_to_type(self.datamodel, self.column_name, value)
+ return query.filter(trimmed_value == value)
+
+
+class XComFilterContains(fab_sqlafilters.FilterContains):
+ """Not Equal To filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value + "%"))
+
+
+class XComFilterNotStartsWith(fab_sqlafilters.FilterNotStartsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike(value + "%"))
+
+
+class XComFilterNotEndsWith(fab_sqlafilters.FilterNotEndsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike("%" + value))
+
+
+class XComFilterNotContains(fab_sqlafilters.FilterNotContains):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike("%" + value + "%"))
Review Comment:
```suggestion
return query.filter(~trimmed_value.ilike(f"%{value}%"))
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
+
+
+class XComFilterEndsWith(fab_sqlafilters.FilterEndsWith):
+ """Ends With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value))
+
+
+class XComFilterEqual(fab_sqlafilters.FilterEqual):
+ """Equality filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ value = set_value_to_type(self.datamodel, self.column_name, value)
+ return query.filter(trimmed_value == value)
+
+
+class XComFilterContains(fab_sqlafilters.FilterContains):
+ """Not Equal To filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike("%" + value + "%"))
+
+
+class XComFilterNotStartsWith(fab_sqlafilters.FilterNotStartsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike(value + "%"))
+
+
+class XComFilterNotEndsWith(fab_sqlafilters.FilterNotEndsWith):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike("%" + value))
+
+
+class XComFilterNotContains(fab_sqlafilters.FilterNotContains):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(~trimmed_value.ilike("%" + value + "%"))
+
+
+class XComFilterNotEqual(fab_sqlafilters.FilterNotEqual):
+ """Not Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ value = set_value_to_type(self.datamodel, self.column_name, value)
+ return query.filter(trimmed_value != value)
Review Comment:
follow up of the "another idea" above
```suggestion
def apply(self, query: Query, value: str) -> Query:
value = set_value_to_type(self.datamodel, self.column_name, value)
return generate_filter_value_query(
query=query,
model=self.model,
column_name=self.column_name,
filter_cond=lambda trimmed_value: trimmed_value != value
)
```
##########
airflow/www/utils.py:
##########
@@ -779,6 +787,72 @@ class
UtcAwareFilterConverter(fab_sqlafilters.SQLAFilterConverter):
"""Retrieve conversion tables for UTC-Aware filters."""
+class XComFilterStartsWith(fab_sqlafilters.FilterStartsWith):
+ """Starts With filter for XCom values."""
+
+ def apply(self, query: Query, value: str) -> Query:
+ query, trimmed_value = get_trimmed_field(query, self.model,
self.column_name)
+ return query.filter(trimmed_value.ilike(value + "%"))
Review Comment:
follow up of the "another idea" above
```suggestion
def apply(self, query: Query, value: str) -> Query:
return generate_filter_value_query(
query=query,
model=self.model,
column_name=self.column_name,
filter_cond=lambda trimmed_value:
trimmed_value.ilike(f"%{value}")
)
```
--
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]