You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2021/02/28 18:44:28 UTC

[GitHub] [airflow] RosterIn commented on a change in pull request #14521: Add Asana Provider

RosterIn commented on a change in pull request #14521:
URL: https://github.com/apache/airflow/pull/14521#discussion_r584340388



##########
File path: airflow/providers/asana/operators/asana_tasks.py
##########
@@ -0,0 +1,195 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from typing import Dict, Optional
+
+from airflow.models import BaseOperator
+from airflow.providers.asana.hooks.asana import AsanaHook
+from airflow.utils.decorators import apply_defaults
+
+
+class AsanaCreateTaskOperator(BaseOperator):
+    """
+    This operator can be used to create Asana tasks. For more information on
+    Asana optional task parameters, see https://developers.asana.com/docs/create-a-task
+
+    .. seealso::
+        For more information on how to use this operator, take a look at the guide:
+        :ref:`howto/operator:AsanaCreateTaskOperator`
+
+    :param asana_conn_id: The Asana connection to use.
+    :type asana_conn_id: str
+    :param name: Name of the task.
+    :type name: str
+    :param optional_task_parameters: Any of the optional task creation parameters.
+        See https://developers.asana.com/docs/create-a-task for a complete list.
+        You must specify at least one of 'workspace', 'parent', or 'projects'.
+    :type optional_task_parameters: dict
+    """
+
+    @apply_defaults
+    def __init__(
+        self,
+        *,
+        asana_conn_id: str,
+        name: str,
+        optional_task_parameters: Optional[dict] = None,
+        **kwargs,
+    ) -> None:
+        super().__init__(**kwargs)
+        self.asana_conn_id = asana_conn_id
+        self.name = name
+        self.optional_task_parameters = optional_task_parameters
+        self.hook = AsanaHook(conn_id=self.asana_conn_id)
+
+    def execute(self, context: Dict) -> str:
+        asana_client = self.hook.get_conn()
+
+        params = {"name": self.name}
+        if self.optional_task_parameters is not None:
+            params.update(self.optional_task_parameters)
+        response = asana_client.tasks.create(params=params)

Review comment:
       I think you need to move the logic to the Hook.
   The hook should have the methods for create/update/delete etc... the operator is using the hook methods.
   It's a layer between the library and the operator.




----------------------------------------------------------------
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:
users@infra.apache.org