LSST Applications  21.0.0+75b29a8a7f,21.0.0+e70536a077,21.0.0-1-ga51b5d4+62c747d40b,21.0.0-10-gbfb87ad6+3307648ee3,21.0.0-15-gedb9d5423+47cba9fc36,21.0.0-2-g103fe59+fdf0863a2a,21.0.0-2-g1367e85+d38a93257c,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g5242d73+d38a93257c,21.0.0-2-g7f82c8f+e682ffb718,21.0.0-2-g8dde007+d179fbfa6a,21.0.0-2-g8f08a60+9402881886,21.0.0-2-ga326454+e682ffb718,21.0.0-2-ga63a54e+08647d4b1b,21.0.0-2-gde069b7+26c92b3210,21.0.0-2-gecfae73+0445ed2f95,21.0.0-2-gfc62afb+d38a93257c,21.0.0-27-gbbd0d29+ae871e0f33,21.0.0-28-g5fc5e037+feb0e9397b,21.0.0-3-g21c7a62+f4b9c0ff5c,21.0.0-3-g357aad2+57b0bddf0b,21.0.0-3-g4be5c26+d38a93257c,21.0.0-3-g65f322c+3f454acf5d,21.0.0-3-g7d9da8d+75b29a8a7f,21.0.0-3-gaa929c8+9e4ef6332c,21.0.0-3-ge02ed75+4b120a55c4,21.0.0-4-g3300ddd+e70536a077,21.0.0-4-g591bb35+4b120a55c4,21.0.0-4-gc004bbf+4911b9cd27,21.0.0-4-gccdca77+f94adcd104,21.0.0-4-ge8fba5a+2b3a696ff9,21.0.0-5-gb155db7+2c5429117a,21.0.0-5-gdf36809+637e4641ee,21.0.0-6-g00874e7+c9fd7f7160,21.0.0-6-g4e60332+4b120a55c4,21.0.0-7-gc8ca178+40eb9cf840,21.0.0-8-gfbe0b4b+9e4ef6332c,21.0.0-9-g2fd488a+d83b7cd606,w.2021.05
LSST Data Management Base Package
Public Member Functions | Public Attributes | List of all members
lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler Class Reference
Inheritance diagram for lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler:
lsst.obs.base.gen2to3.repoWalker.handlers.ParsedPathElementHandler lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler

Public Member Functions

def __init__ (self, PathElementParser parser)
 
bool isForFiles (self)
 
def handle (self, str path, nextDataId2, Mapping[DatasetType, Mapping[Optional[str], List[FileDataset]]] datasets, *Callable[[DataCoordinate], bool] predicate)
 
Tuple[Optional[DataCoordinate], Optional[str]] translate (self, dict dataId2, *bool partial=False)
 
def __str__ (self)
 
bool __call__ (self, str path, str name, Mapping[DatasetType, Mapping[Optional[str], List[FileDataset]]] datasets, *Callable[[DataCoordinate], bool] predicate)
 
int rank (self)
 
def handle (self, str path, dict nextDataId2, Mapping[DatasetType, Mapping[Optional[str], List[FileDataset]]] datasets, *Callable[[DataCoordinate], bool] predicate)
 
def __lt__ (self, PathElementHandler other)
 

Public Attributes

 scanner
 
 lastDataId2
 

Detailed Description

A `PathElementHandler` that uses a `DirectoryScanner` to recurse.

Parameters
----------
parser : `PathElementParser`
    An object that matches the path element this handler is responsible for
    and extracts a (partial) Gen2 data ID from it.

Notes
-----
The nested `DirectoryScanner` is default-constructed and should be
populated with child handlers after the `SubdirectoryHandler` is created.

Definition at line 201 of file handlers.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler.__init__ (   self,
PathElementParser  parser 
)

Reimplemented from lsst.obs.base.gen2to3.repoWalker.handlers.ParsedPathElementHandler.

Definition at line 216 of file handlers.py.

216  def __init__(self, parser: PathElementParser):
217  super().__init__(parser=parser)
218  self.scanner = DirectoryScanner()
219 

