32 __all__ = [
"MapperTests"]
 
   37     Generic tests of obs_* package mapper functionality. 
   39     In the subclasses's setUp(): 
   40         * Call setUp_mapper() to fill in required parameters. 
   49                      metadata_output_path=None,
 
   51                      map_python_std_type=None,
 
   53                      map_storage_name=None,
 
   57                      test_config_metadata=True,
 
   60         Set up the necessary variables for mapper tests. 
   66             full path to output repository (can be the same as data_dir input repository) 
   68             full path to the raw file referenced by dataIds['raw'] 
   70             dictionary keys that this mapper should contain 
   72             format list for the results portion of queryMetadata 
   73         queryMetadata : `tuple` of (`dict`, `tuple`) 
   74             dataIds and the results of calling them in queryMetadata 
   75         metadata_output_path : `str` 
   76             path to metadata output associated with dataIds['raw'] 
   77         map_python_type : `type` 
   78             full python type specification returned by the mapper for dataIds['raw'] 
   79         map_python_std_type : `type` 
   80             full python type specification returned by the mapper for dataIds['raw'] after standardization 
   82             C++ type specification returned by the mapper for dataIds['raw'] 
   83         map_storage_name : `str` 
   84             butler name for the storage type dataIds['raw'] 
   86             Name of the raw files returned by the mapper for dataIds['raw'] 
   88             value returned from mapper.getDefaultLevel 
   89         raw_levels : `tuple` of (`str`, `set` of `str`) 
   90             (level, expect) level and expected mapper return for mapper.getKeys('raw', level) 
   91         test_config_metadata : `bool` 
   92             Test persisted config and metadata?  These tests may not be appropriate for test stand data. 
  100                   'metadata_output_path',
 
  102                   'map_python_std_type',
 
  108                   'test_config_metadata',
 
  110         MapperData = collections.namedtuple(
"MapperData", fields)
 
  112                                       path_to_raw=path_to_raw,
 
  114                                       query_format=query_format,
 
  115                                       queryMetadata=queryMetadata,
 
  116                                       metadata_output_path=metadata_output_path,
 
  117                                       map_python_type=map_python_type,
 
  118                                       map_python_std_type=map_python_std_type,
 
  119                                       map_cpp_type=map_cpp_type,
 
  120                                       map_storage_name=map_storage_name,
 
  121                                       raw_filename=raw_filename,
 
  122                                       default_level=default_level,
 
  123                                       raw_levels=raw_levels,
 
  124                                       test_config_metadata=test_config_metadata,
 
  129             self.skipTest(
'Skipping %s as requested' % (inspect.currentframe().f_code.co_name))
 
  130         dataId = self.dataIds[
'raw']
 
  131         butlerLocation = self.mapper.map(
"processCcd_config_filename", dataId)
 
  132         self.assertEqual(butlerLocation.getPythonType(), 
"lsst.pipe.tasks.processCcd.ProcessCcdConfig")
 
  133         self.assertEqual(butlerLocation.getCppType(), 
"Config")
 
  134         self.assertEqual(butlerLocation.getStorageName(), 
"ConfigStorage")
 
  135         processCcd_path = os.path.join(
"config", 
"processCcd.py")
 
  136         self.assertEqual(self.mapper.root, butlerLocation.getStorage().root)
 
  137         self.assertEqual(butlerLocation.getLocations(), [processCcd_path])
 
  138         for k, v 
in dataId.items():
 
  139             self.assertEqual(butlerLocation.getAdditionalData().getScalar(k), v,
 
  140                              msg=
"Failed for key={}".
format(k))
 
  144             self.skipTest(
'Skipping %s as requested' % (inspect.currentframe().f_code.co_name))
 
  145         dataId = self.dataIds[
'raw']
 
  146         butlerLocation = self.mapper.map_processCcd_metadata(dataId)
 
  147         self.assertEqual(butlerLocation.getPythonType(), 
"lsst.daf.base.PropertySet")
 
  148         self.assertEqual(butlerLocation.getCppType(), 
"PropertySet")
 
  149         self.assertEqual(butlerLocation.getStorageName(), 
"YamlStorage")
 
  150         self.assertEqual(butlerLocation.getLocations(), [self.
mapper_data.metadata_output_path])
 
  151         for k, v 
in dataId.items():
 
  152             self.assertEqual(butlerLocation.getAdditionalData().getScalar(k), v,
 
  153                              msg=
"Failed for key={}".
format(k))
 
  160             self.skipTest(
'Skipping %s as requested' % (inspect.currentframe().f_code.co_name))
 
  161         someKeys = 
set([
'raw', 
'processCcd_config', 
'processCcd_metadata'])
 
  162         self.assertTrue(
set(self.mapper.getDatasetTypes()).issuperset(someKeys))
 
  166             result = self.mapper.getKeys(
"raw", level)
 
  167             self.assertEqual(
set(result), expect, msg=
'Failed for level={}'.
format(level))
 
  170         self.assertEqual(self.mapper.getDefaultLevel(), self.
mapper_data.default_level)
 
  172     def _test_map(self, butlerLocation, dataId):
 
  173         self.assertEqual(butlerLocation.getPythonType(), self.
mapper_data.map_python_type)
 
  174         self.assertEqual(butlerLocation.getCppType(), self.
mapper_data.map_cpp_type)
 
  175         self.assertEqual(butlerLocation.getStorageName(), self.
mapper_data.map_storage_name)
 
  176         locationList = butlerLocation.getLocations()
 
  177         self.assertEqual(len(locationList), 1)
 
  178         fileName = os.path.basename(locationList[0])
 
  179         self.assertEqual(fileName, self.
mapper_data.raw_filename)
 
  180         for k, v 
in dataId.items():
 
  181             self.assertEqual(butlerLocation.getAdditionalData().getScalar(k), v,
 
  182                              msg=
"Failed for key={}".
format(k))
 
  185         dataId = self.dataIds[
'raw']
 
  186         location = self.mapper.map_raw(dataId)
 
  190             self.log.
warn(
"""ButlerComposite datasets are not tested for mapper functions.  Though 
  191 ButlerComposites duck type as ButlerLocations in some ways, they do not 
  192 share enough methods to be usefully tested by the same function.  Note 
  193 there are tests of the objects in the package in which they are implemented.""")
 
  196         location = self.mapper.map(
"raw", dataId)
 
  202         Test expansion of incomplete information of the available data in this 
  203         obs package's testdata repo. 
  205         for query, expect 
in self.
mapper_data.queryMetadata:
 
  207             result = self.mapper.queryMetadata(
"raw", self.
mapper_data.query_format, query)
 
  208             self.assertEqual(sorted(result), sorted(expect), msg=
"Failed for query={}".
format(query))
 
  211         self.assertTrue(self.mapper.canStandardize(
"raw"))
 
  212         self.assertFalse(self.mapper.canStandardize(
"camera"))
 
  214             self.assertFalse(self.mapper.canStandardize(
"processCcd_config"))
 
  215             self.assertFalse(self.mapper.canStandardize(
"processCcd_metadata"))
 
  217     def _test_validate(self, dataId):
 
  218         self.assertEqual(self.mapper.
validate(dataId), dataId)