Example #1
0
    async def edit(self, ti: ToolchainIntegration) -> ToolchainIntegration:
        """
        Edit Toolchain Integration

        :param ti: Toolchain Integration
        :return Message from API server
        """
        return ToolchainIntegration.from_dict(await self.query(
            TOOLCHAIN_INTEGRATION_URL, action='PUT', payload=ti.to_dict()))
Example #2
0
    def create(self, ti: ToolchainIntegration) -> ToolchainIntegration:
        """
        Create Toolchain Integration

        :param ti: Toolchain Integration
        :return Message from API server
        """
        return ToolchainIntegration.from_dict(
            self.query(TOOLCHAIN_INTEGRATION_URL,
                       action='POST',
                       payload=ti.to_dict()))
Example #3
0
    async def get(self, name: str) -> ToolchainIntegration:
        """
        Get Toolchain Integration from API server

        :param name: Toolchain Integration name
        :type name: str
        :return: Toolchain Integration
        """
        return ToolchainIntegration.from_dict(
            await self.query(f'{TOOLCHAIN_INTEGRATION_URL}/{name}'))
Example #4
0
    def get_all(self) -> typing.List[ToolchainIntegration]:
        """
        Get all Toolchain Integrations from API server

        :return: all Toolchain Integrations
        """
        return [
            ToolchainIntegration.from_dict(ti)
            for ti in self.query(TOOLCHAIN_INTEGRATION_URL)
        ]
Example #5
0
def test_local_training_relative_output_dir(mocker: MockFixture, cli_runner: CliRunner):
    """
    Tests issue #208 - Converting relative path to output-dir to absolute,
    because Docker requires mount paths to be absolute
    :param mocker: mocker fixture
    :param cli_runner: Click runner fixture
    """

    trainer_mock = mocker.patch.object(training, 'K8sTrainer', autospec=True).return_value
    trainer_mock.model_training.spec.model.artifact_name_template = 'model_dir_template'
    api_client = Mock()

    mocker.patch.object(training_sdk, 'create_mt_config_file')
    mocker.patch.object(training_sdk, 'stream_container_logs')
    mocker.patch.object(training_sdk, 'raise_error_if_container_failed')

    docker_mock: Mock = mocker.patch.object(training_sdk.docker, 'from_env').return_value
    docker_mock.api.inspect_container = Mock(return_value={})

    with tempfile.TemporaryDirectory(dir=os.curdir) as temp_dir:
        temp_dir_path = pathlib.Path(temp_dir)
        training_yml = temp_dir_path / 'training.yml'
        training_yml.write_text(json.dumps(
            {**ModelTraining(id='training1', spec=ModelTrainingSpec(toolchain='toolchain1')).to_dict(),
             **{'kind': 'ModelTraining'}}))

        toolchain_yml = temp_dir_path / 'toolchain.yml'
        toolchain_yml.write_text(json.dumps({**ToolchainIntegration(id='toolchain1').to_dict(),
                                             **{'kind': 'ToolchainIntegration'}}))

        temp_dir_relative_path: str = os.path.relpath(temp_dir_path)

        result: Result = cli_runner.invoke(
            training.training_group,
            ['run', '--output-dir', temp_dir_relative_path, '--manifest-file', str(training_yml),
             '--manifest-file', str(toolchain_yml), '--id', 'training1'],
            obj=api_client)

        assert result.exit_code == 0, f'command invocation ended with exit code {result.exit_code}'
        assert result.exception is None, f'command invocation ended with exception {result.exception}'

        abs_path = os.path.abspath(temp_dir)

        for call in docker_mock.containers.run.call_args_list:
            call_kwargs = call[1]
            mounts: List[Mount] = call_kwargs.get('mounts', [])

            for mount in filter(lambda m: m.get('Target') == MODEL_OUTPUT_CONTAINER_PATH, mounts):
                assert os.path.dirname(mount.get('Source')) == abs_path
Example #6
0
TRAINING = EntityTestData(
    ModelTrainingClient(),
    ModelTraining(
        id=ENTITY_ID,
        spec=ModelTrainingSpec(work_dir="/1/2/3",
                               model=ModelIdentity(name="name",
                                                   version="version")),
        status=ModelTrainingStatus(state=SUCCEEDED_STATE)), training.training,
    'ModelTraining')

TOOLCHAIN = EntityTestData(
    ToolchainIntegrationClient(),
    ToolchainIntegration(
        id=ENTITY_ID,
        spec=ToolchainIntegrationSpec(
            default_image="mock-image",
            entrypoint="default-entrypoint",
        ),
    ),
    toolchain_integration.toolchain_integration,
    'ToolchainIntegration',
)

PACKAGING = EntityTestData(
    ModelPackagingClient(),
    ModelPackaging(id=ENTITY_ID,
                   spec=ModelPackagingSpec(artifact_name='test-artifact-name',
                                           integration_name='test'),
                   status=ModelPackagingStatus(state=SUCCEEDED_STATE, )),
    packaging.packaging,
    'ModelPackaging',