Member Function Documentation

◆ __call__()

bool lsst.obs.base.gen2to3.repoWalker.handlers.ParsedPathElementHandler.__call__ (   self,
str  path,
str  name,
Mapping[DatasetType, Mapping[Optional[str], List[FileDataset]]]  datasets,
*Callable[[DataCoordinate], bool]  predicate 
)
inherited
Apply the handler to a file path.

Parameters
----------
path : `str`
    Full path of the file or directory.
name : `str`
    Local name of the file or directory within its parent directory.
datasets : `dict` [`DatasetType`, `dict` ]
    Dictionary that found datasets should be added to.  Nested dicts
    are keyed by either `None` (for most datasets) or a `str`
    "CALIBDATE" for calibration datasets.
predicate : `~collections.abc.Callable`
    A callable taking a single `DataCoordinate` argument and returning
    `bool`, indicating whether that (Gen3) data ID represents one
    that should be included in the scan.'

Returns
-------
matched : `bool`
    `True` if this handler was a match for the given path and no other
    handlers need to be tried on it, `False` otherwise.

Reimplemented from lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler.

Definition at line 120 of file handlers.py.

122  predicate: Callable[[DataCoordinate], bool]) -> bool:
123  # Docstring inherited from PathElementParser.
124  nextDataId2 = self._parser.parse(name, self.lastDataId2)
125  if nextDataId2 is None:
126  return False
127  self.handle(path, nextDataId2, datasets, predicate=predicate)
128  return True
129 

◆ __lt__()

def lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler.__lt__ (   self,
PathElementHandler  other 
)
inherited
Handlers are sorted by rank to reduce the possibility that more
flexible handlers will have a chance to match something they shouldn't.

Definition at line 140 of file scanner.py.

140  def __lt__(self, other: PathElementHandler):
141  """Handlers are sorted by rank to reduce the possibility that more
142  flexible handlers will have a chance to match something they shouldn't.
143  """
144  return self.rank < other.rank
145 

◆ __str__()

def lsst.obs.base.gen2to3.repoWalker.handlers.ParsedPathElementHandler.__str__ (   self)
inherited

Reimplemented in lsst.obs.base.gen2to3.repoWalker.handlers.TargetFileHandler.

Definition at line 117 of file handlers.py.

117  def __str__(self):
118  return f"{type(self).__name__}(parser={self._parser})"
119 

◆ handle() [1/2]

def lsst.obs.base.gen2to3.repoWalker.handlers.ParsedPathElementHandler.handle (   self,
str  path,
dict  nextDataId2,
Mapping[DatasetType, Mapping[Optional[str], List[FileDataset]]]  datasets,
*Callable[[DataCoordinate], bool]  predicate 
)
inherited
Customization hook for ``__call__``.

Subclasses must override this method, while external callers (i.e.
`DirectoryScanner` should instead invoke `__call__`.

Parameters
----------
path : `str`
    Full path of the file or directory.
nextDataId2 : `dict`
    Gen2 data ID (usually partial) extracted from the path so far.
datasets : `dict` [`DatasetType`, `list` [`FileDataset`] ]
    Dictionary that found datasets should be added to.
predicate : `~collections.abc.Callable`
    A callable taking a single `DataCoordinate` argument and returning
    `bool`, indicating whether that (Gen3) data ID represents one
    that should be included in the scan.
formatterMap : `dict`, optional
    Map dataset type to specialist formatter.

Reimplemented in lsst.obs.base.gen2to3.repoWalker.handlers.SkipHandler.

Definition at line 136 of file handlers.py.

138  predicate: Callable[[DataCoordinate], bool]):
139  """Customization hook for ``__call__``.
140 
141  Subclasses must override this method, while external callers (i.e.
142  `DirectoryScanner` should instead invoke `__call__`.
143 
144  Parameters
145  ----------
146  path : `str`
147  Full path of the file or directory.
148  nextDataId2 : `dict`
149  Gen2 data ID (usually partial) extracted from the path so far.
150  datasets : `dict` [`DatasetType`, `list` [`FileDataset`] ]
151  Dictionary that found datasets should be added to.
152  predicate : `~collections.abc.Callable`
153  A callable taking a single `DataCoordinate` argument and returning
154  `bool`, indicating whether that (Gen3) data ID represents one
155  that should be included in the scan.
156  formatterMap : `dict`, optional
157  Map dataset type to specialist formatter.
158  """
159  raise NotImplementedError()
160 
161 

