def refreshHousingsList(self): name = self.ui.queriesList.itemText(self.ui.queriesList.currentIndex()) q = self.config.get('queries', name) if q is None: return q self.ui.housingsList.clear() self.ui.queriesList.setEnabled(False) self.ui.bookmarksButton.setEnabled(False) query = Query() query.type = int(q.get('type', 0)) query.cities = [] for c in q['cities']: city = City(c['id']) city.backend = c['backend'] city.name = c['name'] query.cities.append(city) query.area_min = int(q['area_min']) or None query.area_max = int(q['area_max']) or None query.cost_min = int(q['cost_min']) or None query.cost_max = int(q['cost_max']) or None query.nb_rooms = int(q['nb_rooms']) or None self.process = QtDo(self.weboob, self.addHousing, fb=self.addHousingEnd) self.process.do(self.app._do_complete, 20, (), 'search_housings', query)
def do_search(self, line): """ search Search for housing. Parameters are interactively asked. """ pattern = 'notempty' query = Query() query.cities = [] while pattern: if len(query.cities) > 0: print '\n%sSelected cities:%s %s' % (self.BOLD, self.NC, ', '.join([c.name for c in query.cities])) pattern = self.ask('Enter a city pattern (or empty to stop)', default='') if not pattern: break cities = [] for backend, city in self.weboob.do('search_city', pattern): cities.append(city) if len(cities) == 0: print ' Not found!' continue if len(cities) == 1: if city in query.cities: query.cities.remove(city) else: query.cities.append(city) continue r = 'notempty' while r != '': for i, city in enumerate(cities): print ' %s%2d)%s [%s] %s' % (self.BOLD, i+1, self.NC, 'x' if city in query.cities else ' ', city.name) r = self.ask(' Select cities (or empty to stop)', regexp='(\d+|)', default='') if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(cities): continue city = cities[r-1] if city in query.cities: query.cities.remove(city) else: query.cities.append(city) query.area_min = self.ask_int('Enter min area') query.area_max = self.ask_int('Enter max area') query.cost_min = self.ask_int('Enter min cost') query.cost_max = self.ask_int('Enter max cost') query.nb_rooms = self.ask_int('Enter number of rooms') self.change_path([u'housings']) self.start_format() for backend, housing in self.do('search_housings', query): self.cached_format(housing)
def test_seloger_furnished_rent(self): query = Query() query.area_min = 20 query.cost_max = 1500 query.type = POSTS_TYPES.FURNISHED_RENT query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) self.check_against_query(query)
def test_explorimmo_rent(self): query = Query() query.area_min = 20 query.cost_max = 1500 query.type = POSTS_TYPES.RENT query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) self.check_against_query(query)
def test_seloger_rent_personal(self): query = Query() query.area_min = 20 query.cost_max = 1500 query.type = POSTS_TYPES.RENT query.advert_types = [ADVERT_TYPES.PROFESSIONAL] query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) self.check_against_query(query)
def test_leboncoin_rent(self): query = Query() query.area_min = 20 query.cost_max = 1500 query.type = POSTS_TYPES.RENT query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) if len(query.cities) == 3: break self.check_against_query(query)
def test_seloger(self): query = Query() query.area_min = 20 query.cost_max = 1000 query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) results = list(self.backend.search_housings(query)) self.assertTrue(len(results) > 0) self.backend.fillobj(results[0], 'phone')
def test_logicimmo_personal(self): query = Query() query.area_min = 20 query.cost_max = 900 query.type = POSTS_TYPES.RENT query.advert_types = [ADVERT_TYPES.PERSONAL] query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) results = list(self.backend.search_housings(query)) self.assertEqual(len(results), 0)
def test_explorimmo(self): query = Query() query.area_min = 20 query.cost_max = 900 query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) results = list(itertools.islice(self.backend.search_housings(query), 0, 20)) self.assertTrue(len(results) > 0) self.backend.fillobj(results[0], 'phone')
def test_seloger(self): query = Query() query.area_min = 20 query.cost_max = 1000 query.type = Query.TYPE_RENT query.cities = [] for city in self.backend.search_city(u'Ferté'): city.backend = self.backend.name query.cities.append(city) results = list(itertools.islice(self.backend.search_housings(query), 0, 20)) self.assertTrue(len(results) > 0) self.backend.fillobj(results[0], 'phone')
def test_explorimmo(self): query = Query() query.area_min = 20 query.cost_max = 900 query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) results = list( itertools.islice(self.backend.search_housings(query), 0, 20)) self.assertTrue(len(results) > 0) self.backend.fillobj(results[0], 'phone')
def test_explorimmo_rent(self): query = Query() query.area_min = 20 query.cost_max = 1500 query.type = POSTS_TYPES.RENT query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) results = self.check_housing_lists(query) self.assertTrue(any(x.utilities == UTILITIES.INCLUDED for x in results)) housing = self.backend.get_housing(results[0].id) self.backend.fillobj(housing, 'phone') self.check_single_housing(housing, results[0].advert_type) self.assertEqual(housing.utilities, results[0].utilities)
def test_leboncoin_furnished_rent(self): query = Query() query.area_min = 20 query.cost_max = 1500 query.type = POSTS_TYPES.FURNISHED_RENT query.cities = [] for city in self.backend.search_city('paris'): city.backend = self.backend.name query.cities.append(city) if len(query.cities) == 3: break results = self.check_housing_lists(query) self.assertTrue(any(x.utilities for x in results)) housing = self.backend.get_housing(results[0].id) self.backend.fillobj(housing, 'phone') self.check_single_housing(housing, results[0].advert_type)
def do_search(self, line): """ search Search for housing. Parameters are interactively asked. """ pattern = 'notempty' query = Query() query.cities = [] while pattern: if len(query.cities) > 0: print '\n%sSelected cities:%s %s' % (self.BOLD, self.NC, ', '.join([c.name for c in query.cities])) pattern = self.ask('Enter a city pattern (or empty to stop)', default='') if not pattern: break cities = [] for backend, city in self.weboob.do('search_city', pattern): cities.append(city) if len(cities) == 0: print ' Not found!' continue if len(cities) == 1: if city in query.cities: query.cities.remove(city) else: query.cities.append(city) continue r = 'notempty' while r != '': for i, city in enumerate(cities): print ' %s%2d)%s [%s] %s' % (self.BOLD, i+1, self.NC, 'x' if city in query.cities else ' ', city.name) r = self.ask(' Select cities (or empty to stop)', regexp='(\d+|)', default='') if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(cities): continue city = cities[r-1] if city in query.cities: query.cities.remove(city) else: query.cities.append(city) r = 'notempty' while r != '': for good in Query.HOUSE_TYPES.values: print ' %s%2d)%s [%s] %s' % (self.BOLD, Query.HOUSE_TYPES.index[good] + 1, self.NC, 'x' if good in query.house_types else ' ', good) r = self.ask(' Select type of house (or empty to stop)', regexp='(\d+|)', default='') if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(Query.TYPE_OF_GOOD.values): continue value = Query.TYPE_OF_GOOD.values[r - 1] if value in query.type_of_good: query.type_of_good.remove(value) else: query.type_of_good.append(value) _type = None while _type not in [query.TYPE_RENT, query.TYPE_SALE]: print ' %s%2d)%s %s' % (self.BOLD, query.TYPE_RENT, self.NC, "Rent") print ' %s%2d)%s %s' % (self.BOLD, query.TYPE_SALE, self.NC, "Sale") _type = self.ask_int('Type of query') query.type = _type query.area_min = self.ask_int('Enter min area') query.area_max = self.ask_int('Enter max area') query.cost_min = self.ask_int('Enter min cost') query.cost_max = self.ask_int('Enter max cost') query.nb_rooms = self.ask_int('Enter number of rooms') save_query = self.ask('Save query (y/n)', default='n') if save_query.upper() == 'Y': name = '' while not name: name = self.ask('Query name') self.config.set('queries', name, query) self.config.save() self.complete_search(query)
def do_search(self, line): """ search Search for housing. Parameters are interactively asked. """ pattern = "notempty" query = Query() query.cities = [] while pattern: if len(query.cities) > 0: print "\n%sSelected cities:%s %s" % (self.BOLD, self.NC, ", ".join([c.name for c in query.cities])) pattern = self.ask("Enter a city pattern (or empty to stop)", default="") if not pattern: break cities = [] for backend, city in self.weboob.do("search_city", pattern): cities.append(city) if len(cities) == 0: print " Not found!" continue if len(cities) == 1: if city in query.cities: query.cities.remove(city) else: query.cities.append(city) continue r = "notempty" while r != "": for i, city in enumerate(cities): print " %s%2d)%s [%s] %s" % ( self.BOLD, i + 1, self.NC, "x" if city in query.cities else " ", city.name, ) r = self.ask(" Select cities (or empty to stop)", regexp="(\d+|)", default="") if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(cities): continue city = cities[r - 1] if city in query.cities: query.cities.remove(city) else: query.cities.append(city) query.area_min = self.ask_int("Enter min area") query.area_max = self.ask_int("Enter max area") query.cost_min = self.ask_int("Enter min cost") query.cost_max = self.ask_int("Enter max cost") query.nb_rooms = self.ask_int("Enter number of rooms") self.change_path([u"housings"]) self.start_format() for backend, housing in self.do("search_housings", query): self.cached_format(housing)
def do_search(self, line): """ search Search for housing. Parameters are interactively asked. """ pattern = 'notempty' query = Query() query.cities = [] while pattern: if len(query.cities) > 0: print('\n%sSelected cities:%s %s' % (self.BOLD, self.NC, ', '.join([c.name for c in query.cities]))) pattern = self.ask('Enter a city pattern (or empty to stop)', default='') if not pattern: break cities = [] for city in self.weboob.do('search_city', pattern): cities.append(city) if len(cities) == 0: print(' Not found!') continue if len(cities) == 1: if city in query.cities: query.cities.remove(city) else: query.cities.append(city) continue r = 'notempty' while r != '': for i, city in enumerate(cities): print(' %s%2d)%s [%s] %s (%s)' % (self.BOLD, i+1, self.NC, 'x' if city in query.cities else ' ', city.name, city.backend)) r = self.ask('Select cities (or empty to stop)', regexp='(\d+|)', default='') if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(cities): continue city = cities[r-1] if city in query.cities: query.cities.remove(city) else: query.cities.append(city) r = 'notempty' while r != '': for i, good in enumerate(HOUSE_TYPES, 1): print(' %s%2d)%s [%s] %s' % (self.BOLD, i, self.NC, 'x' if good in query.house_types else ' ', good)) r = self.ask('Select type of house (or empty to stop)', regexp='(\d+|)', default='') if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(HOUSE_TYPES): continue value = list(HOUSE_TYPES)[r - 1] if value in query.house_types: query.house_types.remove(value) else: query.house_types.append(value) _type = None posts_types = sorted(POSTS_TYPES, key=lambda e: e.value) while _type not in range(len(posts_types)): for i, t in enumerate(posts_types): print(' %s%2d)%s %s' % (self.BOLD, i, self.NC, t)) _type = self.ask_int('Type of query') query.type = posts_types[_type] r = 'notempty' while r != '': for i, good in enumerate(ADVERT_TYPES, 1): print(' %s%2d)%s [%s] %s' % (self.BOLD, i, self.NC, 'x' if good in query.advert_types else ' ', good)) r = self.ask('Select type of posts (or empty to stop)', regexp='(\d+|)', default='') if not r.isdigit(): continue r = int(r) if r <= 0 or r > len(ADVERT_TYPES): continue value = list(ADVERT_TYPES)[r - 1] if value in query.advert_types: query.advert_types.remove(value) else: query.advert_types.append(value) query.area_min = self.ask_int('Enter min area') query.area_max = self.ask_int('Enter max area') query.cost_min = self.ask_int('Enter min cost') query.cost_max = self.ask_int('Enter max cost') query.nb_rooms = self.ask_int('Enter number of rooms') save_query = self.ask('Save query (y/n)', default='n') if save_query.upper() == 'Y': name = '' while not name: name = self.ask('Query name') self.config.set('queries', name, query) self.config.save() self.complete_search(query)