def test_create_productset_autogenerated_id(self, get_conn):
     # Given
     autogenerated_id = 'autogen-id'
     response_product_set = ProductSet(
         name=ProductSearchClient.product_set_path(PROJECT_ID_TEST, LOC_ID_TEST, autogenerated_id)
     )
     create_product_set_method = get_conn.return_value.create_product_set
     create_product_set_method.return_value = response_product_set
     parent = ProductSearchClient.location_path(PROJECT_ID_TEST, LOC_ID_TEST)
     product_set = ProductSet()
     # When
     result = self.hook.create_product_set(
         location=LOC_ID_TEST, product_set_id=None, product_set=product_set, project_id=PROJECT_ID_TEST
     )
     # Then
     # ProductSet ID was not provided in the method call above. Should be extracted from the API response
     # and returned.
     self.assertEqual(result, autogenerated_id)
     create_product_set_method.assert_called_once_with(
         parent=parent,
         product_set=product_set,
         product_set_id=None,
         retry=None,
         timeout=None,
         metadata=None,
     )
 def test_update_productset_explicit_name_missing_params_for_constructed_name(
     self, location, product_set_id, get_conn
 ):
     # Given
     explicit_ps_name = ProductSearchClient.product_set_path(
         PROJECT_ID_TEST_2, LOC_ID_TEST_2, PRODUCTSET_ID_TEST_2
     )
     product_set = ProductSet(name=explicit_ps_name)
     update_product_set_method = get_conn.return_value.update_product_set
     update_product_set_method.return_value = product_set
     # When
     result = self.hook.update_product_set(
         location=location,
         product_set_id=product_set_id,
         product_set=product_set,
         update_mask=None,
         project_id=PROJECT_ID_TEST,
         retry=None,
         timeout=None,
         metadata=None,
     )
     # Then
     self.assertEqual(result, MessageToDict(product_set))
     update_product_set_method.assert_called_once_with(
         product_set=ProductSet(name=explicit_ps_name),
         metadata=None,
         retry=None,
         timeout=None,
         update_mask=None,
     )
 def test_update_productset_no_explicit_name(self, get_conn):
     # Given
     product_set = ProductSet()
     update_product_set_method = get_conn.return_value.update_product_set
     update_product_set_method.return_value = product_set
     productset_name = ProductSearchClient.product_set_path(
         PROJECT_ID_TEST, LOC_ID_TEST, PRODUCTSET_ID_TEST
     )
     # When
     result = self.hook.update_product_set(
         location=LOC_ID_TEST,
         product_set_id=PRODUCTSET_ID_TEST,
         product_set=product_set,
         update_mask=None,
         project_id=PROJECT_ID_TEST,
         retry=None,
         timeout=None,
         metadata=None,
     )
     # Then
     self.assertEqual(result, MessageToDict(product_set))
     update_product_set_method.assert_called_once_with(
         product_set=ProductSet(name=productset_name),
         metadata=None,
         retry=None,
         timeout=None,
         update_mask=None,
     )
    def test_create_productset_explicit_id(self, get_conn):
        # Given
        create_product_set_method = get_conn.return_value.create_product_set
        create_product_set_method.return_value = None
        parent = ProductSearchClient.location_path(PROJECT_ID_TEST, LOC_ID_TEST)
        product_set = ProductSet()
        # When
        result = self.hook.create_product_set(
            location=LOC_ID_TEST,
            product_set_id=PRODUCTSET_ID_TEST,
            product_set=product_set,
            project_id=PROJECT_ID_TEST,
            retry=None,
            timeout=None,
            metadata=None,
        )

        # Then
        # ProductSet ID was provided explicitly in the method call above, should be returned from the method
        self.assertEqual(result, PRODUCTSET_ID_TEST)
        create_product_set_method.assert_called_once_with(
            parent=parent,
            product_set=product_set,
            product_set_id=PRODUCTSET_ID_TEST,
            retry=None,
            timeout=None,
            metadata=None,
        )
 def test_update_productset_no_explicit_name_and_missing_params_for_constructed_name(
     self, location, product_set_id, get_conn
 ):
     # Given
     update_product_set_method = get_conn.return_value.update_product_set
     update_product_set_method.return_value = None
     product_set = ProductSet()
     # When
     with self.assertRaises(AirflowException) as cm:
         self.hook.update_product_set(
             location=location,
             product_set_id=product_set_id,
             product_set=product_set,
             update_mask=None,
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
             metadata=None,
         )
     err = cm.exception
     self.assertTrue(err)
     self.assertIn(
         "Unable to determine the ProductSet name. Please either set the name directly in the "
         "ProductSet object or provide the `location` and `productset_id` parameters.",
         str(err),
     )
     update_product_set_method.assert_not_called()
 def test_create_productset_autogenerated_id_wrong_api_response(self, get_conn):
     # Given
     response_product_set = None
     create_product_set_method = get_conn.return_value.create_product_set
     create_product_set_method.return_value = response_product_set
     parent = ProductSearchClient.location_path(PROJECT_ID_TEST, LOC_ID_TEST)
     product_set = ProductSet()
     # When
     with self.assertRaises(AirflowException) as cm:
         self.hook.create_product_set(
             location=LOC_ID_TEST,
             product_set_id=None,
             product_set=product_set,
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
             metadata=None,
         )
     # Then
     # API response was wrong (None) and thus ProductSet ID extraction should fail.
     err = cm.exception
     self.assertIn('Unable to get name from response...', str(err))
     create_product_set_method.assert_called_once_with(
         parent=parent,
         product_set=product_set,
         product_set_id=None,
         retry=None,
         timeout=None,
         metadata=None,
     )
Ejemplo n.º 7
0
 def test_update_productset_explicit_name_different_from_constructed(
         self, get_conn):
     # Given
     update_product_set_method = get_conn.return_value.update_product_set
     update_product_set_method.return_value = None
     explicit_ps_name = ProductSearchClient.product_set_path(
         PROJECT_ID_TEST_2, LOC_ID_TEST_2, PRODUCTSET_ID_TEST_2)
     product_set = ProductSet(name=explicit_ps_name)
     template_ps_name = ProductSearchClient.product_set_path(
         PROJECT_ID_TEST, LOC_ID_TEST, PRODUCTSET_ID_TEST)
     # When
     # Location and product_set_id are passed in addition to a ProductSet with an explicit name,
     # but both names differ (constructed != explicit).
     # Should throw AirflowException in this case.
     with self.assertRaises(AirflowException) as cm:
         self.hook.update_product_set(
             location=LOC_ID_TEST,
             product_set_id=PRODUCTSET_ID_TEST,
             product_set=product_set,
             update_mask=None,
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
             metadata=None,
         )
     err = cm.exception
     # self.assertIn("The required parameter 'project_id' is missing", str(err))
     self.assertTrue(err)
     self.assertIn(
         ERR_DIFF_NAMES.format(explicit_name=explicit_ps_name,
                               constructed_name=template_ps_name,
                               label="ProductSet",
                               id_label="productset_id"), str(err))
     update_product_set_method.assert_not_called()
