class CloudSqlBaseOperator(BaseOperator): """ Abstract base operator for Google Cloud SQL operators to inherit from. :param project_id: Project ID of the Google Cloud Platform project to operate it. :type project_id: str :param instance: Cloud SQL instance ID. This does not include the project ID. :type instance: str :param gcp_conn_id: The connection ID used to connect to Google Cloud Platform. :type gcp_conn_id: str :param api_version: API version used (e.g. v1beta4). :type api_version: str """ @apply_defaults def __init__(self, project_id, instance, gcp_conn_id='google_cloud_default', api_version='v1beta4', *args, **kwargs): self.project_id = project_id self.instance = instance self.gcp_conn_id = gcp_conn_id self.api_version = api_version self._validate_inputs() self._hook = CloudSqlHook(gcp_conn_id=self.gcp_conn_id, api_version=self.api_version) super(CloudSqlBaseOperator, self).__init__(*args, **kwargs) def _validate_inputs(self): if not self.project_id: raise AirflowException("The required parameter 'project_id' is empty") if not self.instance: raise AirflowException("The required parameter 'instance' is empty") def _check_if_instance_exists(self, instance): try: return self._hook.get_instance(self.project_id, instance) except HttpError as e: status = e.resp.status if status == 404: return False raise e def _check_if_db_exists(self, db_name): try: return self._hook.get_database(self.project_id, self.instance, db_name) except HttpError as e: status = e.resp.status if status == 404: return False raise e def execute(self, context): pass @staticmethod def _get_settings_version(instance): return instance.get(SETTINGS).get(SETTINGS_VERSION)
def test_instance_export_ex(self): # Mocking __init__ with an empty anonymous function with mock.patch.object(CloudSqlHook, "__init__", lambda x, y, z: None): hook = CloudSqlHook(None, None) # Simulating HttpError inside export_instance hook.get_conn = mock.Mock( side_effect=HttpError(resp={'status': '400'}, content='Error content'.encode('utf-8'))) with self.assertRaises(AirflowException) as cm: hook.export_instance(None, None, None) err = cm.exception self.assertIn("Exporting instance ", str(err))
def test_instance_export_ex(self): # Mocking __init__ with an empty anonymous function with mock.patch.object(CloudSqlHook, "__init__", lambda x, y, z: None): hook = CloudSqlHook(None, None) # Simulating HttpError inside export_instance hook.get_conn = mock.Mock( side_effect=HttpError(resp={'status': '400'}, content='Error content'.encode('utf-8')) ) with self.assertRaises(AirflowException) as cm: hook.export_instance(None, None, None) err = cm.exception self.assertIn("Exporting instance ", str(err))
def __init__(self, instance, project_id=None, gcp_conn_id='google_cloud_default', api_version='v1beta4', *args, **kwargs): self.project_id = project_id self.instance = instance self.gcp_conn_id = gcp_conn_id self.api_version = api_version self._validate_inputs() self._hook = CloudSqlHook(gcp_conn_id=self.gcp_conn_id, api_version=self.api_version) super().__init__(*args, **kwargs)
class CloudSqlBaseOperator(BaseOperator): """ Abstract base operator for Google Cloud SQL operators to inherit from. :param project_id: Project ID of the Google Cloud Platform project to operate it. :type project_id: str :param instance: Cloud SQL instance ID. This does not include the project ID. :type instance: str :param gcp_conn_id: The connection ID used to connect to Google Cloud Platform. :type gcp_conn_id: str :param api_version: API version used (e.g. v1). :type api_version: str """ @apply_defaults def __init__(self, project_id, instance, gcp_conn_id='google_cloud_default', api_version='v1beta4', *args, **kwargs): self.project_id = project_id self.instance = instance self.gcp_conn_id = gcp_conn_id self.api_version = api_version self._validate_inputs() self._hook = CloudSqlHook(gcp_conn_id=self.gcp_conn_id, api_version=self.api_version) super(CloudSqlBaseOperator, self).__init__(*args, **kwargs) def _validate_inputs(self): if not self.project_id: raise AirflowException( "The required parameter 'project_id' is empty") if not self.instance: raise AirflowException( "The required parameter 'instance' is empty") def _check_if_instance_exists(self, instance): try: return self._hook.get_instance(self.project_id, instance) except HttpError as e: status = e.resp.status if status == 404: return False raise e def execute(self, context): pass @staticmethod def _get_settings_version(instance): return instance.get(SETTINGS).get(SETTINGS_VERSION)
def __init__(self, project_id, instance, gcp_conn_id='google_cloud_default', api_version='v1beta4', *args, **kwargs): self.project_id = project_id self.instance = instance self.gcp_conn_id = gcp_conn_id self.api_version = api_version self._validate_inputs() self._hook = CloudSqlHook(gcp_conn_id=self.gcp_conn_id, api_version=self.api_version) super(CloudSqlBaseOperator, self).__init__(*args, **kwargs)