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

# 

# LSST Data Management System 

# Copyright 2008-2018 AURA/LSST. 

# 

# This product includes software developed by the 

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

# 

# 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 LSST License Statement and 

# the GNU General Public License along with this program. If not, 

# see <http://www.lsstcorp.org/LegalNotices/>. 

# 

 

"""Common tasks and idioms performed with the Butler. 

""" 

 

__all__ = ["dataExists", "searchDataRefs"] 

 

 

def searchDataRefs(butler, datasetType, level="", dataId=None): 

"""Find all data references for a partial data ID. 

 

Parameters 

---------- 

butler: `lsst.daf.persistence.Butler` 

The repository to query for data. 

datasetType : `str` 

The type of data references to return. 

level : `str` 

The level of data ID at which to search. If the empty string, the 

default level for ``datasetType`` shall be used. 

dataId : `lsst.daf.persistence.DataRef`, or `dict` from `str` to any 

Butler identifier naming the data to be retrieved. If ommitted, an 

unrestricted data ID shall be used. 

 

Returns 

------- 

dataRefs : iterable of `lsst.daf.persistence.ButlerDataRef` 

Complete data references matching ``dataId``. Only references to 

existing data shall be returned. 

""" 

if dataId is None: 

dataId = {} 

 

refList = butler.subset(datasetType=datasetType, level=level, dataId=dataId) 

# exclude nonexistent data 

# this is a recursive test, e.g. for the sake of "raw" data 

return [dr for dr in refList if dataExists(dr)] 

 

 

def dataExists(dataRef): 

"""Determine if data exists at the current level or any data exists at a deeper level. 

 

Parameters 

---------- 

dataRef : `lsst.daf.persistence.ButlerDataRef` 

Data reference to test for existence. 

 

Returns 

------- 

exists : `bool` 

Return value is `True` if data exists, `False` otherwise. 

""" 

subDRList = dataRef.subItems() 

if subDRList: 

for subDR in subDRList: 

if dataExists(subDR): 

return True 

return False 

else: 

return dataRef.datasetExists()