Example #1
0
def delete_model(model_id: str):
    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)
    try:
        api_instance.delete_model(model_id)
    except ApiException as e:
        print("Exception when calling ModelServiceApi -> delete_model: %s\n" % e, file=stderr)
def delete_assets(upload_assets_response: ApiCatalogUploadResponse = None):

    api_client = get_swagger_client()

    delete_methods = {
        "components":
        swagger_client.ComponentServiceApi(api_client).delete_component,
        "datasets":
        swagger_client.DatasetServiceApi(api_client).delete_dataset,
        "models": swagger_client.ModelServiceApi(api_client).delete_model,
        "notebooks":
        swagger_client.NotebookServiceApi(api_client).delete_notebook,
        "pipelines":
        swagger_client.PipelineServiceApi(api_client).delete_pipeline
    }

    try:
        for asset_type, delete_method in delete_methods.items():
            if upload_assets_response:
                asset_list = upload_assets_response.__getattribute__(
                    asset_type)
                for asset in asset_list:
                    delete_method(asset.id)
            else:
                delete_method("*")

    except ApiException as e:
        print(f"Exception when calling {delete_method}: {e}\n", file=stderr)
Example #3
0
def download_model_tgz(model_id, download_dir: str = None) -> str:

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        response: HTTPResponse = \
            api_instance.download_model_files(model_id,
                                              include_generated_code=True,
                                              _preload_content=False)

        attachment_header = response.info().get("Content-Disposition",
                                                f"attachment; filename={model_id}.tgz")

        download_filename = re.sub("attachment; filename=", "", attachment_header)

        download_dir = download_dir or os.path.join(tempfile.gettempdir(), "download", "models")
        os.makedirs(download_dir, exist_ok=True)
        tarfile_path = os.path.join(download_dir, download_filename)

        with open(tarfile_path, 'wb') as f:
            f.write(response.read())

        print(tarfile_path)

        return tarfile_path

    except ApiException as e:
        print("Exception when calling ModelServiceApi -> download_model_files: %s\n" % e, file=stderr)

    return "Download failed?"
Example #4
0
def upload_model_file(model_id, file_path):
    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)
    try:
        response = api_instance.upload_model_file(id=model_id, uploadfile=file_path)
        print(f"Upload file '{file_path}' to model '{model_id}'")
    except ApiException as e:
        print("Exception when calling ModelServiceApi -> upload_model_file: %s\n" % e, file=stderr)
        raise e
Example #5
0
def get_model(model_id: str) -> ApiModel:
    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)
    try:
        model_meta: ApiModel = api_instance.get_model(model_id)
        pprint(model_meta, indent=2)
        return model_meta
    except ApiException as e:
        print("Exception when calling ModelServiceApi -> get_model: %s\n" % e, file=stderr)
    return None
Example #6
0
def upload_model_template(uploadfile_name, name=None) -> str:
    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)
    try:
        print(f"Uploading '{uploadfile_name}' ... ", end='')
        model: ApiModel = api_instance.upload_model(uploadfile=uploadfile_name, name=name)
        print(f"{model.id} '{model.name}'")
        return model.id
    except ApiException as e:
        print("Exception when calling ModelServiceApi -> upload_model: %s\n" % e, file=stderr)
        raise e
    return None
Example #7
0
def set_featured_models(model_ids: [str]):

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        api_response = api_instance.set_featured_models(model_ids)

    except ApiException as e:
        print("Exception when calling ModelServiceApi -> set_featured_models: %s\n" % e, file=stderr)

    return None
Example #8
0
def approve_models_for_publishing(model_ids: [str]):

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        api_response = api_instance.approve_models_for_publishing(model_ids)

    except ApiException as e:
        print("Exception when calling ModelServiceApi -> approve_models_for_publishing: %s\n" % e, file=stderr)

    return None
Example #9
0
def verify_model_download(model_id: str) -> bool:

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        response: HTTPResponse = \
            api_instance.download_model_files(model_id,
                                              include_generated_code=True,
                                              _preload_content=False)
        tgz_file = BytesIO(response.read())
        tar = tarfile.open(fileobj=tgz_file)

        file_contents = {m.name: tar.extractfile(m).read().decode("utf-8")
                         for m in tar.getmembers()}

        # verify template text matches

        template_response: ApiGetTemplateResponse = api_instance.get_model_template(model_id)
        template_from_api = template_response.template
        template_from_tgz = [content for filename, content in file_contents.items()
                             if filename.endswith(".yaml") or filename.endswith(".yml")][0]

        assert template_from_api == template_from_tgz

        # verify generated code matches

        generate_code_response: ApiGenerateModelCodeResponse = \
            api_instance.generate_model_code(model_id)

        for model_script in generate_code_response.scripts:
            stage = model_script.pipeline_stage
            platform = model_script.execution_platform
            script_from_api = model_script.script_code

            downloaded_script = [content for filename, content in file_contents.items()
                                 if f"run_{stage}_{platform}" in filename][0]

            assert script_from_api == downloaded_script

        print("downloaded files match")

        return True

    except ApiException as e:
        print("Exception when calling ModelServiceApi -> download_model_files: %s\n" % e, file=stderr)

    return False
Example #10
0
def run_code(model_id: str, pipeline_stage: str, execution_platform: str, run_name: str = None, parameters=dict()) -> str:

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        run_code_response: ApiRunCodeResponse = api_instance.run_model(model_id, pipeline_stage, execution_platform,
                                                                       run_name=run_name, parameters=parameters)
        print(run_code_response.run_url)

        return run_code_response.run_url

    except ApiException as e:
        print("Exception while calling ModelServiceApi -> run_code: %s\n" % e, file=stderr)

    return None
Example #11
0
def list_models(filter_dict: dict = {}, sort_by: str = None) -> [ApiModel]:

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        filter_str = json.dumps(filter_dict) if filter_dict else None

        api_response: ApiListModelsResponse = api_instance.list_models(filter=filter_str, sort_by=sort_by)

        for c in api_response.models:
            print("%s  %s  %s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.name))

        return api_response.models

    except ApiException as e:
        print("Exception when calling ModelServiceApi -> list_models: %s\n" % e, file=stderr)

    return []
Example #12
0
def get_template(template_id: str) -> str:

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        template_response: ApiGetTemplateResponse = api_instance.get_model_template(template_id)
        print(template_response.template)

        # yaml_dict = yaml.load(template_response.template, Loader=yaml.FullLoader)
        # model_name = yaml_dict.get("name") or f"template_{template_id}"
        # template_file = os.path.join("files", model_name) + ".yaml"

        # with open(template_file, "w") as f:
        #     f.write(template_response.template)

        return template_response.template

    except ApiException as e:
        print("Exception when calling ModelServiceApi -> get_model_template: %s\n" % e, file=stderr)

    return None
Example #13
0
def generate_code(model_id: str) -> str:

    api_client = get_swagger_client()
    api_instance = swagger_client.ModelServiceApi(api_client=api_client)

    try:
        generate_code_response: ApiGenerateModelCodeResponse = api_instance.generate_model_code(model_id)

        for model_script in generate_code_response.scripts:
            print(f"#######################################################")
            print(f"# pipeline_stage:     {model_script.pipeline_stage}")
            print(f"# execution_platform: {model_script.execution_platform}")
            print(f"#######################################################")
            print()
            print(model_script.script_code)
            print()

        return generate_code_response.scripts

    except ApiException as e:
        print("Exception while calling ModelServiceApi -> generate_code: %s\n" % e, file=stderr)

    return None