LSSTApplications  17.0+103,17.0+11,17.0+61,18.0.0+13,18.0.0+25,18.0.0+5,18.0.0+52,18.0.0-4-g68ffd23,18.1.0-1-g0001055+8,18.1.0-1-g03d53ef+1,18.1.0-1-g1349e88+28,18.1.0-1-g2505f39+22,18.1.0-1-g380d4d4+27,18.1.0-1-g5315e5e+1,18.1.0-1-g5e4b7ea+10,18.1.0-1-g7e8fceb+1,18.1.0-1-g85f8cd4+23,18.1.0-1-g9a6769a+13,18.1.0-1-ga1a4c1a+22,18.1.0-1-gd55f500+17,18.1.0-12-g42eabe8e+10,18.1.0-14-gd04256d+15,18.1.0-16-g430f6a53+1,18.1.0-17-gd2166b6e4,18.1.0-18-gb5d19ff+1,18.1.0-2-gfbf3545+7,18.1.0-2-gfefb8b5+16,18.1.0-3-g52aa583+13,18.1.0-3-g62b5e86+14,18.1.0-3-g8f4a2b1+17,18.1.0-3-g9bc06b8+7,18.1.0-3-gb69f684+9,18.1.0-4-g1ee41a7+1,18.1.0-5-g6dbcb01+13,18.1.0-5-gc286bb7+3,18.1.0-6-g48bdcd3+2,18.1.0-6-gd05e160+9,18.1.0-7-gc4d902b+2,18.1.0-7-gebc0338+8,18.1.0-9-gae7190a+10,w.2019.38
LSSTDataManagementBasePackage
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.obs.base.gen3.ingest_tests.IngestTestBase Class Reference
Inheritance diagram for lsst.obs.base.gen3.ingest_tests.IngestTestBase:

Public Member Functions

def setUp (self)
 
def tearDown (self)
 
def runIngest (self, files=None)
 
def runIngestTest (self, files=None)
 
def testSymLink (self)
 
def testCopy (self)
 
def testHardLink (self)
 
def testInPlace (self)
 
def testOnConflictFail (self)
 
def testOnConflictIgnore (self)
 
def testOnConflictStash (self)
 
def testOnErrorBreak (self)
 
def testOnErrorContinue (self)
 
def testOnErrorRollback (self)
 

Public Attributes

 root
 
 butler
 
 config
 

Static Public Attributes

string ingestDir = ""
 
 instrument = None
 
dictionary dataId = {}
 
string file = ""
 

Detailed Description

Base class for tests of gen3 ingest. Subclass from this, then
`unittest.TestCase` to get a working test suite.

Definition at line 36 of file ingest_tests.py.

Member Function Documentation

◆ runIngest()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.runIngest (   self,
  files = None 
)
Initialize and run RawIngestTask on a list of files.

Parameters
----------
files : `list`, [`str`], or None
    List of files to be ingested, or None to use ``self.file``

Definition at line 72 of file ingest_tests.py.

72  def runIngest(self, files=None):
73  """
74  Initialize and run RawIngestTask on a list of files.
75 
76  Parameters
77  ----------
78  files : `list`, [`str`], or None
79  List of files to be ingested, or None to use ``self.file``
80  """
81  if files is None:
82  files = [self.file]
83  task = RawIngestTask(config=self.config, butler=self.butler)
84  task.log.setLevel(task.log.FATAL) # silence logs, since we expect a lot of warnings
85  task.run(files)
86 

◆ runIngestTest()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.runIngestTest (   self,
  files = None 
)
Test that RawIngestTask ingested the expected files.

Parameters
----------
files : `list`, [`str`], or None
    List of files to be ingested, or None to use ``self.file``

Definition at line 87 of file ingest_tests.py.

87  def runIngestTest(self, files=None):
88  """
89  Test that RawIngestTask ingested the expected files.
90 
91  Parameters
92  ----------
93  files : `list`, [`str`], or None
94  List of files to be ingested, or None to use ``self.file``
95  """
96  self.runIngest(files)
97  exposure = self.butler.get("raw", self.dataId)
98  metadata = self.butler.get("raw.metadata", self.dataId)
99  image = self.butler.get("raw.image", self.dataId)
100  self.assertImagesEqual(exposure.image, image)
101  self.assertEqual(metadata.toDict(), exposure.getMetadata().toDict())
102 

