diff --git a/modules/adecco/browser.py b/modules/adecco/browser.py index 68f1dd2b39d3855739978c7f070a8db85949aa9c..3f160e5b783873d49f8c414edeedd4e155b89933 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 cbfe5f6bd4c14e3c1122764ed27563ef737fb28a..c70dfb7e6cc02449b8ce718216a431b1d8fbd88b 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 b3561f556014692527fa3b94c5210973afa105be..70ccd6e75c5705ac35e36bfb8b205d9a5731f983 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 cd5ede063c3541c369e26dfc593691aa5e5c49fa..92f070c88855f490088544aa14e41ecba5aa8386 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 94faae165752e27b6876eaa14a90909f9a123556..c8238caf43b3f979f8a93292dbc6cdf204d23e07 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 d6ba66b00502a5f3cc656145cbbda7f867834e2a..3367e87e1fa66be795645c1f4697a9a696a70bd3 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 b90aaaded2459508944a8c36fd09f6a23cb920e4..6bfaf72db06f2f087a1603c3290fc603b2f2df11 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 b2e70414d74f91816463aeee8756165c3e74423e..ece70f8927c6c8ca992fd08715049deeaec0b60c 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 417e3a797cbcd2a31a711a4805d2715a6fbd3584..0ccd2dd9eec56ede0f6f8911aced1981be590881 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 d2bbe1289df7b6127c36ce1244f1253a31ad73ed..2cc138616747f6af0aae5675aa4c474a18f9fd76 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 7052d21681aed96a3533748fc5d78aba46afade8..d29f5d80301a027199e5a83cc849caa55bbafbbb 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 0c520628b5eda45df2fa76465cdc553233b69a30..4e03ca94824b7781bcedf4749732a38cfd289463 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 010db77601d43dc4d3ff1c30bc7d186e5980d0de..068a7b1cea7ae71e952d1be3290ebce889997ef1 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 c8a9eb5abfaa9516a72b86c6021be31812b69316..6d834f37cb752ce407ac28a22115022fab827784 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 e4e2e419be4f4220ecea683009f982857158e8a6..5f636c72136d2b5511dbaa717c9314a993d95fab 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 bf6df30ee94effe4b4c241295c795b4d9b0b8d7d..3afe837d4650f13474d06a4565b5cd39a99b93e4 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 9680e7b2b0b0eea3f1da6bc9a7b96a2bd3cf86b6..f92d9d15177a44da1f6cc394167461f285a690ed 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 f5df06a73727df9ca59ed46360b6ba2eb41e0a14..d9dd0a1097163f5d918e27bcae3bbde63157f4e8 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 f6985bbd7eb474f21be265b4260599309d5ecd25..b26d84e5a3d56a19542d218aaed9621f17df9e1f 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 6bc9a08d72182e208c6581b882e4c786bc12e4a7..fa083c32603818bf780a891e2f62f8be9d0f4bff 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 8025c6132ca44e7ad6faf7341a6c8d0a33c49442..684a6acde70b48b7739051d39f17a5c3d408e08a 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 fbec5e6378bf561b7595b9370a7a81f8e242b216..f0b49a667f852ad89b88550c338248036f55fdb7 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 6ffa15c49a4185c18f170d947d0fe0f149c337eb..79b8f569439bf1d752c2da4e1226f4a2417182c1 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 247268ba26e2af3331d068c8facc9267a7b69f6f..1a7104f22f488523a262bb209a722974502b00f4 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 cd66d4eb76ed87aec0ba22c3a1fb23ac599da20e..5ca1908960db62f19a9fe3780a15c99ab758d658 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 6361c8674968b3fc61c0880539ae8ab1ecae1fc4..a2c000a5e75425f819dbd89663e22f008ccbf85e 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 b1e670ed977ea3c1f314da92f9491cf321aeaa20..c61501f7f29715ccd1597e4bb29ec26ed9584222 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 f03dae761badc92815c5e1c47d7eb91967813c33..32f6ea4212d6c24bb8a343be012648465d1d743e 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 73fd15a537b53f16fcfd6572b03ab0658bf0d029..d7a358830ff8376126383359302d4be070fc28d6 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 27b8419c337a82c806b20e8f4ae6b40f9ad884ca..c9ee873a8e1dc3c8cfed5d6957b3d85b4f17c47b 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 4f3669b4adcda2f86e26493e3c58d435dc16e96e..d251900692b8a203cfcd2a8888ef307ab3a46b94 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 f0e0c267234f64b528170238ef796e180dab12be..69af94e74821aa0b6bd2a0e85de5113fe6767ca3 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 0f4feadb8ccc24159b161f01d721ae2c0cf3b061..21a379bda38f0b9b8a171037f1abc74627c828a2 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 25d4d86c0d78ab51e8060cb9c3fff34e8c0ec4c7..6c00eb68cb55e330074ed7a851bc557f03af90eb 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 3d0181474df7d8093ef615c16f7b52dea11b1760..04f807addd71c2f9b52dd71e390d2e4279efd463 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 0d4408a56a1f65a043428ac155bd06151db8be29..8729aa44cfaa6d893e7a06051ff5495c06da7ab5 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 583200de09e1d17d785de2e0ed8603af6ee5cce4..a525877f9b17fd397a431bbbc336a12245bc0a9a 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 d0b115ee3b1f8d8707de90f42ca5dbfdb7cf31af..160964df47dd51d8dd05f2c78d72f0cf5ba0675f 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 83db46726b54948da1303778cd14cb908575d31b..3f5bec50919098451c16c5e8792b747fe43f1450 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 9cace718d1400933167a6cccd19b590dc969d62c..6154f6de0f7e4362bfb4fe0fe89601db50c16ce5 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 c834102745737bb3940c220c81d9e8647176c761..deeee93152ed84ae62cae01e2240462ed11b35de 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 9fe4a59f441d236b1c73704d66dd916b353bb22c..b1e0d575f77bed4cd03aadf21d72b59e78fd9dac 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 d1467b782bd382522ab4261602f14434630c4f0b..4464afbabf26696547eb69e977f7222e8acc26e8 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 3543d1fed2792e4a63e782e17ee2d05605aca57c..c1ed8c741fcaac0ec7b48eebd5b56936f1eea3bd 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 749b60dfd59ee703d515c94409491149d3bd06ba..25067b25653344e412faf7ec6ec713fbef0e96f8 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 8018a65ed6a2e8935b039e82acbe494d927af353..1e5fdfd6752cd81707300885cf9e10894aedc39b 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 c067eff64517982342c9a83b94814b89ff483725..704229c9b82adf8c31b49280714b7c3cf9fae22c 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 216e20930bd7d73c9daff8c6eaf77d6c03a041c6..fbde8a95466467dbdeefec1fc8c37191d2ce823e 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 4bcf148905ce08722995e13edec0d721986258c9..ad3c5d05809b849777398863e51625a6e7a0c07f 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 7f06a2943f5173fac0aa59c39a38ab6a8d465964..4cf60c94e54f20949dba5b57318b94907d72d5cf 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 a02e46203dc94770cf9a49dd2efa3d55167d0b64..4db1b14ed0d40309c5f5391fe830bcfa8bcaad2b 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 466b2ccf3c294c05f7d4c624848d80428b85282a..5c4c76d3f62e58457c7b8bb85716b66d5d474caf 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 5e76d285157d9c4e55c3e4c9fa51537f47b60367..3879de1e9fd96a9a052ff46938f191a2e08ad51c 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 ab30508d5905ad3bb788c242e1164ed3ce45dbf2..bfc21ffd25fabc56cf2f1d8c306225a82e37d880 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 b39898bb54d5de8d73ff8fe68ca696f484317fdb..03f8d93b770ead51792ce41e484c8e62a64ae959 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 d0e30eb3552dfba4c3a6099fdadd54e1195fbb06..42d13237cd944072a104dd23fa3dca851cb57ec0 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 f209f3fe0a8d55bd915c374c40e48e9564d49f0b..53f380e09d99308446c7909c9763e98444dd2d92 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 800ad490f266cc4074ba86d80ff65f8bd2874dfa..3246d2bb16cb4785e38374e61daf96b2fe2d55f9 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 711015214eec00dafee2bd5b69bca6594e5acfdb..f08ab46997eabd03c0d504bfe5ca732752448e40 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 729e1ff792742c5df4b40373759bc188f3f6b3a4..a3c265361a8fef2833f30033cb4b42e37eab6682 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 4b831789f80bfc904cd13fc268dcdc67145ce0db..be6f533180064cc8efc41392b169936da5275296 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 6110f7dccb49c004357dd7770e04fde8f02dbde3..8691a1324670d8ad19a9fc6a4c5699ab0ca44377 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 646941d74207a804bad0025ffdbb5d58170a4129..89147800c264dc2d47c27032ee2e59e8b4f74618 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 e5af72876fcd5bb39816b01cc466e0ad35a76f31..0834d0a694f2c1a7d48e1b8461596524e9a9a769 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 a75cd28c1b4ef56fc4ab75dbfcc5b22269393862..d0bd378c1f4828ed737a615ed6425b738fc14c8a 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(