示例#1
0
 def test_inactive_project(
     self,
     inactive_vws_client: VWS,
 ) -> None:
     """
     If the project is inactive, a FORBIDDEN response is returned.
     """
     with pytest.raises(ProjectInactive):
         inactive_vws_client.get_duplicate_targets(
             target_id=uuid.uuid4().hex, )
示例#2
0
    def test_status(
        self,
        image_file_failed_state: io.BytesIO,
        vws_client: VWS,
    ) -> None:
        """
        Targets are not duplicates if the status is not 'success'.
        """
        original_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=image_file_failed_state,
            active_flag=True,
            application_metadata=None,
        )

        similar_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=image_file_failed_state,
            active_flag=True,
            application_metadata=None,
        )

        vws_client.wait_for_target_processed(target_id=original_target_id)
        vws_client.wait_for_target_processed(target_id=similar_target_id)

        target_details = vws_client.get_target_record(
            target_id=original_target_id, )
        assert target_details.status == TargetStatuses.FAILED

        duplicates = vws_client.get_duplicate_targets(
            target_id=original_target_id, )

        assert duplicates == []
示例#3
0
    def test_get_duplicate_targets(
        self,
        vws_client: VWS,
        high_quality_image: io.BytesIO,
    ) -> None:
        """
        It is possible to get the IDs of similar targets.
        """
        target_id = vws_client.add_target(
            name='x',
            width=1,
            image=high_quality_image,
            active_flag=True,
            application_metadata=None,
        )
        similar_target_id = vws_client.add_target(
            name='a',
            width=1,
            image=high_quality_image,
            active_flag=True,
            application_metadata=None,
        )

        vws_client.wait_for_target_processed(target_id=target_id)
        vws_client.wait_for_target_processed(target_id=similar_target_id)
        duplicates = vws_client.get_duplicate_targets(target_id=target_id)
        assert duplicates == [similar_target_id]
示例#4
0
    def test_active_flag(
        self,
        high_quality_image: io.BytesIO,
        vws_client: VWS,
    ) -> None:
        """
        Targets with `active_flag` set to `False` can have duplicates.
        Targets with `active_flag` set to `False` are not found as duplicates.

        https://library.vuforia.com/articles/Solution/How-To-Use-the-Vuforia-Web-Services-API#How-To-Check-for-Duplicate-Targets
        says:

        '''
        If a target is explicitly inactivated through the VWS API (or through
        the Target Manager), then this target is no longer taken into account
        for the duplicate target check.
        '''
        """
        original_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=high_quality_image,
            active_flag=False,
            application_metadata=None,
        )
        similar_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=high_quality_image,
            active_flag=True,
            application_metadata=None,
        )

        vws_client.wait_for_target_processed(target_id=original_target_id)
        vws_client.wait_for_target_processed(target_id=similar_target_id)

        duplicates = vws_client.get_duplicate_targets(
            target_id=original_target_id, )

        assert duplicates == [similar_target_id]

        duplicates = vws_client.get_duplicate_targets(
            target_id=similar_target_id, )

        assert duplicates == []
示例#5
0
    def test_processing(
        self,
        high_quality_image: io.BytesIO,
        vws_client: VWS,
    ) -> None:
        """
        If a target is in the processing state, it can have duplicates.
        Targets can have duplicates in the processing state.
        """
        processed_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=high_quality_image,
            active_flag=True,
            application_metadata=None,
        )
        vws_client.wait_for_target_processed(target_id=processed_target_id)

        processing_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=high_quality_image,
            active_flag=True,
            application_metadata=None,
        )

        duplicates = vws_client.get_duplicate_targets(
            target_id=processed_target_id, )

        assert duplicates == []

        duplicates = vws_client.get_duplicate_targets(
            target_id=processing_target_id, )

        target_details = vws_client.get_target_record(
            target_id=processing_target_id, )

        assert target_details.status == TargetStatuses.PROCESSING
        assert duplicates == [processed_target_id]
示例#6
0
    def test_duplicates(
        self,
        high_quality_image: io.BytesIO,
        image_file_success_state_low_rating: io.BytesIO,
        vws_client: VWS,
    ) -> None:
        """
        Target IDs of similar targets are returned.

        In the mock, "similar" means that the images are exactly the same.
        """
        image_data = high_quality_image
        different_image_data = image_file_success_state_low_rating

        original_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=image_data,
            active_flag=True,
            application_metadata=None,
        )

        similar_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=image_data,
            active_flag=True,
            application_metadata=None,
        )

        different_target_id = vws_client.add_target(
            name=uuid.uuid4().hex,
            width=1,
            image=different_image_data,
            active_flag=True,
            application_metadata=None,
        )

        vws_client.wait_for_target_processed(target_id=original_target_id)
        vws_client.wait_for_target_processed(target_id=similar_target_id)
        vws_client.wait_for_target_processed(target_id=different_target_id)

        duplicates = vws_client.get_duplicate_targets(
            target_id=original_target_id, )

        assert duplicates == [similar_target_id]
示例#7
0
def get_duplicate_targets(
    server_access_key: str,
    server_secret_key: str,
    target_id: str,
    base_vws_url: str,
) -> None:
    """
    Get a list of potential duplicate targets.

    \b
    See
    https://library.vuforia.com/articles/Solution/How-To-Use-the-Vuforia-Web-Services-API.html#how-to-check-for-similar-targets.
    """
    vws_client = VWS(
        server_access_key=server_access_key,
        server_secret_key=server_secret_key,
        base_vws_url=base_vws_url,
    )
    record = vws_client.get_duplicate_targets(target_id=target_id)

    yaml_record = yaml.dump(record)
    click.echo(yaml_record)