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.
- anyscale/_private/docgen/models.md +1 -1
- anyscale/client/README.md +6 -1
- anyscale/client/openapi_client/__init__.py +3 -0
- anyscale/client/openapi_client/api/default_api.py +269 -17
- anyscale/client/openapi_client/models/__init__.py +3 -0
- anyscale/client/openapi_client/models/decorated_production_job_state_transition.py +2 -2
- anyscale/client/openapi_client/models/job_queue_sort_directive.py +148 -0
- anyscale/client/openapi_client/models/job_queue_sort_field.py +107 -0
- anyscale/client/openapi_client/models/job_queues_query.py +31 -3
- anyscale/client/openapi_client/models/production_job_state_transition.py +2 -2
- anyscale/client/openapi_client/models/update_job_queue_request.py +150 -0
- anyscale/commands/command_examples.py +58 -0
- anyscale/commands/job_commands.py +2 -2
- anyscale/commands/job_queue_commands.py +172 -0
- anyscale/controllers/job_controller.py +215 -3
- anyscale/scripts.py +3 -0
- anyscale/sdk/anyscale_client/models/production_job_state_transition.py +2 -2
- anyscale/util.py +3 -1
- anyscale/utils/connect_helpers.py +34 -0
- anyscale/version.py +1 -1
- anyscale/workspace/_private/workspace_sdk.py +19 -6
- {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/METADATA +1 -1
- {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/RECORD +28 -24
- {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/LICENSE +0 -0
- {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/NOTICE +0 -0
- {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/WHEEL +0 -0
- {anyscale-0.26.19.dist-info → anyscale-0.26.20.dist-info}/entry_points.txt +0 -0
- {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[
|
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
|
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
|
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(
|
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.
|
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
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
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
|
-
|
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,
|
@@ -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=
|
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=
|
30
|
-
anyscale/version.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
123
|
-
anyscale/client/openapi_client/models/__init__.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
1105
|
-
anyscale-0.26.
|
1106
|
-
anyscale-0.26.
|
1107
|
-
anyscale-0.26.
|
1108
|
-
anyscale-0.26.
|
1109
|
-
anyscale-0.26.
|
1110
|
-
anyscale-0.26.
|
1111
|
-
anyscale-0.26.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|