class Sample(_VSOSimpleAttr): pass class Quicklook(_VSOSimpleAttr): pass class PScale(_VSOSimpleAttr): pass # The walker specifies how the Attr-tree is converted to a query the # server can handle. walker = AttrWalker() @walker.add_creator(ValueAttr, AttrAnd) # pylint: disable=E0102,C0103,W0613 def _create(wlk, root, api): """ Implementation detail. """ value = api.factory.create('QueryRequestBlock') wlk.apply(root, api, value) return [value] @walker.add_applier(ValueAttr) # pylint: disable=E0102,C0103,W0613 def _apply(wlk, root, api, queryblock): """ Implementation detail. """ for k, v in root.attrs.iteritems(): lst = k[-1]
self.key = key self.value = value self.inverted = inverted def __invert__(self): return self.__class__(self.key, self.value, True) def collides(self, other): return False def __repr__(self): return '<{}FitsHeaderEntry({!r}, {!r})>'.format( '~' if self.inverted else '', self.key, self.value) walker = AttrWalker() @walker.add_creator(AttrOr) def _create(wlk, root, session): entries = [set(wlk.create(attr, session)) for attr in root.attrs] return list(set.union(*entries)) @walker.add_creator(AttrAnd) def _create(wlk, root, session): entries = [set(wlk.create(attr, session)) for attr in root.attrs] return list(set.intersection(*entries)) def _inverter_helper(query, inverted):
def __init__(self, value): super(Sample, self).__init__(value) self.value = value.to(u.s).value class Quicklook(_VSOSimpleAttr): pass class PScale(_VSOSimpleAttr): pass # The walker specifies how the Attr-tree is converted to a query the # server can handle. walker = AttrWalker() # The _create functions make a new VSO query from the attribute tree, # the _apply functions take an existing query-block and update it according # to the attribute tree passed in as root. Different attributes require # different functions for conversion into query blocks. @walker.add_creator(ValueAttr, AttrAnd) # pylint: disable=E0102,C0103,W0613 def _create(wlk, root, api): """ Implementation detail. """ value = api.factory.create('QueryRequestBlock') wlk.apply(root, api, value) return [value]