LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
LSST Data Management Base Package
repositoryMapper.py
Go to the documentation of this file.
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 
25 from lsst.daf.persistence import Mapper, ButlerLocation, Policy
26 
27 
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.policypolicy = Policy(policy)
42  self.storagestorage = 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.policypolicy, 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.policypolicy['repositories.cfg.template']
60  location = template % dataId
61  if not write and not self.storagestorage.exists(location):
62  return None
63  bl = ButlerLocation(
64  pythonType=self.policypolicy['repositories.cfg.python'],
65  cppType=None,
66  storageName=self.policypolicy['repositories.cfg.storage'],
67  locationList=(self.storagestorage.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.policypolicy['repositories.repo.template']
79  location = template % dataId
80  if self.storagestorage.exists(location):
81  bl = ButlerLocation(
82  pythonType=self.policypolicy['repositories.repo.python'],
83  cppType=None,
84  storageName=None,
85  locationList=(location,),
86  dataId=dataId,
87  mapper=self)
88  return bl
89  return None