Coverage for python/lsst/daf/persistence/butlerHelpers.py: 16%

15 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2023-01-05 02:50 -0800

1# 

2# LSST Data Management System 

3# Copyright 2008-2018 AURA/LSST. 

4# 

5# This product includes software developed by the 

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

7# 

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

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

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

11# (at your option) any later version. 

12# 

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

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

15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

16# GNU General Public License for more details. 

17# 

18# You should have received a copy of the LSST License Statement and 

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

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

21# 

22 

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

24""" 

25 

26__all__ = ["dataExists", "searchDataRefs"] 

27 

28 

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

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

31 

32 Parameters 

33 ---------- 

34 butler: `lsst.daf.persistence.Butler` 

35 The repository to query for data. 

36 datasetType : `str` 

37 The type of data references to return. 

38 level : `str` 

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

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

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

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

43 unrestricted data ID shall be used. 

44 

45 Returns 

46 ------- 

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

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

49 existing data shall be returned. 

50 """ 

51 if dataId is None: 

52 dataId = {} 

53 

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

55 # exclude nonexistent data 

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

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

58 

59 

60def dataExists(dataRef): 

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

62 

63 Parameters 

64 ---------- 

65 dataRef : `lsst.daf.persistence.ButlerDataRef` 

66 Data reference to test for existence. 

67 

68 Returns 

69 ------- 

70 exists : `bool` 

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

72 """ 

73 subDRList = dataRef.subItems() 

74 if subDRList: 

75 for subDR in subDRList: 

76 if dataExists(subDR): 

77 return True 

78 return False 

79 else: 

80 return dataRef.datasetExists()