class SourceSearch(): def __init__(self, params): self.params = None try: self.q = params['alias'] del params['alias'] except KeyError as e: print "no alias specified" if any(params): self.params = params print self.params if hasattr(self, 'q') or self.params is not None: self.perform() def perform(self): from couch import DB self.db = DB() self.sources = [] if hasattr(self, 'q'): aliases = self.db.lucene_query("_design/sources/getSourceByAlias", q=self.q) if len(aliases) > 0 and aliases[0]: self.sources.extend(self.db.query("_design/sources/_view/getSources", params={'_ids':aliases}))
class DerivativeSearch(): def __init__(self, params, remove=None): self.db = DB(db="derivatives") self.params = None try: self.q = params['keywords'] del params['keywords'] except KeyError as e: print "no keyworkds specified" try: self.geo = { 'latitude' : params['latitude'], 'longitude' : params['longitude'] } del params['latitude'] del params['longitude'] except KeyError as e: print "no lat/lng specified" if hasattr(self, 'geo'): try: self.geo['radius'] = params['radius'] del params['radius'] except KeyError as e: print "no radius for geo query. setting default as 5km" self.geo['radius'] = 5 if any(params): self.params = params self.derivatives = [False] self.submissions = [False] if hasattr(self, 'geo') or hasattr(self, 'q') or self.params is not None: self.perform(remove=remove) def perform(self, remove=None): if hasattr(self, 'q'): self.derivatives = self.db.lucene_query("_design/textsearch/search_all",q=self.q, params=self.params) else: if self.params is not None: self.derivatives = self.db.multiparam_query(self.params) if hasattr(self, 'geo'): geos = self.db.geoquery(geo) if len(self.derivatives) > 0 and self.derivatives[0]: self.derivatives = list(set(self.derivatives).intersection(set(geos))) else: self.derivatives = geos if len(self.derivatives) > 0 and self.derivatives[0]: submission_ids = self.db.query("_design/static/_view/getDerivatives", params={'_ids':self.derivatives}, include_only=["submission_id"], include_only_as_list=True) db = DB() self.submissions = db.query("_design/submissions/_view/getSubmissions",params={'_ids':submission_ids}, remove=remove)