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



##########
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:
       Sounds good 👍




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