Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

# This file is part of daf_butler. 

# 

# Developed for the LSST Data Management System. 

# This product includes software developed by the LSST Project 

# (http://www.lsst.org). 

# See the COPYRIGHT file at the top-level directory of this distribution 

# for details of code ownership. 

# 

# This program is free software: you can redistribute it and/or modify 

# it under the terms of the GNU General Public License as published by 

# the Free Software Foundation, either version 3 of the License, or 

# (at your option) any later version. 

# 

# This program is distributed in the hope that it will be useful, 

# but WITHOUT ANY WARRANTY; without even the implied warranty of 

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

# GNU General Public License for more details. 

# 

# You should have received a copy of the GNU General Public License 

# along with this program. If not, see <http://www.gnu.org/licenses/>. 

 

import os 

import unittest 

 

from lsst.daf.butler import CompositesConfig, CompositesMap, StorageClass, DatasetType 

 

TESTDIR = os.path.dirname(__file__) 

 

 

class TestCompositesConfig(unittest.TestCase): 

 

@classmethod 

def setUpClass(cls): 

cls.configFile = os.path.join(TESTDIR, "config", "basic", "composites.yaml") 

 

def testBadConfig(self): 

"""Config with bad values in it""" 

with self.assertRaises(ValueError): 

CompositesConfig(os.path.join(TESTDIR, "config", "basic", "composites-bad.yaml")) 

 

def testConfig(self): 

c = CompositesConfig(self.configFile) 

self.assertIn("default", c) 

# Check merging has worked 

self.assertIn("datasetTypes.calexp", c) 

self.assertIn("datasetTypes.dummyTrue", c) 

self.assertIn("storageClasses.StructuredComposite", c) 

self.assertIn("storageClasses.ExposureF", c) 

 

# Check that all entries are booleans (this is meant to be enforced 

# internally) 

for n in ("storageClasses", "datasetTypes"): 

for k in c[n]: 

self.assertIsInstance(c[f"{n}.{k}"], bool, f"Testing {n}.{k}") 

 

def testMap(self): 

c = CompositesMap(self.configFile) 

 

# Check that a str is not supported 

with self.assertRaises(ValueError): 

c.doDisassembly("fred") 

 

# These will fail (not a composite) 

sc = StorageClass("StructuredDataJson") 

d = DatasetType("dummyTrue", ("a", "b"), sc) 

self.assertFalse(c.doDisassembly(d), f"Test with DatasetType: {d}") 

self.assertFalse(c.doDisassembly(sc), f"Test with StorageClass: {sc}") 

 

# Repeat but this time use a composite storage class 

sccomp = StorageClass("Dummy") 

sc = StorageClass("StructuredDataJson", components={"dummy": sccomp}) 

d = DatasetType("dummyTrue", ("a", "b"), sc) 

self.assertTrue(c.doDisassembly(d), f"Test with DatasetType: {d}") 

self.assertFalse(c.doDisassembly(sc), f"Test with StorageClass: {sc}") 

 

# Override with False 

d = DatasetType("dummyFalse", ("a", "b"), sc) 

self.assertFalse(c.doDisassembly(d), f"Test with DatasetType: {d}") 

 

# DatasetType that has no explicit entry 

d = DatasetType("dummyFred", ("a", "b"), sc) 

self.assertFalse(c.doDisassembly(d), f"Test with DatasetType: {d}") 

 

# StorageClass that will be disassembled 

sc = StorageClass("StructuredComposite", components={"dummy": sccomp}) 

d = DatasetType("dummyFred", ("a", "b"), sc) 

self.assertTrue(c.doDisassembly(d), f"Test with DatasetType: {d}") 

 

 

90 ↛ 91line 90 didn't jump to line 91, because the condition on line 90 was never trueif __name__ == "__main__": 

unittest.main()