Skip to content

Commit cc0a503

Browse files
add method in cas_management: update_state_table
1 parent 4a3da74 commit cc0a503

File tree

1 file changed

+63
-5
lines changed

1 file changed

+63
-5
lines changed

src/sasctl/_services/cas_management.py

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
from .service import Service
1010

11+
12+
from typing import Union, TextIO
13+
14+
1115
DEFAULT_SERVER = "cas-shared-default"
1216
DEFAULT_CASLIB = "casuser"
1317

@@ -22,7 +26,7 @@ class CASManagement(Service):
2226
list_servers, get_server, _, _ = Service._crud_funcs("/servers", "server")
2327

2428
@classmethod
25-
def list_caslibs(cls, server, filter_=None):
29+
def list_caslibs(cls, server:Union[str,dict], filter_:str=None):
2630
"""List caslibs available on a server.
2731
2832
Parameters
@@ -44,7 +48,7 @@ def list_caslibs(cls, server, filter_=None):
4448
)
4549

4650
@classmethod
47-
def get_caslib(cls, name, server=None):
51+
def get_caslib(cls, name:str, server:str=None):
4852
"""Get a caslib by name.
4953
5054
Parameters
@@ -67,7 +71,7 @@ def get_caslib(cls, name, server=None):
6771
return None
6872

6973
@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):
7175
"""List tables available in a caslib.
7276
7377
Parameters
@@ -92,7 +96,7 @@ def list_tables(cls, caslib, server=None, filter_=None):
9296
)
9397

9498
@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):
96100
"""Get a table by name.
97101
98102
Parameters
@@ -121,7 +125,7 @@ def get_table(cls, name, caslib=None, server=None):
121125

122126
@classmethod
123127
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
125129
):
126130
"""Upload a file to a CAS table.
127131
@@ -184,3 +188,57 @@ def upload_file(
184188
files={name: file},
185189
)
186190
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

Comments
 (0)