LSSTApplications  20.0.0
LSSTDataManagementBasePackage
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 
24 from lsst.daf.persistence import Policy
25 
26 import yaml
27 
28 
29 class 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 
36 class 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.storage = cfg['storageCfg.cls'](cfg['storageCfg'])
63 
64  def __repr__(self):
65  return 'Access(storage=%s)' % self.storage
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.storage.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.storage.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.storage.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.storage.setCfg(repoCfg)
100 
101  def loadCfg(self):
102  """Reads the repository configuration from Storage.
103 
104  :return: the Policy cfg
105  """
106  return self.storage.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.storage.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.storage.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.storage.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.storage.lookup(*args, **kwargs)
lsst::daf::persistence.access.Access
Definition: access.py:36
lsst::daf::persistence.access.Access.__repr__
def __repr__(self)
Definition: access.py:64
lsst::daf::persistence.access.Access.loadCfg
def loadCfg(self)
Definition: access.py:101
lsst::daf::persistence.access.Access.cfg
def cfg(cls, storageCfg)
Definition: access.py:47
lsst::daf::persistence.access.Access.setCfg
def setCfg(self, repoCfg)
Definition: access.py:93
lsst::daf::persistence.access.Access.storage
storage
Definition: access.py:62
lsst::daf::persistence.access.Access.read
def read(self, butlerLocation)
Definition: access.py:117
lsst::daf::persistence.access.Access.exists
def exists(self, location)
Definition: access.py:125
lsst::daf::persistence.access.Access.root
def root(self)
Definition: access.py:74
lsst::daf::persistence.access.AccessCfg.__init__
def __init__(self, cls, storageCfg)
Definition: access.py:32
lsst::daf::persistence.access.AccessCfg
Definition: access.py:29
lsst::daf::persistence.access.Access.locationWithRoot
def locationWithRoot(self, location)
Definition: access.py:83
lsst::daf::persistence.policy.Policy
Definition: policy.py:49
lsst::daf::persistence
Definition: Utils.h:50
lsst::daf::persistence.access.Access.lookup
def lookup(self, *args, **kwargs)
Definition: access.py:136
lsst::daf::persistence.access.Access.mapperClass
def mapperClass(self)
Definition: access.py:67
lsst::daf::persistence.access.Access.__init__
def __init__(self, cfg)
Definition: access.py:55
lsst::daf::persistence.access.Access.write
def write(self, butlerLocation, obj)
Definition: access.py:108