From e1a1dcd74c0a887d261f299ae450df811b01bd79 Mon Sep 17 00:00:00 2001 From: "Phyks (Lucas Verney)" Date: Wed, 28 Jun 2017 16:33:25 +0200 Subject: [PATCH] Use weboob.tools.compat instead of urllib/urlparse --- modules/adecco/browser.py | 6 ++--- modules/agendaculturel/browser.py | 2 +- modules/allocine/browser.py | 22 +++++++++++-------- modules/allrecipes/browser.py | 4 ++-- modules/allrecipes/module.py | 2 +- modules/amazonstorecard/browser.py | 2 +- modules/ameli/pages.py | 3 +-- modules/amelipro/browser.py | 4 ++-- modules/arte/pages.py | 6 ++--- modules/attilasub/module.py | 2 +- modules/aum/browser.py | 6 ++--- modules/blablacar/browser.py | 4 ++-- modules/bp/browser.py | 2 +- modules/btmon/module.py | 2 +- modules/canalplus/browser.py | 4 ++-- modules/cappedtv/browser.py | 4 ++-- modules/cpasbien/module.py | 2 +- modules/creditdunord/pages.py | 2 +- modules/creditmutuel/browser.py | 5 +---- modules/creditmutuel/pages.py | 5 +---- modules/dailymotion/browser.py | 2 +- modules/ebonics/module.py | 4 ++-- modules/ehentai/browser.py | 2 +- modules/explorimmo/browser.py | 4 ++-- modules/explorimmo/pages.py | 5 ++--- modules/feedly/google.py | 2 +- modules/foncia/pages.py | 4 ++-- modules/gazelle/pages/torrents.py | 5 ++--- modules/gdcvault/browser.py | 6 ++--- modules/gdcvault/pages.py | 8 +++---- modules/github/browser.py | 2 +- modules/imdb/module.py | 2 +- modules/jacquieetmichel/browser.py | 5 ++--- modules/kickass/module.py | 2 +- modules/linuxjobs/browser.py | 5 ++--- modules/lyricsdotcom/module.py | 2 +- modules/lyricsmode/module.py | 2 +- modules/marmiton/module.py | 2 +- modules/monster/browser.py | 9 ++++---- modules/nolifetv/browser.py | 7 +++--- modules/opensubtitles/module.py | 2 +- modules/orange/pages/login.py | 5 ++--- modules/ovs/pages.py | 7 +++--- modules/pap/browser.py | 5 ++--- modules/parolesmania/module.py | 2 +- modules/paypal/browser.py | 8 ++++--- modules/phpbb/pages/forum.py | 2 +- modules/phpbb/tools.py | 2 +- modules/pixabay/browser.py | 2 +- modules/podnapisi/module.py | 2 +- modules/popolemploi/browser.py | 3 +-- modules/redmine/browser.py | 17 +++++++------- modules/seloger/browser.py | 5 ++--- modules/sfr/browser.py | 4 ++-- .../societegenerale/pages/accounts_list.py | 6 ++--- modules/t411/module.py | 3 +-- modules/torrentz/pages/torrents.py | 2 +- modules/tvsubtitles/module.py | 2 +- modules/twitter/pages.py | 4 ++-- modules/unsee/browser.py | 2 +- modules/ups/browser.py | 5 ++--- modules/vimeo/browser.py | 7 +++--- modules/vine/browser.py | 4 ++-- modules/wellsfargo/browser.py | 3 ++- modules/youtube/pages.py | 5 ++--- 65 files changed, 129 insertions(+), 149 deletions(-) diff --git a/modules/adecco/browser.py b/modules/adecco/browser.py index 68f1dd2b39..3f160e5b78 100644 --- a/modules/adecco/browser.py +++ b/modules/adecco/browser.py @@ -18,10 +18,10 @@ # along with weboob. If not, see . from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import quote_plus from .pages import SearchPage, AdvertPage, AdvertsJsonPage -import urllib from datetime import date, timedelta __all__ = ['AdeccoBrowser'] @@ -50,8 +50,8 @@ def search_job(self, pattern=None): def advanced_search_job(self, publication_date=0, contract_type=None, conty=None, activity_domain=None, job='', town=''): - params = self.search_page.go(job=urllib.quote_plus(job.encode('utf-8')), - town=urllib.quote_plus(town.encode('utf-8'))).get_post_params() + params = self.search_page.go(job=quote_plus(job.encode('utf-8')), + town=quote_plus(town.encode('utf-8'))).get_post_params() if contract_type: self.page.url += '&employmenttype=%s' % contract_type diff --git a/modules/agendaculturel/browser.py b/modules/agendaculturel/browser.py index cbfe5f6bd4..c70dfb7e6c 100644 --- a/modules/agendaculturel/browser.py +++ b/modules/agendaculturel/browser.py @@ -21,7 +21,7 @@ from weboob.browser import PagesBrowser, URL from .pages import BasePage -from urlparse import urlparse +from weboob.tools.compat import urlparse import re diff --git a/modules/allocine/browser.py b/modules/allocine/browser.py index b3561f5560..70ccd6e75c 100644 --- a/modules/allocine/browser.py +++ b/modules/allocine/browser.py @@ -25,11 +25,11 @@ from weboob.capabilities.cinema import Movie, Person from weboob.browser.browsers import APIBrowser from weboob.browser.profiles import Android +from weboob.tools.compat import urlencode import base64 import hashlib from datetime import datetime, date, timedelta import time -import urllib __all__ = ['AllocineBrowser'] @@ -41,14 +41,18 @@ class AllocineBrowser(APIBrowser): SECRET_KEY = '29d185d98c984a359e6e6f26a0474269' def __do_request(self, method, params): - params_encode = urllib.urlencode(params) - - sed = time.strftime('%Y%m%d', time.localtime()) - sig = base64.b64encode(hashlib.sha1(self.SECRET_KEY + params_encode + '&sed=' + sed).digest()) - - query_url = 'http://api.allocine.fr/rest/v3/' + method + '?' + params_encode + '&sed=' + sed + '&sig=' + sig - - return self.request(query_url) + params["sed"] = time.strftime('%Y%m%d', time.localtime()) + params["sig"] = base64.b64encode( + hashlib.sha1( + self.SECRET_KEY + + urlencode(params) + ).digest() + ) + + return self.request( + 'http://api.allocine.fr/rest/v3/{}'.format(method), + params=params + ) def iter_movies(self, pattern): params = [('partner', self.PARTNER_KEY), diff --git a/modules/allrecipes/browser.py b/modules/allrecipes/browser.py index cd5ede063c..92f070c888 100644 --- a/modules/allrecipes/browser.py +++ b/modules/allrecipes/browser.py @@ -19,7 +19,7 @@ from weboob.browser import PagesBrowser, URL from .pages import ResultsPage, RecipePage, HomePage -import urllib +from weboob.tools.compat import urlencode __all__ = ['AllrecipesBrowser'] @@ -47,7 +47,7 @@ def iter_recipes(self, pattern): if not self.TOKEN: self.fill_token() - return self.results.go(query=urllib.urlencode(query)).iter_recipes() + return self.results.go(query=urlencode(query)).iter_recipes() def get_recipe(self, _id, obj=None): if not self.TOKEN: diff --git a/modules/allrecipes/module.py b/modules/allrecipes/module.py index 94faae1657..c8238caf43 100644 --- a/modules/allrecipes/module.py +++ b/modules/allrecipes/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.recipe import CapRecipe, Recipe from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import AllrecipesBrowser -from urllib import quote_plus __all__ = ['AllrecipesModule'] diff --git a/modules/amazonstorecard/browser.py b/modules/amazonstorecard/browser.py index d6ba66b005..3367e87e1f 100644 --- a/modules/amazonstorecard/browser.py +++ b/modules/amazonstorecard/browser.py @@ -21,11 +21,11 @@ from weboob.capabilities.bank import AccountNotFound from weboob.browser import LoginBrowser, URL, need_login from weboob.exceptions import BrowserIncorrectPassword +from weboob.tools.compat import unquote import json import os from tempfile import mkstemp from subprocess import check_output, STDOUT, CalledProcessError -from urllib import unquote from .pages import SomePage, StatementsPage, StatementPage, SummaryPage, \ ActivityPage diff --git a/modules/ameli/pages.py b/modules/ameli/pages.py index b90aaaded2..6bfaf72db0 100644 --- a/modules/ameli/pages.py +++ b/modules/ameli/pages.py @@ -20,7 +20,6 @@ from datetime import datetime import re -import urllib from decimal import Decimal from weboob.browser.pages import HTMLPage, RawPage, LoggedPage @@ -118,7 +117,7 @@ def iter_documents(self, sub): yield bil def get_document(self, bill): - self.location(bill.url, urllib.urlencode(bill._args)) + self.location(bill.url, params=bill._args) class PaymentDetailsPage(AmeliBasePage): diff --git a/modules/amelipro/browser.py b/modules/amelipro/browser.py index b2e70414d7..ece70f8927 100644 --- a/modules/amelipro/browser.py +++ b/modules/amelipro/browser.py @@ -17,10 +17,10 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib from weboob.browser import LoginBrowser, URL, need_login from weboob.exceptions import BrowserIncorrectPassword from weboob.capabilities.bill import Detail +from weboob.tools.compat import urlencode from decimal import Decimal from .pages import LoginPage, HomePage, AccountPage, HistoryPage, BillsPage, SearchPage @@ -81,7 +81,7 @@ def iter_history(self, subscription): } self.session.headers.update({'Content-Type': 'application/x-www-form-urlencoded'}) - self.historyp.go(data=urllib.urlencode(data)) + self.historyp.go(data=urlencode(data)) if self.historyp.is_here(): return self.page.iter_history() diff --git a/modules/arte/pages.py b/modules/arte/pages.py index 417e3a797c..0ccd2dd9ee 100644 --- a/modules/arte/pages.py +++ b/modules/arte/pages.py @@ -18,7 +18,6 @@ # along with weboob. If not, see . from datetime import timedelta -import urllib from weboob.capabilities.image import Thumbnail from weboob.capabilities.base import BaseObject, NotAvailable @@ -29,8 +28,7 @@ from weboob.browser.filters.standard import Date, Format, Env, CleanText, Field, Regexp, Join, Eval from weboob.browser.filters.json import Dict from weboob.browser.filters.html import XPath -from weboob.tools.compat import basestring - +from weboob.tools.compat import basestring, unquote from .video import ArteVideo, ArteSiteVideo, SITE @@ -193,7 +191,7 @@ def get_json_url(self): return self.doc.xpath('//div[@class="video-container"]')[0].attrib['arte_vp_url'] elif self.doc.xpath('//iframe'): url = Regexp(CleanText('./@src'), '.*json_url=(.*)', default='')(self.doc.xpath('//iframe')[0]) - return urllib.unquote(url) + return unquote(url) return '' diff --git a/modules/attilasub/module.py b/modules/attilasub/module.py index d2bbe1289d..2cc1386167 100644 --- a/modules/attilasub/module.py +++ b/modules/attilasub/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.subtitle import CapSubtitle, LanguageNotSupported from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import AttilasubBrowser -from urllib import quote_plus __all__ = ['AttilasubModule'] diff --git a/modules/aum/browser.py b/modules/aum/browser.py index 7052d21681..d29f5d8030 100644 --- a/modules/aum/browser.py +++ b/modules/aum/browser.py @@ -23,7 +23,6 @@ from datetime import datetime import math import re -import urllib import urllib2 from weboob.exceptions import BrowserIncorrectPassword, BrowserHTTPNotFound, BrowserUnavailable @@ -31,6 +30,7 @@ from weboob.browser.browsers import LoginBrowser from weboob.browser.pages import HTMLPage from weboob.browser.filters.standard import CleanText +from weboob.tools.compat import urlencode from weboob.tools.json import json from weboob.tools.date import local2utc from weboob.tools.misc import to_unicode @@ -81,7 +81,7 @@ def login(self): 'remember': 'on', } self.open('/auth/login', data=data) - #self.readurl('https://www.adopteunmec.com/auth/login', urllib.urlencode(data)) + #self.readurl('https://www.adopteunmec.com/auth/login', urlencode(data)) def get_profile(self, id): profile = {} @@ -179,7 +179,7 @@ def api0_request(self, command, action, parameter='', data=None, nologin=False): # Always do POST requests. data = '' elif isinstance(data, (list,tuple,dict)): - data = urllib.urlencode(data) + data = urlencode(data) elif isinstance(data, unicode): data = data.encode('utf-8') diff --git a/modules/blablacar/browser.py b/modules/blablacar/browser.py index 0c520628b5..4e03ca9482 100644 --- a/modules/blablacar/browser.py +++ b/modules/blablacar/browser.py @@ -19,11 +19,11 @@ from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import urlencode from .pages import DeparturesPage from datetime import datetime -import urllib class BlablacarBrowser(PagesBrowser): @@ -46,4 +46,4 @@ def get_station_departures(self, station_id, arrival_id, date): query['hb'] = _heure query['he'] = '24' - return self.departures.open(qry=urllib.urlencode(query)).get_station_departures() + return self.departures.open(qry=urlencode(query)).get_station_departures() diff --git a/modules/bp/browser.py b/modules/bp/browser.py index 010db77601..068a7b1cea 100644 --- a/modules/bp/browser.py +++ b/modules/bp/browser.py @@ -19,11 +19,11 @@ from datetime import datetime, timedelta -from weboob.tools.compat import urlsplit, parse_qsl from weboob.browser import LoginBrowser, URL, need_login from weboob.browser.browsers import StatesMixin from weboob.exceptions import BrowserIncorrectPassword, BrowserBanned, NoAccountsException, BrowserUnavailable +from weboob.tools.compat import urlsplit, parse_qsl from .pages import ( LoginPage, Initident, CheckPassword, repositionnerCheminCourant, BadLoginPage, AccountDesactivate, diff --git a/modules/btmon/module.py b/modules/btmon/module.py index c8a9eb5abf..6d834f37cb 100644 --- a/modules/btmon/module.py +++ b/modules/btmon/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.torrent import CapTorrent, Torrent from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import BtmonBrowser -from urllib import quote_plus __all__ = ['BtmonModule'] diff --git a/modules/canalplus/browser.py b/modules/canalplus/browser.py index e4e2e419be..5f636c7213 100644 --- a/modules/canalplus/browser.py +++ b/modules/canalplus/browser.py @@ -17,9 +17,9 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import quote_plus from .pages import ChannelsPage, VideoPage from .video import CanalplusVideo @@ -51,7 +51,7 @@ def home(self): self.location('http://service.canal-plus.com/video/rest/initPlayer/cplus/') def search_videos(self, pattern): - self.location('http://service.canal-plus.com/video/rest/search/cplus/' + urllib.quote_plus(pattern.replace('/', '').encode('utf-8'))) + self.location('http://service.canal-plus.com/video/rest/search/cplus/' + quote_plus(pattern.replace('/', '').encode('utf-8'))) return self.page.iter_results() def get_video(self, url, video=None): diff --git a/modules/cappedtv/browser.py b/modules/cappedtv/browser.py index bf6df30ee9..3afe837d46 100644 --- a/modules/cappedtv/browser.py +++ b/modules/cappedtv/browser.py @@ -9,7 +9,6 @@ # http://sam.zoy.org/wtfpl/COPYING for more details. from collections import OrderedDict -import urllib import datetime from weboob.capabilities.base import NotAvailable @@ -20,6 +19,7 @@ from weboob.deprecated.browser.decorators import id2url from weboob.capabilities.image import Thumbnail from weboob.capabilities.video import BaseVideo +from weboob.tools.compat import quote_plus __all__ = ['CappedBrowser'] @@ -124,7 +124,7 @@ def get_video(self, url, video=None): return self.page.get_video(video) def search_videos(self, pattern): - self.location('/search?s=%s' % (urllib.quote_plus(pattern.encode('utf-8')))) + self.location('/search?s=%s' % (quote_plus(pattern.encode('utf-8')))) assert self.is_on_page(IndexPage) return self.page.iter_videos() diff --git a/modules/cpasbien/module.py b/modules/cpasbien/module.py index 9680e7b2b0..f92d9d1517 100644 --- a/modules/cpasbien/module.py +++ b/modules/cpasbien/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.torrent import CapTorrent, Torrent from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import CpasbienBrowser -from urllib import quote_plus __all__ = ['CpasbienModule'] diff --git a/modules/creditdunord/pages.py b/modules/creditdunord/pages.py index f5df06a737..d9dd0a1097 100755 --- a/modules/creditdunord/pages.py +++ b/modules/creditdunord/pages.py @@ -21,7 +21,6 @@ import re import ast -from urllib import quote from decimal import Decimal from io import BytesIO from datetime import date as da @@ -36,6 +35,7 @@ from weboob.capabilities import NotAvailable from weboob.tools.capabilities.bank.transactions import FrenchTransaction from weboob.tools.captcha.virtkeyboard import GridVirtKeyboard +from weboob.tools.compat import quote from weboob.tools.json import json diff --git a/modules/creditmutuel/browser.py b/modules/creditmutuel/browser.py index f6985bbd7e..b26d84e5a3 100644 --- a/modules/creditmutuel/browser.py +++ b/modules/creditmutuel/browser.py @@ -18,10 +18,6 @@ # along with weboob. If not, see . -try: - from urlparse import urlparse -except ImportError: - from urllib.parse import urlparse from datetime import datetime from dateutil.relativedelta import relativedelta @@ -37,6 +33,7 @@ from weboob.exceptions import BrowserIncorrectPassword from weboob.capabilities.bank import Account, AddRecipientStep, AddRecipientError, Recipient from weboob.capabilities import NotAvailable +from weboob.tools.compat import urlparse from .pages import LoginPage, LoginErrorPage, AccountsPage, UserSpacePage, \ OperationsPage, CardPage, ComingPage, NoOperationsPage, \ diff --git a/modules/creditmutuel/pages.py b/modules/creditmutuel/pages.py index 6bc9a08d72..fa083c3260 100644 --- a/modules/creditmutuel/pages.py +++ b/modules/creditmutuel/pages.py @@ -21,10 +21,6 @@ import re import hashlib -try: - from urlparse import urlparse, parse_qs -except ImportError: - from urllib.parse import urlparse, parse_qs from decimal import Decimal, InvalidOperation from dateutil.relativedelta import relativedelta @@ -42,6 +38,7 @@ from weboob.capabilities.profile import Profile from weboob.tools.capabilities.bank.iban import is_iban_valid from weboob.tools.capabilities.bank.transactions import FrenchTransaction +from weboob.tools.compat import urlparse, parse_qs from weboob.tools.date import parse_french_date from weboob.tools.value import Value diff --git a/modules/dailymotion/browser.py b/modules/dailymotion/browser.py index 8025c6132c..684a6acde7 100644 --- a/modules/dailymotion/browser.py +++ b/modules/dailymotion/browser.py @@ -17,10 +17,10 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from urllib import quote_plus import re from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import quote_plus from .pages import IndexPage, VideoPage diff --git a/modules/ebonics/module.py b/modules/ebonics/module.py index fbec5e6378..f0b49a667f 100644 --- a/modules/ebonics/module.py +++ b/modules/ebonics/module.py @@ -18,10 +18,10 @@ # along with weboob. If not, see . -import urllib from weboob.capabilities.translate import CapTranslate, Translation, TranslationFail, LanguageNotSupported from weboob.tools.backend import Module +from weboob.tools.compat import urlencode from weboob.deprecated.browser import StandardBrowser @@ -43,7 +43,7 @@ def translate(self, lan_from, lan_to, text): with self.browser: data = {'English': text.encode('utf-8')} - doc = self.browser.location('http://joel.net/EBONICS/Translator', urllib.urlencode(data)) + doc = self.browser.location('http://joel.net/EBONICS/Translator', urlencode(data)) try: text = doc.getroot().cssselect('div.translateform div.bubble1 div.bubblemid')[0].text except IndexError: diff --git a/modules/ehentai/browser.py b/modules/ehentai/browser.py index 6ffa15c49a..79b8f56943 100644 --- a/modules/ehentai/browser.py +++ b/modules/ehentai/browser.py @@ -18,7 +18,7 @@ # along with weboob. If not, see . from weboob.deprecated.browser import Browser, BrowserIncorrectPassword -from urllib import urlencode +from weboob.tools.compat import urlencode from .pages import IndexPage, GalleryPage, ImagePage, HomePage, LoginPage from .gallery import EHentaiImage diff --git a/modules/explorimmo/browser.py b/modules/explorimmo/browser.py index 247268ba26..1a7104f22f 100644 --- a/modules/explorimmo/browser.py +++ b/modules/explorimmo/browser.py @@ -17,9 +17,9 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib from weboob.browser import PagesBrowser, URL from weboob.capabilities.housing import Query, TypeNotSupported +from weboob.tools.compat import urlencode from .pages import CitiesPage, SearchPage, HousingPage, HousingPage2, PhonePage @@ -67,7 +67,7 @@ def search_housings(self, type, cities, nb_rooms, area_min, area_max, cost_min, 'roomMin': nb_rooms or '', 'page': '1'} - query = u'%s%s%s' % (urllib.urlencode(data), '&type=', '&type='.join(ret)) + query = u'%s%s%s' % (urlencode(data), '&type=', '&type='.join(ret)) return self.search.go(query=query).iter_housings() diff --git a/modules/explorimmo/pages.py b/modules/explorimmo/pages.py index cd66d4eb76..5ca1908960 100644 --- a/modules/explorimmo/pages.py +++ b/modules/explorimmo/pages.py @@ -18,7 +18,6 @@ # along with weboob. If not, see . import re -import urllib from decimal import Decimal from datetime import datetime from weboob.browser.filters.json import Dict @@ -29,7 +28,7 @@ from weboob.capabilities.base import NotAvailable, NotLoaded from weboob.capabilities.housing import Housing, HousingPhoto, City, UTILITIES from weboob.tools.capabilities.housing.housing import PricePerMeterFilter - +from weboob.tools.compat import unquote class CitiesPage(JsonPage): @@ -126,7 +125,7 @@ def obj_photos(self): default=None )(self) if url: - url = urllib.unquote(url) + url = unquote(url) if "http://" in url[3:]: url = url[url.find("http://", 3):url.rfind("?")] return [HousingPhoto(url)] diff --git a/modules/feedly/google.py b/modules/feedly/google.py index 6361c86749..a2c000a5e7 100644 --- a/modules/feedly/google.py +++ b/modules/feedly/google.py @@ -17,11 +17,11 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from urlparse import urlparse, parse_qs from weboob.browser import LoginBrowser, URL from weboob.browser.pages import HTMLPage, LoggedPage from weboob.exceptions import BrowserIncorrectPassword +from weboob.tools.compat import urlparse, parse_qs class GoogleLoginPage(LoggedPage, HTMLPage): diff --git a/modules/foncia/pages.py b/modules/foncia/pages.py index b1e670ed97..c61501f7f2 100644 --- a/modules/foncia/pages.py +++ b/modules/foncia/pages.py @@ -20,7 +20,6 @@ from __future__ import unicode_literals import datetime -import urlparse from weboob.browser.pages import JsonPage, HTMLPage, pagination from weboob.browser.filters.standard import CleanDecimal, CleanText, Date, Env, Format, Regexp @@ -29,6 +28,7 @@ from weboob.capabilities.base import NotAvailable from weboob.capabilities.housing import City, Housing, UTILITIES from weboob.tools.capabilities.housing.housing import PricePerMeterFilter +from weboob.tools.compat import urljoin from .constants import AVAILABLE_TYPES, QUERY_TYPES, QUERY_HOUSE_TYPES @@ -226,7 +226,7 @@ class item(ItemElement): ) def obj_url(self): - return urlparse.urljoin( + return urljoin( self.page.browser.BASEURL, Link('.//h3[has-class("TeaserOffer-title")]/a')(self) ) diff --git a/modules/gazelle/pages/torrents.py b/modules/gazelle/pages/torrents.py index f03dae761b..32f6ea4212 100644 --- a/modules/gazelle/pages/torrents.py +++ b/modules/gazelle/pages/torrents.py @@ -19,10 +19,9 @@ import re -import urlparse from logging import warning, debug -from urlparse import parse_qs +from weboob.tools.compat import parse_qs, urlparse from weboob.tools.misc import get_bytes_size from weboob.tools.html import html2text from weboob.capabilities.torrent import Torrent @@ -83,7 +82,7 @@ def iter_torrents(self): title += u' (%s)' % tds[i].find('a').text else: title = ' - '.join([a.text for a in tds[i].findall('a')]) - url = urlparse.urlparse(tds[i].find('a').attrib['href']) + url = urlparse(tds[i].find('a').attrib['href']) params = parse_qs(url.query) if 'torrentid' in params: id = '%s.%s' % (params['id'][0], params['torrentid'][0]) diff --git a/modules/gdcvault/browser.py b/modules/gdcvault/browser.py index 73fd15a537..d7a358830f 100644 --- a/modules/gdcvault/browser.py +++ b/modules/gdcvault/browser.py @@ -18,11 +18,11 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib from weboob.deprecated.browser import Browser, BrowserIncorrectPassword, BrowserUnavailable,\ BrowserBanned from weboob.deprecated.browser.decorators import id2url +from weboob.tools.compat import urlencode #from .pages.index import IndexPage from .pages import VideoPage, IndexPage, SearchPage @@ -67,7 +67,7 @@ def login(self): } data = self.readurl('http://gdcvault.com/api/login.php', - urllib.urlencode(params)) + urlencode(params)) # some data returned as JSON, not sure yet if it's useful if data is None: @@ -131,7 +131,7 @@ def search_videos(self, pattern, sortby): "category" : "free", "keyword" : pattern.encode('utf-8'), "conference_id" : "", } - post_data = urllib.urlencode(post_data) + post_data = urlencode(post_data) # probably not required self.addheaders = [('Referer', 'http://gdcvault.com/'), ("Content-Type" , 'application/x-www-form-urlencoded') ] diff --git a/modules/gdcvault/pages.py b/modules/gdcvault/pages.py index 27b8419c33..c9ee873a8e 100644 --- a/modules/gdcvault/pages.py +++ b/modules/gdcvault/pages.py @@ -20,8 +20,8 @@ from weboob.deprecated.browser import Page +from weboob.tools.compat import quote -import urllib import re import datetime from dateutil.parser import parse as parse_dt @@ -226,7 +226,7 @@ def get_video(self, video=None): # token doesn't actually seem required # 1441 has a space in the xml filename - xml_filename = urllib.quote(m.group(2)) + xml_filename = quote(m.group(2)) config_url = m.group(1) + xml_filename + '?token=' + m.group(3) # self.browser.addheaders += [['Referer', 'http://gdcvault.com/play/%s' % self.group_dict['id']]] @@ -270,11 +270,11 @@ def get_video(self, video=None): obj = self.parser.select(config.getroot(), 'speakervideo', 1) if obj.text is not None: - videos['speaker'] = 'rtmp://' + host + '/' + urllib.quote(obj.text) + videos['speaker'] = 'rtmp://' + host + '/' + quote(obj.text) obj = self.parser.select(config.getroot(), 'slidevideo', 1) if obj.text is not None: - videos['slides'] = 'rtmp://' + host + '/' + urllib.quote(obj.text) + videos['slides'] = 'rtmp://' + host + '/' + quote(obj.text) # print videos # XXX diff --git a/modules/github/browser.py b/modules/github/browser.py index 4f3669b4ad..d251900692 100644 --- a/modules/github/browser.py +++ b/modules/github/browser.py @@ -21,11 +21,11 @@ import datetime import re import os -from urllib import quote_plus from weboob.browser.browsers import APIBrowser from weboob.browser.cache import CacheMixin from weboob.browser.exceptions import ClientError +from weboob.tools.compat import quote_plus __all__ = ['GithubBrowser'] diff --git a/modules/imdb/module.py b/modules/imdb/module.py index f0e0c26723..69af94e748 100644 --- a/modules/imdb/module.py +++ b/modules/imdb/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.cinema import CapCinema, Person, Movie from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import ImdbBrowser -from urllib import quote_plus __all__ = ['ImdbModule'] diff --git a/modules/jacquieetmichel/browser.py b/modules/jacquieetmichel/browser.py index 0f4feadb8c..21a379bda3 100644 --- a/modules/jacquieetmichel/browser.py +++ b/modules/jacquieetmichel/browser.py @@ -17,10 +17,9 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib - from weboob.deprecated.browser import Browser from weboob.deprecated.browser.decorators import id2url +from weboob.tools.compat import quote from .video import JacquieEtMichelVideo from .pages import VideoPage, ResultsPage @@ -44,7 +43,7 @@ def get_video(self, url, video=None): return self.page.get_video(video) def search_videos(self, pattern): - self.location('/videolist/searchmodevideo/query%s/' % (urllib.quote(pattern.encode('utf-8')))) + self.location('/videolist/searchmodevideo/query%s/' % (quote(pattern.encode('utf-8')))) assert self.is_on_page(ResultsPage) return self.page.iter_videos() diff --git a/modules/kickass/module.py b/modules/kickass/module.py index 25d4d86c0d..6c00eb68cb 100644 --- a/modules/kickass/module.py +++ b/modules/kickass/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.torrent import CapTorrent, Torrent from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import KickassBrowser -from urllib import quote_plus #from contextlib import closing #from gzip import GzipFile diff --git a/modules/linuxjobs/browser.py b/modules/linuxjobs/browser.py index 3d0181474d..04f807addd 100644 --- a/modules/linuxjobs/browser.py +++ b/modules/linuxjobs/browser.py @@ -19,11 +19,10 @@ from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import quote_plus from .pages import SearchPage, AdvertPage -import urllib - class LinuxJobsBrowser(PagesBrowser): BASEURL = 'https://www.linuxjobs.fr' @@ -40,7 +39,7 @@ def get_job_advert(self, _id, advert): def search_job(self, pattern=None): if pattern is None: return [] - self.search_page.go(job=urllib.quote_plus(pattern.encode('utf-8'))) + self.search_page.go(job=quote_plus(pattern.encode('utf-8'))) assert self.search_page.is_here() return self.page.iter_job_adverts() diff --git a/modules/lyricsdotcom/module.py b/modules/lyricsdotcom/module.py index 0d4408a56a..8729aa44cf 100644 --- a/modules/lyricsdotcom/module.py +++ b/modules/lyricsdotcom/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.lyrics import CapLyrics, SongLyrics from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import LyricsdotcomBrowser -from urllib import quote_plus __all__ = ['LyricsdotcomModule'] diff --git a/modules/lyricsmode/module.py b/modules/lyricsmode/module.py index 583200de09..a525877f9b 100644 --- a/modules/lyricsmode/module.py +++ b/modules/lyricsmode/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.lyrics import CapLyrics, SongLyrics from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import LyricsmodeBrowser -from urllib import quote_plus __all__ = ['LyricsmodeModule'] diff --git a/modules/marmiton/module.py b/modules/marmiton/module.py index d0b115ee3b..160964df47 100644 --- a/modules/marmiton/module.py +++ b/modules/marmiton/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.recipe import CapRecipe, Recipe from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import MarmitonBrowser -from urllib import quote_plus __all__ = ['MarmitonModule'] diff --git a/modules/monster/browser.py b/modules/monster/browser.py index 83db46726b..3f5bec5091 100644 --- a/modules/monster/browser.py +++ b/modules/monster/browser.py @@ -16,9 +16,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib - from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import quote_plus, urlencode from .pages import AdvertPage, AdvSearchPage, ExpiredAdvert @@ -34,14 +33,14 @@ class MonsterBrowser(PagesBrowser): AdvSearchPage) def search_job(self, pattern=None): - return self.adv_search.go(search='?q=%s' % urllib.quote_plus(pattern), page=1).iter_job_adverts() + return self.adv_search.go(search='?q=%s' % quote_plus(pattern), page=1).iter_job_adverts() def advanced_search_job(self, job_name, place, contract, limit_date): search = '' if not contract else contract - query = {'q': urllib.quote_plus(job_name), + query = {'q': quote_plus(job_name), 'where': place, 'tm': limit_date} - return self.adv_search.go(search='%s?%s' % (search, urllib.urlencode(query)), page=1).iter_job_adverts() + return self.adv_search.go(search='%s?%s' % (search, urlencode(query)), page=1).iter_job_adverts() def get_job_advert(self, _id, advert): return self.advert.go(_id=_id).get_job_advert(obj=advert) diff --git a/modules/nolifetv/browser.py b/modules/nolifetv/browser.py index 9cace718d1..6154f6de0f 100644 --- a/modules/nolifetv/browser.py +++ b/modules/nolifetv/browser.py @@ -19,8 +19,7 @@ from weboob.deprecated.browser import Browser, BrowserIncorrectPassword - -import urllib +from weboob.tools.compat import urlencode from weboob.deprecated.browser.decorators import id2url from .video import NolifeTVVideo @@ -88,7 +87,7 @@ def iter_video(self, family): 'emissions': 0 } while True: - self.location('/do.php', urllib.urlencode(data)) + self.location('/do.php', urlencode(data)) assert self.is_on_page(VideoListPage) if self.page.is_list_empty(): @@ -104,7 +103,7 @@ def get_latest(self): def search_videos(self, pattern): data = { 'search': pattern, 'submit': 'Rechercher' } - self.location('/online/', urllib.urlencode(data)) + self.location('/online/', urlencode(data)) assert self.is_on_page(VideoListPage) for vid in self.page.iter_video(self.AVAILABLE_VIDEOS): diff --git a/modules/opensubtitles/module.py b/modules/opensubtitles/module.py index c834102745..deeee93152 100644 --- a/modules/opensubtitles/module.py +++ b/modules/opensubtitles/module.py @@ -23,7 +23,7 @@ from .browser import OpensubtitlesBrowser -from urllib import quote_plus +from weboob.tools.compat import quote_plus __all__ = ['OpensubtitlesModule'] diff --git a/modules/orange/pages/login.py b/modules/orange/pages/login.py index 9fe4a59f44..b1e0d575f7 100644 --- a/modules/orange/pages/login.py +++ b/modules/orange/pages/login.py @@ -18,8 +18,7 @@ # along with weboob. If not, see . from weboob.deprecated.browser import Page -import urllib - +from weboob.tools.compat import urlencode class LoginPage(Page): def on_loaded(self): @@ -38,7 +37,7 @@ def login(self, user, pwd): "case" : "", "origin" : "", } - post_data = urllib.urlencode(post_data) + post_data = urlencode(post_data) self.browser.addheaders = [('Referer', 'http://id.orange.fr/auth_user/template/auth0user/htm/vide.html'), ("Content-Type" , 'application/x-www-form-urlencoded') ] diff --git a/modules/ovs/pages.py b/modules/ovs/pages.py index d1467b782b..4464afbabf 100644 --- a/modules/ovs/pages.py +++ b/modules/ovs/pages.py @@ -20,11 +20,10 @@ import datetime import re -import urllib -from urlparse import urlsplit from weboob.deprecated.browser import Page from weboob.capabilities.messages import Message, Thread from weboob.capabilities.contact import Contact, ProfileNode +from weboob.tools.compat import urlsplit, urlencode from weboob.tools.date import parse_french_date from . import ovsparse @@ -133,7 +132,7 @@ def post_to_thread(self, thread_id, subject, body): form = ovsparse.private_message_form_fields(self.document) recode_dict(form, self.browser.ENCODING) form['Message'] = body.encode(self.browser.ENCODING) - self.browser.location('/message_action_envoi.php', urllib.urlencode(form)) + self.browser.location('/message_action_envoi.php', urlencode(form)) # html code is so broken that mechanize won't parse the forms #~ self.browser.select_form('envoimail') @@ -165,7 +164,7 @@ def create_thread(self, recipient, subject, body): recode_dict(form, self.browser.ENCODING) form['Message'] = body.encode(self.browser.ENCODING) form['Titre'] = subject.encode(self.browser.ENCODING) - self.browser.location('/message_action_envoi.php', urllib.urlencode(form)) + self.browser.location('/message_action_envoi.php', urlencode(form)) #~ self.browser.select_form('envoimail') #~ self.browser['Titre'] = subject.encode(self.browser.ENCODING) diff --git a/modules/pap/browser.py b/modules/pap/browser.py index 3543d1fed2..c1ed8c741f 100644 --- a/modules/pap/browser.py +++ b/modules/pap/browser.py @@ -18,10 +18,9 @@ # along with weboob. If not, see . -import urllib - from weboob.browser import PagesBrowser, URL from weboob.capabilities.housing import Query, TypeNotSupported +from weboob.tools.compat import urlencode from .pages import SearchResultsPage, HousingPage, CitiesPage @@ -74,7 +73,7 @@ def search_housings(self, type, cities, nb_rooms, area_min, area_max, cost_min, if house_type in self.RET: ret.append(self.RET.get(house_type)) - _data = '%s%s%s' % (urllib.urlencode(data), '&typesbien%5B%5D=', '&typesbien%5B%5D='.join(ret)) + _data = '%s%s%s' % (urlencode(data), '&typesbien%5B%5D=', '&typesbien%5B%5D='.join(ret)) return self.search_page.go(data=_data).iter_housings() def get_housing(self, _id, housing=None): diff --git a/modules/parolesmania/module.py b/modules/parolesmania/module.py index 749b60dfd5..25067b2565 100644 --- a/modules/parolesmania/module.py +++ b/modules/parolesmania/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.lyrics import CapLyrics, SongLyrics from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import ParolesmaniaBrowser -from urllib import quote_plus __all__ = ['ParolesmaniaModule'] diff --git a/modules/paypal/browser.py b/modules/paypal/browser.py index 8018a65ed6..1e5fdfd675 100644 --- a/modules/paypal/browser.py +++ b/modules/paypal/browser.py @@ -18,7 +18,6 @@ # along with weboob. If not, see . -import urllib import datetime from dateutil.relativedelta import relativedelta @@ -92,7 +91,6 @@ def do_login(self): data['_csrf'] = csrf data['_sessionID'] = sessionID data[key] = value - data = urllib.urlencode(data) self.open('/auth/verifychallenge', data=data) res = self.page.login(self.username, self.password) @@ -139,7 +137,11 @@ def get_personal_history(self, account): # The response is sometimes not the one we expect. for i in xrange(3): try: - self.location('https://www.paypal.com/myaccount/activity/filter?%s' % urllib.urlencode(data), headers={'Accept' : 'application/json, text/javascript, */*; q=0.01'}) + self.location( + 'https://www.paypal.com/myaccount/activity/filter?%s', + params=data, + headers={'Accept' : 'application/json, text/javascript, */*; q=0.01'} + ) if self.page.transaction_left(): return self.page.iter_transactions(account) return iter([]) diff --git a/modules/phpbb/pages/forum.py b/modules/phpbb/pages/forum.py index c067eff645..704229c9b8 100644 --- a/modules/phpbb/pages/forum.py +++ b/modules/phpbb/pages/forum.py @@ -19,10 +19,10 @@ from time import sleep -from urlparse import urlsplit, parse_qs from weboob.deprecated.browser import BrokenPageError from weboob.browser.filters.standard import CleanText +from weboob.tools.compat import urlsplit, parse_qs from .index import PhpBBPage from ..tools import parse_date diff --git a/modules/phpbb/tools.py b/modules/phpbb/tools.py index 216e20930b..fbde8a9546 100644 --- a/modules/phpbb/tools.py +++ b/modules/phpbb/tools.py @@ -19,8 +19,8 @@ from dateutil.parser import parse as _parse_dt -from urlparse import urlsplit, parse_qs +from weboob.tools.compat import urlsplit, parse_qs from weboob.tools.date import local2utc diff --git a/modules/pixabay/browser.py b/modules/pixabay/browser.py index 4bcf148905..ad3c5d0580 100644 --- a/modules/pixabay/browser.py +++ b/modules/pixabay/browser.py @@ -18,11 +18,11 @@ # along with weboob. If not, see . import re -from urllib import quote_plus from weboob.browser import URL from weboob.browser.browsers import LoginBrowser, need_login from weboob.capabilities.image import CapImage from weboob.exceptions import BrowserIncorrectPassword +from weboob.tools.compat import quote_plus from .pages import AccountPage, LoginPage, SearchAPI, ViewPage diff --git a/modules/podnapisi/module.py b/modules/podnapisi/module.py index 7f06a2943f..4cf60c94e5 100644 --- a/modules/podnapisi/module.py +++ b/modules/podnapisi/module.py @@ -20,10 +20,10 @@ from weboob.capabilities.subtitle import CapSubtitle, LanguageNotSupported, Subtitle from weboob.applications.suboob.suboob import LANGUAGE_CONV from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import PodnapisiBrowser -from urllib import quote_plus __all__ = ['PodnapisiModule'] diff --git a/modules/popolemploi/browser.py b/modules/popolemploi/browser.py index a02e46203d..4db1b14ed0 100644 --- a/modules/popolemploi/browser.py +++ b/modules/popolemploi/browser.py @@ -19,8 +19,7 @@ from .pages import SearchPage, AdvertPage from weboob.browser import PagesBrowser, URL - -from urllib import quote +from weboob.tools.compat import quote __all__ = ['PopolemploiBrowser'] diff --git a/modules/redmine/browser.py b/modules/redmine/browser.py index 466b2ccf3c..5c4c76d3f6 100644 --- a/modules/redmine/browser.py +++ b/modules/redmine/browser.py @@ -18,13 +18,12 @@ # along with weboob. If not, see . -from urlparse import urlsplit -import urllib import re import lxml.html from weboob.capabilities.bugtracker import IssueError from weboob.deprecated.browser import Browser, BrowserIncorrectPassword +from weboob.tools.compat import urlsplit, urlencode, quote from .pages.index import LoginPage, IndexPage, MyPage, ProjectsPage from .pages.wiki import WikiPage, WikiEditPage @@ -90,27 +89,27 @@ def get_userid(self): return self._userid def get_wiki_source(self, project, page, version=None): - url = '%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8'))) + url = '%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, quote(page.encode('utf-8'))) if version: url += '?version=%s' % version self.location(url) return self.page.get_source() def set_wiki_source(self, project, page, data, message): - self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8')))) + self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, quote(page.encode('utf-8')))) self.page.set_source(data, message) def get_wiki_preview(self, project, page, data): if (not self.is_on_page(WikiEditPage) or self.page.groups[0] != project or self.page.groups[1] != page): self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, - project, urllib.quote(page.encode('utf-8')))) - url = '%s/projects/%s/wiki/%s/preview' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8'))) + project, quote(page.encode('utf-8')))) + url = '%s/projects/%s/wiki/%s/preview' % (self.BASEPATH, project, quote(page.encode('utf-8'))) params = {} params['content[text]'] = data.encode('utf-8') params['authenticity_token'] = "%s" % self.page.get_authenticity_token() preview_html = lxml.html.fragment_fromstring(self.readurl(url, - urllib.urlencode(params)), + urlencode(params)), create_parent='div') preview_html.find("fieldset").drop_tag() preview_html.find("legend").drop_tree() @@ -159,7 +158,7 @@ def query_issues(self, project_name, **kwargs): data += ((self.METHODS[method]['operator'] % key, '~'),) if method == 'POST': - self.location('/issues?set_filter=1&per_page=100', urllib.urlencode(data)) + self.location('/issues?set_filter=1&per_page=100', urlencode(data)) else: data += (('set_filter', '1'), ('per_page', '100')) self.location(self.buildurl('/issues', *data)) @@ -236,7 +235,7 @@ def remove_issue(self, id): token = self.page.get_authenticity_token() data = (('authenticity_token', token),) - self.openurl('/issues/%s/destroy' % id, urllib.urlencode(data)) + self.openurl('/issues/%s/destroy' % id, urlencode(data)) def iter_projects(self): self.location('/projects') diff --git a/modules/seloger/browser.py b/modules/seloger/browser.py index 5e76d28515..3879de1e9f 100644 --- a/modules/seloger/browser.py +++ b/modules/seloger/browser.py @@ -17,9 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib - from weboob.capabilities.housing import Query, TypeNotSupported +from weboob.tools.compat import urlencode from weboob.browser import PagesBrowser, URL from .pages import SearchResultsPage, HousingPage, CitiesPage @@ -80,7 +79,7 @@ def search_housings(self, type, cities, nb_rooms, area_min, area_max, cost_min, if ret: data['idtypebien'] = ','.join(ret) - return self.search.go(request=urllib.urlencode(data)).iter_housings() + return self.search.go(request=urlencode(data)).iter_housings() def get_housing(self, _id, obj=None): return self.housing.go(_id=_id, noAudiotel=1).get_housing(obj=obj) diff --git a/modules/sfr/browser.py b/modules/sfr/browser.py index ab30508d59..bfc21ffd25 100644 --- a/modules/sfr/browser.py +++ b/modules/sfr/browser.py @@ -18,7 +18,7 @@ # along with weboob. If not, see . -import urllib +from weboob.tools.compat import quote_plus from .pages.compose import ClosePage, ComposePage, ConfirmPage, SentPage from .pages.login import LoginPage @@ -52,7 +52,7 @@ def is_logged(self): def login(self): service_url = 'http://www.sfr.fr/xmscomposer/j_spring_cas_security_check' - self.location('https://www.sfr.fr/cas/login?service=%s' % urllib.quote_plus(service_url), no_login=True) + self.location('https://www.sfr.fr/cas/login?service=%s' % quote_plus(service_url), no_login=True) self.page.login(self.username, self.password) if not self.is_logged(): raise BrowserIncorrectPassword() diff --git a/modules/societegenerale/pages/accounts_list.py b/modules/societegenerale/pages/accounts_list.py index b39898bb54..03f8d93b77 100644 --- a/modules/societegenerale/pages/accounts_list.py +++ b/modules/societegenerale/pages/accounts_list.py @@ -19,10 +19,7 @@ from __future__ import unicode_literals -import urllib import datetime -from urlparse import parse_qs, urlparse, parse_qsl, urlunparse -from urllib import urlencode from lxml.etree import XML from lxml.html import fromstring from decimal import Decimal, InvalidOperation @@ -32,6 +29,7 @@ from weboob.capabilities.bank import Account, Investment from weboob.capabilities.contact import Advisor from weboob.tools.capabilities.bank.transactions import FrenchTransaction +from weboob.tools.compat import parse_qs, urlparse, parse_qsl, urlunparse, urlencode from weboob.browser.elements import DictElement, ItemElement, method from weboob.browser.filters.json import Dict from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, RegexpError @@ -241,7 +239,7 @@ def iter_transactions(self): args['sign'] = p['sign'][0] args['src'] = p['src'][0] - url = '%s?%s' % (url.path, urllib.urlencode(args)) + url = '%s?%s' % (url.path, urlencode(args)) def _iter_transactions(self, doc): t = None diff --git a/modules/t411/module.py b/modules/t411/module.py index d0e30eb355..42d13237cd 100644 --- a/modules/t411/module.py +++ b/modules/t411/module.py @@ -17,10 +17,9 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from urllib import quote_plus - from weboob.capabilities.torrent import CapTorrent, Torrent from weboob.tools.backend import Module, BackendConfig +from weboob.tools.compat import quote_plus from weboob.tools.value import ValueBackendPassword, Value from .browser import T411Browser diff --git a/modules/torrentz/pages/torrents.py b/modules/torrentz/pages/torrents.py index f209f3fe0a..53f380e09d 100644 --- a/modules/torrentz/pages/torrents.py +++ b/modules/torrentz/pages/torrents.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from datetime import datetime -from urllib import quote_plus from weboob.tools.misc import get_bytes_size from weboob.browser.pages import HTMLPage @@ -9,6 +8,7 @@ from weboob.capabilities.base import NotAvailable from weboob.capabilities.torrent import Torrent, MagnetOnly from weboob.browser.filters.standard import CleanText, Regexp, Date, Type +from weboob.tools.compat import quote_plus def parse_timestamp(txt, **kwargs): diff --git a/modules/tvsubtitles/module.py b/modules/tvsubtitles/module.py index 800ad490f2..3246d2bb16 100644 --- a/modules/tvsubtitles/module.py +++ b/modules/tvsubtitles/module.py @@ -19,10 +19,10 @@ from weboob.capabilities.subtitle import CapSubtitle, LanguageNotSupported from weboob.tools.backend import Module +from weboob.tools.compat import quote_plus from .browser import TvsubtitlesBrowser, LANGUAGE_LIST -from urllib import quote_plus __all__ = ['TvsubtitlesModule'] diff --git a/modules/twitter/pages.py b/modules/twitter/pages.py index 711015214e..f08ab46997 100644 --- a/modules/twitter/pages.py +++ b/modules/twitter/pages.py @@ -21,7 +21,6 @@ from weboob.tools.date import DATE_TRANSLATE_FR from io import StringIO import lxml.html as html -import urllib from weboob.tools.json import json from weboob.browser.pages import HTMLPage, JsonPage, FormNotFound, pagination, LoggedPage @@ -30,6 +29,7 @@ from weboob.browser.filters.html import Link, Attr from weboob.capabilities.messages import Thread, Message from weboob.capabilities.base import BaseObject +from weboob.tools.compat import urlencode class DatetimeFromTimestamp(Filter): @@ -196,7 +196,7 @@ def next_page(self): params['max_position'] = self.env['min_position'] if self.page.has_next: - return u'%s?%s' % (self.page.url.split('?')[0], urllib.urlencode(params)) + return u'%s?%s' % (self.page.url.split('?')[0], urlencode(params)) class LoginErrorPage(HTMLPage): diff --git a/modules/unsee/browser.py b/modules/unsee/browser.py index 729e1ff792..a3c265361a 100644 --- a/modules/unsee/browser.py +++ b/modules/unsee/browser.py @@ -22,7 +22,7 @@ import os from uuid import uuid4 from urllib2 import Request -from urlparse import urljoin +from weboob.tools.compat import urljoin from weboob.tools.json import json from weboob.deprecated.browser.parsers.lxmlparser import LxmlHtmlParser diff --git a/modules/ups/browser.py b/modules/ups/browser.py index 4b831789f8..be6f533180 100644 --- a/modules/ups/browser.py +++ b/modules/ups/browser.py @@ -17,9 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -import urllib - from weboob.deprecated.browser import Browser +from weboob.tools.compat import urlencode from .pages import TrackPage @@ -43,7 +42,7 @@ def get_tracking_info(self, _id): 'track.x': 'Track', 'trackNums': _id.encode('utf-8'), } - self.location('https://wwwapps.ups.com/WebTracking/track', urllib.urlencode(data)) + self.location('https://wwwapps.ups.com/WebTracking/track', urlencode(data)) assert self.is_on_page(TrackPage) return self.page.get_info(_id) diff --git a/modules/vimeo/browser.py b/modules/vimeo/browser.py index 6110f7dccb..8691a13246 100644 --- a/modules/vimeo/browser.py +++ b/modules/vimeo/browser.py @@ -21,10 +21,9 @@ from weboob.browser import PagesBrowser, URL from weboob.browser.exceptions import HTTPNotFound from weboob.capabilities.base import NotAvailable +from weboob.tools.compat import urljoin, quote_plus from .pages import VideoJsonPage, CategoriesPage, ListPage, APIPage, XMLAPIPage -import urllib -from urlparse import urljoin import time import hmac from hashlib import sha1 @@ -104,7 +103,7 @@ def search_videos(self, pattern, sortby): 'sort': 'relevant', 'page': '1', 'full_response': '1', - 'query': urllib.quote_plus(pattern.encode('utf-8'))} + 'query': quote_plus(pattern.encode('utf-8'))} self._prepare_request(self.APIURL, method='POST', headers=headers, data=data) return self._api.go(data=data).iter_videos() @@ -144,7 +143,7 @@ def _percent_encode(s): s = s.encode('utf-8') pass - result = urllib.quote_plus(s).replace('+', '%20').replace('*', '%2A').replace('%7E', '~') + result = quote_plus(s).replace('+', '%20').replace('*', '%2A').replace('%7E', '~') # the implementation of the app has a bug. someone double escaped the '@' so we have to correct this # on our end. result = result.replace('%40', '%2540') diff --git a/modules/vine/browser.py b/modules/vine/browser.py index 646941d742..89147800c2 100644 --- a/modules/vine/browser.py +++ b/modules/vine/browser.py @@ -19,9 +19,9 @@ from weboob.browser import PagesBrowser, URL +from weboob.tools.compat import quote_plus from .pages import SearchPage, PostPage -import urllib class VineBrowser(PagesBrowser): @@ -31,7 +31,7 @@ class VineBrowser(PagesBrowser): post_page = URL('r/api/timelines/posts/s/(?P<_id>.*)', PostPage) def search_videos(self, pattern): - return self.search_page.go(pattern=urllib.quote_plus(pattern.encode('utf-8'))).iter_videos() + return self.search_page.go(pattern=quote_plus(pattern.encode('utf-8'))).iter_videos() def get_video(self, _id): return self.post_page.go(_id=_id).get_video() diff --git a/modules/wellsfargo/browser.py b/modules/wellsfargo/browser.py index e5af72876f..0834d0a694 100644 --- a/modules/wellsfargo/browser.py +++ b/modules/wellsfargo/browser.py @@ -21,12 +21,13 @@ from weboob.capabilities.bank import AccountNotFound from weboob.browser import LoginBrowser, URL, need_login from weboob.exceptions import BrowserIncorrectPassword, BrowserUnavailable +from weboob.tools.compat import unquote + import ssl import json import os from tempfile import mkstemp from subprocess import STDOUT, CalledProcessError, check_output -from urllib import unquote from .pages import LoginProceedPage, LoginRedirectPage, \ SummaryPage, ActivityCashPage, ActivityCardPage, \ diff --git a/modules/youtube/pages.py b/modules/youtube/pages.py index a75cd28c1b..d0bd378c1f 100644 --- a/modules/youtube/pages.py +++ b/modules/youtube/pages.py @@ -20,7 +20,6 @@ # Some parts are taken from youtube-dl, licensed under the UNLICENSE. -from urlparse import urlparse, parse_qs import codecs import zlib import re @@ -29,11 +28,11 @@ import struct import collections import traceback -import urllib import io from weboob.capabilities.base import UserError from weboob.deprecated.browser import Page, BrokenPageError, BrowserIncorrectPassword +from weboob.tools.compat import urlparse, parse_qs, urlencode from weboob.tools.json import json @@ -971,7 +970,7 @@ def get_video_url(self, video): # this can be viewed without login into Youtube url = 'https://www.youtube.com/embed/%s' % video_id embed_webpage = self.browser.readurl(url) - data = urllib.urlencode({ + data = urlencode({ 'video_id': video_id, 'eurl': 'https://youtube.googleapis.com/v/' + video_id, 'sts': self._search_regex( -- GitLab