Coverage for python/lsst/daf/persistence/repositoryMapper.py: 18%
25 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-11 02:39 -0800
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-11 02:39 -0800
1#!/usr/bin/env python
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#
25from lsst.daf.persistence import Mapper, ButlerLocation, Policy
28class RepositoryMapper(Mapper):
29 """"Base class for a mapper to find repository configurations within a butler repository.
31 .. warning::
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 """
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
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'
50 def map_cfg(self, dataId, write):
51 """Map a location for a cfg file.
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
72 def map_repo(self, dataId, write):
73 if write:
74 return None
76 # todo check: do we need keys to complete dataId? (search Registry)
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