def query_decode(json_object): simple_attrs = [ 'Provider', 'Source', 'Instrument', 'Physobs', 'Pixels', 'Level', 'Resolution', 'Detector', 'Filter', 'Sample', 'Quicklook', 'PScale'] for key in simple_attrs: if key in json_object: Attr = getattr(vso.attrs, key) return Attr(json_object[key]) if 'Wavelength' in json_object: Attr = getattr(vso.attrs, 'Wavelength') wavemin, wavemax, unit = json_object['Wavelength'] return Attr(wavemin * u.Unit(unit), wavemax * u.Unit(unit)) if 'Time' in json_object: Attr = getattr(vso.attrs, 'Time') return Attr(*json_object['Time']) for key in ['Tag', 'Path', 'DownloadTime', 'FitsHeaderEntry']: if key in json_object: Attr = getattr(db_attrs, key) values, inverted = json_object[key][:-1], json_object[key][-1] if inverted: return ~Attr(*values) return Attr(*values) if 'Starred' in json_object: if json_object['Starred']: return ~db_attrs.Starred() return db_attrs.Starred() for key in ['AttrOr', 'AttrAnd']: if key in json_object: Attr = getattr(vso.attrs, key) return Attr(json_object[key]) return json_object
def test_query_unexpected_kwarg(database): with pytest.raises(TypeError): database.query(attrs.Starred(), foo=42)
def test_starred_inverted(): expected = '{"Starred": false}' assert json.dumps(~db_attrs.Starred(), cls=QueryEncoder) == expected
def test_starred(): expected = '{"Starred": true}' assert json.dumps(db_attrs.Starred(), cls=QueryEncoder) == expected
def test_decode_starred_inverted(): dump = '{"Starred": true}' assert json.loads(dump, object_hook=query_decode) == ~db_attrs.Starred()
def test_decode_starred(): dump = '{"Starred": false}' assert json.loads(dump, object_hook=query_decode) == db_attrs.Starred()