azureml-core 1.57.0.post3__py3-none-any.whl → 1.58.0.post1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- ver = "1.57.0"
1
+ ver = "1.58.0"
@@ -135,6 +135,7 @@ def get_run_config_dir_path(project_path):
135
135
  # If that does not exist default to use the new .azureml
136
136
  project_path = os.path.normpath(project_path)
137
137
  run_config_dir_path = os.path.join(project_path, AML_CONFIG_DIR)
138
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
138
139
  if not os.path.exists(run_config_dir_path):
139
140
  run_config_dir_path = os.path.join(project_path, AZUREML_DIR)
140
141
  return run_config_dir_path
@@ -145,6 +146,7 @@ def get_run_config_dir_name(project_path):
145
146
  # If that does not exist default to use the new .azureml
146
147
  project_path = os.path.normpath(project_path)
147
148
  run_config_dir_path = os.path.join(project_path, AML_CONFIG_DIR)
149
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
148
150
  run_config_dir_name = AML_CONFIG_DIR
149
151
  if not os.path.exists(run_config_dir_path):
150
152
  run_config_dir_name = AZUREML_DIR
@@ -158,6 +160,7 @@ def get_config_file_name(project_config_path):
158
160
  :return: Either project.json or config.json
159
161
  :rtype: str
160
162
  """
163
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
161
164
  project_config_path = os.path.normpath(project_config_path)
162
165
  legacy_config_file_path = os.path.join(project_config_path, LEGACY_PROJECT_FILENAME)
163
166
  if os.path.exists(legacy_config_file_path):
@@ -101,6 +101,7 @@ def makedirs_for_file_path(file_path):
101
101
  file_path = os.path.normpath(file_path)
102
102
  parent_path = os.path.join(file_path, os.path.pardir)
103
103
  parent_path = os.path.normpath(parent_path)
104
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
104
105
  if not os.path.exists(parent_path):
105
106
  os.makedirs(parent_path, exist_ok=True)
106
107
  return True
@@ -366,6 +367,7 @@ def get_directory_size(path, size_limit=None, include_function=None, exclude_fun
366
367
  for dirpath, dirnames, filenames in os.walk(path):
367
368
  for name in filenames:
368
369
  full_path = os.path.normpath(os.path.join(dirpath, name))
370
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
369
371
 
370
372
  if ((not exclude_function and not include_function)
371
373
  or (exclude_function and not exclude_function(full_path))
@@ -151,6 +151,7 @@ def upload_dependency(workspace, dependency, create_tar=False, arcname=None, sho
151
151
  from azureml._restclient.artifacts_client import ArtifactsClient
152
152
  artifact_client = ArtifactsClient(workspace.service_context)
153
153
  dependency = os.path.normpath(dependency)
154
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
154
155
  if dependency.startswith('http') or dependency.startswith('wasb'):
155
156
  return dependency, urlparse(dependency).path.split('/')[-1]
156
157
  if not os.path.exists(dependency):
@@ -206,6 +207,7 @@ def wrap_execution_script(execution_script, schema_file, dependencies, log_aml_d
206
207
  """
207
208
  new_script_loc = tempfile.mkstemp(suffix='.py')[1]
208
209
  execution_script = os.path.normpath(execution_script)
210
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
209
211
  dependencies.append(execution_script)
210
212
  if not os.path.exists(execution_script):
211
213
  raise WebserviceException('Path to execution script {} does not exist.'.format(execution_script),
@@ -881,6 +883,7 @@ def cleanup_docker_image(docker_client, image_id):
881
883
 
882
884
  def validate_path_exists_or_throw(member, name, extra_message=''):
883
885
  member = os.path.normpath(member)
886
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
884
887
  if not os.path.exists(member):
885
888
  raise WebserviceException("{0} {1} doesn't exist. {2}".format(name, member, extra_message),
886
889
  logger=module_logger)
@@ -8,7 +8,7 @@ from __future__ import print_function
8
8
 
9
9
  import collections
10
10
  import os
11
- import uuid
11
+ import subprocess
12
12
 
13
13
  import requests
14
14
  import azureml._vendor.ruamel.yaml as ruamelyaml
@@ -141,9 +141,13 @@ def get_all_compute_target_objects(project_object):
141
141
  # Sets the password or key info in the compute skeleton.
142
142
  # If needed, looks up the workspace public key info from the
143
143
  # execution service.
144
+
145
+
144
146
  def _set_password_or_key_info(name, address, username, password, ssh_key_info, experiment, compute_skeleton):
145
- import paramiko
147
+
146
148
  from azureml.core.compute_target import _SSHBasedComputeTarget
149
+ import uuid
150
+
147
151
  if not ssh_key_info:
148
152
  # Credential management for password.
149
153
  key = name + '#' + username + '#' + uuid.uuid4().hex
@@ -159,22 +163,29 @@ def _set_password_or_key_info(name, address, username, password, ssh_key_info, e
159
163
  address_minus_port, port = address.split(":")
160
164
  port = int(port)
161
165
 
162
- private_key = None
163
166
  if ssh_key_info and ssh_key_info.private_key_file:
164
- # TODO: We only support RSA keys for now. Investigate DSA
165
- private_key = paramiko.RSAKey.from_private_key_file(ssh_key_info.private_key_file,
166
- password=ssh_key_info.passphrase)
167
+ private_key_file = ssh_key_info.private_key_file
168
+ passphrase = ssh_key_info.passphrase
169
+ else:
170
+ private_key_file = None
171
+ passphrase = None
167
172
 
168
173
  try:
169
- # These print statement will be printed even in azureml._cli.
170
- # TODO: Need to remove these prints for SDK.
171
- print("Installing AML Workbench public key on remote host.")
172
- _install_public_ssh_key(address_minus_port,
173
- port,
174
- username,
175
- response_json["publicKey"],
176
- private_key=private_key)
177
- except (paramiko.ssh_exception.AuthenticationException, paramiko.ssh_exception.SSHException) as exception:
174
+ # Installing the public key on the remote host using subprocess.
175
+ public_key = response_json["publicKey"]
176
+ remote_command = (
177
+ f"echo '{public_key}' | ssh -p {port} -i {private_key_file} "
178
+ f"{username}@{address_minus_port} 'cat >> ~/.ssh/authorized_keys'"
179
+ )
180
+
181
+ if passphrase:
182
+ ssh_add_cmd = f"ssh-add {private_key_file}"
183
+ subprocess.run(["ssh-agent", "bash", "-c", ssh_add_cmd], check=True, text=True)
184
+
185
+ subprocess.run(remote_command, shell=True, check=True, text=True)
186
+ print("AML Workbench public key installed on remote host.")
187
+
188
+ except subprocess.CalledProcessError as exception:
178
189
  print("Error installing public key: %s" % str(exception))
179
190
  print("Please install the public key below on your compute target manually, or correct the error "
180
191
  "and try again.")
@@ -239,18 +250,34 @@ def _write_compute_run_config(source_directory, compute_target_object, compute_y
239
250
  # Note that currently the command line option to use a password to install keys
240
251
  # is disabled, so the password case will never be reached.
241
252
  # If no authentication methods succeed, it will raie paramiko.ssh_exception.AuthenticationException
242
- def _execute_ssh_command(address, port, username, command_to_run, password=None, private_key=None):
243
- import paramiko
244
-
245
- ssh = paramiko.SSHClient()
246
253
 
247
- ssh.set_missing_host_key_policy(paramiko.RejectPolicy())
248
254
 
249
- ssh.connect(address, port, username, pkey=private_key, password=password)
250
-
251
- stdin, stdout, stderr = ssh.exec_command(command_to_run)
252
-
253
- return stdout.readlines(), stderr.readlines()
255
+ def _execute_ssh_command(address, port, username, command_to_run, password=None, private_key=None):
256
+ # Construct the SSH command
257
+ ssh_command = ["ssh", "-p", str(port), f"{username}@{address}", command_to_run]
258
+
259
+ # Add the private key if provided
260
+ if private_key and not os.path.isfile(private_key):
261
+ raise FileNotFoundError(f"Private key file not found: {private_key}")
262
+ if private_key:
263
+ ssh_command.insert(1, "-i")
264
+ ssh_command.insert(2, private_key)
265
+
266
+ try:
267
+ # Execute the SSH command using subprocess
268
+ result = subprocess.run(ssh_command, check=True, capture_output=True, text=True)
269
+
270
+ # Capture the standard output and standard error
271
+ stdout_lines = result.stdout.splitlines()
272
+ stderr_lines = result.stderr.splitlines()
273
+
274
+ return stdout_lines, stderr_lines
275
+
276
+ except subprocess.CalledProcessError as e:
277
+ # Handle errors in the subprocess execution
278
+ print(f"Error executing SSH command: {e}")
279
+ stderr_lines = e.stderr.splitlines() if e.stderr else []
280
+ return [], stderr_lines
254
281
 
255
282
 
256
283
  # This function contacts the execution service and gets the public key and the credential
@@ -1,9 +1,9 @@
1
1
  {
2
- "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.1-cudnn8-ubuntu20.04": "20240908.v1",
3
- "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.2-cudnn8-ubuntu20.04": "20240908.v1",
4
- "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.3-cudnn8-ubuntu20.04": "20240908.v1",
5
- "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.6-cudnn8-ubuntu20.04": "20240908.v1",
6
- "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.8-cudnn8-ubuntu22.04": "20240908.v1",
7
- "mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04": "20240908.v1",
8
- "mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04": "20240908.v1"
2
+ "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.1-cudnn8-ubuntu20.04": "20241111.v1",
3
+ "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.2-cudnn8-ubuntu20.04": "20241111.v1",
4
+ "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.3-cudnn8-ubuntu20.04": "20241111.v1",
5
+ "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.6-cudnn8-ubuntu20.04": "20241111.v1",
6
+ "mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.8-cudnn8-ubuntu22.04": "20241111.v1",
7
+ "mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04": "20241111.v1",
8
+ "mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04": "20241111.v1"
9
9
  }
@@ -19,6 +19,7 @@ def create_directory(path, set_hidden=False):
19
19
  :rtype None
20
20
  """
21
21
  path = os.path.normpath(path)
22
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
22
23
  if os.path.exists(path):
23
24
  return
24
25
  os.makedirs(path)
@@ -53,6 +53,7 @@ class IgnoreFile(object):
53
53
  :rtype: None
54
54
  """
55
55
  self._path = os.path.normpath(self._path)
56
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
56
57
  return self._path and os.path.exists(self._path)
57
58
 
58
59
  def create_if_not_exists(self, patterns_to_exclude=default_patterns):
@@ -63,6 +64,7 @@ class IgnoreFile(object):
63
64
  """
64
65
  if not self.exists():
65
66
  self._path = os.path.normpath(self._path)
67
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
66
68
  with open(self._path, 'w') as fo:
67
69
  fo.write('\n'.join(patterns_to_exclude) + '\n')
68
70
 
@@ -34,6 +34,7 @@ def add(project_id, scope, project_path, is_config_file_path=False):
34
34
  project_file_path = os.path.join(config_directory, config_file_name)
35
35
  # We overwriting if project.json exists.
36
36
  project_file_path = os.path.normpath(project_file_path)
37
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
37
38
  with open(project_file_path, "w") as fo:
38
39
  info = ProjectInfo(project_id, scope)
39
40
  fo.write(json.dumps(info.__dict__))
@@ -78,8 +79,10 @@ def get(project_path, no_recursive_check=False):
78
79
  for files_to_look in [LEGACY_PROJECT_FILENAME, CONFIG_FILENAME]:
79
80
  config_file_path = os.path.join(project_path, config_path, files_to_look)
80
81
  config_file_path = os.path.normpath(config_file_path)
82
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
81
83
  if os.path.exists(config_file_path):
82
84
  config_file_path = os.path.normpath(config_file_path)
85
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
83
86
  with open(config_file_path) as info_json:
84
87
  config_json = json.load(info_json)
85
88
  # If Scope is not there, then this is an old workspace config.json config file
@@ -83,6 +83,7 @@ def _update_requirements_binding(repo_path, config_dir_to_use):
83
83
 
84
84
  lines = []
85
85
  conda_dependencies_path = os.path.normpath(conda_dependencies_path)
86
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
86
87
  with open(conda_dependencies_path, "r") as infile:
87
88
  for line in infile:
88
89
  if requirements_version:
@@ -92,6 +93,7 @@ def _update_requirements_binding(repo_path, config_dir_to_use):
92
93
 
93
94
  lines.append(line)
94
95
  conda_dependencies_path = os.path.normpath(conda_dependencies_path)
96
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
95
97
  with open(conda_dependencies_path, 'w') as outfile:
96
98
  for line in lines:
97
99
  outfile.write(line)
@@ -108,9 +110,11 @@ def attach_project(project_id, project_path, scope, compute_target_dict):
108
110
  """
109
111
  from azureml._base_sdk_common.common import get_run_config_dir_name
110
112
  project_path = os.path.normpath(project_path)
113
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
111
114
  is_existing_dir = os.path.isdir(project_path)
112
115
  if not is_existing_dir:
113
116
  project_path = os.path.normpath(project_path)
117
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
114
118
  # We creating all intermediate dirs too.
115
119
  os.makedirs(os.path.abspath(project_path))
116
120
 
@@ -162,19 +166,24 @@ def _copy_default_files(path, default_fileset):
162
166
  default_files_path = os.path.join(this_dir, default_fileset)
163
167
 
164
168
  path = os.path.normpath(path)
169
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
165
170
  if not os.path.exists(path):
166
171
  path = os.path.normpath(path)
172
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
167
173
  os.mkdir(path)
168
174
  for filename in os.listdir(default_files_path):
169
175
  orig_path = os.path.join(default_files_path, filename)
170
176
  new_path = os.path.join(path, filename)
171
177
  if os.path.isdir(orig_path):
172
178
  new_path = os.path.normpath(new_path)
179
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
173
180
  shutil.copytree(orig_path, new_path)
174
181
  else:
175
182
  new_path = os.path.normpath(new_path)
183
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
176
184
  if not os.path.exists(new_path):
177
185
  new_path = os.path.normpath(new_path)
186
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
178
187
  shutil.copy(orig_path, new_path)
179
188
 
180
189
 
@@ -103,6 +103,7 @@ class ArtifactsClient(WorkspaceClient):
103
103
  """upload a local file to a new artifact"""
104
104
  path = os.path.abspath(path)
105
105
  path = os.path.normpath(path)
106
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
106
107
  with open(path, "rb") as stream:
107
108
  return self.upload_artifact_from_stream(stream, *args, **kwargs)
108
109
 
@@ -43,20 +43,8 @@ class JasmineClient(ExperimentClient):
43
43
  except Exception:
44
44
  azureml_train_automl_runtime = None
45
45
 
46
- # Indicate that registry environments are supported.
47
- # This is a change just in the release/pypi/1.57.0 branch and should not be merged back to master.
48
- # Before azureml-core 1.57.0.post2, it did not recognize the DockerBuildContext,
49
- # which is return by registry environments.
50
- # Setting the version to "1.57.0.3" allows the Jasmine service to distinguish between
51
- # the original 1.57.0 (which doesn't support registry environments) and 1.57.0.post3
52
- # (which does support registry environments).
53
- # Note that the version cannot be "1.57.0.post3" because Jasmine needs the version to be numeric.
54
- azureml_train_automl_version = azureml_train_automl
55
- if azureml_train_automl_version == "1.57.0":
56
- azureml_train_automl_version = "1.57.0.3"
57
-
58
46
  self.automl_user_agent = "azureml.train.automl/{} azureml.train.automl.runtime/{}"\
59
- .format(azureml_train_automl_version, azureml_train_automl_runtime)
47
+ .format(azureml_train_automl, azureml_train_automl_runtime)
60
48
 
61
49
  super(JasmineClient, self).__init__(
62
50
  service_context, experiment_name, experiment_id, **kwargs)
@@ -6,6 +6,8 @@
6
6
  import os
7
7
  import os.path
8
8
  import logging
9
+ import subprocess
10
+
9
11
 
10
12
  from azureml.exceptions import AzureMLException
11
13
 
@@ -35,9 +37,6 @@ def is_valid_ssh_rsa_public_key(openssh_pubkey):
35
37
 
36
38
 
37
39
  def generate_ssh_keys(private_key_filepath, public_key_filepath):
38
- import paramiko
39
- from paramiko.ssh_exception import PasswordRequiredException, SSHException
40
-
41
40
  if os.path.isfile(public_key_filepath):
42
41
  try:
43
42
  with open(public_key_filepath, 'r') as public_key_file:
@@ -46,10 +45,9 @@ def generate_ssh_keys(private_key_filepath, public_key_filepath):
46
45
  logger.warning("Public SSH key file '%s' already exists in the directory: '%s'. "
47
46
  "New SSH key files will not be generated.",
48
47
  public_key_filepath, pub_ssh_dir)
49
-
50
48
  return public_key
51
49
  except IOError as e:
52
- raise AzureMLException(str(e))
50
+ raise Exception(str(e))
53
51
 
54
52
  ssh_dir = os.path.dirname(private_key_filepath)
55
53
  if not os.path.exists(ssh_dir):
@@ -57,24 +55,23 @@ def generate_ssh_keys(private_key_filepath, public_key_filepath):
57
55
  os.chmod(ssh_dir, 0o700)
58
56
 
59
57
  if os.path.isfile(private_key_filepath):
60
- # try to use existing private key if it exists.
61
- try:
62
- key = paramiko.RSAKey(filename=private_key_filepath)
63
- logger.warning("Private SSH key file '%s' was found in the directory: '%s'. "
64
- "A paired public key file '%s' will be generated.",
65
- private_key_filepath, ssh_dir, public_key_filepath)
66
- except (PasswordRequiredException, SSHException, IOError) as e:
67
- raise AzureMLException(str(e))
68
-
58
+ logger.warning("Private SSH key file '%s' was found in the directory: '%s'. "
59
+ "A paired public key file '%s' will be generated.",
60
+ private_key_filepath, ssh_dir, public_key_filepath)
69
61
  else:
70
- # otherwise generate new private key.
71
- key = paramiko.RSAKey.generate(2048)
72
- key.write_private_key_file(private_key_filepath)
73
- os.chmod(private_key_filepath, 0o600)
74
-
75
- with open(public_key_filepath, 'w') as public_key_file:
76
- public_key = '{} {}'.format(key.get_name(), key.get_base64())
77
- public_key_file.write(public_key)
62
+ # Generate new private key using ssh-keygen
63
+ try:
64
+ subprocess.run(
65
+ ['ssh-keygen', '-t', 'rsa', '-b', '2048', '-f', private_key_filepath, '-N', ''],
66
+ check=True,
67
+ stderr=subprocess.PIPE
68
+ )
69
+ os.chmod(private_key_filepath, 0o600)
70
+ except subprocess.CalledProcessError as e:
71
+ raise Exception(f"Failed to generate SSH keys: {e.stderr.decode()}")
72
+
73
+ with open(public_key_filepath, 'r') as public_key_file:
74
+ public_key = public_key_file.read()
78
75
  os.chmod(public_key_filepath, 0o644)
79
76
 
80
77
  return public_key
@@ -53,7 +53,8 @@ def get_application_insights_region(workspace_region):
53
53
  "polandcentral": "northeurope",
54
54
  "italynorth": "westeurope",
55
55
  "chinaeast3": "chinaeast2",
56
- "spaincentral": "francecentral"
56
+ "spaincentral": "francecentral",
57
+ "israelcentral": "westeurope"
57
58
  }.get(workspace_region, workspace_region)
58
59
 
59
60
 
azureml/core/_metrics.py CHANGED
@@ -208,8 +208,12 @@ class Metric(ChainedIdentity):
208
208
  except AttributeError:
209
209
  module_logger.debug("numpy.bool_ is unsupported")
210
210
 
211
- # Add str type support
212
- _type_to_converter[np.unicode_] = str
211
+ try:
212
+ # Add str type support
213
+ _type_to_converter[np.unicode_] = str
214
+ except AttributeError:
215
+ module_logger.debug("numpy.unicode_ is unsupported")
216
+ _type_to_converter[np.str_] = str
213
217
 
214
218
  # Add int type support
215
219
  numpy_ints = [np.int0, np.int8, np.int16, np.int16, np.int32]
@@ -18,6 +18,7 @@ from abc import ABCMeta
18
18
  from azureml.exceptions import ComputeTargetException
19
19
  from azureml.exceptions import UserErrorException
20
20
  import logging
21
+ import subprocess
21
22
 
22
23
 
23
24
  class AbstractComputeTarget(object):
@@ -384,7 +385,18 @@ def is_compute_target_prepared(experiment, source_directory, run_config):
384
385
  return _commands.prepare_compute_target(project_object, run_config_object, check=True)
385
386
 
386
387
 
387
- # TODO: Free floating until MLC ready
388
+ # Updated function to check SSH command using subprocess
389
+ def _check_ssh_command():
390
+ try:
391
+ # Test if SSH is available by running a simple SSH command
392
+ subprocess.run(["ssh", "-V"], check=True, capture_output=True, text=True)
393
+ except subprocess.CalledProcessError as e:
394
+ raise UserErrorException("SSH command failed. Ensure SSH is correctly installed and accessible.") from e
395
+ except FileNotFoundError:
396
+ raise UserErrorException("SSH command not found. Please install SSH to use legacy compute target methods.")
397
+
398
+
399
+ # Updated function to attach legacy compute target
388
400
  def attach_legacy_compute_target(experiment, source_directory, compute_target):
389
401
  """Attaches a compute target to this project.
390
402
 
@@ -398,7 +410,7 @@ def attach_legacy_compute_target(experiment, source_directory, compute_target):
398
410
  """
399
411
  logging.warning("attach_legacy_compute_target method is going to be deprecated. "
400
412
  "This will be removed in the next SDK release.")
401
- _check_paramiko()
413
+ _check_ssh_command()
402
414
  from azureml._project import _compute_target_commands
403
415
  if isinstance(compute_target, _SSHBasedComputeTarget):
404
416
  _compute_target_commands.attach_ssh_based_compute_targets(experiment, source_directory, compute_target)
@@ -408,7 +420,7 @@ def attach_legacy_compute_target(experiment, source_directory, compute_target):
408
420
  raise ComputeTargetException("Unsupported compute target type. Type={}".format(type(compute_target)))
409
421
 
410
422
 
411
- # TODO: Free floating until MLC ready
423
+ # Updated function to remove legacy compute target
412
424
  def remove_legacy_compute_target(experiment, source_directory, compute_target_name):
413
425
  """Remove a compute target from the project.
414
426
 
@@ -423,14 +435,6 @@ def remove_legacy_compute_target(experiment, source_directory, compute_target_na
423
435
  """
424
436
  logging.warning("remove_legacy_compute_target method is going to be deprecated. "
425
437
  "This will be removed in the next SDK release.")
426
- _check_paramiko()
438
+ _check_ssh_command
427
439
  from azureml._project import _compute_target_commands
428
440
  _compute_target_commands.detach_compute_target(experiment, source_directory, compute_target_name)
429
-
430
-
431
- def _check_paramiko():
432
- try:
433
- import paramiko
434
- return paramiko.AuthenticationException
435
- except ImportError:
436
- raise UserErrorException("Please install paramiko to use deprecated legacy compute target methods.")
@@ -127,6 +127,7 @@ class CondaDependencies(object):
127
127
  """Initialize a new object to manage dependencies."""
128
128
  if conda_dependencies_file_path is not None:
129
129
  conda_dependencies_file_path = os.path.normpath(conda_dependencies_file_path)
130
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
130
131
  with open(conda_dependencies_file_path, "r") as input:
131
132
  self._conda_dependencies = ruamelyaml.round_trip_load(input)
132
133
  elif _underlying_structure is not None:
azureml/core/model.py CHANGED
@@ -595,6 +595,7 @@ class Model(object):
595
595
  model_base_name = os.path.basename(os.path.abspath(model_path))
596
596
 
597
597
  file_names, artifact_names = Model._collect_model_artifact_paths(model_path, child_paths)
598
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
598
599
  file_sizes = [os.path.getsize(name) for name in file_names]
599
600
 
600
601
  # The timeout for upload_files() is per-batch of parallel uploads, so adjust it for the biggest file.
@@ -633,12 +634,15 @@ class Model(object):
633
634
  :raises: azureml.exceptions.WebserviceException
634
635
  """
635
636
  model_path = os.path.normpath(model_path)
637
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
636
638
  if not os.path.exists(model_path):
637
639
  raise WebserviceException('Error, provided model path "{}" cannot be found'.format(model_path),
638
640
  logger=module_logger)
639
641
 
640
642
  if child_paths:
641
643
  for path in child_paths:
644
+ model_path = os.path.normpath(model_path)
645
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
642
646
  if not os.path.exists(os.path.join(model_path, path)):
643
647
  raise WebserviceException('Error, provided child path "{}" cannot be found'.format(path),
644
648
  logger=module_logger)
@@ -660,7 +664,7 @@ class Model(object):
660
664
 
661
665
  for child_path in child_paths:
662
666
  child_full_path = os.path.abspath(os.path.join(model_path, child_path))
663
-
667
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
664
668
  if os.path.isdir(child_full_path):
665
669
  file_names.update(os.path.abspath(os.path.join(dir_path, file_name))
666
670
  for dir_path, _, file_names in os.walk(child_full_path)
@@ -942,6 +946,7 @@ class Model(object):
942
946
  target_dir = os.path.normpath(target_dir)
943
947
  for sas, path in sas_to_relative_download_path.items():
944
948
  target_path = os.path.join(target_dir, path)
949
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
945
950
  if not exist_ok and os.path.exists(target_path):
946
951
  raise WebserviceException("File already exists. To overwrite, set exist_ok to True. "
947
952
  "{}".format(target_path), logger=module_logger)
@@ -967,6 +972,7 @@ class Model(object):
967
972
  if not exist_ok:
968
973
  for tar_file_path in tar.getnames():
969
974
  candidate_path = os.path.join(target_dir, tar_file_path)
975
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
970
976
  if os.path.exists(candidate_path):
971
977
  raise WebserviceException("File already exists. To overwrite, set exist_ok to True. "
972
978
  "{}".format(candidate_path), logger=module_logger)
azureml/core/runconfig.py CHANGED
@@ -1446,6 +1446,7 @@ class RunConfiguration(_AbstractRunConfigElement):
1446
1446
  # True if the specified path is a project directory. False if the path specified is a file.
1447
1447
  project_dir_case = True
1448
1448
  if os.path.exists(path) and os.path.isdir(path):
1449
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1449
1450
  # This should be the project directory
1450
1451
  if name is None and self._name is None:
1451
1452
  raise UserErrorException("Cannot save a runconfig without a name specified")
@@ -1455,7 +1456,9 @@ class RunConfiguration(_AbstractRunConfigElement):
1455
1456
  raise UserErrorException("Name is required to save the runconfig")
1456
1457
  else:
1457
1458
  # A user might have specified the file location to save.
1458
- parent_dir = os.path.dirname(path)
1459
+ parent_dir = os.path.dirname(path)
1460
+ parent_dir = os.path.normpath(parent_dir)
1461
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1459
1462
  if os.path.exists(parent_dir) and os.path.isdir(parent_dir):
1460
1463
  project_dir_case = False
1461
1464
  else:
@@ -1515,6 +1518,7 @@ class RunConfiguration(_AbstractRunConfigElement):
1515
1518
 
1516
1519
  project_dir_case = True
1517
1520
  path = os.path.normpath(path)
1521
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1518
1522
  if os.path.isfile(path):
1519
1523
  full_runconfig_path = path
1520
1524
  project_dir_case = False
@@ -1527,7 +1531,8 @@ class RunConfiguration(_AbstractRunConfigElement):
1527
1531
  else:
1528
1532
  run_config_dir_name = get_run_config_dir_name(path) + "/"
1529
1533
  full_runconfig_path = os.path.join(path, run_config_dir_name + name)
1530
-
1534
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1535
+ full_runconfig_path = os.path.normpath(full_runconfig_path)
1531
1536
  if os.path.isfile(full_runconfig_path):
1532
1537
  full_runconfig_path = os.path.normpath(full_runconfig_path)
1533
1538
  return RunConfiguration._load_from_path(full_runconfig_path=full_runconfig_path,
@@ -1537,10 +1542,13 @@ class RunConfiguration(_AbstractRunConfigElement):
1537
1542
 
1538
1543
  # Appending .runconfig suffix for backcompat case.
1539
1544
  full_runconfig_path = full_runconfig_path + RUNCONFIGURATION_EXTENSION
1545
+ full_runconfig_path = os.path.normpath(full_runconfig_path)
1546
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1540
1547
  if not os.path.isfile(full_runconfig_path) and name:
1541
1548
  # check for file not in .azureml or aml_config directory
1542
1549
  full_runconfig_path = os.path.join(path, name + RUNCONFIGURATION_EXTENSION)
1543
1550
 
1551
+ full_runconfig_path = os.path.normpath(full_runconfig_path)
1544
1552
  if os.path.isfile(full_runconfig_path):
1545
1553
  # Setting name=name_with_ext, so that any subsequent save happens
1546
1554
  # on the name.runconfig file instead of name
@@ -1566,6 +1574,8 @@ class RunConfiguration(_AbstractRunConfigElement):
1566
1574
  :return: The run configuration object.
1567
1575
  :rtype: RunConfiguration
1568
1576
  """
1577
+ full_runconfig_path = os.path.normpath(full_runconfig_path)
1578
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1569
1579
  with open(full_runconfig_path, "r") as run_config:
1570
1580
  # Loads with all the comments intact.
1571
1581
  commented_map_dict = ruamelyaml.round_trip_load(run_config)
@@ -1590,12 +1600,19 @@ class RunConfiguration(_AbstractRunConfigElement):
1590
1600
  file_found = False
1591
1601
  legacy_full_file_path = os.path.join(path, AML_CONFIG_DIR, name + RUNCONFIGURATION_EXTENSION)
1592
1602
  legacy_full_file_path = os.path.normpath(legacy_full_file_path)
1603
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1593
1604
  full_file_path = os.path.join(path, AZUREML_DIR, name + RUNCONFIGURATION_EXTENSION)
1605
+ legacy_full_file_path = os.path.normpath(legacy_full_file_path)
1594
1606
  if os.path.isfile(legacy_full_file_path):
1595
1607
  file_found = True
1608
+ legacy_full_file_path = os.path.normpath(legacy_full_file_path)
1596
1609
  os.remove(legacy_full_file_path)
1610
+ full_file_path = os.path.normpath(full_file_path)
1611
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1597
1612
  if os.path.isfile(full_file_path):
1598
1613
  file_found = True
1614
+ full_file_path = os.path.normpath(full_file_path)
1615
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1599
1616
  os.remove(full_file_path)
1600
1617
 
1601
1618
  if file_found == False:
@@ -1700,12 +1717,13 @@ class RunConfiguration(_AbstractRunConfigElement):
1700
1717
  compute_target_path = os.path.join(
1701
1718
  run_config_dir_path,
1702
1719
  run_config_object.target + COMPUTECONTEXT_EXTENSION)
1703
-
1704
1720
  compute_target_path = os.path.normpath(compute_target_path)
1721
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1705
1722
  if not os.path.isfile(compute_target_path):
1706
1723
  raise UserErrorException("Compute target = {} doesn't exist at {}".format(
1707
1724
  run_config_object.target, compute_target_path))
1708
-
1725
+ compute_target_path = os.path.normpath(compute_target_path)
1726
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1709
1727
  with open(compute_target_path, "r") as compute_target_file:
1710
1728
  compute_target_dict = ruamelyaml.round_trip_load(compute_target_file)
1711
1729
  if "baseDockerImage" in compute_target_dict:
@@ -1768,11 +1786,14 @@ class RunConfiguration(_AbstractRunConfigElement):
1768
1786
  spark_dependencies_path = os.path.join(
1769
1787
  path, spark_dependencies_file)
1770
1788
  spark_dependencies_path = os.path.normpath(spark_dependencies_path)
1789
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1771
1790
 
1772
1791
  if not os.path.isfile(spark_dependencies_path):
1773
1792
  raise UserErrorException("Spark dependencies file = {} doesn't exist at {}".format(
1774
1793
  spark_dependencies_file, spark_dependencies_path))
1775
-
1794
+
1795
+ spark_dependencies_path = os.path.normpath(spark_dependencies_path)
1796
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1776
1797
  with open(spark_dependencies_path, "r") as spark_file:
1777
1798
  if use_commented_map:
1778
1799
  spark_file_dict = ruamelyaml.round_trip_load(spark_file)
@@ -1813,11 +1834,13 @@ class RunConfiguration(_AbstractRunConfigElement):
1813
1834
  if project_dir_case:
1814
1835
  run_config_dir_name = get_run_config_dir_name(path) + "/"
1815
1836
  full_runconfig_path = os.path.join(path, run_config_dir_name + name)
1837
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1816
1838
  full_env_path = os.path.join(path, run_config_dir_name + "environment.yml")
1817
1839
  else:
1818
1840
  run_config_dir_name = ""
1819
1841
  full_runconfig_path = path
1820
1842
  full_env_path = os.path.join(os.path.dirname(path), "environment.yml")
1843
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
1821
1844
 
1822
1845
  if separate_environment_yaml:
1823
1846
  environment_commented_map = commented_map_dict.get("environment")
@@ -1829,12 +1852,14 @@ class RunConfiguration(_AbstractRunConfigElement):
1829
1852
  _yaml_set_comment_before_after_key_with_error(
1830
1853
  commented_map_dict, "environment", "The file path that contains the environment configuration.")
1831
1854
 
1855
+ full_runconfig_path = os.path.normpath(full_runconfig_path)
1832
1856
  with open(full_runconfig_path, 'w') as outfile:
1833
1857
  ruamelyaml.round_trip_dump(commented_map_dict, outfile)
1834
1858
  full_env_path = os.path.normpath(full_env_path)
1835
1859
  with open(full_env_path, 'w') as outfile:
1836
1860
  ruamelyaml.round_trip_dump(environment_commented_map, outfile)
1837
1861
  else:
1862
+ full_runconfig_path = os.path.normpath(full_runconfig_path)
1838
1863
  with open(full_runconfig_path, 'w') as outfile:
1839
1864
  ruamelyaml.round_trip_dump(commented_map_dict, outfile)
1840
1865
 
@@ -2015,6 +2040,7 @@ class RunConfiguration(_AbstractRunConfigElement):
2015
2040
  environment_path = os.path.join(dir_to_load,
2016
2041
  commented_map_or_dict["environment"])
2017
2042
  environment_path = os.path.normpath(environment_path)
2043
+ # CodeQL [SM01305] untrusted data is validated before being used in the path
2018
2044
  with open(environment_path, "r") as environment_config:
2019
2045
  # Replacing string path with the actual environment serialized dictionary.
2020
2046
  commented_map_or_dict["environment"] = ruamelyaml.round_trip_load(environment_config)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azureml-core
3
- Version: 1.57.0.post3
3
+ Version: 1.58.0.post1
4
4
  Summary: Azure Machine Learning core packages, modules, and classes
5
5
  Home-page: https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py
6
6
  Author: Microsoft Corp
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.8
14
14
  Classifier: Programming Language :: Python :: 3.9
15
15
  Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
16
17
  Requires-Python: >=3.8,< 4.0
17
18
  Description-Content-Type: text/x-rst
18
19
  License-File: LICENSE.txt
@@ -22,7 +23,7 @@ Requires-Dist: pathspec<1.0.0
22
23
  Requires-Dist: requests[socks]<3.0.0,>=2.19.1
23
24
  Requires-Dist: msal<2.0.0,>=1.15.0
24
25
  Requires-Dist: msal-extensions<=2.0.0,>=0.3.0
25
- Requires-Dist: knack<0.12.0
26
+ Requires-Dist: knack<0.13.0
26
27
  Requires-Dist: azure-core<2.0.0
27
28
  Requires-Dist: pkginfo
28
29
  Requires-Dist: argcomplete<4
@@ -33,7 +34,7 @@ Requires-Dist: azure-mgmt-containerregistry<11,>=8.2.0
33
34
  Requires-Dist: azure-mgmt-storage<=22.0.0,>=16.0.0
34
35
  Requires-Dist: azure-mgmt-keyvault<11.0.0,>=0.40.0
35
36
  Requires-Dist: azure-mgmt-authorization<5,>=0.40.0
36
- Requires-Dist: azure-mgmt-network<=26.0.0
37
+ Requires-Dist: azure-mgmt-network<=28.0.0
37
38
  Requires-Dist: azure-graphrbac<1.0.0,>=0.40.0
38
39
  Requires-Dist: azure-common<2.0.0,>=1.1.12
39
40
  Requires-Dist: msrest<=0.7.1,>=0.5.1
@@ -8,10 +8,10 @@ azureml/_async/worker_pool.py,sha256=L0wPG7JskcjmgCfcIruIyk71pRkL0HbcTritBdcC2rk
8
8
  azureml/_base_sdk_common/__init__.py,sha256=E04eAB1KyV8xIhdRtGDe2IaYMteRQ194h7Pem5ic8Kg,356
9
9
  azureml/_base_sdk_common/_arcadia_token_wrapper.py,sha256=4dMGzRM6pdQiz7BI6PvcW2_pjs3t7lsZck39AiOvmbw,2112
10
10
  azureml/_base_sdk_common/_docstring_wrapper.py,sha256=haPzBtUqTgx4gipecCMggR_pHBaMiUmlkZj-fUHo1do,3390
11
- azureml/_base_sdk_common/_version.py,sha256=pKRE-b8ZodY91QrUmiROejrMae5bLeP3jTZtGWQsdpE,16
11
+ azureml/_base_sdk_common/_version.py,sha256=TsyI948HG7RhL7LFqpWB8Z-YVuM4vAO7YCx4NnkbyDY,16
12
12
  azureml/_base_sdk_common/abstract_run_config_element.py,sha256=TTTVNWr17ss1AuWkKPFXgVzcGQt11QlEJ2weIsIZ5qc,1190
13
13
  azureml/_base_sdk_common/auth_utils.py,sha256=c7jiAw_u70xU7HymEgtiGvqch8OqfoGzLW6Mdjuo9Lo,2512
14
- azureml/_base_sdk_common/common.py,sha256=b26CXL0LDUV5JGPYGDMtRk1xrPCc3G8cQJyR3jbKLW8,27590
14
+ azureml/_base_sdk_common/common.py,sha256=oBQrzsb56zjFhLD1OMIfNXNLeVb_wdinDtOebwk9qLI,27836
15
15
  azureml/_base_sdk_common/credentials.py,sha256=UMwCuuliSsCCQUItlOu4P0Mtd8Pk0KLXUOd-bhwboaQ,1570
16
16
  azureml/_base_sdk_common/data_transformers.py,sha256=ibvHPPwWDr1sRQ4zj4rg3F-dvvuzKTLx9z8I1u_-JvU,1550
17
17
  azureml/_base_sdk_common/execution_service_address.py,sha256=jNeqyFLSfrQ_5UDaZSvZmdHTN2qYglaH9LR6mNUTl8o,1517
@@ -205,7 +205,7 @@ azureml/_compute/data/synapse_compute_template.json,sha256=IBWiGWT7Mmp-Z_Pw-zYx4
205
205
  azureml/_execution/__init__.py,sha256=2XIGQap-7lSF-4gfhUFtGzpx9FB7-iUVpW_2omvxiII,269
206
206
  azureml/_execution/_commands.py,sha256=ejWcDHBwSqDBa1zcW33F2PdpnfLJs4p-6qnyC9ikgrE,36803
207
207
  azureml/_file_utils/__init__.py,sha256=eyb8nF-WJiQdBlbj7M8WIFxvSPl2Y4qny2f4OQDGcwk,625
208
- azureml/_file_utils/file_utils.py,sha256=FYDomlqLO7Z5iIGREm0xp2G14FGSPO6HhlAC5HoNkuM,20535
208
+ azureml/_file_utils/file_utils.py,sha256=s5fthmFjjCb5DBts50Vaom30Bz5BQQl9U_ExEbXnkdo,20707
209
209
  azureml/_file_utils/upload.py,sha256=W-IcpakJ1-TWtpnaeGpXXhijixmT9coHr4aaKFgTfnk,3626
210
210
  azureml/_history/__init__.py,sha256=2XIGQap-7lSF-4gfhUFtGzpx9FB7-iUVpW_2omvxiII,269
211
211
  azureml/_history/utils/__init__.py,sha256=JlCCObuOLZyNhIZlsoL51KtFxiY4xKIIzIRDBcdeu6Y,183
@@ -232,7 +232,7 @@ azureml/_model_converters/_utils.py,sha256=hSyO7DX0yvA51M9RGD4FeFSYMvXDWpFr_8vKf
232
232
  azureml/_model_converters/model_convert_operation.py,sha256=be45MnV-Jt-f4ebM55b6rCb-DIB0SKvs5kruXwS7SUM,8127
233
233
  azureml/_model_management/__init__.py,sha256=2XIGQap-7lSF-4gfhUFtGzpx9FB7-iUVpW_2omvxiII,269
234
234
  azureml/_model_management/_constants.py,sha256=KfgB8azTm16_DA1ADfTwNXTTXT1m9G5Xnepxy5uSNws,3687
235
- azureml/_model_management/_util.py,sha256=AcuK6cyu70C8eQ4FwqiirnuX22r9YNcNt5cSHy4Geak,64224
235
+ azureml/_model_management/_util.py,sha256=yl5_COrggUp0bNDPtuCKnWel-4OjMZ6W7iAHzfdqeY0,64470
236
236
  azureml/_model_management/data/aci_service_payload_template.json,sha256=w_FE0vBE6NHC8FmP72k6YhBIPAKwcZda1CArElpPCmk,465
237
237
  azureml/_model_management/data/aci_specific_service_create_payload_template.json,sha256=QbJ18ayQSLM642iWfjBef9Ra9qr4nOPchvnDptXya9o,371
238
238
  azureml/_model_management/data/aks_service_payload_template.json,sha256=HJq9KXkVG1vG7l740CwlGHKBHI--dfUydAh4QEdWTcs,1091
@@ -246,30 +246,30 @@ azureml/_model_management/data/mms_profile_payload_template.json,sha256=4Mt0SSY_
246
246
  azureml/_model_management/data/mms_workspace_image_payload_template.json,sha256=u6Wz3wPx9kJq8Xv-b-kj9fxof7n7zwF-7RAv8nTvQlQ,296
247
247
  azureml/_project/__init__.py,sha256=fXk56x7HrgsyVMGN5yuE08JN9x0JszBhsBNBX5NOneY,412
248
248
  azureml/_project/_commands.py,sha256=gUNeO7UoxFDplcm5dT68t2pAL_rTKRY8_0oZIS0O_ec,39864
249
- azureml/_project/_compute_target_commands.py,sha256=nsL0-XPsxLaANF_ZZ73pFDqgTxEe7l2c2c7B7qouPfk,12504
250
- azureml/_project/azureml_base_images.json,sha256=g5Ue7rNC_nFYeHmb-KmnHj0kJz1SwcDUicKY4ltv8mo,601
249
+ azureml/_project/_compute_target_commands.py,sha256=9tEnGkChnFAWvj1xAQHgFd39QOS_Vf2aZYT8DvOYh_w,13262
250
+ azureml/_project/azureml_base_images.json,sha256=6C4_nzc-f_SaJER9vgwE-gmwYTeb9WuDrDX2IAzst9c,601
251
251
  azureml/_project/azureml_sdk_scope.txt,sha256=5YqX2w4p-GU-a9jvGMr40N5SMLE6ewyJ_plbUmdjxxE,36
252
- azureml/_project/file_utilities.py,sha256=nrWTVp1QB_6jhZQ2fJOXDx49UXafRRmd5VzAs9ceBNo,2597
253
- azureml/_project/ignore_file.py,sha256=LV_-DZ0qGV95a6UhMZcSeqV_bl0DwKnaHh7iO6Dwu_M,3219
252
+ azureml/_project/file_utilities.py,sha256=CYpLPh6VFsGirVUBXwKmm6pM_7TbGihKK-WfSlx1D3E,2679
253
+ azureml/_project/ignore_file.py,sha256=H19Yn2yngfAaK9Lfbz-uuHc-V-vqUhhKUv24IW_s2e8,3395
254
254
  azureml/_project/index_location.txt,sha256=y0QQZ0ezioStHt6IkKGm3Z5FCjS7oBAtBH4QkxQOHsQ,32
255
255
  azureml/_project/mappings.py,sha256=-z_Qfo0EvjqyTpvhR7pv3c8XsPzKmLNQYuQbCz8L_-s,3054
256
256
  azureml/_project/project.py,sha256=yXYRHAmVwVa8LO8grXqBVojAuHsP1YWJeic7VLEA6CY,7248
257
257
  azureml/_project/project_engine.py,sha256=XDIM1HofOtvKvhYeKvx45bhxLMujbqdITVAKzuVy620,2662
258
- azureml/_project/project_info.py,sha256=yAvhIj7k6xwb50Tj0EupvxhU1pzEMoHhWa74BaABMTg,5806
259
- azureml/_project/project_manager.py,sha256=YTmBI0CsAbB_UXAof3Tb7CVjBtaMZ-SlifvsUULNpjg,8570
258
+ azureml/_project/project_info.py,sha256=abYEbuRdS4PKwjDVokdDRKuhlMFFLHcwUZ8Jx2wcchQ,6080
259
+ azureml/_project/project_manager.py,sha256=QC6OKCe4hdu04kZGAQdaJUufP9VQvR8YparOIKTsOSM,9344
260
260
  azureml/_project/project_mapper.py,sha256=XdRK6Vd3XtwmaUTh0wrruk8ZsxG1h9ANX6X7CSY7sSI,1728
261
261
  azureml/_project/ssh_key_info.py,sha256=277YlmQ9abiHf4T8QCFazr1dSU-zOpAiFYqKgKvtPaU,292
262
262
  azureml/_project/base_project_files/conda_dependencies.yml,sha256=vCBcx08LiXJMkTtGv-axFq0Gzna1KKG6d0NOKoIFSUY,614
263
263
  azureml/_restclient/__init__.py,sha256=wvFkr6a9a2sVRWHaeH-ghtpGb3Gh25G-orZu7mXKcfw,746
264
264
  azureml/_restclient/arm_template_client.py,sha256=HlENPelC9JGEQ3UUnkMEvuIQ4-KigE-72okJjtEirMk,2870
265
- azureml/_restclient/artifacts_client.py,sha256=FckxS5rsjFos2uhzHo8W3Yr6EEwh7CQ9MGcPqfJZ5HI,26614
265
+ azureml/_restclient/artifacts_client.py,sha256=THcPZuNDWnaoBcpfc6mpC_19qlG3aYreokQQI2v-oBQ,26700
266
266
  azureml/_restclient/assets_client.py,sha256=60GcBhRKx_59HeRPZcNIVXHA4OG99FFyK9X5y_S5WVw,5426
267
267
  azureml/_restclient/clientbase.py,sha256=pj3hVihypdpzu6RQvUeFheLRRoDTDJ2yGAFjHhJ7A-Y,25873
268
268
  azureml/_restclient/constants.py,sha256=cG5T8xtrgPBPwckSmDLo-cXlxWx502xNzRdweNehgZQ,3190
269
269
  azureml/_restclient/environment_client.py,sha256=zKHAs2PhYW1xuau7aqyQzBVDPSnSJKBvkFvlnzmRCgE,10593
270
270
  azureml/_restclient/exceptions.py,sha256=LszbL91f9p3P5QdbVdu8BZDa-AusvGtuvMw9iGsVjxw,3105
271
271
  azureml/_restclient/experiment_client.py,sha256=tTrw3uTBNttHEeENO5_oLkNd9wrB_-60tRERyDubrpA,19719
272
- azureml/_restclient/jasmine_client.py,sha256=ANlQQNt7U2oiiEWMmJV7MJRMODceszEVr37wrc8PEVU,11433
272
+ azureml/_restclient/jasmine_client.py,sha256=0WUoX7YTAQzSjpFylBnPa8gFc0QiX3zCgEXBjyTBIDg,10589
273
273
  azureml/_restclient/metrics_client.py,sha256=HmS7CWDDlQGfB823SUMuoUxAdvoyhlkdNy_o6zUSXCc,29055
274
274
  azureml/_restclient/models_client.py,sha256=hc7o6zmjIPSLd8oLdoiVKPeWlszBT3js_LE3jlJWVEc,5884
275
275
  azureml/_restclient/polling.py,sha256=RgfUkBcZwb-GRmwdVnvh2H4fuEOz_29Yo930vO0V5sA,741
@@ -896,7 +896,7 @@ azureml/_vendor/azure_cli_core/cloud.py,sha256=9n6jqK5DHBkbiK_EViGpTtkXbE0sS6a09
896
896
  azureml/_vendor/azure_cli_core/command_recommender.py,sha256=8hN-gqcXyiNgb0Bex3Im8YYSNFa9kkL53p-33kJ4ANI,21610
897
897
  azureml/_vendor/azure_cli_core/decorators.py,sha256=-nETk-pTv32MzHaeDjWFsmYAeE1ZsyUTpS8uO5gH7WU,2845
898
898
  azureml/_vendor/azure_cli_core/file_util.py,sha256=DAlGXDWYwwm-4sxDhO4koBNyuK23CMYYUBO4Yz-2P3c,4490
899
- azureml/_vendor/azure_cli_core/keys.py,sha256=xTQG5YlPVYNu4xNBDWE1wSHsallUt1Ylwzuu4l_og28,3313
899
+ azureml/_vendor/azure_cli_core/keys.py,sha256=AZCpSBBuDvPuYxMmqG-PnKeUWf1y_NDP3znyjRcXrhA,3150
900
900
  azureml/_vendor/azure_cli_core/local_context.py,sha256=vHRafF_8npLfKKj4PnTt68KucP-kqB7vTWCJSrE-d1o,9234
901
901
  azureml/_vendor/azure_cli_core/mock.py,sha256=oORh2LWnlxbTBr2NwinbX9PRL3qGOHIxObJW77AZBq8,2269
902
902
  azureml/_vendor/azure_cli_core/parser.py,sha256=1pAXZ9Y6m4tHOJiKE2FRiWd_AkeqCz6oymSl_9sUaRQ,17753
@@ -1154,7 +1154,7 @@ azureml/_vendor/ruamel/yaml/util.py,sha256=OuYsMZEqNNE8Suzc_6GwJALdQCPLy8VhPe3Qx
1154
1154
  azureml/_workspace/__init__.py,sha256=2XIGQap-7lSF-4gfhUFtGzpx9FB7-iUVpW_2omvxiII,269
1155
1155
  azureml/_workspace/_arm_deployment_orchestrator.py,sha256=SnaR44naFsUkRQKvVElA95lqJr7jH79pUBLWrHkNTQ8,6585
1156
1156
  azureml/_workspace/_private_endpoint_deployment_orchestrator.py,sha256=xwAZPEAwSN-oCwx2dfdgVHBJ3yAC8vTvTP06G7KERwI,7410
1157
- azureml/_workspace/_utils.py,sha256=ucOqYmaHoorLcSjvIRhkWX6dma6WX3DqPRyQbCmmXcI,24398
1157
+ azureml/_workspace/_utils.py,sha256=uNGJBfm54llkyIitC_XLLTqZLxLO8sLobzijQCzzohw,24438
1158
1158
  azureml/_workspace/arm_template_builder.py,sha256=9EvORjIo0buprK7I9cFunFw1ENLPVZLP_-NZFJYKebk,20398
1159
1159
  azureml/_workspace/custom.py,sha256=hWqmadHcUCAwvTyf5-iEfUp99YMt87H4J_tFrwkxMww,19391
1160
1160
  azureml/_workspace/mlservicesworkspacetemplate.json,sha256=qfBAmfALbkvJxNK10SimckoCrsblGlkdMEa5FTc4NNE,4094
@@ -1172,12 +1172,12 @@ azureml/_workspace/workspacedeploy.json,sha256=YxW2BJaMcKkwJ7w-aU592HOAPLkP561_9
1172
1172
  azureml/core/__init__.py,sha256=sLB61cIb4v168ttwc__Hjovqpxz_Hq7E7GupaNvFDJs,4381
1173
1173
  azureml/core/_docs.py,sha256=Kg5aoZqaXMm_KYpTme9Ass9oHJNn-9kx-K4W-4roNEw,1890
1174
1174
  azureml/core/_experiment_method.py,sha256=qaQutRXOxlSzTUikJiT2d129Q9d1OXsKml3fAcC95B8,4752
1175
- azureml/core/_metrics.py,sha256=8qlcdMFgtqiX7diKxmmb8BofDB3ybBr8vzW6whbwqaE,38757
1175
+ azureml/core/_metrics.py,sha256=r963SDED6riikOHUb9DfZabBDItTXl3WT5EgjUDXeX0,38924
1176
1176
  azureml/core/_portal.py,sha256=MvzYl-0m1M9nmorgWl7gbpHtQhkf5bL92Ul9H0pB2ds,5987
1177
1177
  azureml/core/_serialization_utils.py,sha256=MnNB6Q62Wv1T1F_obbyVczkGmw1_TqgpruaSf80CWK4,12059
1178
1178
  azureml/core/authentication.py,sha256=HhqjBJoTYEzaTwe9ijjHaouShy-kQBlKIH2991uqYTw,107477
1179
- azureml/core/compute_target.py,sha256=Fy_fGutRdrwlTnp9owKd9YCniEqsCfhKxqTJudoBnXQ,17547
1180
- azureml/core/conda_dependencies.py,sha256=bAaglFFFdib3hAgt0zFkyUn3s1D6LAYHQOtTPJArEJ4,41264
1179
+ azureml/core/compute_target.py,sha256=u2Xbfz6qA0jKbWWVrhry_DmBmXu2yYbA-hmWUsLOAFo,17909
1180
+ azureml/core/conda_dependencies.py,sha256=HdeqIaxuLPKuvT4zNVsGUDMjZalgbYpNBAXnpEwDUUs,41354
1181
1181
  azureml/core/container_registry.py,sha256=PGwGMaZ0pEolaKv1s_wpAJjJoqB5krEfjbDmbkrvv5Q,2422
1182
1182
  azureml/core/databricks.py,sha256=cbJT89_kc80Rfb5RoCHVttqVHI8_0HeXwSxC4fHXNQo,20593
1183
1183
  azureml/core/dataset.py,sha256=lWnN4kpkEStugePes-qhTqbkKl5y3W_HjMZNWk6FRL0,65849
@@ -1186,12 +1186,12 @@ azureml/core/environment.py,sha256=YF8TWgsKRdzRUNISKx383SVQQNcdmPzgpZpDoePPk9w,7
1186
1186
  azureml/core/experiment.py,sha256=yC3lVr97RoFXFZGNb1tQUdKJTlK_88jLBjKZXeLun3Q,24537
1187
1187
  azureml/core/keyvault.py,sha256=QchGc35DAimaWzdeEH-1wVatFgFFSWUgMNvtH5othIM,6602
1188
1188
  azureml/core/linked_service.py,sha256=zZEu28ooMIb9fUmuKtqfmNU25GwEvqKciGpDmVoqM5Y,9547
1189
- azureml/core/model.py,sha256=mvCdvSdTbOM7mUA5hPVZ27rcDgDQBibiG9EZ6lpPRgA,142645
1189
+ azureml/core/model.py,sha256=Ev-eIqv44lNyDQ7Ss89meZTKUQnkZ8SgO_PMk2HtwYA,143250
1190
1190
  azureml/core/private_endpoint.py,sha256=rywS6SyNxOFz8EMXC7j3vEyN6jVSf4uTy-DPthA0D0U,6354
1191
1191
  azureml/core/profile.py,sha256=YqmxLsKONfrLMwmkat7fDYYKtMA3F5N1ndnr9jIWTSc,18627
1192
1192
  azureml/core/resource_configuration.py,sha256=BtHJWVf_RqeNRJddVfembTOyXrSF2Tt8EwB7DLK7ZHQ,6001
1193
1193
  azureml/core/run.py,sha256=evL5bH2uCwayelN-xCCG7SR3hch3Cd8UK8uVIDiOZGM,115120
1194
- azureml/core/runconfig.py,sha256=LEKwc13VV-Hz01KqCmIKDB4azkpSRePVO4xiSewDr3w,100007
1194
+ azureml/core/runconfig.py,sha256=oo9Q_aCt16KgPPZ-EnfLXN6i9ITM7UXS0SUi7o3jpzk,102348
1195
1195
  azureml/core/script_run.py,sha256=S8-fvK2UkuSReoWDYZKpf4TtD4JV7MD1yPuufzOMBGI,12412
1196
1196
  azureml/core/script_run_config.py,sha256=wlbVeXEsliyZ2YTbxvPFwS2W0qiVRApQrv89T5cPDZE,27688
1197
1197
  azureml/core/util.py,sha256=G8Olw1seYwpkIHnaMgnh-Nb9rfXqWWhsKRUAIjnflX0,1487
@@ -1323,9 +1323,9 @@ azureml/exceptions/__init__.py,sha256=wAB_C_TNpL8FK6GXeygupED6mG5IfSrLx_moV7NHIp
1323
1323
  azureml/exceptions/_azureml_exception.py,sha256=XxvMTrADJiTIHSn8DHj2fmyDUhYyBuVUqxYR3cuibz4,18989
1324
1324
  azureml/history/__init__.py,sha256=8U_yD6fMdk8Ok3Z-GO_ibddTgQEB-aY6BTT8t9aYGZw,274
1325
1325
  azureml/history/_tracking.py,sha256=IcZoVbHsOA01eQ3Ealnxe1YbNNnQi4LA5ccINB1cTrU,18541
1326
- azureml_core-1.57.0.post3.dist-info/LICENSE.txt,sha256=GBoIyZ-6vJ4xjRc8U3wTw4EfkuaEdVTm_gbr1Nm8uDI,859
1327
- azureml_core-1.57.0.post3.dist-info/METADATA,sha256=KHDItTZouZ8-mEVKe7-n55VbILT7glqlie4TnJrymIo,3119
1328
- azureml_core-1.57.0.post3.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
1329
- azureml_core-1.57.0.post3.dist-info/entry_points.txt,sha256=EKn4UdjSeleaw9lk1z12dZ7YK6tX4Ig6FYqaC2Uk8b8,154
1330
- azureml_core-1.57.0.post3.dist-info/top_level.txt,sha256=ZOeEa0TAXo6i5wOjwBoqfIGEuxOcKuscGgNSpizqREY,8
1331
- azureml_core-1.57.0.post3.dist-info/RECORD,,
1326
+ azureml_core-1.58.0.post1.dist-info/LICENSE.txt,sha256=GBoIyZ-6vJ4xjRc8U3wTw4EfkuaEdVTm_gbr1Nm8uDI,859
1327
+ azureml_core-1.58.0.post1.dist-info/METADATA,sha256=y4IvwxaJwGHpXqoPOgPn4lqQncXRG6bWFvEcUvrUEEw,3171
1328
+ azureml_core-1.58.0.post1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
1329
+ azureml_core-1.58.0.post1.dist-info/entry_points.txt,sha256=EKn4UdjSeleaw9lk1z12dZ7YK6tX4Ig6FYqaC2Uk8b8,154
1330
+ azureml_core-1.58.0.post1.dist-info/top_level.txt,sha256=ZOeEa0TAXo6i5wOjwBoqfIGEuxOcKuscGgNSpizqREY,8
1331
+ azureml_core-1.58.0.post1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5