uranusjr commented on code in PR #45562:
URL: https://github.com/apache/airflow/pull/45562#discussion_r1917646149


##########
airflow/serialization/serialized_objects.py:
##########
@@ -297,6 +306,25 @@ def decode_asset_condition(var: dict[str, Any]) -> 
BaseAsset:
     raise ValueError(f"deserialization not implemented for DAT {dat!r}")
 
 
+def decode_asset(var: dict[str, Any]) -> BaseAsset:
+    """
+    Decode a previously serialized asset.
+
+    :meta private:
+    """
+
+    def _decode_trigger(trigger_infos: dict[str, Any]) -> BaseTrigger:
+        return 
import_string(trigger_infos["classpath"])(**trigger_infos["kwargs"])

Review Comment:
   We should check if we are importing from a known location. This is how 
timetables are decoded; it must be defined under the `airflow` namespace, or 
from a plugin-registered location. be7efb1d30929a7f742f5b7735a3d6fbadadd352
   
   With that said, I don’t think we actually need the full trigger objects here 
in the first place? The decoded trigger here simply gets serialised again to be 
stored in the database anyway.
   
   
https://github.com/apache/airflow/blob/93441c9adb3ca7be86d9dd8943a968ed93cc015f/airflow/dag_processing/collection.py#L748-L808
   
   It’s likely better to simply have a serialised trigger representation here 
instead, similar to how MappedOperator gets deserialised. MappedOperator does 
not import the underlying operator class when deserialised, but only store the 
needed values in a dict, and only actually fully saturate the class when in the 
worker.
   
   
https://github.com/apache/airflow/blob/93441c9adb3ca7be86d9dd8943a968ed93cc015f/airflow/models/mappedoperator.py#L257-L262



-- 
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: commits-unsubscr...@airflow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to