This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/master by this push:
new 89fe5fe improve typing for datadog provider (#9775)
89fe5fe is described below
commit 89fe5feb7b8088db7b5aaaec2b7a292cbc507209
Author: morrme <[email protected]>
AuthorDate: Sun Jul 19 22:35:06 2020 -0500
improve typing for datadog provider (#9775)
---
airflow/providers/datadog/hooks/datadog.py | 29 ++++++++++++++++++++--------
airflow/providers/datadog/sensors/datadog.py | 20 ++++++++++---------
2 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/airflow/providers/datadog/hooks/datadog.py
b/airflow/providers/datadog/hooks/datadog.py
index 38055c4..7f61633 100644
--- a/airflow/providers/datadog/hooks/datadog.py
+++ b/airflow/providers/datadog/hooks/datadog.py
@@ -17,6 +17,7 @@
# under the License.
import time
+from typing import Any, Dict, List, Optional, Union
from datadog import api, initialize
@@ -37,7 +38,7 @@ class DatadogHook(BaseHook, LoggingMixin):
:param datadog_conn_id: The connection to datadog, containing metadata for
api keys.
:param datadog_conn_id: str
"""
- def __init__(self, datadog_conn_id='datadog_default'):
+ def __init__(self, datadog_conn_id: str = 'datadog_default') -> None:
super().__init__()
conn = self.get_connection(datadog_conn_id)
self.api_key = conn.extra_dejson.get('api_key', None)
@@ -55,7 +56,7 @@ class DatadogHook(BaseHook, LoggingMixin):
self.log.info("Setting up api keys for Datadog")
initialize(api_key=self.api_key, app_key=self.app_key)
- def validate_response(self, response):
+ def validate_response(self, response: Dict[str, Any]) -> None:
"""
Validate Datadog response
"""
@@ -63,7 +64,11 @@ class DatadogHook(BaseHook, LoggingMixin):
self.log.error("Datadog returned: %s", response)
raise AirflowException("Error status received from Datadog")
- def send_metric(self, metric_name, datapoint, tags=None, type_=None,
interval=None):
+ def send_metric(self, metric_name: str,
+ datapoint: Union[float, int],
+ tags: Optional[List[str]] = None,
+ type_: Optional[str] = None,
+ interval: Optional[int] = None) -> Dict[str, Any]:
"""
Sends a single datapoint metric to DataDog
@@ -90,9 +95,9 @@ class DatadogHook(BaseHook, LoggingMixin):
return response
def query_metric(self,
- query,
- from_seconds_ago,
- to_seconds_ago):
+ query: str,
+ from_seconds_ago: int,
+ to_seconds_ago: int) -> Dict[str, Any]:
"""
Queries datadog for a specific metric, potentially with some
function applied to it and returns the results.
@@ -115,8 +120,16 @@ class DatadogHook(BaseHook, LoggingMixin):
return response
# pylint: disable=too-many-arguments
- def post_event(self, title, text, aggregation_key=None, alert_type=None,
date_happened=None,
- handle=None, priority=None, related_event_id=None,
tags=None, device_name=None):
+ def post_event(self, title: str,
+ text: str,
+ aggregation_key: Optional[str] = None,
+ alert_type: Optional[str] = None,
+ date_happened: Optional[int] = None,
+ handle: Optional[str] = None,
+ priority: Optional[str] = None,
+ related_event_id: Optional[int] = None,
+ tags: Optional[List[str]] = None,
+ device_name: Optional[List[str]] = None) -> Dict[str, Any]:
"""
Posts an event to datadog (processing finished, potentially alerts,
other issues)
Think about this as a means to maintain persistence of alerts, rather
than
diff --git a/airflow/providers/datadog/sensors/datadog.py
b/airflow/providers/datadog/sensors/datadog.py
index 1fc9438..a24f46e 100644
--- a/airflow/providers/datadog/sensors/datadog.py
+++ b/airflow/providers/datadog/sensors/datadog.py
@@ -15,6 +15,8 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+from typing import Any, Callable, Dict, List, Optional
+
from datadog import api
from airflow.exceptions import AirflowException
@@ -39,15 +41,15 @@ class DatadogSensor(BaseSensorOperator):
@apply_defaults
def __init__(
self,
- datadog_conn_id='datadog_default',
- from_seconds_ago=3600,
- up_to_seconds_from_now=0,
- priority=None,
- sources=None,
- tags=None,
- response_check=None,
+ datadog_conn_id: str = 'datadog_default',
+ from_seconds_ago: int = 3600,
+ up_to_seconds_from_now: int = 0,
+ priority: Optional[str] = None,
+ sources: Optional[str] = None,
+ tags: Optional[List[str]] = None,
+ response_check: Optional[Callable[[Dict[str, Any]], bool]] = None,
*args,
- **kwargs):
+ **kwargs) -> None:
super().__init__(*args, **kwargs)
self.datadog_conn_id = datadog_conn_id
self.from_seconds_ago = from_seconds_ago
@@ -57,7 +59,7 @@ class DatadogSensor(BaseSensorOperator):
self.tags = tags
self.response_check = response_check
- def poke(self, context):
+ def poke(self, context: Dict[str, Any]) -> bool:
# This instantiates the hook, but doesn't need it further,
# because the API authenticates globally (unfortunately),
# but for airflow this shouldn't matter too much, because each