natanweinberger commented on a change in pull request #15425:
URL: https://github.com/apache/airflow/pull/15425#discussion_r633818993



##########
File path: airflow/models/connection.py
##########
@@ -377,3 +378,50 @@ def get_connection_from_secrets(cls, conn_id: str) -> 
'Connection':
             if conn:
                 return conn
         raise AirflowNotFoundException(f"The conn_id `{conn_id}` isn't 
defined")
+
+    @classmethod
+    def get_connection_parameter_names(cls) -> Set[str]:
+        """Returns :class:`airflow.models.connection.Connection` constructor 
parameters."""
+        return {k for k in signature(cls.__init__).parameters.keys() if k != 
"self"}
+
+    @classmethod
+    def from_dict(cls, conn_id: str, conn_dict: Dict) -> 'Connection':
+        """
+        Create a connection from a dictionary.
+
+        :param conn_dict: dictionary representing a connection's attributes
+            e.g., {'conn_id': '', 'conn_type': '', 'login': '', ...}
+        :return: connection
+        """
+        if not isinstance(conn_dict, dict):
+            raise AirflowException(
+                f"Unexpected conn_dict type: {type(conn_dict)}. "
+                "The connection must be defined as a dictionary."
+            )
+
+        connection_parameter_names = cls.get_connection_parameter_names() | 
{"extra_dejson"}
+        current_keys = set(conn_dict.keys())
+        if not current_keys.issubset(connection_parameter_names):
+            illegal_keys = current_keys - connection_parameter_names
+            illegal_keys_list = ", ".join(sorted(illegal_keys))
+            raise AirflowException(

Review comment:
       Agreed with the same change on line 397, but this particular case 
shouldn't be a TypeError. It indicates that some keys in the dictionary aren't 
allowed. Maybe it can be a different type of exception though, what do you 
think?




-- 
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.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to