anyscale 0.26.19__py3-none-any.whl → 0.26.20__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.
Files changed (28) hide show
  1. anyscale/_private/docgen/models.md +1 -1
  2. anyscale/client/README.md +6 -1
  3. anyscale/client/openapi_client/__init__.py +3 -0
  4. anyscale/client/openapi_client/api/default_api.py +269 -17
  5. anyscale/client/openapi_client/models/__init__.py +3 -0
  6. anyscale/client/openapi_client/models/decorated_production_job_state_transition.py +2 -2
  7. anyscale/client/openapi_client/models/job_queue_sort_directive.py +148 -0
  8. anyscale/client/openapi_client/models/job_queue_sort_field.py +107 -0
  9. anyscale/client/openapi_client/models/job_queues_query.py +31 -3
  10. anyscale/client/openapi_client/models/production_job_state_transition.py +2 -2
  11. anyscale/client/openapi_client/models/update_job_queue_request.py +150 -0
  12. anyscale/commands/command_examples.py +58 -0
  13. anyscale/commands/job_commands.py +2 -2
  14. anyscale/commands/job_queue_commands.py +172 -0
  15. anyscale/controllers/job_controller.py +215 -3
  16. anyscale/scripts.py +3 -0
  17. anyscale/sdk/anyscale_client/models/production_job_state_transition.py +2 -2
  18. anyscale/util.py +3 -1
  19. anyscale/utils/connect_helpers.py +34 -0
  20. anyscale/version.py +1 -1
  21. anyscale/workspace/_private/workspace_sdk.py +19 -6
  22. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/METADATA +1 -1
  23. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/RECORD +28 -24
  24. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/LICENSE +0 -0
  25. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/NOTICE +0 -0
  26. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/WHEEL +0 -0
  27. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/entry_points.txt +0 -0
  28. {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,13 @@
1
+ from __future__ import annotations
2
+
1
3
  import asyncio
4
+ from collections import defaultdict
5
+ from enum import Enum
2
6
  import os
3
7
  import random
4
8
  import string
5
9
  import time
6
- from typing import Any, cast, Dict, List, Optional
10
+ from typing import Any, Callable, cast, Dict, Iterable, List, Optional
7
11
 
8
12
  import click
9
13
  import tabulate
@@ -23,10 +27,21 @@ from anyscale.client.openapi_client.models.create_internal_production_job import
23
27
  from anyscale.client.openapi_client.models.create_job_queue_config import (
24
28
  CreateJobQueueConfig,
25
29
  )
30
+ from anyscale.client.openapi_client.models.decorated_job_queue import DecoratedJobQueue
26
31
  from anyscale.client.openapi_client.models.decorated_production_job import (
27
32
  DecoratedProductionJob,
28
33
  )
34
+ from anyscale.client.openapi_client.models.decoratedjobqueue_response import (
35
+ DecoratedjobqueueResponse,
36
+ )
29
37
  from anyscale.client.openapi_client.models.ha_job_states import HaJobStates
38
+ from anyscale.client.openapi_client.models.job_queue_sort_directive import (
39
+ JobQueueSortDirective,
40
+ )
41
+ from anyscale.client.openapi_client.models.job_queues_query import JobQueuesQuery
42
+ from anyscale.client.openapi_client.models.update_job_queue_request import (
43
+ UpdateJobQueueRequest,
44
+ )
30
45
  from anyscale.controllers.base_controller import BaseController
31
46
  from anyscale.models.job_model import JobConfig
32
47
  from anyscale.project_utils import infer_project_id
@@ -45,7 +60,7 @@ from anyscale.util import (
45
60
  populate_unspecified_cluster_configs_from_current_workspace,
46
61
  validate_job_config_dict,
47
62
  )
48
- from anyscale.utils.connect_helpers import search_entities
63
+ from anyscale.utils.connect_helpers import paginate, search_entities
49
64
  from anyscale.utils.runtime_env import override_runtime_env_config
50
65
  from anyscale.utils.workload_types import Workload
51
66
 
@@ -294,7 +309,7 @@ class JobController(BaseController):
294
309
  project_id: Optional[str],
295
310
  include_archived: bool,
296
311
  max_items: int,
297
- states: List[str],
312
+ states: List[HaJobStates],
298
313
  ) -> None:
