1717
1818UPLOADCOOKIE = None
1919
20+ from recipe_system import version
21+
2022class RemoteDB (CalDB ):
2123 """
2224 The class for remote calibration databases. It inherits from CalDB, but
@@ -165,6 +167,7 @@ def retrieve_calibration(rqurl, rq, howmany=1):
165167 'descriptors' : make_dict_json_encodable (rq .descriptors )})
166168 try :
167169 calrq = urllib .request .Request (rqurl )
170+ rqurl .add_header ('User-Agent' , 'GeminiDRAGONS ' + version ())
168171 u = urllib .request .urlopen (calrq , postdata .encode ('utf-8' ))
169172 response = u .read ()
170173 except (urllib .error .HTTPError , urllib .error .URLError ) as err :
@@ -175,7 +178,22 @@ def retrieve_calibration(rqurl, rq, howmany=1):
175178
176179 try :
177180 results = json .loads (response )
178- cals = results [0 ]['cal_info' ][0 ]['cals' ]
181+ if len (results ) == 0 :
182+ return None , 'Remote Cal manager returned results for zero files'
183+ if len (results ) != 1 :
184+ return None , 'Remote Cal manager returned results for multiple files'
185+ cal_info = results [0 ].get ('cal_info' )
186+ if cal_info is None :
187+ return None , 'Remote Cal manager result contained no cal_info item'
188+ if len (cal_info ) == 0 :
189+ return None , 'Remote Cal manager result cal_info list empty'
190+ if len (cal_info ) != 0 :
191+ return None , 'Remote Cal manager result cal_info list contained multiple entries'
192+ cals = results [0 ]['cal_info' ][0 ].get ('cals' )
193+ if cals is None :
194+ return None , 'Remote Cal manager result cals list missing'
195+ if len (cals ) == 0 :
196+ return None , 'Remote Cal manager result cals list empty'
179197 calurlel = [d ['url' ] for d in cals ]
180198 calurlmd5 = [d ['md5' ] for d in cals ]
181199
0 commit comments