Example #1
0
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)