From 70af19773828a918f93798c77adf819c33166578 Mon Sep 17 00:00:00 2001 From: djm21 Date: Wed, 30 Apr 2025 13:00:54 -0700 Subject: [PATCH 1/3] fix: upload .sasast models correctly (PMMODEL-682) --- src/sasctl/tasks.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/sasctl/tasks.py b/src/sasctl/tasks.py index 364042e3..5cc0d192 100644 --- a/src/sasctl/tasks.py +++ b/src/sasctl/tasks.py @@ -1045,17 +1045,33 @@ def upload_local_model( # Get project from repo if it exists; if it doesn't, create a new one p = mr.get_project(project_name) if p is None: - mr.create_project(project_name, repository) + p = mr.create_project(project_name, repository) # zip up all files in directory (except any previous zip files) zip_name = str(Path(path) / (model_name + ".zip")) - file_names = sorted(Path(path).glob("*[!zip]")) - with zipfile.ZipFile(str(zip_name), mode="w") as zFile: + file_names = sorted(Path(path).glob("*[!(zip|sasast)]")) + sasast_file = next(Path(path).glob("*.sasast"), None) + if sasast_file: + # If a sasast file is present, upload it as well + with open(sasast_file, "rb") as sasast: + sasast_model = sasast.read() + data = { + "name": model_name, + "projectId": p.id, + "type": "ASTORE", + } + files = {"files": (sasast_file.name, sasast_model)} + model = mr.post("/models", files=files, data=data) for file in file_names: - zFile.write(str(file), arcname=file.name) - # upload zipped model - with open(zip_name, "rb") as zip_file: - model = mr.import_model_from_zip( - model_name, project_name, zip_file, version=version - ) + with open(file, "r") as f: + mr.add_model_content(model, f, file.name) + else: + with zipfile.ZipFile(str(zip_name), mode="w") as zFile: + for file in file_names: + zFile.write(str(file), arcname=file.name) + # upload zipped model + with open(zip_name, "rb") as zip_file: + model = mr.import_model_from_zip( + model_name, project_name, zip_file, version=version + ) return model From a194b7bbcdb6f1b3bba0665288032acdb9ba5395 Mon Sep 17 00:00:00 2001 From: djm21 Date: Wed, 30 Apr 2025 13:49:25 -0700 Subject: [PATCH 2/3] fix: update upload_local_model to work with model versioning (PMMODEL-682) --- src/sasctl/tasks.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sasctl/tasks.py b/src/sasctl/tasks.py index 5cc0d192..539a39e4 100644 --- a/src/sasctl/tasks.py +++ b/src/sasctl/tasks.py @@ -1019,7 +1019,7 @@ def upload_local_model( repo_name : Union[str, dict], optional repository in which to create the project version: str, optional - The version of the model being uploaded + The version of the model being uploaded. Defaults to 'latest'. For new model version, use 'new'. """ # Use default repository if not specified try: @@ -1058,7 +1058,8 @@ def upload_local_model( data = { "name": model_name, "projectId": p.id, - "type": "ASTORE", + "type": "ASTORE", + "versionOption": version } files = {"files": (sasast_file.name, sasast_model)} model = mr.post("/models", files=files, data=data) From f9198e1921921b19bf64c5f208a61e08c16da3c4 Mon Sep 17 00:00:00 2001 From: djm21 Date: Fri, 2 May 2025 11:00:47 -0700 Subject: [PATCH 3/3] black reformatting --- src/sasctl/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sasctl/tasks.py b/src/sasctl/tasks.py index 539a39e4..6bf5c67b 100644 --- a/src/sasctl/tasks.py +++ b/src/sasctl/tasks.py @@ -1059,7 +1059,7 @@ def upload_local_model( "name": model_name, "projectId": p.id, "type": "ASTORE", - "versionOption": version + "versionOption": version, } files = {"files": (sasast_file.name, sasast_model)} model = mr.post("/models", files=files, data=data)