LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
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
25from 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