Coverage for python/lsst/daf/persistence/repositoryMapper.py: 18%

25 statements  

« prev     ^ index     » next       coverage.py v7.2.1, created at 2023-03-12 20:53 -0700

1#!/usr/bin/env python 

2 

3# 

4# LSST Data Management System 

5# Copyright 2016 LSST Corporation. 

6# 

7# This product includes software developed by the 

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

9# 

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

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

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

13# (at your option) any later version. 

14# 

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

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

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

18# GNU General Public License for more details. 

19# 

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

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

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

23# 

24 

25from lsst.daf.persistence import Mapper, ButlerLocation, Policy 

26 

27 

28class RepositoryMapper(Mapper): 

29 """"Base class for a mapper to find repository configurations within a butler repository. 

30 

31 .. warning:: 

32 

33 cfg is 'wet paint' and very likely to change. Use of it in production code other than via the 'old 

34 butler' API is strongly discouraged. 

35 """ 

36 

37 def __init__(self, storage, policy): 

38 # todo I'm guessing the policy would probably want to come from the default in-package location, and 

39 # then be overridden where desired by policy in repository root, and then 

40 # have the cfg policy applied 

41 self.policy = Policy(policy) 

42 self.storage = storage 

43 

44 def __repr__(self): 

45 if 'policy' in self.__dict__ and 'storageCfg' in self.__dict__: 

46 return 'RepositoryMapper(policy=%s, storageCfg=%s)' % (self.policy, self.storageCfg) 

47 else: 

48 return 'uninitialized RepositoryMapper' 

49 

50 def map_cfg(self, dataId, write): 

51 """Map a location for a cfg file. 

52 

53 :param dataId: keys & values to be applied to the template. 

54 :param write: True if this map is being done do perform a write operation, else assumes read. Will 

55 verify location exists if write is True. 

56 :return: a butlerLocation that describes the mapped location. 

57 """ 

58 # todo check: do we need keys to complete dataId? (search Registry) 

59 template = self.policy['repositories.cfg.template'] 

60 location = template % dataId 

61 if not write and not self.storage.exists(location): 

62 return None 

63 bl = ButlerLocation( 

64 pythonType=self.policy['repositories.cfg.python'], 

65 cppType=None, 

66 storageName=self.policy['repositories.cfg.storage'], 

67 locationList=(self.storage.locationWithRoot(location),), 

68 dataId=dataId, 

69 mapper=self) 

70 return bl 

71 

72 def map_repo(self, dataId, write): 

73 if write: 

74 return None 

75 

76 # todo check: do we need keys to complete dataId? (search Registry) 

77 

78 template = self.policy['repositories.repo.template'] 

79 location = template % dataId 

80 if self.storage.exists(location): 

81 bl = ButlerLocation( 

82 pythonType=self.policy['repositories.repo.python'], 

83 cppType=None, 

84 storageName=None, 

85 locationList=(location,), 

86 dataId=dataId, 

87 mapper=self) 

88 return bl 

89 return None