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

92

93

94

# 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/>. 

 

""" 

Module containing classes used with deferring dataset loading 

""" 

from __future__ import annotations 

 

__all__ = ("DeferredDatasetHandle",) 

 

import dataclasses 

from typing import Any, Optional, TYPE_CHECKING 

 

32 ↛ 33line 32 didn't jump to line 33, because the condition on line 32 was never trueif TYPE_CHECKING: 

from .core import DatasetRef, ExpandedDataCoordinate 

from .butler import Butler 

 

 

@dataclasses.dataclass(frozen=True) 

class DeferredDatasetHandle: 

"""Proxy class that provides deferred loading of a dataset from a butler. 

""" 

 

def get(self, *, parameters: Optional = None, **kwargs: dict) -> Any: 

""" Retrieves the dataset pointed to by this handle 

 

This handle may be used multiple times, possibly with different 

parameters. 

 

Parameters 

---------- 

parameters : `dict` or None 

The parameters argument will be passed to the butler get method. 

It defaults to None. If the value is not None, this dict will 

be merged with the parameters dict used to construct the 

`DeferredDatasetHandle` class. 

kwargs : `dict` 

This argument is deprecated and only exists to support legacy 

gen2 butler code during migration. It is completely ignored 

and will be removed in the future. 

 

Returns 

------- 

return : `Object` 

The dataset pointed to by this handle 

""" 

if self.parameters is not None: 

mergedParameters = self.parameters.copy() 

if parameters is not None: 

mergedParameters.update(parameters) 

elif parameters is not None: 

mergedParameters = parameters 

else: 

mergedParameters = {} 

 

return self.butler.getDirect(self.ref, parameters=mergedParameters) 

 

@property 

def dataId(self) -> ExpandedDataCoordinate: 

"""The full data ID associated with the dataset 

(`ExpandedDataCoordinate`). 

""" 

return self.ref.dataId 

 

butler: Butler 

"""The butler that will be used to fetch the dataset (`Butler`). 

""" 

 

ref: DatasetRef 

"""Reference to the dataset (`DatasetRef`). 

""" 

 

parameters: Optional[dict] 

"""Optional parameters that may be used to specify a subset of the dataset 

to be loaded (`dict` or `None`). 

"""