@@ -909,6 +909,38 @@ def service_request_async(self, service, params, *, pagesize=None, page=None, **
909
909
910
910
return self ._portal_api_connection .service_request_async (service , params , pagesize , page , ** kwargs )
911
911
912
+ def mast_query (self , service , columns = '*' , ** kwargs ):
913
+ # Specific keywords related to positional and MashupRequest parameters.
914
+ position_keys = ['ra' , 'dec' , 'radius' , 'position' ]
915
+ request_keys = ['format' , 'data' , 'filename' , 'timeout' , 'clearcache' ,
916
+ 'removecache' , 'removenullcolumns' , 'page' , 'pagesize' ]
917
+
918
+ # Explicit formatting for Mast's filtered services
919
+ if 'Filtered' in service :
920
+
921
+ # Separating the filter params from the positional and service_request method params.
922
+ filters = [{'paramName' : k , 'values' : kwargs [k ]} for k in kwargs
923
+ if k not in position_keys + request_keys ]
924
+ position_params = {k : v for k , v in kwargs .items () if k in position_keys }
925
+ request_params = {k : v for k , v in kwargs .items () if k in request_keys }
926
+
927
+ # Mast's filtered services require at least one filter
928
+ if filters == []:
929
+ raise InvalidQueryError ("Please provide at least one filter." )
930
+
931
+ # Building 'params' for Mast.service_request
932
+ params = {'columns' : columns ,
933
+ 'filters' : filters ,
934
+ ** position_params
935
+ }
936
+ else :
937
+
938
+ # Separating service specific params from service_request method params
939
+ params = {k : v for k , v in kwargs .items () if k not in request_keys }
940
+ request_params = {k : v for k , v in kwargs .items () if k in request_keys }
941
+
942
+ return self .service_request (service , params , ** request_params )
943
+
912
944
913
945
Observations = ObservationsClass ()
914
946
Mast = MastClass ()
0 commit comments