MetadataQuery

class lsst.verify.MetadataQuery(terms=None)

Bases: lsst.verify.jsonmixin.JsonSerializationMixin

Query of lsst.verify.Job.meta metadata.

Parameters:
terms : dict, optional

A mapping of key-value query terms. In the default query mode, the user-provided job metadata must have all these terms, and matching values, to pass the query.

Examples

A MetadataQuery returns True if all key-value terms found in MetadataQuery.terms are equal to key-value metadata items.

>>> metadata = {'filter': 'r', 'camera': 'MegaCam'}

An example of a query with a conflicting term:

>>> query1 = MetadataQuery({'filter': 'r', 'camera': 'SDSS'})
>>> query1(metadata)
False

A query with matching terms (albeit, a subset of the metadata):

>>> query2 = MetadataQuery({'filter': 'r'})
>>> query2(metadata)
True

A query that overconstrains the available metadata:

>>> query3 = MetadataQuery({'filter': 'r', 'camera': 'MegaCam',
...                         'photometric': True})
>>> query3(metadata)
False

The arg_driven=True mode reverses the matching logic so that all terms in the user-provided metadata must be in the MetadataQuery:

>>> query3(metadata, arg_driven=True)
True
>>> query2(metadata, arg_driven=True)
False

Attributes Summary

json A JSON-serializable dict.
terms Term mapping (dict).

Methods Summary

__call__(metadata[, arg_driven]) Determine if a metadata set matches the query terms.

Attributes Documentation

json

A JSON-serializable dict.

Keys are metadata keys. Values are the associated metadata values of the query term.

terms = None

Term mapping (dict). Metadata must have all keys and corresponding values.

Methods Documentation

__call__(metadata, arg_driven=False)

Determine if a metadata set matches the query terms.

Parameters:
metadata : dict or lsst.verify.Metadata

Metadata mapping. Typically this is a job’s lsst.verify.Job.meta.

arg_driven : bool, optional

If False (default), metadata matches the MetadataQuery if metadata has all the terms defined in MetadataQuery, and those terms match. If metadata has more terms than MetadataQuery, it can still match.

If True, the orientation of the matching is reversed. Now metadata matches the MetadataQuery if MetadataQuery has all the terms defined in metadata and those terms match. If MetadataQuery has more terms than metadata, it can still match.

Returns:
match : bool

True if the metadata matches the query terms; False otherwise.