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
access.py
Go to the documentation of this file.
1#!/usr/bin/env python
2#
3# LSST Data Management System
4# Copyright 2016 LSST Corporation.
5#
6# This product includes software developed by the
7# LSST Project (http://www.lsst.org/).
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the LSST License Statement and
20# the GNU General Public License along with this program. If not,
21# see <http://www.lsstcorp.org/LegalNotices/>.
22#
23
24from lsst.daf.persistence import Policy
25
26import yaml
27
28
29class AccessCfg(Policy, yaml.YAMLObject):
30 yaml_tag = u"!AccessCfg"
31
32 def __init__(self, cls, storageCfg):
33 super().__init__({'storageCfg': storageCfg, 'cls': cls})
34
35
36class Access:
37 """Implements an butler framework interface for Transport, Storage, and Registry
38
39 .. warning::
40
41 Access is 'wet paint' and very likely to change. Use of it in production
42 code other than via the 'old butler' API is strongly discouraged.
43
44 """
45
46 @classmethod
47 def cfg(cls, storageCfg):
48 """Helper func to create a properly formatted Policy to configure an Access instance.
49
50 :param storageCfg: a cfg to instantiate a storage.
51 :return:
52 """
53 return AccessCfg(cls=cls, storageCfg=storageCfg)
54
55 def __init__(self, cfg):
56 """Initializer
57
58 :param cfg: a Policy that defines the configuration for this class. It is recommended that the cfg be
59 created by calling Access.cfg()
60 :return:
61 """
62 self.storagestorage = cfg['storageCfg.cls'](cfg['storageCfg'])
63
64 def __repr__(self):
65 return 'Access(storage=%s)' % self.storagestorage
66
67 def mapperClass(self):
68 """Get the mapper class associated with a repository root.
69
70 :return: the mapper class
71 """
72 return self.storagestorage.mapperClass()
73
74 def root(self):
75 """Get the repository root as defined by the Storage class, this refers to the 'top' of a persisted
76 repository. The exact type of Root can vary based on Storage type.
77
78 :return: the root of the persisted repository.
79 """
80
81 return self.storagestorage.root
82
83 def locationWithRoot(self, location):
84 """Given a location, get a fully qualified handle to location including storage root.
85
86 Note; at the time of this writing the only existing storage type is PosixStorage. This returns the
87 root+location.
88 :param location:
89 :return:
90 """
91 return self.storagestorage.locationWithRoot(location)
92
93 def setCfg(self, repoCfg):
94 """Writes the repository configuration to Storage.
95
96 :param repoCfg: the Policy cfg to be written
97 :return: None
98 """
99 self.storagestorage.setCfg(repoCfg)
100
101 def loadCfg(self):
102 """Reads the repository configuration from Storage.
103
104 :return: the Policy cfg
105 """
106 return self.storagestorage.loadCfg()
107
108 def write(self, butlerLocation, obj):
109 """Passes an object to Storage to be written into the repository.
110
111 :param butlerLocation: the location & formatting for the object to be written.
112 :param obj: the object to be written.
113 :return: None
114 """
115 self.storagestorage.write(butlerLocation, obj)
116
117 def read(self, butlerLocation):
118 """Reads an object from storage
119
120 :param butlerLocation: describes the location & how to load the object.
121 :return:
122 """
123 return self.storagestorage.read(butlerLocation=butlerLocation)
124
125 def exists(self, location):
126 """Query if a location exists.
127
128 As of this writing the only storage type is PosixStorage, and it works to say that 'location' is a
129 simple locaiton descriptor. In the case of PosixStorage that's a path. If this needs to become more
130 complex it could be changed to be a butlerLocation, or something else, as needed.
131 :param location: a simple location descriptor, type is dependent on Storage.
132 :return: True if location exists, else False.
133 """
134 return self.storagestorage.exists(location)
135
136 def lookup(self, *args, **kwargs):
137 """Perform a lookup in the registry.
138
139 Returns a list of dataId for each valid lookup (right? TODO VERIFY)"""
140 return self.storagestorage.lookup(*args, **kwargs)
def __init__(self, cls, storageCfg)
Definition: access.py:32
def setCfg(self, repoCfg)
Definition: access.py:93
def cfg(cls, storageCfg)
Definition: access.py:47
def write(self, butlerLocation, obj)
Definition: access.py:108
def lookup(self, *args, **kwargs)
Definition: access.py:136
def exists(self, location)
Definition: access.py:125
def locationWithRoot(self, location)
Definition: access.py:83
def read(self, butlerLocation)
Definition: access.py:117