WebOOB -> Woob

This commit is contained in:
Lucas Verney 2021-04-08 20:08:23 +02:00
parent 9a532c0da1
commit 9b6407db05
43 changed files with 253 additions and 273 deletions

1
.gitignore vendored
View File

@ -10,5 +10,4 @@ data/
doc/_build doc/_build
data_rework/ data_rework/
.env .env
weboob
.htpasswd .htpasswd

View File

@ -1,6 +1,6 @@
{ {
"cSpell.words": [ "cSpell.words": [
"Weboob", "woob",
"flatisfy" "flatisfy"
], ],
"sqltools.useNodeRuntime": true, "sqltools.useNodeRuntime": true,

View File

@ -53,9 +53,9 @@ locale.
Thanks! Thanks!
## Adding support for a new Weboob backend ## Adding support for a new Woob backend
To enable a new Weboob `CapHousing` backend in Flatisfy, you should add it to To enable a new Woob `CapHousing` backend in Flatisfy, you should add it to
the list of available backends in the list of available backends in
[flatisfy/fetch.py#L69-70](https://git.phyks.me/Phyks/flatisfy/blob/master/flatisfy/fetch.py#L69-70) [flatisfy/fetch.py#L69-70](https://git.phyks.me/Phyks/flatisfy/blob/master/flatisfy/fetch.py#L69-70)
and update the list of `BACKEND_PRECEDENCES` for deduplication in and update the list of `BACKEND_PRECEDENCES` for deduplication in

View File

@ -19,7 +19,7 @@ and it is working fine :)
<img src="doc/img/home.png" width="45%"/> <img src="doc/img/home2.png" width="45%"/> <img src="doc/img/home.png" width="45%"/> <img src="doc/img/home2.png" width="45%"/>
It uses [WebOOB](http://weboob.org/) to get all the housing posts on most of It uses [woob](https://gitlab.com/woob/woob/) to get all the housing posts on most of
the websites offering housings posts, and then offers a bunch of pipelines to the websites offering housings posts, and then offers a bunch of pipelines to
filter and deduplicate the fetched housings. filter and deduplicate the fetched housings.
@ -116,9 +116,9 @@ Feel free to open issues. An IRC channel is available at [irc://irc.freenode.net
## Thanks ## Thanks
* [WebOOB](http://weboob.org/). Note that this is actually the only and best * [Woob](https://gitlab.com/woob/woob/). Note that this is actually the only and best
software out there to scrape housing posts online. Using it in Flatisfy does software out there to scrape housing posts online. Using it in Flatisfy does
not mean the authors of Flatisfy endorse WebOOB authors' views. not mean the authors of Flatisfy endorse Woob authors' views.
* The OpenData providers listed above! * The OpenData providers listed above!
* Navitia for their really cool public transportation API. * Navitia for their really cool public transportation API.
* A lots of Python modules, required for this script (see `requirements.txt`). * A lots of Python modules, required for this script (see `requirements.txt`).

View File

@ -2,36 +2,34 @@ Getting started
=============== ===============
## Dependency on WebOOB ## Dependency on Woob
**Important**: Flatisfy relies on [WebOOB](http://weboob.org/) to fetch **Important**: Flatisfy relies on [Woob](https://gitlab.com/woob/woob/) to fetch
housing posts from housing websites. Then, you should install the [`devel` housing posts from housing websites.
branch](https://git.weboob.org/weboob/devel/) and update it regularly,
especially if Flatisfy suddenly stops fetching housing posts.
If you `pip install -r requirements.txt` it will install the latest If you `pip install -r requirements.txt` it will install the latest
development version of [WebOOB](https://git.weboob.org/weboob/devel/) and the development version of [Woob](https://gitlab.com/woob/woob/) and the
[WebOOB modules](https://git.weboob.org/weboob/modules/), which should be the [Woob modules](https://gitlab.com/woob/modules/), which should be the
best version available out there. You should update these packages regularly, best version available out there. You should update these packages regularly,
as they evolve quickly. as they evolve quickly.
WebOOB is made of two parts: a core and modules (which is the actual code Woob is made of two parts: a core and modules (which is the actual code
fetching data from websites). Modules tend to break often and are then updated fetching data from websites). Modules tend to break often and are then updated
often, you should keep them up to date. This can be done by installing the often, you should keep them up to date. This can be done by installing and
`weboob-modules` package listed in the `requirements.txt` and using the upgrading the packages listed in the `requirements.txt` and using the default
default configuration. configuration.
This is a safe default configuration. However, a better option is usually to This is a safe default configuration. However, a better option is usually to
clone [WebOOB git repo](https://git.weboob.org/weboob/devel/) somewhere, on clone [Woob git repo](https://gitlab.com/woob/woob/) somewhere, on
your disk, to point `modules_path` configuration option to your disk, to point `modules_path` configuration option to
`path_to_weboob_git/modules` (see the configuration section below) and to run `path_to_woob_git/modules` (see the configuration section below) and to run
a `git pull; python setup.py install` in the WebOOB git repo often. a `git pull; python setup.py install` in the Woob git repo often.
A copy of the WebOOB modules is available in the `modules` directory at the A copy of the Woob modules is available in the `modules` directory at the
root of this repository, you can use `"modules_path": "/path/to/flatisfy/modules"` to use them. root of this repository, you can use `"modules_path": "/path/to/flatisfy/modules"` to use them.
This copy may or may not be more up to date than the current state of official This copy may or may not be more up to date than the current state of official
WebOOB modules. Some changes are made there, which are not backported Woob modules. Some changes are made there, which are not backported
upstream. WebOOB official modules are not synced in the `modules` folder on a upstream. Woob official modules are not synced in the `modules` folder on a
regular basis, so try both and see which ones match your needs! :) regular basis, so try both and see which ones match your needs! :)
@ -81,7 +79,7 @@ The available commands are:
_Note:_ Fetching flats can be quite long and take up to a few minutes. This _Note:_ Fetching flats can be quite long and take up to a few minutes. This
should be better optimized. To get a verbose output and have an hint about the should be better optimized. To get a verbose output and have an hint about the
progress, use the `-v` argument. It can remain stuck at "Loading flats for progress, use the `-v` argument. It can remain stuck at "Loading flats for
constraint XXX...", which simply means it is fetching flats (using WebOOB constraint XXX...", which simply means it is fetching flats (using Woob
under the hood) and this step can be super long if there are lots of flats to under the hood) and this step can be super long if there are lots of flats to
fetch. If this happens to you, you can set `max_entries` in your config to fetch. If this happens to you, you can set `max_entries` in your config to
limit the number of flats to fetch. limit the number of flats to fetch.
@ -123,11 +121,11 @@ List of configuration options:
* `mapbox_api_key` is an API token for [Mapbox](http://mapbox.com/) * `mapbox_api_key` is an API token for [Mapbox](http://mapbox.com/)
which is required to compute travel times for `WALK`, `BIKE` and `CAR` which is required to compute travel times for `WALK`, `BIKE` and `CAR`
modes. modes.
* `modules_path` is the path to the WebOOB modules. It can be `null` if you * `modules_path` is the path to the Woob modules. It can be `null` if you
want WebOOB to use the locally installed [WebOOB want Woob to use the locally installed [Woob
modules](https://git.weboob.org/weboob/modules), which you should install modules](https://gitlab.com/woob/modules/), which you should install
yourself. This is the default value. If it is a string, it should be an yourself. This is the default value. If it is a string, it should be an
absolute path to the folder containing WebOOB modules. absolute path to the folder containing Woob modules.
* `port` is the port on which the development webserver should be * `port` is the port on which the development webserver should be
listening (default to `8080`). listening (default to `8080`).
* `host` is the host on which the development webserver should be listening * `host` is the host on which the development webserver should be listening
@ -135,8 +133,8 @@ List of configuration options:
* `webserver` is a server to use instead of the default Bottle built-in * `webserver` is a server to use instead of the default Bottle built-in
webserver, see [Bottle deployment webserver, see [Bottle deployment
doc](http://bottlepy.org/docs/dev/deployment.html). doc](http://bottlepy.org/docs/dev/deployment.html).
* `backends` is a list of WebOOB backends to enable. It defaults to any * `backends` is a list of Woob backends to enable. It defaults to any
available and supported WebOOB backend. available and supported Woob backend.
* `store_personal_data` is a boolean indicated whether or not Flatisfy should * `store_personal_data` is a boolean indicated whether or not Flatisfy should
fetch personal data from housing posts and store them in database. Such fetch personal data from housing posts and store them in database. Such
personal data include contact phone number for instance. By default, personal data include contact phone number for instance. By default,

View File

@ -20,9 +20,6 @@ virtualenv .env && source .env/bin/activate
# Install required Python modules # Install required Python modules
pip install -r requirements.txt pip install -r requirements.txt
# Clone and install webOOB
git clone https://git.weboob.org/weboob/devel weboob && cd weboob && python setup.py install && cd ..
# Install required JS libraries and build the webapp # Install required JS libraries and build the webapp
npm install && npm run build:prod npm install && npm run build:prod
@ -45,7 +42,7 @@ python -m flatisfy import --config config/config.json -v
_Note 1_: In the config, you should set `data_directory` to the absolute path of _Note 1_: In the config, you should set `data_directory` to the absolute path of
the `data` directory created below. This directory should be writable by the the `data` directory created below. This directory should be writable by the
user running Flatisfy. You should also set `modules_path` to the absolute path user running Flatisfy. You should also set `modules_path` to the absolute path
to the `modules` folder under the previous `weboob` clone. Finally, the last to the `modules` folder under the previous `woob` clone. Finally, the last
`import` command can be `cron`-tasked to automatically fetch available `import` command can be `cron`-tasked to automatically fetch available
housings posts periodically. housings posts periodically.
@ -246,4 +243,4 @@ Restart:
```bash ```bash
systemctl restart uwsgi systemctl restart uwsgi
``` ```

View File

@ -27,7 +27,7 @@ set `max_entries` in your config to limit the number of posts fetched.
## Docker image does not start the webserver at first start? ## Docker image does not start the webserver at first start?
When you launch the Docker image, it first updates WebOOB and fetches the When you launch the Docker image, it first updates Woob and fetches the
housing posts matching your criterias. The webserver is only started once this housing posts matching your criterias. The webserver is only started once this
is done. As fetching housing posts can take a bit of time (up to 10 minutes), is done. As fetching housing posts can take a bit of time (up to 10 minutes),
the webserver will not be available right away. the webserver will not be available right away.

View File

@ -18,11 +18,6 @@ RUN pip install -U setuptools && \
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
&& apt-get install -y nodejs && apt-get install -y nodejs
# Install weboob's code itself.
RUN git clone --depth 1 https://git.weboob.org/weboob/weboob /home/user/weboob \
&& cd /home/user/weboob \
&& pip install .
RUN mkdir -p /flatisfy/data RUN mkdir -p /flatisfy/data
VOLUME /flatisfy VOLUME /flatisfy

View File

@ -14,7 +14,4 @@ echo "[ENTRYPOINT] Setting fake values for git config..."
git config --global user.email flatisfy@example.com git config --global user.email flatisfy@example.com
git config --global user.name "Flatisfy Root" git config --global user.name "Flatisfy Root"
echo "Update Weboob..."
/home/user/update_weboob.sh
exec su user -c "$@" exec su user -c "$@"

View File

@ -1,6 +0,0 @@
#!/bin/bash
set -e
echo "Updating Weboob..."
cd /home/user/weboob
git pull && pip install --upgrade . || echo "Couldn't upgrade Weboob; maybe the server is unreachable?"

View File

@ -134,7 +134,7 @@ def import_and_filter(config, load_from_db=False, new_only=False):
:param config: A config dict. :param config: A config dict.
:param load_from_db: Whether to load flats from database or fetch them :param load_from_db: Whether to load flats from database or fetch them
using WebOOB. using Woob.
:return: ``None``. :return: ``None``.
""" """
# Fetch and filter flats list # Fetch and filter flats list

View File

@ -15,7 +15,7 @@ import sys
import traceback import traceback
import appdirs import appdirs
from weboob.capabilities.housing import POSTS_TYPES, HOUSE_TYPES from woob.capabilities.housing import POSTS_TYPES, HOUSE_TYPES
from flatisfy import data from flatisfy import data
from flatisfy import tools from flatisfy import tools
@ -23,6 +23,9 @@ from flatisfy.constants import TimeToModes
from flatisfy.models.postal_code import PostalCode from flatisfy.models.postal_code import PostalCode
DIRPATH = os.path.dirname(os.path.realpath(__file__))
# Default configuration # Default configuration
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
# Constraints to match # Constraints to match
@ -74,10 +77,8 @@ DEFAULT_CONFIG = {
"max_entries": None, "max_entries": None,
# Directory in wich data will be put. ``None`` is XDG default location. # Directory in wich data will be put. ``None`` is XDG default location.
"data_directory": None, "data_directory": None,
# Path to the modules directory containing all Weboob modules. ``None`` if # Path to the modules directory containing all Woob modules.
# ``weboob_modules`` package is pip-installed, and you want to use "modules_path": os.path.join(DIRPATH, '..', 'modules'),
# ``pkgresource`` to automatically find it.
"modules_path": None,
# SQLAlchemy URI to the database to use # SQLAlchemy URI to the database to use
"database": None, "database": None,
# Path to the Whoosh search index file. Use ``None`` to put it in # Path to the Whoosh search index file. Use ``None`` to put it in
@ -89,7 +90,7 @@ DEFAULT_CONFIG = {
"host": "127.0.0.1", "host": "127.0.0.1",
# Web server to use to serve the webapp (see Bottle deployment doc) # Web server to use to serve the webapp (see Bottle deployment doc)
"webserver": None, "webserver": None,
# List of Weboob backends to use (default to any backend available) # List of Woob backends to use (default to any backend available)
"backends": None, "backends": None,
# Should email notifications be sent? # Should email notifications be sent?
"send_email": False, "send_email": False,

View File

@ -20,27 +20,27 @@ LOGGER = logging.getLogger(__name__)
try: try:
from weboob.capabilities.housing import Query, POSTS_TYPES, HOUSE_TYPES from woob.capabilities.housing import Query, POSTS_TYPES, HOUSE_TYPES
from weboob.core.bcall import CallErrors from woob.core.bcall import CallErrors
from weboob.core.ouiboube import WebNip from woob.core.ouiboube import WebNip
from weboob.tools.json import WeboobEncoder from woob.tools.json import WoobEncoder
except ImportError: except ImportError:
LOGGER.error("Weboob is not available on your system. Make sure you installed it.") LOGGER.error("Woob is not available on your system. Make sure you installed it.")
raise raise
class WebOOBProxy(object): class WoobProxy(object):
""" """
Wrapper around WebOOB ``WebNip`` class, to fetch housing posts without Wrapper around Woob ``WebNip`` class, to fetch housing posts without
having to spawn a subprocess. having to spawn a subprocess.
""" """
@staticmethod @staticmethod
def version(): def version():
""" """
Get WebOOB version. Get Woob version.
:return: The installed WebOOB version. :return: The installed Woob version.
""" """
return WebNip.VERSION return WebNip.VERSION
@ -64,7 +64,7 @@ class WebOOBProxy(object):
def __init__(self, config): def __init__(self, config):
""" """
Create a WebOOB handle and try to load the modules. Create a Woob handle and try to load the modules.
:param config: A config dict. :param config: A config dict.
""" """
@ -95,13 +95,13 @@ class WebOOBProxy(object):
def build_queries(self, constraints_dict): def build_queries(self, constraints_dict):
""" """
Build WebOOB ``weboob.capabilities.housing.Query`` objects from the Build Woob ``woob.capabilities.housing.Query`` objects from the
constraints defined in the configuration. Each query has at most 3 constraints defined in the configuration. Each query has at most 3
cities, to comply with housing websites limitations. cities, to comply with housing websites limitations.
:param constraints_dict: A dictionary of constraints, as defined in the :param constraints_dict: A dictionary of constraints, as defined in the
config. config.
:return: A list of WebOOB ``weboob.capabilities.housing.Query`` :return: A list of Woob ``woob.capabilities.housing.Query``
objects. Returns ``None`` if an error occurred. objects. Returns ``None`` if an error occurred.
""" """
queries = [] queries = []
@ -163,9 +163,9 @@ class WebOOBProxy(object):
def query(self, query, max_entries=None, store_personal_data=False): def query(self, query, max_entries=None, store_personal_data=False):
""" """
Fetch the housings posts matching a given WebOOB query. Fetch the housings posts matching a given Woob query.
:param query: A WebOOB `weboob.capabilities.housing.Query`` object. :param query: A Woob `woob.capabilities.housing.Query`` object.
:param max_entries: Maximum number of entries to fetch. :param max_entries: Maximum number of entries to fetch.
:param store_personal_data: Whether personal data should be fetched :param store_personal_data: Whether personal data should be fetched
from housing posts (phone number etc). from housing posts (phone number etc).
@ -181,7 +181,7 @@ class WebOOBProxy(object):
"search_housings", "search_housings",
query, query,
# Only run the call on the required backends. # Only run the call on the required backends.
# Otherwise, WebOOB is doing weird stuff and returning # Otherwise, Woob is doing weird stuff and returning
# nonsense. # nonsense.
backends=[x for x in self.backends if x.name in useful_backends], backends=[x for x in self.backends if x.name in useful_backends],
), ),
@ -189,7 +189,7 @@ class WebOOBProxy(object):
): ):
if not store_personal_data: if not store_personal_data:
housing.phone = None housing.phone = None
housings.append(json.dumps(housing, cls=WeboobEncoder)) housings.append(json.dumps(housing, cls=WoobEncoder))
except CallErrors as exc: except CallErrors as exc:
# If an error occured, just log it # If an error occured, just log it
LOGGER.error("An error occured while fetching the housing posts: %s", str(exc)) LOGGER.error("An error occured while fetching the housing posts: %s", str(exc))
@ -199,7 +199,7 @@ class WebOOBProxy(object):
""" """
Get information (details) about an housing post. Get information (details) about an housing post.
:param full_flat_id: A WebOOB housing post id, in complete form :param full_flat_id: A Woob housing post id, in complete form
(ID@BACKEND) (ID@BACKEND)
:param store_personal_data: Whether personal data should be fetched :param store_personal_data: Whether personal data should be fetched
from housing posts (phone number etc). from housing posts (phone number etc).
@ -223,7 +223,7 @@ class WebOOBProxy(object):
# Otherwise, we miss the @backend afterwards # Otherwise, we miss the @backend afterwards
housing.id = full_flat_id housing.id = full_flat_id
return json.dumps(housing, cls=WeboobEncoder) return json.dumps(housing, cls=WoobEncoder)
except Exception as exc: # pylint: disable=broad-except except Exception as exc: # pylint: disable=broad-except
# If an error occured, just log it # If an error occured, just log it
LOGGER.error("An error occured while fetching housing %s: %s", full_flat_id, str(exc)) LOGGER.error("An error occured while fetching housing %s: %s", full_flat_id, str(exc))
@ -232,7 +232,7 @@ class WebOOBProxy(object):
def fetch_flats(config): def fetch_flats(config):
""" """
Fetch the available flats using the Flatboob / WebOOB config. Fetch the available flats using the Woob config.
:param config: A config dict. :param config: A config dict.
:return: A dict mapping constraint in config to all available matching :return: A dict mapping constraint in config to all available matching
@ -242,16 +242,16 @@ def fetch_flats(config):
for constraint_name, constraint in config["constraints"].items(): for constraint_name, constraint in config["constraints"].items():
LOGGER.info("Loading flats for constraint %s...", constraint_name) LOGGER.info("Loading flats for constraint %s...", constraint_name)
with WebOOBProxy(config) as webOOB_proxy: with WoobProxy(config) as woob_proxy:
queries = webOOB_proxy.build_queries(constraint) queries = woob_proxy.build_queries(constraint)
housing_posts = [] housing_posts = []
for query in queries: for query in queries:
housing_posts.extend(webOOB_proxy.query(query, config["max_entries"], config["store_personal_data"])) housing_posts.extend(woob_proxy.query(query, config["max_entries"], config["store_personal_data"]))
housing_posts = housing_posts[: config["max_entries"]] housing_posts = housing_posts[: config["max_entries"]]
LOGGER.info("Fetched %d flats.", len(housing_posts)) LOGGER.info("Fetched %d flats.", len(housing_posts))
constraint_flats_list = [json.loads(flat) for flat in housing_posts] constraint_flats_list = [json.loads(flat) for flat in housing_posts]
constraint_flats_list = [WebOOBProxy.restore_decimal_fields(flat) for flat in constraint_flats_list] constraint_flats_list = [WoobProxy.restore_decimal_fields(flat) for flat in constraint_flats_list]
fetched_flats[constraint_name] = constraint_flats_list fetched_flats[constraint_name] = constraint_flats_list
return fetched_flats return fetched_flats
@ -266,18 +266,18 @@ def fetch_details_rate_limited(config, flat_id):
def fetch_details(config, flat_id): def fetch_details(config, flat_id):
""" """
Fetch the additional details for a flat using Flatboob / WebOOB. Fetch the additional details for a flat using Woob.
:param config: A config dict. :param config: A config dict.
:param flat_id: ID of the flat to fetch details for. :param flat_id: ID of the flat to fetch details for.
:return: A flat dict with all the available data. :return: A flat dict with all the available data.
""" """
with WebOOBProxy(config) as webOOB_proxy: with WoobProxy(config) as woob_proxy:
LOGGER.info("Loading additional details for flat %s.", flat_id) LOGGER.info("Loading additional details for flat %s.", flat_id)
webOOB_output = webOOB_proxy.info(flat_id, config["store_personal_data"]) woob_output = woob_proxy.info(flat_id, config["store_personal_data"])
flat_details = json.loads(webOOB_output) flat_details = json.loads(woob_output)
flat_details = WebOOBProxy.restore_decimal_fields(flat_details) flat_details = WoobProxy.restore_decimal_fields(flat_details)
LOGGER.info("Fetched details for flat %s.", flat_id) LOGGER.info("Fetched details for flat %s.", flat_id)
return flat_details return flat_details

View File

@ -161,7 +161,7 @@ def detect(flats_list, key="id", merge=True, should_intersect=False):
for flat_key, matching_flats in seen.items(): for flat_key, matching_flats in seen.items():
if flat_key is None: if flat_key is None:
# If the key is None, it means Weboob could not load the data. In # If the key is None, it means Woob could not load the data. In
# this case, we consider every matching item as being independant # this case, we consider every matching item as being independant
# of the others, to avoid over-deduplication. # of the others, to avoid over-deduplication.
unique_flats_list.extend(matching_flats) unique_flats_list.extend(matching_flats)
@ -263,7 +263,7 @@ def get_duplicate_score(flat1, flat2, photo_cache, hash_threshold):
flat2_phone = homogeneize_phone_number(flat2["phone"]) flat2_phone = homogeneize_phone_number(flat2["phone"])
if flat1_phone and flat2_phone: if flat1_phone and flat2_phone:
# Use an "in" test as there could be multiple phone numbers # Use an "in" test as there could be multiple phone numbers
# returned by a weboob module # returned by a Woob module
if flat1_phone in flat2_phone or flat2_phone in flat1_phone: if flat1_phone in flat2_phone or flat2_phone in flat1_phone:
n_common_items += 4 # Counts much more than the rest n_common_items += 4 # Counts much more than the rest

View File

@ -310,7 +310,7 @@ def guess_stations(flats_list, constraint, config):
LOGGER.info("No stations field for flat %s, skipping stations lookup.", flat["id"]) LOGGER.info("No stations field for flat %s, skipping stations lookup.", flat["id"])
continue continue
# Weboob modules can return several stations in a comma-separated list. # Woob modules can return several stations in a comma-separated list.
flat_stations = flat_station.split(",") flat_stations = flat_station.split(",")
# But some stations containing a comma exist, so let's add the initial # But some stations containing a comma exist, so let's add the initial
# value to the list of stations to check if there was one. # value to the list of stations to check if there was one.

View File

@ -68,7 +68,7 @@ class Flat(BASE):
__tablename__ = "flats" __tablename__ = "flats"
__searchable__ = ["title", "text", "station", "location", "details", "notes"] __searchable__ = ["title", "text", "station", "location", "details", "notes"]
# Weboob data # Woob data
id = Column(String, primary_key=True) id = Column(String, primary_key=True)
area = Column(Float) area = Column(Float)
bedrooms = Column(Float) bedrooms = Column(Float)

View File

@ -2,20 +2,20 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from .module import ExplorimmoModule from .module import ExplorimmoModule

View File

@ -2,25 +2,25 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.browser import PagesBrowser, URL from woob.browser import PagesBrowser, URL
from weboob.capabilities.housing import (TypeNotSupported, POSTS_TYPES, from woob.capabilities.housing import (TypeNotSupported, POSTS_TYPES,
HOUSE_TYPES) HOUSE_TYPES)
from weboob.tools.compat import urlencode from woob.tools.compat import urlencode
from .pages import CitiesPage, SearchPage, HousingPage, HousingPage2, PhonePage from .pages import CitiesPage, SearchPage, HousingPage, HousingPage2, PhonePage

View File

@ -2,24 +2,24 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.backend import Module from woob.tools.backend import Module
from weboob.capabilities.housing import CapHousing, Housing, HousingPhoto from woob.capabilities.housing import CapHousing, Housing, HousingPhoto
from .browser import ExplorimmoBrowser from .browser import ExplorimmoBrowser

View File

@ -2,20 +2,20 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
import json import json
@ -23,19 +23,19 @@ import math
import re import re
from decimal import Decimal from decimal import Decimal
from datetime import datetime from datetime import datetime
from weboob.browser.filters.json import Dict from woob.browser.filters.json import Dict
from weboob.browser.elements import ItemElement, ListElement, DictElement, method from woob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.pages import JsonPage, HTMLPage, pagination from woob.browser.pages import JsonPage, HTMLPage, pagination
from weboob.browser.filters.standard import (CleanText, CleanDecimal, Currency, from woob.browser.filters.standard import (CleanText, CleanDecimal, Currency,
Regexp, Env, BrowserURL, Filter, Regexp, Env, BrowserURL, Filter,
Format) Format)
from weboob.browser.filters.html import Attr, CleanHTML, XPath from woob.browser.filters.html import Attr, CleanHTML, XPath
from weboob.capabilities.base import NotAvailable, NotLoaded, Currency as BaseCurrency from woob.capabilities.base import NotAvailable, NotLoaded, Currency as BaseCurrency
from weboob.capabilities.housing import (Housing, HousingPhoto, City, from woob.capabilities.housing import (Housing, HousingPhoto, City,
UTILITIES, ENERGY_CLASS, POSTS_TYPES, UTILITIES, ENERGY_CLASS, POSTS_TYPES,
ADVERT_TYPES, HOUSE_TYPES) ADVERT_TYPES, HOUSE_TYPES)
from weboob.tools.capabilities.housing.housing import PricePerMeterFilter from woob.tools.capabilities.housing.housing import PricePerMeterFilter
from weboob.tools.compat import unquote from woob.tools.compat import unquote
class CitiesPage(JsonPage): class CitiesPage(JsonPage):

View File

@ -2,24 +2,24 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.capabilities.housing import Query, ADVERT_TYPES, POSTS_TYPES from woob.capabilities.housing import Query, ADVERT_TYPES, POSTS_TYPES
from weboob.tools.capabilities.housing.housing_test import HousingTest from woob.tools.capabilities.housing.housing_test import HousingTest
from weboob.tools.test import BackendTest from woob.tools.test import BackendTest
class ExplorimmoTest(BackendTest, HousingTest): class ExplorimmoTest(BackendTest, HousingTest):

View File

@ -2,20 +2,20 @@
# Copyright(C) 2017 Phyks (Lucas Verney) # Copyright(C) 2017 Phyks (Lucas Verney)
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals

View File

@ -2,25 +2,25 @@
# Copyright(C) 2017 Phyks (Lucas Verney) # Copyright(C) 2017 Phyks (Lucas Verney)
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
from weboob.browser import PagesBrowser, URL from woob.browser import PagesBrowser, URL
from .constants import QUERY_TYPES from .constants import QUERY_TYPES
from .pages import CitiesPage, HousingPage, SearchPage, SearchResultsPage from .pages import CitiesPage, HousingPage, SearchPage, SearchResultsPage

View File

@ -1,4 +1,4 @@
from weboob.capabilities.housing import POSTS_TYPES, HOUSE_TYPES from woob.capabilities.housing import POSTS_TYPES, HOUSE_TYPES
QUERY_TYPES = { QUERY_TYPES = {
POSTS_TYPES.RENT: 'location', POSTS_TYPES.RENT: 'location',

View File

@ -2,26 +2,26 @@
# Copyright(C) 2017 Phyks (Lucas Verney) # Copyright(C) 2017 Phyks (Lucas Verney)
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
from weboob.tools.backend import Module from woob.tools.backend import Module
from weboob.capabilities.housing import CapHousing, Housing, ADVERT_TYPES, HousingPhoto from woob.capabilities.housing import CapHousing, Housing, ADVERT_TYPES, HousingPhoto
from .browser import FonciaBrowser from .browser import FonciaBrowser

View File

@ -2,37 +2,37 @@
# Copyright(C) 2017 Phyks (Lucas Verney) # Copyright(C) 2017 Phyks (Lucas Verney)
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from weboob.browser.pages import JsonPage, HTMLPage, pagination from woob.browser.pages import JsonPage, HTMLPage, pagination
from weboob.browser.filters.standard import ( from woob.browser.filters.standard import (
CleanDecimal, CleanText, Currency, Date, Env, Format, Regexp, RegexpError CleanDecimal, CleanText, Currency, Date, Env, Format, Regexp, RegexpError
) )
from weboob.browser.filters.html import AbsoluteLink, Attr, Link, XPathNotFound from woob.browser.filters.html import AbsoluteLink, Attr, Link, XPathNotFound
from weboob.browser.elements import ItemElement, ListElement, method from woob.browser.elements import ItemElement, ListElement, method
from weboob.capabilities.base import NotAvailable, NotLoaded from woob.capabilities.base import NotAvailable, NotLoaded
from weboob.capabilities.housing import ( from woob.capabilities.housing import (
City, Housing, HousingPhoto, City, Housing, HousingPhoto,
UTILITIES, ENERGY_CLASS, POSTS_TYPES, ADVERT_TYPES UTILITIES, ENERGY_CLASS, POSTS_TYPES, ADVERT_TYPES
) )
from weboob.tools.capabilities.housing.housing import PricePerMeterFilter from woob.tools.capabilities.housing.housing import PricePerMeterFilter
from .constants import AVAILABLE_TYPES, QUERY_TYPES, QUERY_HOUSE_TYPES from .constants import AVAILABLE_TYPES, QUERY_TYPES, QUERY_HOUSE_TYPES

View File

@ -2,28 +2,28 @@
# Copyright(C) 2017 Phyks (Lucas Verney) # Copyright(C) 2017 Phyks (Lucas Verney)
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
from weboob.capabilities.housing import ( from woob.capabilities.housing import (
Query, POSTS_TYPES, ADVERT_TYPES Query, POSTS_TYPES, ADVERT_TYPES
) )
from weboob.tools.capabilities.housing.housing_test import HousingTest from woob.tools.capabilities.housing.housing_test import HousingTest
from weboob.tools.test import BackendTest from woob.tools.test import BackendTest
class FonciaTest(BackendTest, HousingTest): class FonciaTest(BackendTest, HousingTest):

View File

@ -2,20 +2,20 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from .module import LeboncoinModule from .module import LeboncoinModule

View File

@ -2,25 +2,25 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.json import json from woob.tools.json import json
from weboob.browser import PagesBrowser, URL from woob.browser import PagesBrowser, URL
from weboob.capabilities.housing import (TypeNotSupported, POSTS_TYPES, from woob.capabilities.housing import (TypeNotSupported, POSTS_TYPES,
HOUSE_TYPES, ADVERT_TYPES) HOUSE_TYPES, ADVERT_TYPES)
from .pages import CityListPage, HousingListPage, HousingPage, PhonePage, HomePage from .pages import CityListPage, HousingListPage, HousingPage, PhonePage, HomePage

View File

@ -2,24 +2,24 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.backend import Module from woob.tools.backend import Module
from weboob.capabilities.housing import (CapHousing, Housing, HousingPhoto) from woob.capabilities.housing import (CapHousing, Housing, HousingPhoto)
from .browser import LeboncoinBrowser from .browser import LeboncoinBrowser

View File

@ -2,35 +2,35 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
import requests import requests
from weboob.browser.pages import HTMLPage, JsonPage, pagination from woob.browser.pages import HTMLPage, JsonPage, pagination
from weboob.browser.elements import ItemElement, ListElement, method, DictElement from woob.browser.elements import ItemElement, ListElement, method, DictElement
from weboob.capabilities.base import Currency as BaseCurrency from woob.capabilities.base import Currency as BaseCurrency
from weboob.browser.filters.standard import (CleanText, CleanDecimal, _Filter, from woob.browser.filters.standard import (CleanText, CleanDecimal, _Filter,
Env, DateTime, Format) Env, DateTime, Format)
from weboob.browser.filters.json import Dict from woob.browser.filters.json import Dict
from weboob.capabilities.housing import (City, Housing, HousingPhoto, from woob.capabilities.housing import (City, Housing, HousingPhoto,
UTILITIES, ENERGY_CLASS, POSTS_TYPES, UTILITIES, ENERGY_CLASS, POSTS_TYPES,
ADVERT_TYPES, HOUSE_TYPES) ADVERT_TYPES, HOUSE_TYPES)
from weboob.capabilities.base import NotAvailable from woob.capabilities.base import NotAvailable
from weboob.tools.capabilities.housing.housing import PricePerMeterFilter from woob.tools.capabilities.housing.housing import PricePerMeterFilter
from decimal import Decimal from decimal import Decimal
from lxml import etree from lxml import etree

View File

@ -2,25 +2,25 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.test import BackendTest from woob.tools.test import BackendTest
from weboob.tools.value import Value from woob.tools.value import Value
from weboob.capabilities.housing import Query, POSTS_TYPES, ADVERT_TYPES from woob.capabilities.housing import Query, POSTS_TYPES, ADVERT_TYPES
from weboob.tools.capabilities.housing.housing_test import HousingTest from woob.tools.capabilities.housing.housing_test import HousingTest
class LeboncoinTest(BackendTest, HousingTest): class LeboncoinTest(BackendTest, HousingTest):

View File

@ -2,20 +2,20 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from .module import LogicimmoModule from .module import LogicimmoModule

View File

@ -2,25 +2,25 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.browser import PagesBrowser, URL from woob.browser import PagesBrowser, URL
from weboob.browser.profiles import Firefox from woob.browser.profiles import Firefox
from weboob.capabilities.housing import (TypeNotSupported, POSTS_TYPES, from woob.capabilities.housing import (TypeNotSupported, POSTS_TYPES,
HOUSE_TYPES) HOUSE_TYPES)
from .pages import CitiesPage, SearchPage, HousingPage, PhonePage from .pages import CitiesPage, SearchPage, HousingPage, PhonePage

View File

@ -2,26 +2,26 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.backend import Module from woob.tools.backend import Module
from weboob.capabilities.housing import (CapHousing, Housing, HousingPhoto, from woob.capabilities.housing import (CapHousing, Housing, HousingPhoto,
ADVERT_TYPES) ADVERT_TYPES)
from weboob.capabilities.base import UserError from woob.capabilities.base import UserError
from .browser import LogicimmoBrowser from .browser import LogicimmoBrowser

View File

@ -2,36 +2,36 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
from weboob.browser.pages import HTMLPage, JsonPage from woob.browser.pages import HTMLPage, JsonPage
from weboob.browser.elements import ItemElement, ListElement, DictElement, method from woob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.filters.json import Dict from woob.browser.filters.json import Dict
from weboob.browser.filters.standard import (Currency, Format, CleanText, from woob.browser.filters.standard import (Currency, Format, CleanText,
Regexp, CleanDecimal, Date, Env, Regexp, CleanDecimal, Date, Env,
BrowserURL) BrowserURL)
from weboob.browser.filters.html import Attr, XPath, CleanHTML from woob.browser.filters.html import Attr, XPath, CleanHTML
from weboob.capabilities.housing import (Housing, HousingPhoto, City, from woob.capabilities.housing import (Housing, HousingPhoto, City,
UTILITIES, ENERGY_CLASS, POSTS_TYPES, UTILITIES, ENERGY_CLASS, POSTS_TYPES,
ADVERT_TYPES, HOUSE_TYPES) ADVERT_TYPES, HOUSE_TYPES)
from weboob.capabilities.base import NotAvailable, NotLoaded from woob.capabilities.base import NotAvailable, NotLoaded
from weboob.tools.capabilities.housing.housing import PricePerMeterFilter from woob.tools.capabilities.housing.housing import PricePerMeterFilter
from weboob.tools.compat import urljoin from woob.tools.compat import urljoin
class CitiesPage(JsonPage): class CitiesPage(JsonPage):

View File

@ -2,24 +2,24 @@
# Copyright(C) 2014 Bezleputh # Copyright(C) 2014 Bezleputh
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.capabilities.housing import Query, POSTS_TYPES, ADVERT_TYPES from woob.capabilities.housing import Query, POSTS_TYPES, ADVERT_TYPES
from weboob.tools.test import BackendTest from woob.tools.test import BackendTest
from weboob.tools.capabilities.housing.housing_test import HousingTest from woob.tools.capabilities.housing.housing_test import HousingTest
class LogicimmoTest(BackendTest, HousingTest): class LogicimmoTest(BackendTest, HousingTest):

View File

@ -2,25 +2,25 @@
# Copyright(C) 2012 Romain Bignon # Copyright(C) 2012 Romain Bignon
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.browser import PagesBrowser, URL from woob.browser import PagesBrowser, URL
from weboob.capabilities.housing import TypeNotSupported, POSTS_TYPES from woob.capabilities.housing import TypeNotSupported, POSTS_TYPES
from weboob.tools.compat import urlencode from woob.tools.compat import urlencode
from .pages import HousingPage, CitiesPage from .pages import HousingPage, CitiesPage
from .constants import TYPES, RET from .constants import TYPES, RET

View File

@ -1,4 +1,4 @@
from weboob.capabilities.housing import POSTS_TYPES, HOUSE_TYPES from woob.capabilities.housing import POSTS_TYPES, HOUSE_TYPES
TYPES = {POSTS_TYPES.RENT: 'location', TYPES = {POSTS_TYPES.RENT: 'location',
POSTS_TYPES.FURNISHED_RENT: 'location', POSTS_TYPES.FURNISHED_RENT: 'location',

View File

@ -2,25 +2,25 @@
# Copyright(C) 2012 Romain Bignon # Copyright(C) 2012 Romain Bignon
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.capabilities.housing import (CapHousing, Housing, HousingPhoto, from woob.capabilities.housing import (CapHousing, Housing, HousingPhoto,
ADVERT_TYPES) ADVERT_TYPES)
from weboob.tools.backend import Module from woob.tools.backend import Module
from .browser import PapBrowser from .browser import PapBrowser
@ -31,7 +31,7 @@ __all__ = ['PapModule']
class PapModule(Module, CapHousing): class PapModule(Module, CapHousing):
NAME = 'pap' NAME = 'pap'
MAINTAINER = u'Romain Bignon' MAINTAINER = u'Romain Bignon'
EMAIL = 'romain@weboob.org' EMAIL = 'romain@woob.org'
VERSION = '2.1' VERSION = '2.1'
DESCRIPTION = 'French housing website' DESCRIPTION = 'French housing website'
LICENSE = 'AGPLv3+' LICENSE = 'AGPLv3+'

View File

@ -2,35 +2,35 @@
# Copyright(C) 2012 Romain Bignon # Copyright(C) 2012 Romain Bignon
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
from decimal import Decimal from decimal import Decimal
from weboob.tools.date import parse_french_date from woob.tools.date import parse_french_date
from weboob.browser.pages import HTMLPage, JsonPage, pagination from woob.browser.pages import HTMLPage, JsonPage, pagination
from weboob.browser.elements import ItemElement, ListElement, DictElement, method from woob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.filters.standard import (CleanText, CleanDecimal, Regexp, from woob.browser.filters.standard import (CleanText, CleanDecimal, Regexp,
Env, BrowserURL, Format, Currency) Env, BrowserURL, Format, Currency)
from weboob.browser.filters.html import Attr, Link, XPath, CleanHTML from woob.browser.filters.html import Attr, Link, XPath, CleanHTML
from weboob.browser.filters.json import Dict from woob.browser.filters.json import Dict
from weboob.capabilities.base import NotAvailable, NotLoaded from woob.capabilities.base import NotAvailable, NotLoaded
from weboob.capabilities.housing import (Housing, City, HousingPhoto, from woob.capabilities.housing import (Housing, City, HousingPhoto,
UTILITIES, ENERGY_CLASS, POSTS_TYPES, UTILITIES, ENERGY_CLASS, POSTS_TYPES,
ADVERT_TYPES, HOUSE_TYPES) ADVERT_TYPES, HOUSE_TYPES)
from weboob.tools.capabilities.housing.housing import PricePerMeterFilter from woob.tools.capabilities.housing.housing import PricePerMeterFilter
class CitiesPage(JsonPage): class CitiesPage(JsonPage):

View File

@ -2,24 +2,24 @@
# Copyright(C) 2012 Romain Bignon # Copyright(C) 2012 Romain Bignon
# #
# This file is part of a weboob module. # This file is part of a woob module.
# #
# This weboob module is free software: you can redistribute it and/or modify # This woob module is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This weboob module is distributed in the hope that it will be useful, # This woob module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>. # along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from weboob.capabilities.housing import Query, POSTS_TYPES, ADVERT_TYPES from woob.capabilities.housing import Query, POSTS_TYPES, ADVERT_TYPES
from weboob.tools.test import BackendTest from woob.tools.test import BackendTest
from weboob.tools.capabilities.housing.housing_test import HousingTest from woob.tools.capabilities.housing.housing_test import HousingTest
class PapTest(BackendTest, HousingTest): class PapTest(BackendTest, HousingTest):

View File

@ -16,6 +16,5 @@ titlecase
unidecode unidecode
vobject vobject
whoosh whoosh
git+https://git.weboob.org/weboob/weboob/ git+https://gitlab.com/woob/modules/
git+https://git.weboob.org/weboob/modules/
money money