6
6
7
7
import requests
8
8
9
- import zocalo .configuration
9
+ from zocalo .configuration import Configuration
10
10
11
11
from . import models
12
12
@@ -15,7 +15,7 @@ class SlurmRestApi:
15
15
def __init__ (
16
16
self ,
17
17
url : str ,
18
- version : str = "v0.0.36 " ,
18
+ version : str = "v0.0.40 " ,
19
19
user_name : str | None = None ,
20
20
user_token : str | pathlib .Path | None = None ,
21
21
):
@@ -35,12 +35,13 @@ def __init__(
35
35
self .session .headers ["X-SLURM-USER-TOKEN" ] = self .user_token
36
36
37
37
@classmethod
38
- def from_zocalo_configuration (cls , zc : zocalo .configuration .Configuration ):
38
+ def from_zocalo_configuration (cls , zc : Configuration , cluster : str = "slurm" ):
39
+ cluster_config = getattr (zc , cluster )
39
40
return cls (
40
- url = zc . slurm ["url" ],
41
- version = zc . slurm ["api_version" ],
42
- user_name = zc . slurm .get ("user" ),
43
- user_token = zc . slurm .get ("user_token" ),
41
+ url = cluster_config ["url" ],
42
+ version = cluster_config ["api_version" ],
43
+ user_name = cluster_config .get ("user" ),
44
+ user_token = cluster_config .get ("user_token" ),
44
45
)
45
46
46
47
def get (
@@ -93,19 +94,21 @@ def delete(
93
94
response .raise_for_status ()
94
95
return response
95
96
96
- def get_jobs (self ) -> models .JobsResponse :
97
+ def get_jobs (self ) -> models .OpenapiJobInfoResp :
97
98
endpoint = f"slurm/{ self .version } /jobs"
98
99
response = self .get (endpoint )
99
- return models .JobsResponse (** response .json ())
100
+ return models .OpenapiJobInfoResp (** response .json ())
100
101
101
- def get_job_info (self , job_id : int ) -> models .JobsResponse :
102
+ def get_job_info (self , job_id : int ) -> models .JobInfo :
102
103
endpoint = f"slurm/{ self .version } /job/{ job_id } "
103
104
response = self .get (endpoint )
104
- return models .JobsResponse (** response .json ())
105
+ job_info_resp = models .OpenapiJobInfoResp (** response .json ())
106
+ jobinfo = next (iter (dict (job_info_resp .jobs ).get ("__root__" , [])))
107
+ return jobinfo
105
108
106
109
def submit_job (
107
- self , job_submission : models .JobSubmission
108
- ) -> models .JobSubmissionResponse :
110
+ self , job_submission : models .JobSubmitReq
111
+ ) -> models .JobSubmitResponseMsg :
109
112
endpoint = f"slurm/{ self .version } /job/submit"
110
113
response = self .post (endpoint , json = job_submission .dict (exclude_defaults = True ))
111
- return models .JobSubmissionResponse (** response .json ())
114
+ return models .JobSubmitResponseMsg (** response .json ())
0 commit comments