Ejemplo n.º 8
0
 def test_update_productset_no_explicit_name_and_missing_params_for_constructed_name(
     self, location, product_set_id, get_conn
 ):
     # Given
     update_product_set_method = get_conn.return_value.update_product_set
     update_product_set_method.return_value = None
     product_set = ProductSet()
     # When
     with self.assertRaises(AirflowException) as cm:
         self.hook.update_product_set(
             location=location,
             product_set_id=product_set_id,
             product_set=product_set,
             update_mask=None,
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
             metadata=None,
         )
     err = cm.exception
     self.assertTrue(err)
     self.assertIn(
         ERR_UNABLE_TO_CREATE.format(label='ProductSet', id_label='productset_id'),
         str(err)
     )
     update_product_set_method.assert_not_called()
 def test_get_productset(self, get_conn):
     # Given
     name = ProductSearchClient.product_set_path(PROJECT_ID_TEST, LOC_ID_TEST, PRODUCTSET_ID_TEST)
     response_product_set = ProductSet(name=name)
     get_product_set_method = get_conn.return_value.get_product_set
     get_product_set_method.return_value = response_product_set
     # When
     response = self.hook.get_product_set(
         location=LOC_ID_TEST, product_set_id=PRODUCTSET_ID_TEST, project_id=PROJECT_ID_TEST
     )
     # Then
     self.assertTrue(response)
     self.assertEqual(response, MessageToDict(response_product_set))
     get_product_set_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=None)
 def test_update_productset_explicit_name_different_from_constructed(
         self, get_conn):
     # Given
     update_product_set_method = get_conn.return_value.update_product_set
     update_product_set_method.return_value = None
     hook = self.vision_hook_default_project_id
     explicit_ps_name = ProductSearchClient.product_set_path(
         PROJECT_ID_TEST_2, LOC_ID_TEST_2, PRODUCTSET_ID_TEST_2)
     product_set = ProductSet(name=explicit_ps_name)
     template_ps_name = ProductSearchClient.product_set_path(
         PROJECT_ID_TEST, LOC_ID_TEST, PRODUCTSET_ID_TEST)
     # When
     # Location and product_set_id are passed in addition to a ProductSet with an explicit name,
     # but both names differ (constructed != explicit).
     # Should throw AirflowException in this case.
     with self.assertRaises(AirflowException) as cm:
         hook.update_product_set(
             location=LOC_ID_TEST,
             product_set_id=PRODUCTSET_ID_TEST,
             product_set=product_set,
             update_mask=None,
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
             metadata=None,
         )
     err = cm.exception
     # self.assertIn("The required parameter 'project_id' is missing", str(err))
     self.assertTrue(err)
     self.assertIn(
         "The ProductSet name provided in the object ({}) is different than the name "
         "created from the input parameters ({}). Please either: 1) Remove the ProductSet "
         "name, 2) Remove the location and productset_id parameters, 3) Unify the "
         "ProductSet name and input parameters.".format(
             explicit_ps_name, template_ps_name),
         str(err),
     )
     update_product_set_method.assert_not_called()
Ejemplo n.º 11
0
    CloudVisionProductSetUpdateOperator,
    CloudVisionProductSetDeleteOperator,
    CloudVisionProductCreateOperator,
    CloudVisionProductGetOperator,
    CloudVisionProductUpdateOperator,
    CloudVisionProductDeleteOperator,
)

default_args = {'start_date': airflow.utils.dates.days_ago(1)}

# [START howto_operator_vision_args_common]
GCP_VISION_LOCATION = os.environ.get('GCP_VISION_LOCATION', 'europe-west1')
# [END howto_operator_vision_args_common]

# [START howto_operator_vision_productset]
product_set = ProductSet(display_name='My Product Set 1')
# [END howto_operator_vision_productset]

# [START howto_operator_vision_product]
product = Product(display_name='My Product 1', product_category='toys')
# [END howto_operator_vision_product]

# [START howto_operator_vision_productset_explicit_id]
GCP_VISION_PRODUCT_SET_ID = os.environ.get('GCP_VISION_PRODUCT_SET_ID',
                                           'product_set_explicit_id')
# [END howto_operator_vision_productset_explicit_id]

# [START howto_operator_vision_product_explicit_id]
GCP_VISION_PRODUCT_ID = os.environ.get('GCP_VISION_PRODUCT_ID',
                                       'product_explicit_id')
# [END howto_operator_vision_product_explicit_id]
Ejemplo n.º 12
0
    CloudVisionProductCreateOperator,
    CloudVisionProductGetOperator,
    CloudVisionProductUpdateOperator,
    CloudVisionProductDeleteOperator,
)

try:
    # noinspection PyProtectedMember
    from unittest import mock
except ImportError:
    try:
        import mock
    except ImportError:
        mock = None

PRODUCTSET_TEST = ProductSet(display_name='Test Product Set')
PRODUCTSET_ID_TEST = 'my-productset'
PRODUCT_TEST = Product(display_name='My Product 1', product_category='toys')
PRODUCT_ID_TEST = 'my-product'
LOCATION_TEST = 'europe-west1'
GCP_CONN_ID = 'google_cloud_default'


class CloudVisionProductSetCreateTest(unittest.TestCase):
    @mock.patch('airflow.contrib.operators.gcp_vision_operator.CloudVisionHook'
                )
    def test_minimal_green_path(self, mock_hook):
        mock_hook.return_value.create_product_set.return_value = {}
        op = CloudVisionProductSetCreateOperator(location=LOCATION_TEST,
                                                 product_set=PRODUCTSET_TEST,
                                                 task_id='id')