299
314
  """
300
315
  This function will list jobs.
@@ -338,6 +353,7 @@ class JobController(BaseController):
338
353
  )
339
354
  else:
340
355
  creator_id = None
356
+
341
357
  resp = self.api_client.list_decorated_jobs_api_v2_decorated_ha_jobs_get(
342
358
  project_id=project_id,
343
359
  name=name,
@@ -647,3 +663,199 @@ class JobController(BaseController):
647
663
  ),
648
664
  )
649
665
  return job_runs
666
+
667
+ def update_job_queue(
668
+ self,
669
+ job_queue_id: str,
670
+ job_queue_name: str,
671
+ max_concurrency: Optional[int] = None,
672
+ idle_timeout_s: Optional[int] = None,
673
+ ):
674
+ job_queue: DecoratedJobQueue = _resolve_object(
675
+ fetch_by_id=cast(
676
+ Callable[[str], DecoratedjobqueueResponse],
677
+ self.api_client.get_job_queue_api_v2_job_queues_job_queue_id_get,
678
+ ),
679
+ fetch_by_id_param=job_queue_id,
680
+ fetch_by_name=cast(
681
+ Callable[[str], DecoratedjobqueueResponse],
682
+ self.api_client.list_job_queues_api_v2_job_queues_post,
683
+ ),
684
+ fetch_by_name_query={
685
+ "job_queues_query": {"name": {"equals": job_queue_name,}}
686
+ },
687
+ object_type_description="job queue",
688
+ )
689
+
690
+ queue: DecoratedJobQueue = self.api_client.update_job_queue_api_v2_job_queues_job_queue_id_put(
691
+ job_queue_id=job_queue.id,
692
+ update_job_queue_request=UpdateJobQueueRequest(
693
+ max_concurrency=max_concurrency, idle_timeout_sec=idle_timeout_s,
694
+ ),
695
+ ).result
696
+
697
+ _print_job_queue_vertical(queue, JobQueueView.ALL)
698
+
699
+ def get_job_queue(self, job_queue_id: str):
700
+ queue: DecoratedJobQueue = self.api_client.get_job_queue_api_v2_job_queues_job_queue_id_get(
701
+ job_queue_id=job_queue_id
702
+ ).result
703
+
704
+ _print_job_queue_vertical(queue, JobQueueView.ALL)
705
+
706
+ def list_job_queues(
707
+ self,
708
+ include_all_users: bool,
709
+ view: JobQueueView,
710
+ page_size: int,
711
+ max_items: Optional[int],
712
+ sorting_directives: List[JobQueueSortDirective],
713
+ interactive: bool,
714
+ ):
715
+ creator_id = (
716
+ None
717
+ if include_all_users
718
+ else self.api_client.get_user_info_api_v2_userinfo_get().result.id
719
+ )
720
+
721
+ def build_query(paging_token: Optional[str], count: int) -> Dict:
722
+ return {
723
+ "job_queues_query": JobQueuesQuery(
724
+ creator_id=creator_id,
725
+ paging=PageQuery(paging_token=paging_token, count=count),
726
+ sorting_directives=sorting_directives,
727
+ )
728
+ }
729
+
730
+ for batch in paginate(
731
+ search_function=self.api_client.list_job_queues_api_v2_job_queues_post,
732
+ query_builder=build_query,
733
+ interactive=interactive,
734
+ page_size=page_size,
735
+ max_items=max_items,
736
+ ):
737
+ _render_job_queues(batch, view)
738
+
739
+
740
+ def _render_jobs(jobs):
741
+ jobs_table = [
742
+ [
743
+ job.name,
744
+ job.id,
745
+ job.project.name,
746
+ job.last_job_run.cluster.name
747
+ if job.last_job_run and job.last_job_run.cluster
748
+ else None,
749
+ job.state.current_state,
750
+ job.creator.email,
751
+ job.config.entrypoint
752
+ if len(job.config.entrypoint) < 50
753
+ else job.config.entrypoint[:50] + " ...",
754
+ ]
755
+ for job in jobs
756
+ ]
757
+
758
+ table = tabulate.tabulate(
759
+ jobs_table,
760
+ headers=[
761
+ "NAME",
762
+ "ID",
763
+ "PROJECT NAME",
764
+ "CLUSTER NAME",
765
+ "CURRENT STATE",
766
+ "CREATOR",
767
+ "ENTRYPOINT",
768
+ ],
769
+ tablefmt="plain",
770
+ )
771
+ click.echo(f"{table}")
772
+
773
+
774
+ class JobQueueView(Enum):
775
+ ALL = DecoratedJobQueue.attribute_map.keys()
776
+ STATS = [
777
+ "id",
778
+ "name",
779
+ "total_jobs",
780
+ "active_jobs",
781
+ "successful_jobs",
782
+ "failed_jobs",
783
+ ]
784
+ DEFAULT = [
785
+ "id",
786
+ "name",
787
+ "cluster_id",
788
+ "creator_id",
789
+ "max_concurrency",
790
+ "idle_timeout_sec",
791
+ "current_cluster_state",
792
+ "created_at",
793
+ ]
794
+
795
+
796
+ def _format_job_queue(queue: DecoratedJobQueue, view: JobQueueView) -> List[str]:
797
+ formatters: Dict[str, Callable[[Any], Any]] = defaultdict(lambda: (lambda v: v))
798
+ formatters["created_at"] = lambda k: k.strftime("%Y-%m-%d %H:%M:%S")
799
+
800
+ return [formatters[field](getattr(queue, field, "")) or "" for field in view.value]
801
+
802
+
803
+ def _render_job_queues(queues: Iterable[DecoratedJobQueue], view: JobQueueView):
804
+ if not queues:
805
+ click.echo("No job queues found!")
806
+ return
807
+ table = tabulate.tabulate(
808
+ [
809
+ _format_job_queue(queue, view)
810
+ for queue in cast(Iterable[DecoratedJobQueue], queues)
811
+ ],
812
+ headers=[field.replace("_", " ").upper() for field in view.value],
813
+ tablefmt="plain",
814
+ maxcolwidths=30, # type: ignore
815
+ numalign="center",
816
+ stralign="center",
817
+ )
818
+ click.echo(table)
819
+
820
+
821
+ def _print_job_queue_vertical(queue: DecoratedJobQueue, job_queue_view: JobQueueView):
822
+ """
823
+ Print single job queue with headers as a vertical table
824
+ """
825
+ for header, value in zip(
826
+ [field.replace("_", " ").upper() for field in job_queue_view.value],
827
+ _format_job_queue(queue, job_queue_view),
828
+ ):
829
+ print(f"{header:<{30}}: {value}")
830
+
831
+
832
+ def _resolve_object(
833
+ fetch_by_id: Optional[Callable[[str], object]],
834
+ fetch_by_id_param: Optional[str],
835
+ fetch_by_name,
836
+ fetch_by_name_query,
837
+ object_type_description: str,
838
+ ) -> Any:
839
+ """Given job_id or job_name, retrieve decorated ha job spec"""
840
+ if fetch_by_id_param is None and fetch_by_name_query is None:
841
+ raise click.ClickException(
842
+ "Either `--id` or `--name` must be passed in for object."
843
+ )
844
+ if fetch_by_id_param:
845
+ try:
846
+ return fetch_by_id(fetch_by_id_param).result # type: ignore
847
+ except Exception as e: # noqa: BLE001
848
+ raise click.ClickException(
849
+ f"Could not fetch {object_type_description} by id: {e}"
850
+ )
851
+
852
+ object_list_resp: List[Any] = fetch_by_name(**fetch_by_name_query).results
853
+ if len(object_list_resp) == 0:
854
+ raise click.ClickException(
855
+ f"No {object_type_description} found with the provided name"
856
+ )
857
+ if len(object_list_resp) > 1:
858
+ raise click.ClickException(
859
+ f"Multiple {object_type_description}s found with the provided name"
860
+ )
861
+ return object_list_resp[0]
anyscale/scripts.py CHANGED
@@ -22,6 +22,7 @@ from anyscale.commands.experimental_integrations_commands import (
22
22
  )
23
23
  from anyscale.commands.image_commands import image_cli
24
24
  from anyscale.commands.job_commands import job_cli
25
+ from anyscale.commands.job_queue_commands import job_queue_cli
25
26
  from anyscale.commands.list_commands import list_cli
26
27
  from anyscale.commands.llm.group import llm_cli
27
28
  from anyscale.commands.login_commands import anyscale_login, anyscale_logout
@@ -120,6 +121,7 @@ cli.add_command(version_cli)
120
121
  cli.add_command(list_cli)
121
122
  cli.add_command(cluster_env_cli)
122
123
  cli.add_command(job_cli)
124
+ # cli.add_command(job_queue_cli) # TODO will be enabled later
123
125
  cli.add_command(schedule_cli)
124
126
  cli.add_command(service_cli)
125
127
  cli.add_command(cluster_cli)
@@ -153,6 +155,7 @@ ALIASES = {
153
155
  "h": anyscale_help,
154
156
  "schedules": schedule_cli,
155
157
  "jobs": job_cli,
158
+ "jq": job_queue_cli,
156
159
  "services": service_cli,
157
160
  "cluster-compute": compute_config_cli,
158
161
  "images": image_cli,
@@ -108,7 +108,7 @@ class ProductionJobStateTransition(object):
108
108
  def state_transitioned_at(self):
109
109
  """Gets the state_transitioned_at of this ProductionJobStateTransition. # noqa: E501
