This is an automated email from the ASF dual-hosted git repository. msumit pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push: new 9140ad8 Use parameters instead of params (#18143) 9140ad8 is described below commit 9140ad8d8f6dadd56bc592f5cdbf5585c2a8ce89 Author: Sumit Maheshwari <msu...@users.noreply.github.com> AuthorDate: Sat Sep 11 09:37:46 2021 +0530 Use parameters instead of params (#18143) --- .../example_dags/example_facebook_ads_to_gcs.py | 4 +-- .../google/cloud/transfers/facebook_ads_to_gcs.py | 27 +++++++++++++++++--- .../example_dags/example_display_video.py | 4 +-- .../marketing_platform/operators/display_video.py | 29 +++++++++++++++++----- .../cloud/transfers/test_facebook_ads_to_gcs.py | 8 +++--- .../operators/test_display_video.py | 6 ++--- 6 files changed, 58 insertions(+), 20 deletions(-) diff --git a/airflow/providers/google/cloud/example_dags/example_facebook_ads_to_gcs.py b/airflow/providers/google/cloud/example_dags/example_facebook_ads_to_gcs.py index 0ffe21c..9b6ac50 100644 --- a/airflow/providers/google/cloud/example_dags/example_facebook_ads_to_gcs.py +++ b/airflow/providers/google/cloud/example_dags/example_facebook_ads_to_gcs.py @@ -51,7 +51,7 @@ FIELDS = [ AdsInsights.Field.clicks, AdsInsights.Field.impressions, ] -PARAMS = {'level': 'ad', 'date_preset': 'yesterday'} +PARAMETERS = {'level': 'ad', 'date_preset': 'yesterday'} # [END howto_FB_ADS_variables] with models.DAG( @@ -90,7 +90,7 @@ with models.DAG( start_date=days_ago(2), owner='airflow', bucket_name=GCS_BUCKET, - params=PARAMS, + parameters=PARAMETERS, fields=FIELDS, gcp_conn_id=GCS_CONN_ID, object_name=GCS_OBJ_PATH, diff --git a/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py b/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py index ed13fd6..7abee35 100644 --- a/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py +++ b/airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py @@ -18,8 +18,10 @@ """This module contains Facebook Ad Reporting to GCS operators.""" import csv import tempfile +import warnings from typing import Any, Dict, List, Optional, Sequence, Union +from airflow.exceptions import AirflowException from airflow.models import BaseOperator from airflow.providers.facebook.ads.hooks.ads import FacebookAdsReportingHook from airflow.providers.google.cloud.hooks.gcs import GCSHook @@ -56,9 +58,13 @@ class FacebookAdsReportToGcsOperator(BaseOperator): :param fields: List of fields that is obtained from Facebook. Found in AdsInsights.Field class. https://developers.facebook.com/docs/marketing-api/insights/parameters/v6.0 :type fields: List[str] - :param params: Parameters that determine the query for Facebook + :param params: Parameters that determine the query for Facebook. This keyword is deprecated, + please use `parameters` keyword to pass the parameters. https://developers.facebook.com/docs/marketing-api/insights/parameters/v6.0 :type params: Dict[str, Any] + :param parameters: Parameters that determine the query for Facebook + https://developers.facebook.com/docs/marketing-api/insights/parameters/v6.0 + :type parameters: Dict[str, Any] :param gzip: Option to compress local file or file data for upload :type gzip: bool :param impersonation_chain: Optional service account to impersonate using short-term @@ -77,6 +83,7 @@ class FacebookAdsReportToGcsOperator(BaseOperator): "bucket_name", "object_name", "impersonation_chain", + "parameters", ) def __init__( @@ -85,7 +92,8 @@ class FacebookAdsReportToGcsOperator(BaseOperator): bucket_name: str, object_name: str, fields: List[str], - params: Dict[str, Any], + params: Dict[str, Any] = None, + parameters: Dict[str, Any] = None, gzip: bool = False, api_version: str = "v6.0", gcp_conn_id: str = "google_cloud_default", @@ -100,15 +108,26 @@ class FacebookAdsReportToGcsOperator(BaseOperator): self.facebook_conn_id = facebook_conn_id self.api_version = api_version self.fields = fields - self.params = params + self.parameters = parameters self.gzip = gzip self.impersonation_chain = impersonation_chain + if params is None and parameters is None: + raise AirflowException("Argument ['parameters'] is required") + if params and parameters is None: + # TODO: Remove in provider version 6.0 + warnings.warn( + "Please use 'parameters' instead of 'params'", + DeprecationWarning, + stacklevel=2, + ) + self.parameters = params + def execute(self, context: dict): service = FacebookAdsReportingHook( facebook_conn_id=self.facebook_conn_id, api_version=self.api_version ) - rows = service.bulk_facebook_report(params=self.params, fields=self.fields) + rows = service.bulk_facebook_report(params=self.parameters, fields=self.fields) converted_rows = [dict(row) for row in rows] self.log.info("Facebook Returned %s data points", len(converted_rows)) diff --git a/airflow/providers/google/marketing_platform/example_dags/example_display_video.py b/airflow/providers/google/marketing_platform/example_dags/example_display_video.py index 8f24f08..0a3f6d5 100644 --- a/airflow/providers/google/marketing_platform/example_dags/example_display_video.py +++ b/airflow/providers/google/marketing_platform/example_dags/example_display_video.py @@ -71,7 +71,7 @@ REPORT = { "schedule": {"frequency": "ONE_TIME"}, } -PARAMS = {"dataRange": "LAST_14_DAYS", "timezoneCode": "America/New_York"} +PARAMETERS = {"dataRange": "LAST_14_DAYS", "timezoneCode": "America/New_York"} CREATE_SDF_DOWNLOAD_TASK_BODY_REQUEST: Dict = { "version": SDF_VERSION, @@ -94,7 +94,7 @@ with models.DAG( # [START howto_google_display_video_runquery_report_operator] run_report = GoogleDisplayVideo360RunReportOperator( - report_id=report_id, params=PARAMS, task_id="run_report" + report_id=report_id, parameters=PARAMETERS, task_id="run_report" ) # [END howto_google_display_video_runquery_report_operator] diff --git a/airflow/providers/google/marketing_platform/operators/display_video.py b/airflow/providers/google/marketing_platform/operators/display_video.py index 9f1f9f9..307df1b 100644 --- a/airflow/providers/google/marketing_platform/operators/display_video.py +++ b/airflow/providers/google/marketing_platform/operators/display_video.py @@ -21,6 +21,7 @@ import json import shutil import tempfile import urllib.request +import warnings from typing import Any, Dict, List, Optional, Sequence, Union from urllib.parse import urlparse @@ -339,8 +340,12 @@ class GoogleDisplayVideo360RunReportOperator(BaseOperator): :param report_id: Report ID to run. :type report_id: str :param params: Parameters for running a report as described here: - https://developers.google.com/bid-manager/v1/queries/runquery + https://developers.google.com/bid-manager/v1/queries/runquery. Please note that this + keyword is deprecated, please use `parameters` keyword to pass the parameters. :type params: Dict[str, Any] + :param parameters: Parameters for running a report as described here: + https://developers.google.com/bid-manager/v1/queries/runquery + :type parameters: Dict[str, Any] :param api_version: The version of the api that will be requested for example 'v3'. :type api_version: str :param gcp_conn_id: The connection ID to use when fetching connection info. @@ -362,7 +367,7 @@ class GoogleDisplayVideo360RunReportOperator(BaseOperator): template_fields = ( "report_id", - "params", + "parameters", "impersonation_chain", ) @@ -370,7 +375,8 @@ class GoogleDisplayVideo360RunReportOperator(BaseOperator): self, *, report_id: str, - params: Dict[str, Any], + params: Dict[str, Any] = None, + parameters: Dict[str, Any] = None, api_version: str = "v1", gcp_conn_id: str = "google_cloud_default", delegate_to: Optional[str] = None, @@ -379,12 +385,23 @@ class GoogleDisplayVideo360RunReportOperator(BaseOperator): ) -> None: super().__init__(**kwargs) self.report_id = report_id - self.params = params self.api_version = api_version self.gcp_conn_id = gcp_conn_id self.delegate_to = delegate_to + self.parameters = parameters self.impersonation_chain = impersonation_chain + if params is None and parameters is None: + raise AirflowException("Argument ['parameters'] is required") + if params and parameters is None: + # TODO: Remove in provider version 6.0 + warnings.warn( + "Please use 'parameters' instead of 'params'", + DeprecationWarning, + stacklevel=2, + ) + self.parameters = params + def execute(self, context: dict) -> None: hook = GoogleDisplayVideo360Hook( gcp_conn_id=self.gcp_conn_id, @@ -395,9 +412,9 @@ class GoogleDisplayVideo360RunReportOperator(BaseOperator): self.log.info( "Running report %s with the following params:\n %s", self.report_id, - self.params, + self.parameters, ) - hook.run_query(query_id=self.report_id, params=self.params) + hook.run_query(query_id=self.report_id, params=self.parameters) class GoogleDisplayVideo360DownloadLineItemsOperator(BaseOperator): diff --git a/tests/providers/google/cloud/transfers/test_facebook_ads_to_gcs.py b/tests/providers/google/cloud/transfers/test_facebook_ads_to_gcs.py index d43bfc5..4871bbf 100644 --- a/tests/providers/google/cloud/transfers/test_facebook_ads_to_gcs.py +++ b/tests/providers/google/cloud/transfers/test_facebook_ads_to_gcs.py @@ -31,7 +31,7 @@ FIELDS = [ "clicks", "impressions", ] -PARAMS = {"level": "ad", "date_preset": "yesterday"} +PARAMETERS = {"level": "ad", "date_preset": "yesterday"} FACEBOOK_RETURN_VALUE = [ { "campaign_name": "abcd", @@ -51,7 +51,7 @@ class TestFacebookAdsReportToGcsOperator: op = FacebookAdsReportToGcsOperator( facebook_conn_id=FACEBOOK_ADS_CONN_ID, fields=FIELDS, - params=PARAMS, + parameters=PARAMETERS, object_name=GCS_OBJ_PATH, bucket_name=GCS_BUCKET, task_id="run_operator", @@ -59,7 +59,9 @@ class TestFacebookAdsReportToGcsOperator: ) op.execute({}) mock_ads_hook.assert_called_once_with(facebook_conn_id=FACEBOOK_ADS_CONN_ID, api_version=API_VERSION) - mock_ads_hook.return_value.bulk_facebook_report.assert_called_once_with(params=PARAMS, fields=FIELDS) + mock_ads_hook.return_value.bulk_facebook_report.assert_called_once_with( + params=PARAMETERS, fields=FIELDS + ) mock_gcs_hook.assert_called_once_with( gcp_conn_id=GCS_CONN_ID, impersonation_chain=IMPERSONATION_CHAIN, diff --git a/tests/providers/google/marketing_platform/operators/test_display_video.py b/tests/providers/google/marketing_platform/operators/test_display_video.py index 98ee1e7..eb00b9d 100644 --- a/tests/providers/google/marketing_platform/operators/test_display_video.py +++ b/tests/providers/google/marketing_platform/operators/test_display_video.py @@ -169,10 +169,10 @@ class TestGoogleDisplayVideo360RunReportOperator(TestCase): @mock.patch("airflow.providers.google.marketing_platform.operators.display_video.BaseOperator") def test_execute(self, mock_base_op, hook_mock): report_id = "QUERY_ID" - params = {"param": "test"} + parameters = {"param": "test"} op = GoogleDisplayVideo360RunReportOperator( report_id=report_id, - params=params, + parameters=parameters, api_version=API_VERSION, task_id="test_task", ) @@ -183,7 +183,7 @@ class TestGoogleDisplayVideo360RunReportOperator(TestCase): api_version=API_VERSION, impersonation_chain=None, ) - hook_mock.return_value.run_query.assert_called_once_with(query_id=report_id, params=params) + hook_mock.return_value.run_query.assert_called_once_with(query_id=report_id, params=parameters) class TestGoogleDisplayVideo360DownloadLineItemsOperator(TestCase):