def testGetLatestBlessedModelArtifact_IrMode(self):
    # Model with id 1, will be blessed.
    model_one = standard_artifacts.Model()
    model_one.uri = 'model_one'
    model_one.id = 1
    # Model with id 2, will be blessed.
    model_two = standard_artifacts.Model()
    model_two.uri = 'model_two'
    model_two.id = 2
    # Model with id 3, will not be blessed.
    model_three = standard_artifacts.Model()
    model_three.uri = 'model_three'
    model_three.id = 3

    model_blessing_one = standard_artifacts.ModelBlessing()
    self._set_model_blessing_bit(model_blessing_one, model_one.id, 1)
    model_blessing_two = standard_artifacts.ModelBlessing()
    self._set_model_blessing_bit(model_blessing_two, model_two.id, 1)

    resolver = latest_blessed_model_resolver.LatestBlessedModelResolver()
    result = resolver.resolve_artifacts(
        self._store, {
            'model': [model_one, model_two, model_three],
            'model_blessing': [model_blessing_one, model_blessing_two]
        })
    self.assertIsNotNone(result)
    self.assertEqual([a.uri for a in result['model']], ['model_two'])
  def testGetLatestBlessedModelArtifact(self):
    contexts = self._metadata.register_pipeline_contexts_if_not_exists(
        self._pipeline_info)
    # Model with id 1, will be blessed.
    model_one = standard_artifacts.Model()
    model_one.uri = 'model_one'
    self._metadata.publish_artifacts([model_one])
    # Model with id 2, will be blessed.
    model_two = standard_artifacts.Model()
    model_two.uri = 'model_two'
    self._metadata.publish_artifacts([model_two])
    # Model with id 3, will not be blessed.
    model_three = standard_artifacts.Model()
    model_three.uri = 'model_three'
    self._metadata.publish_artifacts([model_three])

    model_blessing_one = standard_artifacts.ModelBlessing()
    self._set_model_blessing_bit(model_blessing_one, model_one.id, 1)
    model_blessing_two = standard_artifacts.ModelBlessing()
    self._set_model_blessing_bit(model_blessing_two, model_two.id, 1)
    self._metadata.publish_artifacts([model_blessing_one, model_blessing_two])

    self._metadata.register_execution(
        exec_properties={},
        pipeline_info=self._pipeline_info,
        component_info=self._component_info,
        contexts=contexts)
    self._metadata.publish_execution(
        component_info=self._component_info,
        output_artifacts={
            'a': [model_one, model_two, model_three],
            'b': [model_blessing_one, model_blessing_two]
        })

    resolver = latest_blessed_model_resolver.LatestBlessedModelResolver()
    resolve_result = resolver.resolve(
        pipeline_info=self._pipeline_info,
        metadata_handler=self._metadata,
        source_channels={
            'model':
                types.Channel(
                    type=standard_artifacts.Model,
                    producer_component_id=self._component_info.component_id,
                    output_key='a'),
            'model_blessing':
                types.Channel(
                    type=standard_artifacts.ModelBlessing,
                    producer_component_id=self._component_info.component_id,
                    output_key='b')
        })
    self.assertTrue(resolve_result.has_complete_result)
    self.assertEqual([
        a.uri
        for a in resolve_result.per_key_resolve_result['model']
    ], ['model_two'])
    self.assertTrue(resolve_result.per_key_resolve_state['model'])
  def testGetLatestBlessedModelArtifact(self):
    with metadata.Metadata(connection_config=self._connection_config) as m:
      contexts = m.register_pipeline_contexts_if_not_exists(self._pipeline_info)
      # Model with id 1, will be blessed.
      model_one = standard_artifacts.Model()
      model_one.uri = 'model_one'
      m.publish_artifacts([model_one])
      # Model with id 2, will be blessed.
      model_two = standard_artifacts.Model()
      model_two.uri = 'model_two'
      m.publish_artifacts([model_two])
      # Model with id 3, will not be blessed.
      model_three = standard_artifacts.Model()
      model_three.uri = 'model_three'
      m.publish_artifacts([model_three])

      model_blessing_one = standard_artifacts.ModelBlessing()
      self._set_model_blessing_bit(model_blessing_one, model_one.id, 1)
      model_blessing_two = standard_artifacts.ModelBlessing()
      self._set_model_blessing_bit(model_blessing_two, model_two.id, 1)
      m.publish_artifacts([model_blessing_one, model_blessing_two])

      m.register_execution(
          input_artifacts={
              'a': [model_one, model_two, model_three],
              'b': [model_blessing_one, model_blessing_two]
          },
          exec_properties={},
          pipeline_info=self._pipeline_info,
          component_info=self._component_info,
          contexts=contexts)

      resolver = latest_blessed_model_resolver.LatestBlessedModelResolver()
      resolve_result = resolver.resolve(
          pipeline_info=self._pipeline_info,
          metadata_handler=m,
          source_channels={
              'model':
                  types.Channel(type=standard_artifacts.Model),
              'model_blessing':
                  types.Channel(type=standard_artifacts.ModelBlessing)
          })
      self.assertTrue(resolve_result.has_complete_result)
      self.assertEqual([
          artifact.uri
          for artifact in resolve_result.per_key_resolve_result['model']
      ], ['model_two'])
      self.assertTrue(resolve_result.per_key_resolve_state['model'])