@@ -65,35 +65,60 @@ def stop_experiment(experiment_handle, api=experiments_api):
6565 _log_response (response , "Experiment stopped" , "Unknown error while stopping the experiment" )
6666
6767
68- def _make_experiments_list_table (experiments ):
69- data = [("Name" , "Handle" , "Status" )]
70- for experiment in experiments :
71- name = experiment ["templateHistory" ]["params" ].get ("name" )
72- handle = experiment ["handle" ]
73- status = constants .ExperimentState .get_state_str (experiment ["state" ])
74- data .append ((name , handle , status ))
68+ class ListExperimentsCommand (object ):
69+ def __init__ (self , api = experiments_api ):
70+ self .api = api
7571
76- ascii_table = terminaltables .AsciiTable (data )
77- table_string = ascii_table .table
78- return table_string
72+ def execute (self , project_handle = None ):
73+ # TODO: change to limit: -1 when PS-9535 is deployed to production
74+ params = {"limit" : 1000000 } # to list all experiments
75+ if project_handle :
76+ params ["projectHandle[0]" ] = project_handle
77+ response = self .api .get ("/experiments/" , params = params )
7978
80-
81- def list_experiments (api = experiments_api ):
82- # TODO: change to limit: -1 when PS-9535 is deployed to production
83- response = api .get ("/experiments/" , params = {"limit" : 1000000 })
84- details = response .content
85- if response .ok :
8679 try :
87- experiments = response .json ()["data" ]
88- details = _make_experiments_list_table (experiments )
80+ experiments = self ._get_experiments_list (response , bool (project_handle ))
8981 except (ValueError , KeyError ) as e :
90- logger .log ("Error parsing response data" )
91- logger .debug (e )
92-
93- if response .ok and len (details .splitlines ()) > get_terminal_lines ():
94- pydoc .pager (details )
95- else :
96- _log_response (response , details , "Unknown error while retrieving list of experiments" )
82+ logger .log ("Error while parsing response data" )
83+ else :
84+ self ._log_experiments_list (experiments )
85+
86+ @staticmethod
87+ def _make_experiments_list_table (experiments ):
88+ data = [("Name" , "Handle" , "Status" )]
89+ for experiment in experiments :
90+ name = experiment ["templateHistory" ]["params" ].get ("name" )
91+ handle = experiment ["handle" ]
92+ status = constants .ExperimentState .get_state_str (experiment ["state" ])
93+ data .append ((name , handle , status ))
94+
95+ ascii_table = terminaltables .AsciiTable (data )
96+ table_string = ascii_table .table
97+ return table_string
98+
99+ @staticmethod
100+ def _get_experiments_list (response , filtered = False ):
101+ """"""
102+
103+ if not response .ok :
104+ raise ValueError ("Unknown error" )
105+
106+ experiments = response .json ()["data" ]
107+ if not filtered : # If filtering by projectHandle response data has different format
108+ return experiments
109+
110+ experiments = [experiment for experiment in experiments [0 ]["data" ]]
111+ return experiments
112+
113+ def _log_experiments_list (self , experiments ):
114+ if not experiments :
115+ logger .log ("No experiments found" )
116+ else :
117+ table_str = self ._make_experiments_list_table (experiments )
118+ if len (table_str .splitlines ()) > get_terminal_lines ():
119+ pydoc .pager (table_str )
120+ else :
121+ logger .log (table_str )
97122
98123
99124def _make_details_table (experiment ):
0 commit comments