◆ setUp()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.setUp (   self)

Definition at line 55 of file ingest_tests.py.

55  def setUp(self):
56  # Use a temporary working directory
57  self.root = tempfile.mkdtemp(dir=self.ingestDir)
58  Butler.makeRepo(self.root)
59  self.butler = Butler(self.root, run="raw")
60 
61  # Register the instrument and its static metadata
62  self.instrument.register(self.butler.registry)
63 
64  # Make a default config for test methods to play with
65  self.config = RawIngestTask.ConfigClass()
66  self.config.onError = "break"
67 

◆ tearDown()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.tearDown (   self)

Definition at line 68 of file ingest_tests.py.

68  def tearDown(self):
69  if os.path.exists(self.root):
70  shutil.rmtree(self.root, ignore_errors=True)
71 

◆ testCopy()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testCopy (   self)

Definition at line 107 of file ingest_tests.py.

107  def testCopy(self):
108  self.config.transfer = "copy"
109  self.runIngestTest()
110 

◆ testHardLink()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testHardLink (   self)

Definition at line 111 of file ingest_tests.py.

111  def testHardLink(self):
112  self.config.transfer = "hardlink"
113  self.runIngestTest()
114 

◆ testInPlace()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testInPlace (   self)
Test that files already in the directory can be added to the
registry in-place.

Definition at line 115 of file ingest_tests.py.

115  def testInPlace(self):
116  """Test that files already in the directory can be added to the
117  registry in-place.
118  """
119  # hardlink into repo root manually
120  newPath = os.path.join(self.butler.datastore.root, os.path.basename(self.file))
121  os.link(self.file, newPath)
122  self.config.transfer = None
123  self.runIngestTest([newPath])
124 

◆ testOnConflictFail()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testOnConflictFail (   self)
Re-ingesting the same data into the repository should fail, if
configured to do so.

Definition at line 125 of file ingest_tests.py.

125  def testOnConflictFail(self):
126  """Re-ingesting the same data into the repository should fail, if
127  configured to do so.
128  """
129  self.config.transfer = "symlink"
130  self.config.conflict = "fail"
131  self.runIngest()
132  with self.assertRaises(Exception):
133  self.runIngest()
134 

◆ testOnConflictIgnore()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testOnConflictIgnore (   self)
Re-ingesting the same data into the repository does not fail, if
configured to ignore conflict errors.

Definition at line 135 of file ingest_tests.py.

135  def testOnConflictIgnore(self):
136  """Re-ingesting the same data into the repository does not fail, if
137  configured to ignore conflict errors.
138  """
139  self.config.transfer = "symlink"
140  self.config.conflict = "ignore"
141  self.runIngest() # this one should succeed
142  n1, = self.butler.registry.query("SELECT COUNT(*) FROM Dataset")
143  self.runIngest() # this one should silently fail
144  n2, = self.butler.registry.query("SELECT COUNT(*) FROM Dataset")
145  self.assertEqual(n1, n2)
146 

◆ testOnConflictStash()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testOnConflictStash (   self)
Re-ingesting the same data will be put into a different collection,
if configured to do so.

Definition at line 147 of file ingest_tests.py.

147  def testOnConflictStash(self):
148  """Re-ingesting the same data will be put into a different collection,
149  if configured to do so.
150  """
151  self.config.transfer = "symlink"
152  self.config.conflict = "ignore"
153  self.config.stash = "stash"
154  self.runIngest() # this one should write to 'raw'
155  self.runIngest() # this one should write to 'stash'
156  dt = self.butler.registry.getDatasetType("raw.metadata")
157  ref1 = self.butler.registry.find(self.butler.collection, dt, self.dataId)
158  ref2 = self.butler.registry.find("stash", dt, self.dataId)
159  self.assertNotEqual(ref1.id, ref2.id)
160  self.assertEqual(self.butler.get(ref1).toDict(), self.butler.getDirect(ref2).toDict())
161 

