ciocore 9.1.0rc2__py2.py3-none-any.whl → 9.1.1b1__py2.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.

Potentially problematic release.


This version of ciocore might be problematic. Click here for more details.

ciocore/VERSION CHANGED
@@ -1 +1 @@
1
- 9.1.0-rc.2
1
+ 9.1.1-beta.1
ciocore/cli.py CHANGED
@@ -8,12 +8,12 @@ import socketserver
8
8
  from ciocore import loggeria, config, api_client, package_query
9
9
 
10
10
  from ciocore import version as VERSION
11
-
11
+
12
12
  from ciocore.uploader import Uploader
13
13
  from ciocore.downloader.legacy_downloader import Downloader
14
14
  from ciocore.downloader.logging_download_runner import LoggingDownloadRunner
15
15
  from ciocore.downloader.log import LOGGER_NAME, LEVEL_MAP
16
-
16
+ from cioseq.sequence import Sequence
17
17
 
18
18
  LOG_LEVEL_HELP = """The logging level to display"""
19
19
 
@@ -117,17 +117,19 @@ def _set_logging(log_level, log_to_console=True, log_dir=None, log_filename=None
117
117
  log_dirpath=log_dir,
118
118
  log_filename=log_filename,
119
119
  console_formatter=loggeria.FORMATTER_VERBOSE,
120
- disable_console_logging= not log_to_console,
120
+ disable_console_logging=not log_to_console,
121
121
  use_system_log=True,
122
122
  )
123
123
 
124
124
  print("Logging to %s" % loggeria.LOG_PATH)
125
125
 
126
+
126
127
  def _register(client):
127
128
  api_client.ApiClient.register_client(
128
129
  client_name=client.CLIENT_NAME, client_version=VERSION
129
130
  )
130
131
 
132
+
131
133
  ########################### MAIN #################################
132
134
  @click.group(invoke_without_command=True)
133
135
  @click.pass_context
@@ -135,12 +137,12 @@ def _register(client):
135
137
  def main(ctx, version):
136
138
  """
137
139
  Conductor Command-line interface.
138
-
140
+
139
141
  To get help on subcommands, use the --help flag after the subcommand.
140
-
142
+
141
143
  Example:
142
144
  conductor download --help
143
-
145
+
144
146
  """
145
147
  if not ctx.invoked_subcommand:
146
148
  if version:
@@ -149,6 +151,7 @@ def main(ctx, version):
149
151
  click.echo(ctx.get_help())
150
152
  ctx.exit()
151
153
 
154
+
152
155
  ############################# UPLOAD #############################
153
156
  @main.command()
154
157
  @click.option("-db", "--database_filepath", help=UPLOADER_DATABASE_FILEPATH_HELP)
@@ -168,7 +171,9 @@ def main(ctx, version):
168
171
  default=DEFAULT_CONFIG_LOG_LEVEL,
169
172
  )
170
173
  @click.option("-ld", "--log_dir", help=LOG_DIR_HELP)