110
110
 
111
- The last time the state of this job was updated. This includes updates to the state and to the goal state # noqa: E501
111
+ The last time the state of this job was updated # noqa: E501
112
112
 
113
113
  :return: The state_transitioned_at of this ProductionJobStateTransition. # noqa: E501
114
114
  :rtype: datetime
@@ -119,7 +119,7 @@ class ProductionJobStateTransition(object):
119
119
  def state_transitioned_at(self, state_transitioned_at):
120
120
  """Sets the state_transitioned_at of this ProductionJobStateTransition.
121
121
 
122
- The last time the state of this job was updated. This includes updates to the state and to the goal state # noqa: E501
122
+ The last time the state of this job was updated # noqa: E501
123
123
 
124
124
  :param state_transitioned_at: The state_transitioned_at of this ProductionJobStateTransition. # noqa: E501
125
125
  :type: datetime
anyscale/util.py CHANGED
@@ -987,7 +987,9 @@ def validate_job_config_dict(
987
987
  )
988
988
 
989
989
 
990
- def validate_list_jobs_state_filter(ctx, param, value) -> List[str]: # noqa: ARG001
990
+ def validate_list_jobs_state_filter(
991
+ _, param, value
992
+ ) -> List[HaJobStates]: # noqa: ARG001
991
993
  """
992
994
  Validate the job state filter for list jobs CLI method