◆ handle() [2/2]

def lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler.handle (   self,
str  path,
  nextDataId2,
Mapping[DatasetType, Mapping[Optional[str], List[FileDataset]]]  datasets,
*Callable[[DataCoordinate], bool]  predicate 
)

Definition at line 226 of file handlers.py.

228  predicate: Callable[[DataCoordinate], bool]):
229  # Docstring inherited from ParsedPathElementHandler.
230  if not nextDataId2:
231  # We matched, and there's no data ID at all yet. That means the
232  # full path so far is just a fixed string so we should descend
233  # and the match is exclusive.
234  scan = True
235  else:
236  dataId3, _ = self.translate(nextDataId2, partial=True)
237  if dataId3 is not None:
238  scan = predicate(dataId3)
239  else:
240  scan = True
241  if scan:
242  for handler in self.scanner:
243  handler.lastDataId2 = nextDataId2
244  self.scanner.scan(path, datasets, predicate=predicate)
245 

◆ isForFiles()

bool lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler.isForFiles (   self)
Report what kind of path element this object handlers.

Returns
-------
Return `True` if this handler is for file entries, or `False` if it
is for directories.

Reimplemented from lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler.

Definition at line 222 of file handlers.py.

222  def isForFiles(self) -> bool:
223  # Docstring inherited from PathElementHandler.
224  return False
225 

◆ rank()

int lsst.obs.base.gen2to3.repoWalker.handlers.ParsedPathElementHandler.rank (   self)
inherited
Return a rough indication of how flexible this handler is in terms
of the path element names it can match.

Handlers that match a constant path element should always return zero.

Reimplemented from lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler.

Definition at line 131 of file handlers.py.

131  def rank(self) -> int:
132  # Docstring inherited from PathElementParser.
133  return len(self._parser.keys)
134 

◆ translate()

Tuple[Optional[DataCoordinate], Optional[str]] lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler.translate (   self,
dict  dataId2,
*bool   partial = False 
)
Translate the given data ID from Gen2 to Gen3.

The default implementation returns `None`.  Subclasses that are able
to translate data IDs should override this method.

Parameters
----------
dataId2 : `dict`
    Gen2 data ID.
partial : `bool`, optional
    If `True` (`False` is default) this is a partial data ID for some
    dataset, and missing keys are expected.

Returns
-------
dataId3 : `lsst.daf.butler.DataCoordinate` or `None`
    A Gen3 data ID, or `None` if this handler cannot translate data
    IDs.
calibDate : `str` or `None`
    A Gen2 calibration "CALIBDATE" value, or `None` if there was no
    such value in the template.

Reimplemented from lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler.

Definition at line 246 of file handlers.py.

247  ) -> Tuple[Optional[DataCoordinate], Optional[str]]:
248  # Docstring inherited from PathElementHandler.
249  for handler in self.scanner:
250  # Since we're recursing, we're always asking for a partial match,
251  # because the data ID we have corresponds to different level than
252  # the one child handlers operate at.
253  result, calibDate = handler.translate(dataId2, partial=True)
254  if result is not None:
255  return result, calibDate
256  return None, None
257 

Member Data Documentation

◆ lastDataId2

lsst.obs.base.gen2to3.repoWalker.scanner.PathElementHandler.lastDataId2
inherited

Definition at line 60 of file scanner.py.

◆ scanner

lsst.obs.base.gen2to3.repoWalker.handlers.SubdirectoryHandler.scanner

Definition at line 218 of file handlers.py.


The documentation for this class was generated from the following file: