8
8
9
9
from .service import Service
10
10
11
+
12
+ from typing import Union , TextIO
13
+
14
+
11
15
DEFAULT_SERVER = "cas-shared-default"
12
16
DEFAULT_CASLIB = "casuser"
13
17
@@ -22,7 +26,7 @@ class CASManagement(Service):
22
26
list_servers , get_server , _ , _ = Service ._crud_funcs ("/servers" , "server" )
23
27
24
28
@classmethod
25
- def list_caslibs (cls , server , filter_ = None ):
29
+ def list_caslibs (cls , server : Union [ str , dict ], filter_ : str = None ):
26
30
"""List caslibs available on a server.
27
31
28
32
Parameters
@@ -44,7 +48,7 @@ def list_caslibs(cls, server, filter_=None):
44
48
)
45
49
46
50
@classmethod
47
- def get_caslib (cls , name , server = None ):
51
+ def get_caslib (cls , name : str , server : str = None ):
48
52
"""Get a caslib by name.
49
53
50
54
Parameters
@@ -67,7 +71,7 @@ def get_caslib(cls, name, server=None):
67
71
return None
68
72
69
73
@classmethod
70
- def list_tables (cls , caslib , server = None , filter_ = None ):
74
+ def list_tables (cls , caslib : Union [ str , dict ], server : str = None , filter_ : str = None ):
71
75
"""List tables available in a caslib.
72
76
73
77
Parameters
@@ -92,7 +96,7 @@ def list_tables(cls, caslib, server=None, filter_=None):
92
96
)
93
97
94
98
@classmethod
95
- def get_table (cls , name , caslib = None , server = None ):
99
+ def get_table (cls , name : str , caslib : Union [ str , dict ] = None , server : str = None ):
96
100
"""Get a table by name.
97
101
98
102
Parameters
@@ -121,7 +125,7 @@ def get_table(cls, name, caslib=None, server=None):
121
125
122
126
@classmethod
123
127
def upload_file (
124
- cls , file , name , caslib = None , server = None , header = None , format_ = None
128
+ cls , file : Union [ str , TextIO ], name : str , caslib : str = None , server : str = None , header : bool = None , format_ : str = None
125
129
):
126
130
"""Upload a file to a CAS table.
127
131
@@ -184,3 +188,57 @@ def upload_file(
184
188
files = {name : file },
185
189
)
186
190
return tbl
191
+
192
+ @classmethod
193
+ def update_state_table (cls , value : str , name : str , caslib :str = None , server :str = None , * , qparams :dict = None , body :dict = dict ()):
194
+ """Modifies the state of a table to loaded or unloaded.
195
+ Returns loaded or unloaded to indicate the state after the operation.
196
+
197
+ Parameters
198
+ ----------
199
+ value : str, required
200
+ State to which to set the table. Valid values include `loaded` or `unloaded`.
201
+ name : str, required
202
+ Name of the table.
203
+ caslib : str, optional
204
+ Name of the caslib. Defaults to CASUSER.
205
+ server : str, optional
206
+ Server where the `caslib` is registered.
207
+ qparams: dict, optional
208
+ Query parameters such as `sessionId`,`scope`,`sourceTableName`, `createRelationships`.
209
+ body : dict, optional
210
+ Extra instructions providing greater control over the output when a state change to loaded is requested.
211
+ Valid key-value pairs are `copies`, `label`, `outputCaslibName`, `outputTableName`, `parameters`,
212
+ `replace`, `replaceMode`, `scope`.
213
+
214
+ Returns
215
+ -------
216
+ RestObj
217
+
218
+ """
219
+ caslib = caslib or DEFAULT_CASLIB
220
+
221
+ if value in ['loaded' , 'unloaded' ]:
222
+ query = {
223
+ "value" :value
224
+ }
225
+ else :
226
+ raise ValueError ("The state can only have values of `loaded` or `unloaded`." )
227
+
228
+ if qparams is not None :
229
+ dict .update (qparams ,query )
230
+
231
+ allowedKeys = ["copies" , "label" , "outputCaslibName" , "outputTableName" , "parameters" ,
232
+ "replace" , "replaceMode" ,"scope" ]
233
+
234
+ if not all (key in allowedKeys for key in body .keys ()) :
235
+ raise ValueError ("The body accepts only the following parameters %s." % (allowedKeys ))
236
+
237
+
238
+ tbl = cls .put (
239
+ "/servers/%s/caslibs/%s/tables/%s/state" % (server , caslib ,name ),
240
+ params = query ,
241
+ json = body
242
+ )
243
+
244
+ return tbl
0 commit comments