993
995
  """
@@ -1,5 +1,6 @@
1
1
  from dataclasses import dataclass
2
2
  import inspect
3
+ import sys
3
4
  from typing import (
4
5
  Any,
5
6
  Callable,
@@ -166,3 +167,36 @@ def search_entities(
166
167
  entities = entities[:max_to_return]
167
168
 
168
169
  return entities
170
+
171
+
172
+ def paginate(
173
+ search_function: Callable[..., ListResponse[T]],
174
+ query_builder: Callable[[Optional[str], int], Dict],
175
+ page_size: int,
176
+ max_items: Optional[int] = None,
177
+ interactive: bool = True,
178
+ ):
179
+ max_items = max_items or sys.maxsize
180
+ queues = []
181
+ has_more, token = True, None
182
+
183
+ while has_more:
184
+ query_kwargs = query_builder(token, min(page_size, max_items))
185
+ resp = search_function(**query_kwargs)
186
+ token = resp.metadata.next_paging_token
187
+ batch, has_more = resp.results, token is not None
188
+ queues.extend(batch)
189
+ yield batch
190
+
191
+ if (
192
+ not has_more
193
+ or (not interactive and len(queues) >= max_items)
194
+ or (
195
+ interactive
196
+ and input("Press Enter to load more, or 'q' to quit: ").strip().lower()
197
+ == "q"
198
+ )
199
+ ):
200
+ break
201
+
202
+ max_items -= page_size
anyscale/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.26.19"
1
+ __version__ = "0.26.20"
@@ -422,11 +422,18 @@ class PrivateWorkspaceSDK(WorkloadSDK):
422
422
  should_warn_delete = True
423
423
  dry_run_options.append("--delete-excluded")
424
424
 
425
- result = subprocess.run(
426
- rsync_command + dry_run_options, capture_output=True, text=True, check=True
427
- )
428
- if result.returncode != 0:
429
- raise RuntimeError(f"Rsync failed with return code {result.returncode}")
425
+ try:
426
+ result = subprocess.run(
427
+ rsync_command + dry_run_options,
428
+ capture_output=True,
429
+ text=True,
430
+ check=True,
431
+ )
432
+ except subprocess.CalledProcessError as e:
433
+ self._logger.error(f"Error running rsync command: {e}")
434
+ self._logger.error(f">>> stdout: {e.stdout}")
435
+ self._logger.error(f">>> stderr: {e.stderr}")
436
+ raise RuntimeError(f"Rsync failed with return code {e.returncode}")
430
437
 
431
438
  _, deleting_files = self._parse_rsync_dry_run_output(result.stdout)
432
439
 
@@ -514,7 +521,13 @@ class PrivateWorkspaceSDK(WorkloadSDK):
514
521
  # Add -v / --verbose to the rsync command to be explicit about what is being transferred
515
522
  args += ["-v"]
516
523
 
517
- subprocess.run(args, check=True)
524
+ try:
525
+ subprocess.run(args, check=True, capture_output=True, text=True)
526
+ except subprocess.CalledProcessError as e:
527
+ self._logger.error(f">>> Error running rsync command: {e}")
528
+ self._logger.error(f">>> stdout: {e.stdout}")
529
+ self._logger.error(f">>> stderr: {e.stderr}")
530
+ raise RuntimeError(f"Rsync failed with return code {e.returncode}")
518
531
 
519
532
  def pull(
520
533
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anyscale
3
- Version: 0.26.19
3
+ Version: 0.26.20
4
4
  Summary: Command Line Interface for Anyscale
5
5
  Author: Anyscale Inc.
6
6
  License: AS License
@@ -23,11 +23,11 @@ anyscale/integrations.py,sha256=bv8m5rck0Cfxpi59klyYGJhPknpXtnHCSvF1Uu8vTHU,1339
23
23
  anyscale/links.py,sha256=xFXN5TjL61p5T23dn66nNalkV47LNkPJxQqOPhGXfww,193
24
24
  anyscale/memorydb_supported_zones.json,sha256=l5Iup9wFDZcHLfZqH640axxe4UiKteuraZRohi3MwRk,1098
25
25
  anyscale/project_utils.py,sha256=SBwkD5B10ku2kkmp6y-Cr5RL7xf52b9zELP35kfg2PE,17621
26
- anyscale/scripts.py,sha256=HR6JOCBVBXMVi1Kz5uJmjsh73t2l1W8UbUge83ofnqk,5474
26
+ anyscale/scripts.py,sha256=2LWIBxPHRhFG8m0La7xJXM2xKOQIG3SvlQobS4op2b0,5624
27
27
  anyscale/snapshot.py,sha256=UGJT5C1s_4xmQxjWODK5DFpGxHRBX5jOCdSCqXESH8E,1685
28
28
  anyscale/tables.py,sha256=TV4F2uLnwehvbkAfaP7iuLlT2wLIo6ORH2LVdRGXW5g,2840
29
- anyscale/util.py,sha256=Tqb9qWSxQI_PBJVSDxm9RWqFyGJFClgZDPByhb_fhU8,40813
30
- anyscale/version.py,sha256=hFTnREFUNV6k-r7gNk8pbgoXT_sSxa-pE2ccr7Zysn4,24
29
+ anyscale/util.py,sha256=hDV4_eopdMOoVpdHmhDmxNiK-dlaAbSXLva4BM_PJFE,40825
30
+ anyscale/version.py,sha256=X-hsRM2xjw6Bok6MI9VCbiKquoyDN6ZzXOXlauQNluQ,24
31
31
  anyscale/workspace_utils.py,sha256=OViE88CnIF5ruVxd3kazQ0Mf2BxqtMq6wx-XQ5A2cp8,1204
32
32
  anyscale/_private/anyscale_client/README.md,sha256=gk8obk7kqg6VWoUHcqDMwJULh35tYKEZFC0UF_dixGA,718
33
33
  anyscale/_private/anyscale_client/__init__.py,sha256=807Blx3RHQeS8BmKZcsOQQ4dYoKlCnpm6Bdsif2CrHg,337
@@ -39,7 +39,7 @@ anyscale/_private/docgen/__main__.py,sha256=rAKbkAjIyOps76XCrzqsxPdPTU4ANvEbeF3I
39
39
  anyscale/_private/docgen/api.md,sha256=4SbFnIzpQYcH-aBs0cu15BsVxiNxxnY8-Zb5Dqh4Oxw,30971
40
40
  anyscale/_private/docgen/generator.py,sha256=jAOaprAeU659glRDBATAkAQeYC1nDU14jgdobcILS1s,21737
41
41
  anyscale/_private/docgen/generator_legacy.py,sha256=pss_6ONF55XhARrKGcREDmg0J5plWact6USgb5Tr5mM,3002
42
- anyscale/_private/docgen/models.md,sha256=Bp4aitr5FPoQx3zak0_ObYDlAZ87Ui_lKACO-dskwCc,297715
42
+ anyscale/_private/docgen/models.md,sha256=z36cd7YqYr85Wx73bAKmNeLnhOvLUmm53ur66fWFsYo,297657
43
43
  anyscale/_private/models/__init__.py,sha256=ZrkdHhJZNeCYiogsHc_po8m7vaVdxEjkNGixNeYdlgs,125
44
44
  anyscale/_private/models/image_uri.py,sha256=CMzHc-MNTBsBXvX0G73bjkiznCbm95DYQusgXJ8drm8,3971
45
45
  anyscale/_private/models/model_base.py,sha256=11aJdjev8DRYoJtwVDrxJILkeoHyQirqOL4tclhD80s,8236
@@ -105,7 +105,7 @@ anyscale/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
105
105
  anyscale/background/job_runner.py,sha256=LTuv9JOahyv6C9i7DLQAONgQF6--FfYZEmJrKy-sUG8,2687
106
106
  anyscale/client/.gitignore,sha256=JZyvYEtT2DCSK9V5Joi6lQofhMik4PXiJRCWsg7SvqI,807
107
107
  anyscale/client/.openapi-generator-ignore,sha256=pu2PTide7pJtJ-DFLzDy0cTYQJRlrB-8RRH3zGLeUds,1040
108
- anyscale/client/README.md,sha256=bEjrx5pzn6U-M2QpW2KApHDYegoLY21eym-_aI6yLgg,114292
108
+ anyscale/client/README.md,sha256=O6_GbEec3kK3nCmsT-1Ty38DgE9nPb0T3bz_4D9Jli0,114934
109
109
  anyscale/client/git_push.sh,sha256=EDCZOTTiLxbtPHmiU63qC99rGH67B7dhdPZdNUKivF0,1827
110
110
  anyscale/client/requirements.txt,sha256=dkVKYUStC5h_g_87SH7pRdhXCj7ySozAJMGAFEzGgFc,126
111
111
  anyscale/client/setup.cfg,sha256=l7bdKSIedeBhhoDtupsBwx1xPrlBf2yYeTH7a8kMga4,28
@@ -113,14 +113,14 @@ anyscale/client/setup.py,sha256=tSxqw1kAL1B9adnrnOarjnQfSbwGmnTr_kg8ZXhlm5A,1109
113
113
  anyscale/client/test-requirements.txt,sha256=sTjmDTj5W9fh1ZAeo8UT2EBdeGDBNttj_PHiPBXg1D4,111
114
114
  anyscale/client/tox.ini,sha256=M6L3UmvAdvU65LsoAF-Oi7oRjwZlCJZn8I7ofdXn5Ok,156
115
115
  anyscale/client/.openapi-generator/VERSION,sha256=J0RzX-4u4jfin1kviKtmncjUePyjHm2kyvmkobOrt_E,5
116
- anyscale/client/openapi_client/__init__.py,sha256=ySbaln1TFr80dXJ01vme50yIv0ZQ1QvlcndHlrHtZzQ,50364
116
+ anyscale/client/openapi_client/__init__.py,sha256=AKLyqFCcA44mxSUjUSdOHqquGfpo43GW2FMFviIe8FA,50599
117
117
  anyscale/client/openapi_client/api_client.py,sha256=d8Un6j2Ny2vlS2qBXPVFj6_ql0k36DFahpWt_28TfCk,25563
118
118
  anyscale/client/openapi_client/configuration.py,sha256=Dd5XrlHwv-wxnf0C35PG_-HBQoY3Yaz6hKrmkZz-m0E,12363
119
119
  anyscale/client/openapi_client/exceptions.py,sha256=3egwsXQG2j_vARbqgBxUO1xSltAhpfiHTYVP7VXTvU0,3792
120
120
  anyscale/client/openapi_client/rest.py,sha256=Ehj37v7GHW6SXV067Hze5HE42ayKaGi6a6ZlkR7u3Lg,12501
121
121
  anyscale/client/openapi_client/api/__init__.py,sha256=i8u7BI2xX1GrXTL3hN0pKpYIlnT-D_uDxH2ElOfYG1I,141
122
- anyscale/client/openapi_client/api/default_api.py,sha256=raBUQ0-MpgNMBWYEBhjGRrOS0uaocfd-XTZ8gmllSyA,1838645
123
- anyscale/client/openapi_client/models/__init__.py,sha256=z3xuHxe4_-o1QRaeq2limpvsXMd5SmtZ0_Elx5McFSA,49874
122
+ anyscale/client/openapi_client/api/default_api.py,sha256=ZOm9tOfaM1-Vc_a1hiX-1jgPxbctMEwnffPzZDxEhK8,1851354
123
+ anyscale/client/openapi_client/models/__init__.py,sha256=EHfT0wokrwW-FbVSjXo-AM7vxP4O9DHUvqIttEonh0s,50109
124
124
  anyscale/client/openapi_client/models/access_config.py,sha256=b2mA0qtuTA5PFbp6C61Jc_T2zUMaojM1v32IhZo0MfY,3648
125
125
  anyscale/client/openapi_client/models/actor_status.py,sha256=6xyX_aIqURj2raBdY9DmBxsdDACFrqqYvElGiM6YG2E,2813
126
126
  anyscale/client/openapi_client/models/admin_create_user.py,sha256=9DPr8D0lKgoEZ3Z2kGsAd8L7ocFCiP6woOGLVs8SRb8,7251
@@ -314,7 +314,7 @@ anyscale/client/openapi_client/models/decorated_job.py,sha256=J0qHizRSKj-FTbHXJb
314
314
  anyscale/client/openapi_client/models/decorated_job_queue.py,sha256=CZ5uH0AwbLv1pTr8kwmMRkDapGMg5w2iXq0TcTfeCik,22295
315
315
  anyscale/client/openapi_client/models/decorated_list_service_api_model.py,sha256=T0RzqZDdP44_jVp7oNFJyBdRDWRvEXTUaS-2LMuWozU,24473
316
316
  anyscale/client/openapi_client/models/decorated_production_job.py,sha256=Usa0VXVIE_YZSh_1XeU--Mj9Z1jprp_HWTiLypB_xI8,25794
317
- anyscale/client/openapi_client/models/decorated_production_job_state_transition.py,sha256=7BpAF8r04RcNzBZT2boXASWeA4Roi44OT_r0q8yTIYk,10857
317
+ anyscale/client/openapi_client/models/decorated_production_job_state_transition.py,sha256=os2mHhohCHf-QxofQwO-q8d86cn8L0xXq_DmEJofJYo,10741
318
318
  anyscale/client/openapi_client/models/decorated_production_service_v2_api_model.py,sha256=imEsHKN8b_006BD3Zx0QCD1C4LWjGRduByLRgKYlq-0,24210
319
319
  anyscale/client/openapi_client/models/decorated_production_service_v2_version_api_model.py,sha256=I6mLkjAfXKWXejUOIBRvM9vt7W-XyvwU2MzXuYkyt-c,17231
320
320
  anyscale/client/openapi_client/models/decorated_schedule.py,sha256=zCDLO0og8GMMxv_43k3BjYB3MAGc3znGcKV28GYoJwU,18193
@@ -417,9 +417,11 @@ anyscale/client/openapi_client/models/job_details.py,sha256=3lta5zL96L-VFOHiTN3p
417
417
  anyscale/client/openapi_client/models/job_queue.py,sha256=Majhf_9Fo1K_WwgB6rjP1KLvKxUBtjNR5-VkA3K9jhM,15923
418
418
  anyscale/client/openapi_client/models/job_queue_config.py,sha256=gW1_u_bKHoVqJrfAVhtFk-p1mFUMTCSqJwhblL-61-A,3701
419
419
  anyscale/client/openapi_client/models/job_queue_execution_mode.py,sha256=5G2g8z_OmVzClUCfyNmKduHRJ0RsgXuliIBw5iXHoKI,2886
420
+ anyscale/client/openapi_client/models/job_queue_sort_directive.py,sha256=Hoz5fBMpG6rCZrjHYqZi91Lszs9MPlrIcyOhTHfuP8s,4568
421
+ anyscale/client/openapi_client/models/job_queue_sort_field.py,sha256=mb2yTPHGCbX3ENE3bsQNd0C4v0nU0Qt949sunZCJuDA,3137
420
422
  anyscale/client/openapi_client/models/job_queue_spec.py,sha256=7s4kjatMjuFtYJd8trZVW1lEsQ3SdOFsVbppZfdOAvA,9693
421
423
  anyscale/client/openapi_client/models/job_queue_state.py,sha256=5Ejli6rOUioLQj5EbABn02xPSwsBMgiFa3FW2WbCrp4,2830
422
- anyscale/client/openapi_client/models/job_queues_query.py,sha256=eJ11_nKrpAm-6038VDRFraIB-mr8DPOvJYJ8Peg9ZCA,7693
424
+ anyscale/client/openapi_client/models/job_queues_query.py,sha256=guOukU90OuMoMIousA8ZnXghSwk1VcLL2cwPgiyiFII,8784
423
425
  anyscale/client/openapi_client/models/job_report.py,sha256=B1TFEjlPQ46J8BCDFSr7g7PHh5nkxNRMRKxrMwZm8dQ,5982
424
426
  anyscale/client/openapi_client/models/job_run_type.py,sha256=S3eoraHzgnpxGysw3Sh24ZinKZYKWqgNWfO5oQg_p8o,2890
425
427
  anyscale/client/openapi_client/models/job_state_log_level_types.py,sha256=FCBUP-XKYXD4NsyW2_dBOhXNGKrDhEEF7s1rALRuFgE,2853
@@ -534,7 +536,7 @@ anyscale/client/openapi_client/models/production_job.py,sha256=fVDrDRonEiH6OVfKl
534
536
  anyscale/client/openapi_client/models/production_job_config.py,sha256=cW2TxSTUw-dDm3kGWa_tNet7dmJM3VVPJ75pWumosiA,12527
535
537
  anyscale/client/openapi_client/models/production_job_event.py,sha256=VljH0Qm09GbEHsb9je3LDcENu9MwD3pRISRJipwrV_s,11432
536
538
  anyscale/client/openapi_client/models/production_job_event_scope_filter.py,sha256=12DobzeEMTXhjDgELgR4noOLLodf-7lkwHcER2IED7s,2910
537
- anyscale/client/openapi_client/models/production_job_state_transition.py,sha256=b6bXss7U9japd-Vzt_ZIRBgBG-L9SgtdiLZSs-O5HyU,9808
539
+ anyscale/client/openapi_client/models/production_job_state_transition.py,sha256=yj6OVCo_bmJYNSa3t7RquX98KPdyaL3M-qlDcSwPUPU,9692
538
540
  anyscale/client/openapi_client/models/productionjob_response.py,sha256=5ft3ywRCus84N9g1FUt85PPe2FVRHyQBFBaPThG0TAA,3561
539
541
  anyscale/client/openapi_client/models/productionjobevent_list_response.py,sha256=PNHTXQj4hx6e4vC-G9INezPNlc39B-9ByVgMh5zxuVs,4467
540
542
  anyscale/client/openapi_client/models/project.py,sha256=4HYfLu2e_tce6JJwOC2PvEG2OMq3aKV26xDEZINTICs,16597
@@ -666,6 +668,7 @@ anyscale/client/openapi_client/models/update_cloud_collaborator.py,sha256=9jWSKG
666
668
  anyscale/client/openapi_client/models/update_cloud_with_cloud_resource.py,sha256=6eRMQHPB0s02qJoWvSiuHvtju467k5OsKuufd2Lch2c,5876
667
669
  anyscale/client/openapi_client/models/update_cloud_with_cloud_resource_gcp.py,sha256=qrHjRe0pFdddwx8ZsA6V2mIXjnX6NYBKBQV2GBja6Ck,5941
668
670
  anyscale/client/openapi_client/models/update_cluster_dns.py,sha256=eFCs_MSsb21TPWmPb4MQ67R0bcxfbTaCm2pdKh1FkEw,4575
671
+ anyscale/client/openapi_client/models/update_job_queue_request.py,sha256=2TkcpA9j0TnCqwfi19DELVhmyrusNpH0BGX0MG2IK28,4820
669
672
  anyscale/client/openapi_client/models/update_machine_pool_request.py,sha256=Pi5R5BzHrIWBUch7t7zifYCXycSpanQLimzpmBOCujg,4778
670
673
  anyscale/client/openapi_client/models/update_organization_collaborator.py,sha256=2PzbKhiVmAAJXq_k-FxIP5ntaVpDQQk4LC7mMEeZfPY,3885
671
674
  anyscale/client/openapi_client/models/update_project_collaborator.py,sha256=xT3k_qmoR_8Fxx9z5KwSxnbR08T2KILf38TAFfRCdZQ,3809
@@ -734,13 +737,14 @@ anyscale/commands/cloud_commands.py,sha256=80NOTU4V2_ApOyTJaFEtm0TPwFa6tqocC1m34
734
737
  anyscale/commands/cloud_commands_util.py,sha256=d-6TSZ_syrGkZ3Fc1uRX6jG4dqYMebNkBNpYLojOJFg,247
735
738
  anyscale/commands/cluster_commands.py,sha256=taNcffyFfqJ1MgOQd0cz9kzRXWFTdp-wfLPM4l_2tBc,13487
736
739
  anyscale/commands/cluster_env_commands.py,sha256=KNWylyE8Ew1sDi7yu2Tp4RLcRu2_KJJJIzVGRyPflJo,3899
737
- anyscale/commands/command_examples.py,sha256=tyjKkelFufE5ea01ogrJPEVxv4Xo7GQYz8vPX4ZWSlQ,23654
740
+ anyscale/commands/command_examples.py,sha256=NPUvnaHregPYQz8jFEFM-0RtU86OL5b49gDP6yOnJuA,26356
738
741
  anyscale/commands/compute_config_commands.py,sha256=vdyrtMcdP8eeK32p_Y6zF-qps6_SyzprhbjRZ9p18tQ,7828
739
742
  anyscale/commands/config_commands.py,sha256=p55uM6WrhfbFoRXC9hNAV-8c5ANghw7tBUYwaQDAtjE,7195
740
743
  anyscale/commands/exec_commands.py,sha256=cMOP1u6xQbl81h69Jug3y73XnNSwpbM6XC1X57SIp4c,465
741
744
  anyscale/commands/experimental_integrations_commands.py,sha256=_e1yESwRGu621Y5MUBqdC3S79YJUdEG1W67b_uQL8wY,2038
742
745
  anyscale/commands/image_commands.py,sha256=M5UIxeBx40tZWzOJ51dtmB3rjj4VUmxNeK0rWqo0c_w,3489
743
- anyscale/commands/job_commands.py,sha256=YMR981a3MY6oxyVKCqc4EFY6VZF7s_Wtjoi1cde3fDk,25097
746
+ anyscale/commands/job_commands.py,sha256=_U3imBldpwXv-Y-7gWZp3dzt9okpQzACC414H2mPbRg,25113
747
+ anyscale/commands/job_queue_commands.py,sha256=eq80XfHJpajBY9sBfdFqQRiuZfcHJGTYFm7eX_gESUQ,4953
744
748
  anyscale/commands/list_commands.py,sha256=rcDn-Qh3z99zE9oD7RPPa80-y0ml90W4UbGiYMw4aQo,2710
745
749
  anyscale/commands/login_commands.py,sha256=0pIjpRC3Mw86WjDubJ5v2FHINke-Tk3JvGal_aiQMG0,3477
746
750
  anyscale/commands/logs_commands.py,sha256=OgOwBsEbhcGH-STQ9MOJy8sQBYcZYmd31wzHzVPUo0g,9495
@@ -783,7 +787,7 @@ anyscale/controllers/cluster_env_controller.py,sha256=JalGzcmnFtMHefYL5U6ijMY3nX
783
787
  anyscale/controllers/compute_config_controller.py,sha256=GnZAJGrPAmGO6MWvqna-0-DBlwC1y8fnKgwsDVa0eDs,14110
784
788
  anyscale/controllers/config_controller.py,sha256=VsfdARHxo4tMLfeiYkTNOMGW3sIcNhVqYi37-SruKnk,17125
785
789
  anyscale/controllers/experimental_integrations_controller.py,sha256=_22_hAQCJIMg3E10s8xajoFF6Lf1HqVlAdAVt0Rh2DY,3889
786
- anyscale/controllers/job_controller.py,sha256=erTTnvUroBe7Cn2_eY9SipuqOTjPdgkYigshGR8qCBk,25206
790
+ anyscale/controllers/job_controller.py,sha256=Ef04X790FiohE-n3_n8crJv2zZbTfF6qrTP1q9_3wA0,32050
787
791
  anyscale/controllers/jobs_bg_controller.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
788
792
  anyscale/controllers/list_controller.py,sha256=oaOS6oo2TKPpXhGjs_laxuIVKinv3FwYfHt1CIzeTuU,11621
789
793
  anyscale/controllers/logs_controller.py,sha256=x5GBUVdPYhbWRA3RfMQZJi3hBS2i35RkgzROfmY47h4,17647
@@ -965,7 +969,7 @@ anyscale/sdk/anyscale_client/models/page_query.py,sha256=1ttjaka8K-6HJiZhwyP9FdN
965
969
  anyscale/sdk/anyscale_client/models/pause_schedule.py,sha256=iq-YgjLtLJ5J--PWYmwG_p_3urs-sUXyKEKrk57VNUU,3659
966
970
  anyscale/sdk/anyscale_client/models/production_job.py,sha256=kY8J6rp9coKU_S4zs2qp9eViRBxM9zk2SuoImLT4X84,13670
967
971
  anyscale/sdk/anyscale_client/models/production_job_config.py,sha256=LivnH-ciVThyqbt8njyeBUEvukbu3CQEcUmCbdKrbG0,12525
968
- anyscale/sdk/anyscale_client/models/production_job_state_transition.py,sha256=ZH8mVTsUR8DWRndJqs0aKqsZeIFGTcJLQbQIecz51cM,9806
972
+ anyscale/sdk/anyscale_client/models/production_job_state_transition.py,sha256=15P0Zapr4f6oqeriVx8IJxnrh0_4_seZ77zgaMhdJmo,9690
969
973
  anyscale/sdk/anyscale_client/models/production_service_v2_model.py,sha256=9M2mC0sCWv4SShFAKflodLszlZQjubN59RBhTENTWK0,22183
970
974
  anyscale/sdk/anyscale_client/models/production_service_v2_version_model.py,sha256=HL76FokL3YLNIBS42_t5yTyKnlyJo47v6o4bTu1q-gk,16605
971
975
  anyscale/sdk/anyscale_client/models/productionjob_list_response.py,sha256=Dn8eUwKWtviO0htJpjptuE6NUtYNHCvQrVs5hJo2nxA,4390
@@ -1072,7 +1076,7 @@ anyscale/utils/cli_version_check_util.py,sha256=U2KU-NRf09pcs-ZZYUm1GQxs7Btp6N4F
1072
1076
  anyscale/utils/cloud_update_utils.py,sha256=c53AQyg4OJBkNqTD-8hHvEpdTwtins1rTycifBbQbWI,34106
1073
1077
  anyscale/utils/cloud_utils.py,sha256=ww4to0gL7mq1ALuJfpJ6GZvE4Vxn2qTkH834YO7ARoQ,11569
1074
1078
  anyscale/utils/cluster_debug.py,sha256=P_-20L4Rt4LVAIGX-y9F61z5XYO5QbNtqf2MYJxuy_g,6391
1075
- anyscale/utils/connect_helpers.py,sha256=vHKOsZcKzIqZjUgXPSjBKZd_1L45QwSc9gTp4DqwRjE,5013
1079
+ anyscale/utils/connect_helpers.py,sha256=hlTKnaL27pABWPoW5nA5dpJW2ZG_2k7dXjnqtdzoBjo,5956
1076
1080
  anyscale/utils/deprecation_util.py,sha256=2i1SNQIziOZXO24IuBZZUEi4ild1bqk0gfZWl2KgpXw,1160
1077
1081
  anyscale/utils/entity_arg_utils.py,sha256=HdrFNVgpPqnpv10jVOGg49bmoGy92N306u2JIy0hmqI,1061
1078
1082
  anyscale/utils/env_utils.py,sha256=QPPxwkAzIWYasZIg7apDCGwcdbQLT7qCYr9pwfNTOX0,390
@@ -1101,11 +1105,11 @@ anyscale/webterminal/webterminal.py,sha256=4u8dTTsxidTi4iH_5Zt7PF9ZgDFSZ_8Ndhx1k
1101
1105
  anyscale/workspace/__init__.py,sha256=Innbm5ZhCyADEVBiYSo_vbpKwUNcMzVSAfxIGKOYe6Q,7989
1102
1106
  anyscale/workspace/commands.py,sha256=b1sqNseoPj-1VXznqQOLe0V_a663bOTvJX-TaOMJa1Y,14590
1103
1107
  anyscale/workspace/models.py,sha256=Ey67KqxdslS51yK7xetbRaFjE8sURAArpf-F38r3cUU,9760
1104
- anyscale/workspace/_private/workspace_sdk.py,sha256=l2baX2BtLX90ZJU3XZpwiDK_xM3SCjvjNv-pr6yUK2o,26938
1105
- anyscale-0.26.19.dist-info/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
1106
- anyscale-0.26.19.dist-info/METADATA,sha256=5uqOQrRbYNbnQ8XN1-8-Oo2H9Iu3zyiYa-Lpx0YyhLE,3160
1107
- anyscale-0.26.19.dist-info/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
1108
- anyscale-0.26.19.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
1109
- anyscale-0.26.19.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
1110
- anyscale-0.26.19.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
1111
- anyscale-0.26.19.dist-info/RECORD,,
1108
+ anyscale/workspace/_private/workspace_sdk.py,sha256=2CMeYfJt0UtIFCocDn1ukw1iI5esKHdopLe6duEs-qE,27599
1109
+ anyscale-0.26.20.dist-info/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
1110
+ anyscale-0.26.20.dist-info/METADATA,sha256=xclosJZ8AIElbWJuQzprTvYnOWI-eZ40_H14Sd66h1s,3160
1111
+ anyscale-0.26.20.dist-info/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
1112
+ anyscale-0.26.20.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
1113
+ anyscale-0.26.20.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
1114
+ anyscale-0.26.20.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
1115
+ anyscale-0.26.20.dist-info/RECORD,,