Skip to content

Commit

Permalink
Change Metadata keys/items/values to match dict interface
Browse files Browse the repository at this point in the history
Return KeysView, ItemsView, and ValuesView types.
  • Loading branch information
timj committed Aug 24, 2022
1 parent 80f78cd commit c6f079d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
29 changes: 20 additions & 9 deletions python/lsst/verify/jobmetadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,30 +167,41 @@ def _repr_html_(self):
return self.__str__()

def keys(self):
"""Get a `list` of metadata keys.
"""Get the metadata keys.
Returns
-------
keys : `list` of `str`
These keys keys can be used to access metadata values (like a
`dict`).
keys : `~collections.abc.KeysView` [`str`]
The keys that can be used to access metadata values (like a
`dict`). Set-like.
"""
return [key for key in self]
self._refresh_chainmap()
return self._chain.keys()

def items(self):
"""Iterate over key-value metadata pairs.
Yields
------
item : `tuple`
A metadata item is a tuple of:
item : `~collections.abc.ItemsView`
An iterable over metadata items that are a tuple of:
- Key (`str`).
- Value (object).
"""
self._refresh_chainmap()
for item in self._chain.items():
yield item
return self._chain.items()

def values(self):
"""Iterate over metadata values.
Returns
------
items : `~collections.abc.ValuesView`
An iterable over all the values.
"""
self._refresh_chainmap()
return self._chain.values()

def update(self, data):
"""Update metadata with key-value pairs from a `dict`-like object.
Expand Down
6 changes: 4 additions & 2 deletions tests/test_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,18 +108,20 @@ def test_job(self):
self.assertNotIn('dataset', job.meta)

self.assertEqual(
set(job.meta.keys()),
job.meta.keys(),
set(['job-level-key', 'test.PhotRms.note'])
)
self.assertEqual(
set([key for key in job.meta]),
set(['job-level-key', 'test.PhotRms.note'])
)
keys = set()
for key, value in job.meta.items():
for key, _ in job.meta.items():
keys.add(key)
self.assertEqual(keys, set(['job-level-key', 'test.PhotRms.note']))

self.assertEqual(len(job.meta.keys()), len(job.meta.values()))

# Add a new measurement
m = Measurement('test.PhotMedian', 28.5 * u.mag,
notes={'aperture_corr': True})
Expand Down

0 comments on commit c6f079d

Please sign in to comment.