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.parser.PathElementParser Class Reference

Public Member Functions

def __init__ (self, str template, Dict[str, type] allKeys, *Optional[Dict[str, type]] previousKeys=None)
 
def __str__ (self)
 
Optional[dict] parse (self, str name, dict lastDataId, *Optional[Log] log=None)
 

Public Attributes

 template
 
 keys
 
 regex
 

Detailed Description

An object that matches Gen2 file names and extracts Gen2 data IDs.

Parameters
----------
target : `str`
    Either a full Gen2 path template or the part of one the corresponds to
    a single path element (a subdirectory or file name).
allKeys : `dict` [`str`, `type`]
    A dictionary that provides types for all Gen2 data ID keys that are
    substituted into the given template.  Additional key-value pairs may
    be present and will be ignored.
previousKeys : `dict` [`str`, `type`], optional
    A dictionary containing key strings and types for Gen2 data ID keys
    that have been extracted from previous path elements of the same
    template.  Values for these keys must be provided via the
    ``lastDataId`` argument when calling `parse`.

Definition at line 116 of file parser.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.obs.base.gen2to3.repoWalker.parser.PathElementParser.__init__ (   self,
str  template,
Dict[str, type allKeys,
*Optional[Dict[str, type]]   previousKeys = None 
)

Definition at line 134 of file parser.py.

135  previousKeys: Optional[Dict[str, type]] = None):
136  self.template = template
137  self.keys = {}
138  # For each template path element, we iterate over each %-tagged
139  # substitution string.
140  last = 0
141  self.regex = SubstitutableRegEx()
142  for match in self.TEMPLATE_RE.finditer(self.template):
143  # Copy the (escaped) regular string between the last substitution
144  # and this one, escaping it appropriately.
145  self.regex.addRegexTerm(re.escape(self.template[last:match.start()]))
146  # Pull out the data ID key from the name used in the
147  # substitution string. Use that and the substition
148  # type to come up with the pattern to use in the regex.
149  name = match.group("name")
150  if name == "patch":
151  pattern = r"\d+,\d+"
152  elif match.group("type") in "id": # integers
153  pattern = r"0*\d+"
154  else:
155  pattern = ".+"
156  # Create a new named groups for the first occurence of a key
157  # within an element.
158  if name not in self.keys:
159  if previousKeys and name in previousKeys:
160  # Key is new to this part of the template, but it appeared
161  # in some previous part of the template. We'll format the
162  # original template with the data ID from that previous
163  # step later.
164  start, stop = match.span()
165  self.regex.addSubstitutionTerm(self.template[start:stop])
166  else:
167  # Key is new; expect to extract a data ID value from it.
168  self.regex.addRegexTerm(r"(?P<%s>%s)" % (name, pattern))
169  self.keys[name] = allKeys[name]
170  else:
171  # Require a match with the last group for a second
172  # occurrence.
173  self.regex.addRegexTerm(r"(?P=<%s>)" % name)
174  # Remember the end of this match
175  last = match.end()
176  # Append anything remaining after the last substitution string.
177  self.regex.addRegexTerm(re.escape(self.template[last:]))
178  # If there are no substitutions, join and compile into a single regex
179  # now.
180  self.regex = self.regex.simplify()
181 

Member Function Documentation

◆ __str__()

def lsst.obs.base.gen2to3.repoWalker.parser.PathElementParser.__str__ (   self)

Definition at line 189 of file parser.py.

189  def __str__(self):
190  return f"{type(self).__name__}({self.regex})"
191 

◆ parse()

Optional[dict] lsst.obs.base.gen2to3.repoWalker.parser.PathElementParser.parse (   self,
str  name,
dict  lastDataId,
*Optional[Log]   log = None 
)
Parse the path element.

Parameters
----------
name : `str`
    The path name to parse.
lastDataId : `dict`
    The cumulative Gen2 data ID obtaining by calling `parse` on parsers
    for parent directories of the same path.
log : `Log`, optional
    Log to use to report warnings and debug information.

Returns
-------
dataId : `dict` or `None`
    Gen2 data ID that combines key-value pairs obtained from this path
    with those from ``lastDataId``.  `None` if ``name`` is not matched
    by this parser.  If the keys extracted are inconsistent with those
    in ``lastDataID``, a warning is sent to ``log`` and `None` is
    returned.

Definition at line 192 of file parser.py.

192  def parse(self, name: str, lastDataId: dict, *, log: Optional[Log] = None) -> Optional[dict]:
193  """Parse the path element.
194 
195  Parameters
196  ----------
197  name : `str`
198  The path name to parse.
199  lastDataId : `dict`
200  The cumulative Gen2 data ID obtaining by calling `parse` on parsers
201  for parent directories of the same path.
202  log : `Log`, optional
203  Log to use to report warnings and debug information.
204 
205  Returns
206  -------
207  dataId : `dict` or `None`
208  Gen2 data ID that combines key-value pairs obtained from this path
209  with those from ``lastDataId``. `None` if ``name`` is not matched
210  by this parser. If the keys extracted are inconsistent with those
211  in ``lastDataID``, a warning is sent to ``log`` and `None` is
212  returned.
213  """
214  m = self.regex.format(lastDataId).fullmatch(name)
215  if m is None:
216  return None
217  newDataId = {k: v(m.group(k)) for k, v in self.keys.items()}
218  for commonKey in lastDataId.keys() & newDataId.keys():
219  if newDataId[commonKey] != lastDataId[commonKey]:
220  if log is not None:
221  log.warn("Inconsistent value %s=%r when parsing %r with %r.",
222  commonKey, newDataId[commonKey], name, lastDataId)
223  return None
224  newDataId.update(lastDataId)
225  return newDataId
226 
std::vector< SchemaItem< Flag > > * items
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174

Member Data Documentation

◆ keys

lsst.obs.base.gen2to3.repoWalker.parser.PathElementParser.keys

Definition at line 137 of file parser.py.

◆ regex

lsst.obs.base.gen2to3.repoWalker.parser.PathElementParser.regex

Definition at line 141 of file parser.py.

◆ template

lsst.obs.base.gen2to3.repoWalker.parser.PathElementParser.template

Definition at line 136 of file parser.py.


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