示例#1
0
    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)
示例#2
0
    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)
示例#3
0
文件: test.py 项目: laurentb/weboob
 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)
示例#4
0
文件: test.py 项目: P4ncake/weboob
 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)
示例#5
0
文件: test.py 项目: laurentb/weboob
 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)
示例#6
0
文件: test.py 项目: P4ncake/weboob
 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)
示例#7
0
文件: test.py 项目: Boussadia/weboob
    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')
示例#8
0
文件: test.py 项目: laurentb/weboob
    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)
示例#9
0
文件: test.py 项目: Konubinix/weboob
    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')
示例#10
0
文件: test.py 项目: dasimon/weboob
    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')
示例#11
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')
示例#12
0
文件: test.py 项目: antibios/weboob
    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)
示例#13
0
    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)
示例#14
0
    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)
示例#15
0
文件: flatboob.py 项目: hugues/weboob
    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)
示例#16
0
    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)