171
- @click.option("-lcl", "--log_to_console", is_flag=True, help=LOG_TO_CONSOLE_HELP, default=False)
174
+ @click.option(
175
+ "-lcl", "--log_to_console", is_flag=True, help=LOG_TO_CONSOLE_HELP, default=False
176
+ )
172
177
  @click.option(
173
178
  "-tc",
174
179
  "--thread_count",
@@ -179,7 +184,14 @@ def main(ctx, version):
179
184
  @click.option("-lc", "--location", help=LOCATION_HELP)
180
185
  @click.argument("paths", nargs=-1, type=click.Path(exists=True, resolve_path=True))
181
186
  def upload(
182
- database_filepath, location, md5_caching, log_level, log_to_console, log_dir, thread_count, paths
187
+ database_filepath,
188
+ location,
189
+ md5_caching,
190
+ log_level,
191
+ log_to_console,
192
+ log_dir,
193
+ thread_count,
194
+ paths,
183
195
  ):
184
196
  """Upload files to Conductor.
185
197
 
@@ -192,7 +204,12 @@ def upload(
192
204
  conductor upload file1 file2 file3
193
205
  """
194
206
 
195
- _set_logging(log_level, log_to_console=log_to_console, log_dir=log_dir, log_filename="conductor_uploader.log")
207
+ _set_logging(
208
+ log_level,
209
+ log_to_console=log_to_console,
210
+ log_dir=log_dir,
211
+ log_filename="conductor_uploader.log",
212
+ )
196
213
 
197
214
  args_dict = {
198
215
  "database_filepath": database_filepath,
@@ -284,7 +301,9 @@ DEPRECATED_PATHS_HELP = "Specify a list of paths to upload."
284
301
  help=THREADS_HELP,
285
302
  default=DEFAULT_CONFIG_THREAD_COUNT,
286
303
  )
287
- @click.option("-lcl", "--log_to_console", is_flag=True, help=LOG_TO_CONSOLE_HELP, default=False)
304
+ @click.option(
305
+ "-lcl", "--log_to_console", is_flag=True, help=LOG_TO_CONSOLE_HELP, default=False
306
+ )
288
307
  @click.option("-lc", "--location", help=LOCATION_HELP)
289
308
  @click.option(
290
309
  "-p",
@@ -294,7 +313,14 @@ DEPRECATED_PATHS_HELP = "Specify a list of paths to upload."
294
313
  type=click.Path(exists=True, resolve_path=True),
295
314
  )
296
315
  def uploader(
297
- database_filepath, location, md5_caching, log_level, log_dir, log_to_console, thread_count, paths
316
+ database_filepath,
317
+ location,
318
+ md5_caching,
319
+ log_level,
320
+ log_dir,
321
+ log_to_console,
322
+ thread_count,
323
+ paths,
298
324
  ):
299
325
  """Upload files to Conductor.
300
326
 
@@ -306,7 +332,12 @@ def uploader(
306
332
  Example:
307
333
  conductor upload file1 file2 file3
308
334
  """
309
- _set_logging(log_level, log_to_console=log_to_console, log_dir=log_dir, log_filename="conductor_uploader.log")
335
+ _set_logging(
336
+ log_level,
337
+ log_to_console=log_to_console,
338
+ log_dir=log_dir,
339
+ log_filename="conductor_uploader.log",
340
+ )
310
341
 
311
342
  args_dict = {
312
343
  "database_filepath": database_filepath,
@@ -369,7 +400,10 @@ def downloader(
369
400
  conductor downloader --job_id --task_id 01234
370
401
  conductor downloader --task_id --task_id 123
371
402
  """
372
- click.secho("This command has been deprecated. Please use conductor download instead.", fg='red')
403
+ click.secho(
404
+ "This command has been deprecated. Please use conductor download instead.",
405
+ fg="red",
406
+ )
373
407
  logfile = log_dir and os.path.join(log_dir, "conductor_dl.log")
374
408
  _set_logging(log_level, logfile)
375
409
  _register(Downloader)
@@ -389,6 +423,62 @@ def downloader(
389
423
 
390
424
 
391
425
  ########################### PAGED DOWNLOAD #############################
426
+ def validate_jobids(jobids):
427
+ """Validate job IDs and task ranges.
428
+
429
+ Args:
430
+ jobids: List of job ID strings, optionally with task ranges (e.g. "1234" or "1234:1-10")
431
+
432
+ Raises:
433
+ click.BadParameter: If any job ID or task range is invalid
434
+ """
435
+ if not jobids:
436
+ return
437
+
438
+ for jobid in jobids:
439
+ # Split job id and task range if present
440
+ parts = jobid.split(":")
441
+ job_id = parts[0]
442
+
443
+ # Validate job id is numeric
444
+ if not job_id.isdigit():
445
+ raise click.BadParameter(f"Job ID '{job_id}' must be numeric")
446
+
447
+ # If task range specified, validate it
448
+ if len(parts) > 1:
449
+ try:
450
+ # Try to create sequence to validate task range
451
+ Sequence.create(parts[1])
452
+ except (ValueError, TypeError) as exc:
453
+ raise click.BadParameter(
454
+ f"Invalid task range '{parts[1]}' for job {job_id}. "
455
+ "Task range must be in format like: 1-10, 1-5x2, or 1,3,5-10"
456
+ ) from exc
457
+ elif len(parts) > 2:
458
+ raise click.BadParameter(
459
+ f"Invalid job ID format '{jobid}'. Should be 'jobid' or 'jobid:task_range'"
460
+ )
461
+
462
+ def validate_output_path(output_path):
463
+ """Validate the output path.
464
+
465
+ Args:
466
+ output_path: The output path to validate
467
+ """
468
+ if not output_path:
469
+ return
470
+
471
+ if os.path.exists(output_path) and not os.path.isdir(output_path):
472
+ raise click.BadParameter(
473
+ f"Output path '{output_path}' exists and is not a directory."
474
+ )
475
+ try:
476
+ os.makedirs(output_path, exist_ok=True)
477
+ except OSError as exc:
478
+ raise click.BadParameter(
479
+ f"Output path '{output_path}' is not writable: {exc}"
480
+ )
481
+
392
482
  @main.command()
393
483
  @click.option("-f", "--force", is_flag=True, help=DOWNLOADER_FORCE_DOWNLOAD_HELP)
394
484
  @click.option(
@@ -399,8 +489,9 @@ def downloader(
399
489
  default=DEFAULT_DOWNLOADER_PAGE_SIZE,
400
490
  )
401
491
  @click.option(
402
- "-o", "--output-path",
403
- type=click.Path(exists=True, file_okay=False, dir_okay=True, resolve_path=True),
492
+ "-o",
493
+ "--output-path",
494
+ type=click.Path(exists=False, file_okay=True, dir_okay=True, resolve_path=True),
404
495
  help=DOWNLOADER_OUTPUT_PATH_HELP,
405
496
  )
406
497
  @click.option(
@@ -426,7 +517,7 @@ def downloader(
426
517
  default=DEFAULT_CONFIG_THREAD_COUNT,
427
518
  )
428
519
  @click.option(
429
- "-dr",
520
+ "-dr",
430
521
  "--disable-reporting",
431
522
  help=DOWNLOAD_DISABLE_REPORTING_HELP,
432
523
  is_flag=True,
@@ -444,10 +535,9 @@ def download(
444
535
  log_level,
445
536
  thread_count,
446
537
  force,
447
- regex,
538
+ regex,
448
539
  disable_reporting,
449
540
  ):
450
-
451
541
  """
452
542
  Download renders and other output files from Conductor. You can give a list of job ids to
453
543
  download, or you can omit jobids and the downloader will run in daemon mode.
@@ -474,10 +564,12 @@ def download(
474
564
  conductor download 1234:1-5 1235:5-10
475
565
 
476
566
  """
477
-
567
+ validate_jobids(jobids)
568
+ validate_output_path(output_path)
569
+
478
570
  _register(LoggingDownloadRunner)
479
571
 
480
- # No longer uses Loggeria.
572
+ # No longer uses Loggeria.
481
573
  # Instead, it gets the logger with broken-pipe handling from the downloader.log module.
482
574
  logging.getLogger(LOGGER_NAME).setLevel(LEVEL_MAP[log_level])
483
575
 
@@ -491,11 +583,6 @@ def download(
491
583
  "disable_reporting": disable_reporting,
492
584
  }
493
585
 
494
- dl = LoggingDownloadRunner(
495
- jobids,
496
- location,
497
- **kwargs
498
- )
586
+ dl = LoggingDownloadRunner(jobids, location, **kwargs)
499
587
 
500
588
  dl.run()
501
-
@@ -1107,7 +1107,7 @@ ApiClient </code>
1107
1107
 
1108
1108
  <details class="quote">
1109
1109
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1110
- <div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">ApiClient</span><span class="p">:</span>
1110
+ <div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ApiClient</span><span class="p">:</span>
1111
1111
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1112
1112
  <span class="sd"> The ApiClient class is a wrapper around the requests library that handles authentication and retries.</span>
1113
1113
  <span class="sd"> &quot;&quot;&quot;</span>
@@ -1119,10 +1119,10 @@ ApiClient </code>
1119
1119
 
1120
1120
  <span class="n">user_agent_header</span> <span class="o">=</span> <span class="kc">None</span>
1121
1121
 
1122
- <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1122
+ <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1123
1123
  <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
1124
1124
 
1125
- <span class="k">def</span> <span class="nf">_make_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">conductor_url</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">raise_on_error</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
1125
+ <span class="k">def</span><span class="w"> </span><span class="nf">_make_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">conductor_url</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">raise_on_error</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
1126
1126
  <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
1127
1127
  <span class="n">method</span><span class="o">=</span><span class="n">verb</span><span class="p">,</span> <span class="n">url</span><span class="o">=</span><span class="n">conductor_url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span>
1128
1128
  <span class="p">)</span>
@@ -1145,7 +1145,7 @@ ApiClient </code>
1145
1145
 
1146
1146
  <span class="k">return</span> <span class="n">response</span>
1147
1147
 
1148
- <span class="k">def</span> <span class="nf">make_prepared_request</span><span class="p">(</span>
1148
+ <span class="k">def</span><span class="w"> </span><span class="nf">make_prepared_request</span><span class="p">(</span>
1149
1149
  <span class="bp">self</span><span class="p">,</span>
1150
1150
  <span class="n">verb</span><span class="p">,</span>
1151
1151
  <span class="n">url</span><span class="p">,</span>
@@ -1228,7 +1228,7 @@ ApiClient </code>
1228
1228
 
1229
1229
  <span class="k">return</span> <span class="n">response</span>
1230
1230
 
1231
- <span class="k">def</span> <span class="nf">make_request</span><span class="p">(</span>
1231
+ <span class="k">def</span><span class="w"> </span><span class="nf">make_request</span><span class="p">(</span>
1232
1232
  <span class="bp">self</span><span class="p">,</span>
1233
1233
  <span class="n">uri_path</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">,</span>
1234
1234
  <span class="n">headers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
@@ -1302,7 +1302,7 @@ ApiClient </code>
1302
1302
  <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span>
1303
1303
 
1304
1304
  <span class="nd">@classmethod</span>
1305
- <span class="k">def</span> <span class="nf">register_client</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">client_name</span><span class="p">,</span> <span class="n">client_version</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1305
+ <span class="k">def</span><span class="w"> </span><span class="nf">register_client</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">client_name</span><span class="p">,</span> <span class="n">client_version</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1306
1306
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1307
1307
  <span class="sd"> Generates the http User Agent header that includes helpful debug info.</span>
1308
1308
  <span class="sd"> &quot;&quot;&quot;</span>
@@ -1454,7 +1454,7 @@ client is built to use Requests 3.x this function can be removed.</p>
1454
1454
  </table>
1455
1455
  <details class="quote">
1456
1456
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1457
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">make_prepared_request</span><span class="p">(</span>
1457
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">make_prepared_request</span><span class="p">(</span>
1458
1458
  <span class="bp">self</span><span class="p">,</span>
1459
1459
  <span class="n">verb</span><span class="p">,</span>
1460
1460
  <span class="n">url</span><span class="p">,</span>
@@ -1642,7 +1642,7 @@ client is built to use Requests 3.x this function can be removed.</p>
1642
1642
  </table>
1643
1643
  <details class="quote">
1644
1644
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1645
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">make_request</span><span class="p">(</span>
1645
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">make_request</span><span class="p">(</span>
1646
1646
  <span class="bp">self</span><span class="p">,</span>
1647
1647
  <span class="n">uri_path</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">,</span>
1648
1648
  <span class="n">headers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
@@ -1742,7 +1742,7 @@ client is built to use Requests 3.x this function can be removed.</p>
1742
1742
  <details class="quote">
1743
1743
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1744
1744
  <div class="highlight"><pre><span></span><code><span class="nd">@classmethod</span>
1745
- <span class="k">def</span> <span class="nf">register_client</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">client_name</span><span class="p">,</span> <span class="n">client_version</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1745
+ <span class="k">def</span><span class="w"> </span><span class="nf">register_client</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">client_name</span><span class="p">,</span> <span class="n">client_version</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1746
1746
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1747
1747
  <span class="sd"> Generates the http User Agent header that includes helpful debug info.</span>
1748
1748
  <span class="sd"> &quot;&quot;&quot;</span>
@@ -1808,7 +1808,7 @@ client is built to use Requests 3.x this function can be removed.</p>
1808
1808
 
1809
1809
  <details class="quote">
1810
1810
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1811
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">truncate_middle</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">max_length</span><span class="p">):</span>
1811
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">truncate_middle</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">max_length</span><span class="p">):</span>
1812
1812
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1813
1813
  <span class="sd"> Truncate the string `s` to `max_length` by removing characters from the middle.</span>
1814
1814
 
@@ -1863,7 +1863,7 @@ prompt the user to log in. </p>
1863
1863
 
1864
1864
  <details class="quote">
1865
1865
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1866
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">read_conductor_credentials</span><span class="p">(</span><span class="n">use_api_key</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
1866
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">read_conductor_credentials</span><span class="p">(</span><span class="n">use_api_key</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
1867
1867
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1868
1868
  <span class="sd"> Read the conductor credentials file.</span>
1869
1869
 
@@ -1986,7 +1986,7 @@ prompt the user to log in. </p>
1986
1986
  </table>
1987
1987
  <details class="quote">
1988
1988
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
1989
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_api_key_bearer_token</span><span class="p">(</span><span class="n">creds_file</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1989
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_api_key_bearer_token</span><span class="p">(</span><span class="n">creds_file</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1990
1990
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1991
1991
  <span class="sd"> Get a bearer token from the API key.</span>
1992
1992
 
@@ -2083,7 +2083,7 @@ prompt the user to log in. </p>
2083
2083
  </table>
2084
2084
  <details class="quote">
2085
2085
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2086
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_creds_path</span><span class="p">(</span><span class="n">api_key</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
2086
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_creds_path</span><span class="p">(</span><span class="n">api_key</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
2087
2087
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2088
2088
  <span class="sd"> Get the path to the credentials file.</span>
2089
2089
 
@@ -2143,7 +2143,7 @@ prompt the user to log in. </p>
2143
2143
 
2144
2144
  <details class="quote">
2145
2145
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2146
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_bearer_token</span><span class="p">(</span><span class="n">refresh</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
2146
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_bearer_token</span><span class="p">(</span><span class="n">refresh</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
2147
2147
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2148
2148
  <span class="sd"> Return the bearer token.</span>
2149
2149
 
@@ -2211,7 +2211,7 @@ prompt the user to log in. </p>
2211
2211
  </table>
2212
2212
  <details class="quote">
2213
2213
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2214
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">creds_same_domain</span><span class="p">(</span><span class="n">creds</span><span class="p">):</span>
2214
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">creds_same_domain</span><span class="p">(</span><span class="n">creds</span><span class="p">):</span>
2215
2215
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2216
2216
  <span class="sd"> Check if the creds are for the same domain as the config.</span>
2217
2217
 
@@ -2291,7 +2291,7 @@ prompt the user to log in. </p>
2291
2291
  </table>
2292
2292
  <details class="quote">
2293
2293
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2294
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">account_id_from_jwt</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
2294
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">account_id_from_jwt</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
2295
2295
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2296
2296
  <span class="sd"> Fetch the accounts id from a jwt token value.</span>
2297
2297
 
@@ -2362,7 +2362,7 @@ prompt the user to log in. </p>
2362
2362
  </table>
2363
2363
  <details class="quote">
2364
2364
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2365
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">account_name_from_jwt</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
2365
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">account_name_from_jwt</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
2366
2366
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2367
2367
  <span class="sd"> Fetch the accounts name from a jwt token value.</span>
2368
2368
 
@@ -2446,7 +2446,7 @@ prompt the user to log in. </p>
2446
2446
  </table>
2447
2447
  <details class="quote">
2448
2448
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2449
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">request_instance_types</span><span class="p">(</span><span class="n">as_dict</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">filter_param</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
2449
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">request_instance_types</span><span class="p">(</span><span class="n">as_dict</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">filter_param</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
2450
2450
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2451
2451
  <span class="sd"> Get the list of available instances types.</span>
2452
2452
 
@@ -2534,7 +2534,7 @@ prompt the user to log in. </p>
2534
2534
  </table>
2535
2535
  <details class="quote">
2536
2536
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2537
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">request_projects</span><span class="p">(</span><span class="n">statuses</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;active&quot;</span><span class="p">,)):</span>
2537
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">request_projects</span><span class="p">(</span><span class="n">statuses</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;active&quot;</span><span class="p">,)):</span>
2538
2538
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2539
2539
  <span class="sd"> Query Conductor for all client Projects that are in the given status(es).</span>
2540
2540
 
@@ -2605,7 +2605,7 @@ prompt the user to log in. </p>
2605
2605
  </table>
2606
2606
  <details class="quote">
2607
2607
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2608
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">request_software_packages</span><span class="p">():</span>
2608
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">request_software_packages</span><span class="p">():</span>
2609
2609
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2610
2610
  <span class="sd"> Query Conductor for all software packages for the currently available sidecar.</span>
2611
2611
 
@@ -2651,7 +2651,7 @@ prompt the user to log in. </p>
2651
2651
 
2652
2652
  <details class="quote">
2653
2653
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2654
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">request_extra_environment</span><span class="p">():</span>
2654
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">request_extra_environment</span><span class="p">():</span>
2655
2655
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2656
2656
  <span class="sd"> Query Conductor for extra environment.</span>
2657
2657
  <span class="sd"> &quot;&quot;&quot;</span>
@@ -2733,7 +2733,7 @@ prompt the user to log in. </p>
2733
2733
  </tbody>
2734
2734
  </table>
2735
2735
  <p><strong>Examples:</strong></p>
2736
- <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
2736
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
2737
2737
  <span class="o">&gt;&gt;&gt;</span> <span class="n">jobs</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_jobs</span><span class="p">(</span><span class="mi">1959</span><span class="p">)</span>
2738
2738
  <span class="o">&gt;&gt;&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">jobs</span><span class="p">)</span>
2739
2739
  <span class="mi">1</span>
@@ -2746,7 +2746,7 @@ prompt the user to log in. </p>
2746
2746
 
2747
2747
  <details class="quote">
2748
2748
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2749
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_jobs</span><span class="p">(</span><span class="n">first_jid</span><span class="p">,</span> <span class="n">last_jid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
2749
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_jobs</span><span class="p">(</span><span class="n">first_jid</span><span class="p">,</span> <span class="n">last_jid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
2750
2750
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2751
2751
  <span class="sd"> Query Conductor for all jobs between the given job ids.</span>
2752
2752
 
@@ -2866,7 +2866,7 @@ prompt the user to log in. </p>
2866
2866
  </tbody>
2867
2867
  </table>
2868
2868
  <p><strong>Examples:</strong></p>
2869
- <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
2869
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
2870
2870
  <span class="o">&gt;&gt;&gt;</span> <span class="n">logs</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_log</span><span class="p">(</span><span class="mi">1959</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
2871
2871
  <span class="p">{</span>
2872
2872
  <span class="s2">&quot;logs&quot;</span><span class="p">:</span> <span class="p">[</span>
@@ -2896,7 +2896,7 @@ prompt the user to log in. </p>
2896
2896
 
2897
2897
  <details class="quote">
2898
2898
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
2899
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_log</span><span class="p">(</span><span class="n">job_id</span><span class="p">,</span> <span class="n">task_id</span><span class="p">):</span>
2899
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_log</span><span class="p">(</span><span class="n">job_id</span><span class="p">,</span> <span class="n">task_id</span><span class="p">):</span>
2900
2900
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2901
2901
  <span class="sd"> Get the log for the given job and task.</span>
2902
2902
 
@@ -3011,14 +3011,14 @@ prompt the user to log in. </p>
3011
3011
  </tbody>
3012
3012
  </table>
3013
3013
  <p><strong>Examples:</strong></p>
3014
- <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
3014
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
3015
3015
  <span class="o">&gt;&gt;&gt;</span> <span class="n">api_client</span><span class="o">.</span><span class="n">kill_jobs</span><span class="p">(</span><span class="s2">&quot;03095&quot;</span><span class="p">,</span><span class="s2">&quot;03094&quot;</span><span class="p">)</span>
3016
3016
  <span class="p">{</span><span class="s1">&#39;body&#39;</span><span class="p">:</span> <span class="s1">&#39;success&#39;</span><span class="p">,</span> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s2">&quot;Jobs [u&#39;03095&#39;, u&#39;03094&#39;] have been kill.&quot;</span><span class="p">}</span>
3017
3017
  </code></pre></div>
3018
3018
 
3019
3019
  <details class="quote">
3020
3020
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
3021
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">kill_jobs</span><span class="p">(</span><span class="o">*</span><span class="n">job_ids</span><span class="p">):</span>
3021
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">kill_jobs</span><span class="p">(</span><span class="o">*</span><span class="n">job_ids</span><span class="p">):</span>
3022
3022
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3023
3023
  <span class="sd"> Kill the given jobs.</span>
3024
3024
 
@@ -3117,7 +3117,7 @@ prompt the user to log in. </p>
3117
3117
  </tbody>
3118
3118
  </table>
3119
3119
  <p><strong>Examples:</strong></p>
3120
- <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
3120
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
3121
3121
  <span class="o">&gt;&gt;&gt;</span> <span class="n">api_client</span><span class="o">.</span><span class="n">kill_tasks</span><span class="p">(</span><span class="s2">&quot;03096&quot;</span><span class="p">,</span> <span class="o">*</span><span class="nb">range</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span><span class="mi">56</span><span class="p">))</span>
3122
3122
  <span class="p">{</span><span class="s1">&#39;body&#39;</span><span class="p">:</span> <span class="s1">&#39;success&#39;</span><span class="p">,</span> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39; 6 Tasks set to &quot;kill&quot;</span>
3123
3123
  <span class="mi">050</span>
@@ -3130,7 +3130,7 @@ prompt the user to log in. </p>
3130
3130
 
3131
3131
  <details class="quote">
3132
3132
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
3133
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">kill_tasks</span><span class="p">(</span><span class="n">job_id</span><span class="p">,</span> <span class="o">*</span><span class="n">task_ids</span><span class="p">):</span>
3133
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">kill_tasks</span><span class="p">(</span><span class="n">job_id</span><span class="p">,</span> <span class="o">*</span><span class="n">task_ids</span><span class="p">):</span>
3134
3134
  <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3135
3135
  <span class="sd"> Kill the given tasks.</span>
3136
3136
 
@@ -3237,7 +3237,7 @@ with running a job. </p>
3237
3237
  </tbody>
3238
3238
  </table>
3239
3239
  <p><strong>Examples:</strong></p>
3240
- <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
3240
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
3241
3241
  <span class="o">&gt;&gt;&gt;</span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span>
3242
3242
  <span class="p">{</span> <span class="s1">&#39;2024-01-09&#39;</span><span class="p">:</span> <span class="p">{</span> <span class="s1">&#39;cost&#39;</span><span class="p">:</span> <span class="mf">0.08</span><span class="p">,</span>
3243
3243
  <span class="s1">&#39;corehours&#39;</span><span class="p">:</span> <span class="mf">0.9</span><span class="p">,</span>
@@ -3249,7 +3249,7 @@ with running a job. </p>
3249
3249
 
3250
3250
  <details class="quote">
3251
3251
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
3252
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">):</span>
3252
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">):</span>
3253
3253
  <span class="w"> </span><span class="sd">&#39;&#39;&#39;</span>
3254
3254
  <span class="sd"> Query the compute usage for an account.</span>
3255
3255
 
@@ -3361,7 +3361,7 @@ with running a job. </p>
3361
3361
  </tbody>
3362
3362
  </table>
3363
3363
  <p><strong>Examples:</strong></p>
3364
- <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
3364
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
3365
3365
  <span class="o">&gt;&gt;&gt;</span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span>
3366
3366
  <span class="p">{</span> <span class="s1">&#39;2024-01-01&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;cost&#39;</span><span class="p">:</span> <span class="mf">4.022</span><span class="p">,</span> <span class="s1">&#39;GiB&#39;</span><span class="p">:</span> <span class="mf">679.714</span><span class="p">},</span>
3367
3367
  <span class="s1">&#39;2024-01-02&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;cost&#39;</span><span class="p">:</span> <span class="mf">4.502</span><span class="p">,</span> <span class="s1">&#39;GiB&#39;</span><span class="p">:</span> <span class="mf">750.34</span><span class="p">},</span>
@@ -3370,7 +3370,7 @@ with running a job. </p>
3370
3370
 
3371
3371
  <details class="quote">
3372
3372
  <summary>Source code in <code>ciocore/api_client.py</code></summary>
3373
- <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">):</span>
3373
+ <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">):</span>
3374
3374
  <span class="w"> </span><span class="sd">&#39;&#39;&#39;</span>
3375
3375
  <span class="sd"> Query the storage usage for an account.</span>
3376
3376