◆ testOnErrorBreak()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testOnErrorBreak (   self)
Test that errors do not roll back success, when configured to do so.

Failing to ingest a nonexistent file after ingesting the valid one should
leave the valid one in the registry, despite raising an exception.

Definition at line 162 of file ingest_tests.py.

162  def testOnErrorBreak(self):
163  """Test that errors do not roll back success, when configured to do so.
164 
165  Failing to ingest a nonexistent file after ingesting the valid one should
166  leave the valid one in the registry, despite raising an exception.
167  """
168  self.config.transfer = "symlink"
169  self.config.onError = "break"
170  with self.assertRaises(Exception):
171  self.runIngest(files=[self.file, "nonexistent.fits"])
172  dt = self.butler.registry.getDatasetType("raw.metadata")
173  self.assertIsNotNone(self.butler.registry.find(self.butler.collection, dt, self.dataId))
174 

◆ testOnErrorContinue()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testOnErrorContinue (   self)
Failing to ingest nonexistent files before and after ingesting the
valid one should leave the valid one in the registry and not raise
an exception.

Definition at line 175 of file ingest_tests.py.

175  def testOnErrorContinue(self):
176  """Failing to ingest nonexistent files before and after ingesting the
177  valid one should leave the valid one in the registry and not raise
178  an exception.
179  """
180  self.config.transfer = "symlink"
181  self.config.onError = "continue"
182  self.runIngest(files=["nonexistent.fits", self.file, "still-not-here.fits"])
183  dt = self.butler.registry.getDatasetType("raw.metadata")
184  self.assertIsNotNone(self.butler.registry.find(self.butler.collection, dt, self.dataId))
185 

◆ testOnErrorRollback()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testOnErrorRollback (   self)
Failing to ingest nonexistent files after ingesting the
valid one should leave the registry unchanged.

Definition at line 186 of file ingest_tests.py.

186  def testOnErrorRollback(self):
187  """Failing to ingest nonexistent files after ingesting the
188  valid one should leave the registry unchanged.
189  """
190  self.config.transfer = "symlink"
191  self.config.onError = "rollback"
192  with self.assertRaises(Exception):
193  self.runIngest(file=[self.file, "nonexistent.fits"])
194  try:
195  dt = self.butler.registry.getDatasetType("raw.metadata")
196  except KeyError:
197  # If we also rollback registering the DatasetType, that's fine,
198  # but not required.
199  pass
200  else:
201  self.assertIsNotNone(self.butler.registry.find(self.butler.collection, dt, self.dataId))
202 

◆ testSymLink()

def lsst.obs.base.gen3.ingest_tests.IngestTestBase.testSymLink (   self)

Definition at line 103 of file ingest_tests.py.

103  def testSymLink(self):
104  self.config.transfer = "symlink"
105  self.runIngestTest()
106 

Member Data Documentation

◆ butler

lsst.obs.base.gen3.ingest_tests.IngestTestBase.butler

Definition at line 59 of file ingest_tests.py.

◆ config

lsst.obs.base.gen3.ingest_tests.IngestTestBase.config

Definition at line 65 of file ingest_tests.py.

◆ dataId

dictionary lsst.obs.base.gen3.ingest_tests.IngestTestBase.dataId = {}
static

Definition at line 49 of file ingest_tests.py.

◆ file

string lsst.obs.base.gen3.ingest_tests.IngestTestBase.file = ""
static

Definition at line 52 of file ingest_tests.py.

◆ ingestDir

string lsst.obs.base.gen3.ingest_tests.IngestTestBase.ingestDir = ""
static

Definition at line 41 of file ingest_tests.py.

◆ instrument

lsst.obs.base.gen3.ingest_tests.IngestTestBase.instrument = None
static

Definition at line 46 of file ingest_tests.py.

◆ root

lsst.obs.base.gen3.ingest_tests.IngestTestBase.root

Definition at line 57 of file ingest_tests.py.


The documentation for this class was generated from the following file: