Advertisement
Guest User

Untitled

a guest
May 3rd, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.46 KB | None | 0 0
  1. class RegionSearch(SearchBaseHandler):
  2. """Handles regional search requests."""
  3.  
  4. def get(self):
  5. """Handles a get request with a query."""
  6. category = None
  7. cityentity = None
  8. country = ''
  9. if self.request.host.find('hipheap') > -1: country = 'USA'
  10. elif self.request.host.find('koolbusiness') > -1: country = 'India'
  11. elif self.request.host.find('montao') > -1: country = 'Brasil'
  12. regionID = 0
  13. cityID = 0
  14. categoryID = 0
  15. regionname = None
  16. cityname = None
  17. categoryname = None
  18. region = None
  19. cursor = self.request.get("cursor")
  20. uri = urlparse(self.request.uri)
  21. query = ''
  22. regionid = self.request.get("regionid")
  23. cityid = self.request.get("cityid")
  24. categoryid = self.request.get("category")
  25. if uri.query:
  26. query = parse_qs(uri.query)
  27. try:
  28. query = query['query'][0]
  29. except KeyError, err:
  30. query = ''
  31. #logging.info('KeyError')
  32.  
  33. #Try find region ID and/or cityID and categoryID a.s.a.p.
  34. if regionid or query.find('regionID') > -1:
  35. regionID = re.sub("^regionID=(d+).*", r'1', query)
  36. region = Region.get_by_id(long(regionID))
  37. regionname = region.name
  38.  
  39. if regionid:
  40. regionID = regionid
  41. region = Region.get_by_id(long(regionID))
  42. regionname = region.name
  43.  
  44. if cityid or query.find('cityID') > -1:
  45. cityID = re.sub("^.*cityID=(d+).*", r'1', query)
  46. if cityid: cityID = cityid
  47. city = montaomodel.City.get_by_id(long(cityID))
  48. cityID = city.key().id()
  49. cityentity = city
  50. cityname = city.name
  51. region = Region.get_by_id(long(city.region.key().id()))
  52. regionID = region.key().id()
  53. regionname = region.name
  54. regionentity = region
  55. regionname = region.name
  56.  
  57. if categoryid or query.find('category') > -1:
  58. categoryID = re.sub("^.*category=(d+).*", r'1', query)
  59. if categoryid: categoryID = categoryid
  60.  
  61. logging.debug('categoryID %s' , str(categoryID))
  62. #logging.debug('region id %s' , regionID)
  63. #logging.debug('city id %s' , cityID)
  64. #logging.debug('regionname %s' , regionname)
  65. #logging.debug('cityname %s' , cityname)
  66.  
  67. if cursor: results = find_documents(query, 50, search.Cursor(cursor))
  68. else: results = find_documents(query, 50, search.Cursor())
  69.  
  70. next_cursor = None
  71. if results and results.cursor: next_cursor = results.cursor.web_safe_string
  72. number_returned = 0
  73. if results: number_returned = len(results.results)
  74. namedquery = query
  75. query = query.replace(' and company_ad=0','').replace(' and company_ad=1','').replace(' and category:(6010 OR 6020 OR 6030 OR 6040 OR 6090)','').replace(' and category:(6010 OR 6020 OR 6030 OR 6040 OR 6090)','').replace(' and category:(1020 OR 1010 OR 1030 OR 1050 OR 1080 OR 1100 OR 1090)','').replace(' and category:(2010 OR 2030 OR 2040 OR 2080 OR 2070)','').replace(' and category:(3040 OR 3050 OR 3030 OR 3060)','').replace(' and category:(4010 OR 4020 OR 4040 OR 4030 OR 4090 OR 4060 OR 4070)','')
  76.  
  77. query = re.sub("regionID=d+", "", query)
  78. query = query.replace('category and','')
  79. query = query.replace('type=s','')
  80. query = query.replace('type=w','')
  81. query = query.replace('type=r','')
  82. query = query.replace('type=b','')
  83. query = query.replace('cityID and','')
  84. query = query.replace('and','')
  85. query = query.replace('regionID','')
  86. query = query.replace('=','%3D')
  87.  
  88. namedquery = namedquery.replace('=','%3D')
  89.  
  90. query = re.sub("cityID%3Dd+", "", query)
  91. query = re.sub("category%3Dd+", "", query)
  92. query = query.replace(' ',' ')
  93.  
  94.  
  95. if regionID == '4703187': regionname = 'Andaman & Nicobar Islands'
  96. elif regionID == '4694186': regionname = 'Andhra Pradesh'
  97. elif regionID == '4699188': regionname = 'Arunachal Pradesh'
  98. elif regionID == '4692186': regionname = 'Assam'
  99. elif regionID == '4702186': regionname = 'Bihar'
  100. elif regionID == '4698185': regionname = 'Chandigarh'
  101. elif regionID == '4676188': regionname = 'Chhattisgarh'
  102. elif regionID == '4691190': regionname = 'Dadra & Nagar Haveli'
  103. elif regionID == '4704183': regionname = 'Daman & Diu'
  104. elif regionID == '4699183': regionname = 'Delhi'
  105. elif regionID == '4702187': regionname = 'Goa'
  106. elif regionID == '4691189': regionname = 'Gujarat'
  107. elif regionID == '4700186': regionname = 'Haryana'
  108. elif regionID == '4703185': regionname = 'Himachal Pradesh'
  109. elif regionID == '4694187': regionname = 'Jammu & Kashmir'
  110. elif regionID == '4699189': regionname = 'Jharkhand'
  111. elif regionID == '4701185': regionname = 'Karnataka'
  112. elif regionID == '4695189': regionname = 'Kerala'
  113. elif regionID == '4700189': regionname = 'Lakshadweep'
  114. elif regionID == '4697186': regionname = 'Madhya Pradesh'
  115. elif regionID == '4694184': regionname = 'Maharashtra'
  116. elif regionID == '4700187': regionname = 'Manipur'
  117. elif regionID == '4703186': regionname = 'Meghalaya'
  118. elif regionID == '4698184': regionname = 'Mizoram'
  119. elif regionID == '4692187': regionname = 'Nagaland'
  120. elif regionID == '4696185': regionname = 'Orissa'
  121. elif regionID == '4676189': regionname = 'Pondicherry'
  122. elif regionID == '4693185': regionname = 'Punjab'
  123. elif regionID == '4701186': regionname = 'Rajasthan'
  124. elif regionID == '4701187': regionname = 'Sikkim'
  125. elif regionID == '4701188': regionname = 'Tamil Nadu'
  126. elif regionID == '4697187': regionname = 'Tripura'
  127. elif regionID == '4699190': regionname = 'Uttaranchal'
  128. elif regionID == '4692188': regionname = 'Uttar Pradesh'
  129. elif regionID == '4700188': regionname = 'West Bengal'
  130. elif regionID and query.find('cityID') < 1:
  131. region = Region.get_by_id(long(regionID))
  132. regionname = region.name
  133.  
  134. form = SearchForm()
  135.  
  136. form.w.choices = [
  137. ('4703187', u'Andaman & Nicobar Islands'),
  138. ('4694186', u'Andhra Pradesh'),
  139. ('4699188', u'Arunachal Pradesh'),
  140. ('4692186', u'Assam'),
  141. ('4702186', u'Bihar'),
  142. ('4698185', u'Chandigarh'),
  143. ('4676188', u'Chhattisgarh'),
  144. ('4691190', u'Dadra & Nagar Haveli'),
  145. ('4704183', u'Daman & Diu'),
  146. ('4699183', u'Delhi'),
  147. ('4702187', u'Goa'),
  148. ('4691189', u'Gujarat'),
  149. ('4700186', u'Haryana'),
  150. ('4703185', u'Himachal Pradesh'),
  151. ('4694187', u'Jammu & Kashmir'),
  152. ('4699189', u'Jharkhand'),
  153. ('4701185', u'Karnataka'),
  154. ('4695189', u'Kerala'),
  155. ('4700189', u'Lakshadweep'),
  156. ('4697186', u'Madhya Pradesh'),
  157. ('4694184', u'Maharashtra'),
  158. ('4700187', u'Manipur'),
  159. ('4703186', u'Meghalaya'),
  160. ('4698184', u'Mizoram'),
  161. ('4692187', u'Nagaland'),
  162. ('4696185', u'Orissa'),
  163. ('4676189', u'Pondicherry'),
  164. ('4693185', u'Punjab'),
  165. ('4701186', u'Rajasthan'),
  166. ('4701187', u'Sikkim'),
  167. ('4701188', u'Tamil Nadu'),
  168. ('4697187', u'Tripura'),
  169. ('4699190', u'Uttaranchal'),
  170. ('4692188', u'Uttar Pradesh'),
  171. ('4700188', u'West Bengal'),
  172. ]
  173.  
  174. jobs_count = None
  175. estate_count = None
  176. electronics_count = None
  177. home_count = None
  178. leisure_count = None
  179. vehicles_count = None
  180.  
  181. if (region or cityentity):
  182. #to do:use memcache
  183. form.area.choices = [] # to do: use memcache for the list
  184. for cityitem in City.all().filter('region =', region.key()).order('-vieworder').order('name').fetch(99999):
  185. form.area.choices.append([str(cityitem.key().id()), cityitem.name])
  186. if cityentity: form.area.data = str(cityentity.key().id())
  187.  
  188. if self.request.host.find('hipheap') > -1:
  189. if region and (str(region.key().id()), region.name) in form.w_us.choices: form.w_us.choices.remove((str(region.key().id()), region.name))
  190. else:
  191. if region and (str(region.key().id()), region.name) in form.w.choices: form.w.choices.remove((str(region.key().id()), region.name))
  192.  
  193. if cityID and int(cityID) > 0:
  194.  
  195. jobs_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('6010', '6020', '6030', '6040', '6090') AND cities = KEY('City', :1) AND published = True AND modified > :2 ", cityID, datetime.now() - timedelta(days=609))
  196. jobs_count= jobs_count_gql.count(limit=40000)
  197.  
  198. estate_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('1010', '1020', '1030', '1050', '1080', '1090', '1100') AND cities = KEY('City', :1) AND published = True AND modified > :2 ", cityID, datetime.now() - timedelta(days=609))
  199. estate_count= estate_count_gql.count(limit=40000)
  200.  
  201. electronics_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('5010', '5020', '5030', '5040') AND cities = KEY('City', :1) AND published = True AND modified > :2 ", cityID, datetime.now() - timedelta(days=609))
  202. electronics_count= electronics_count_gql.count(limit=40000)
  203.  
  204. home_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('3030', '3040', '3050', '3060') AND published = True AND cities = KEY('City', :1) AND modified > :2 ", cityID, datetime.now() - timedelta(days=609))
  205. home_count= home_count_gql.count(limit=40000)
  206.  
  207. leisure_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('4010', '4020', '4030', '4040', '4060', '4090') AND cities = KEY('City', :1) AND published = True AND modified > :2 ", cityID, datetime.now() - timedelta(days=609))
  208. leisure_count= leisure_count_gql.count(limit=40000)
  209.  
  210. vehicles_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('2010', '2030', '2040', '2070', '2080') AND cities = KEY('City', :1) AND published = True AND modified > :2 ", cityID, datetime.now() - timedelta(days=609))
  211. vehicles_count= vehicles_count_gql.count(limit=40000)
  212.  
  213. elif regionID and int(regionID) > 0:
  214. logging.debug('regionID: %d', int(regionID))
  215. regionID = int(regionID)
  216. jobs_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('6010', '6020', '6030', '6040', '6090') AND regions = KEY('Region', :1) AND published = True AND modified > :2 ", regionID, datetime.now() - timedelta(days=609))
  217. jobs_count= jobs_count_gql.count(limit=40000)
  218.  
  219. estate_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('1010', '1020', '1030', '1050', '1080', '1090', '1100') AND regions = KEY('Region', :1) AND published = True AND modified > :2 ", regionID, datetime.now() - timedelta(days=609))
  220. estate_count= estate_count_gql.count(limit=40000)
  221.  
  222. electronics_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('5010', '5020', '5030', '5040') AND regions = KEY('Region', :1) AND published = True AND modified > :2 ", regionID, datetime.now() - timedelta(days=609))
  223. electronics_count= electronics_count_gql.count(limit=40000)
  224.  
  225. home_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('3030', '3040', '3050', '3060') AND published = True AND regions = KEY('Region', :1) AND modified > :2 ", regionID, datetime.now() - timedelta(days=609))
  226. home_count= home_count_gql.count(limit=40000)
  227.  
  228. leisure_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('4010', '4020', '4030', '4040', '4060', '4090') AND regions = KEY('Region', :1) AND published = True AND modified > :2 ", regionID, datetime.now() - timedelta(days=609))
  229. leisure_count= leisure_count_gql.count(limit=40000)
  230.  
  231. vehicles_count_gql = db.GqlQuery("SELECT * FROM Ad WHERE category IN ('2010', '2030', '2040', '2070', '2080') AND regions = KEY('Region', :1) AND published = True AND modified > :2 ", regionID, datetime.now() - timedelta(days=609))
  232. vehicles_count= vehicles_count_gql.count(limit=40000)
  233.  
  234.  
  235.  
  236.  
  237. template_values = {
  238. 'results': results,'cursor':next_cursor, 'country' : country,'user': self.current_user,
  239. 'number_returned': number_returned,'loggedin': self.logged_in, 'VERSION': VERSION,
  240. 'region' : region,'regionname' : regionname,'jobs_count':jobs_count,'estate_count':estate_count,'electronics_count':electronics_count,
  241. 'home_count':home_count,'leisure_count':leisure_count,'vehicles_count':vehicles_count,
  242. 'cityentity': cityentity, 'request' : self.request, 'categoryID' : categoryID,
  243. 'form' : form, 'query' : query, 'namedquery' : namedquery, 'cityname' : cityname,'category': category, 'jobs_count': jobs_count,
  244. }
  245. self.render_template('q.htm', template_values)
  246.  
  247. region_id_to_name = {'4694186': 'Andhra Pradesh', ... } #very long
  248.  
  249. def mutate_query(self, query):
  250. query = query.replace(...) # whatever you are doing here
  251. query = re.sub("regionID=d+", "", query)
  252. to_remove = ['category and', 'type=s', 'type=w', 'type=r','type=b','cityID and','and','regionID']
  253. for s in to_remove:
  254. query = query.replace(s,'')
  255. query = query.replace('=','%3D')
  256. query = re.sub("cityID%3Dd+", "", query)
  257. query = re.sub("category%3Dd+", "", query)
  258. query = query.replace(' ',' ')
  259. return query
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement