Quick and dirty -a and -I support for Browser2
This commit is contained in:
parent
d472fd6eec
commit
fca0ab8733
2 changed files with 48 additions and 2 deletions
|
|
@ -328,6 +328,7 @@ class BaseApplication(object):
|
||||||
if self.options.debug or self.options.save_responses:
|
if self.options.debug or self.options.save_responses:
|
||||||
level = logging.DEBUG
|
level = logging.DEBUG
|
||||||
from weboob.tools.browser import StandardBrowser
|
from weboob.tools.browser import StandardBrowser
|
||||||
|
from weboob.tools.browser2 import BaseBrowser as Browser2
|
||||||
StandardBrowser.DEBUG_MECHANIZE = True
|
StandardBrowser.DEBUG_MECHANIZE = True
|
||||||
# required to actually display or save the stuff
|
# required to actually display or save the stuff
|
||||||
logger = logging.getLogger("mechanize")
|
logger = logging.getLogger("mechanize")
|
||||||
|
|
@ -340,7 +341,9 @@ class BaseApplication(object):
|
||||||
level = logging.WARNING
|
level = logging.WARNING
|
||||||
if self.options.insecure:
|
if self.options.insecure:
|
||||||
from weboob.tools.browser import StandardBrowser
|
from weboob.tools.browser import StandardBrowser
|
||||||
|
from weboob.tools.browser2 import BaseBrowser as Browser2
|
||||||
StandardBrowser.INSECURE = True
|
StandardBrowser.INSECURE = True
|
||||||
|
Browser2.VERIFY = False
|
||||||
|
|
||||||
# this only matters to developers
|
# this only matters to developers
|
||||||
if not self.options.debug and not self.options.save_responses:
|
if not self.options.debug and not self.options.save_responses:
|
||||||
|
|
@ -353,7 +356,9 @@ class BaseApplication(object):
|
||||||
responses_dirname = tempfile.mkdtemp(prefix='weboob_session_')
|
responses_dirname = tempfile.mkdtemp(prefix='weboob_session_')
|
||||||
print >>sys.stderr, 'Debug data will be saved in this directory: %s' % responses_dirname
|
print >>sys.stderr, 'Debug data will be saved in this directory: %s' % responses_dirname
|
||||||
StandardBrowser.SAVE_RESPONSES = True
|
StandardBrowser.SAVE_RESPONSES = True
|
||||||
|
Browser2.SAVE_RESPONSES = True
|
||||||
StandardBrowser.responses_dirname = responses_dirname
|
StandardBrowser.responses_dirname = responses_dirname
|
||||||
|
Browser2.responses_dirname = responses_dirname
|
||||||
handlers.append(self.create_logging_file_handler(os.path.join(responses_dirname, 'debug.log')))
|
handlers.append(self.create_logging_file_handler(os.path.join(responses_dirname, 'debug.log')))
|
||||||
|
|
||||||
# file logger
|
# file logger
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,10 @@ from __future__ import absolute_import
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from urlparse import urlparse, urljoin
|
from urlparse import urlparse, urljoin
|
||||||
|
import mimetypes
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import sys
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import requests
|
import requests
|
||||||
|
|
@ -121,7 +125,10 @@ class BaseBrowser(object):
|
||||||
TIMEOUT = 10.0
|
TIMEOUT = 10.0
|
||||||
REFRESH_MAX = 0.0
|
REFRESH_MAX = 0.0
|
||||||
|
|
||||||
def __init__(self, logger=None, proxy=None):
|
VERIFY = True
|
||||||
|
SAVE_RESPONSES = False
|
||||||
|
|
||||||
|
def __init__(self, logger=None, proxy=None, responses_dirname=None):
|
||||||
self.logger = getLogger('browser', logger)
|
self.logger = getLogger('browser', logger)
|
||||||
self._setup_session(self.PROFILE)
|
self._setup_session(self.PROFILE)
|
||||||
if proxy is not None:
|
if proxy is not None:
|
||||||
|
|
@ -129,20 +136,54 @@ class BaseBrowser(object):
|
||||||
self.url = None
|
self.url = None
|
||||||
self.response = None
|
self.response = None
|
||||||
|
|
||||||
|
self.responses_dirname = responses_dirname
|
||||||
|
self.responses_count = 0
|
||||||
|
|
||||||
|
def _save(self, response, warning=False, **kwargs):
|
||||||
|
if self.responses_dirname is None:
|
||||||
|
self.responses_dirname = tempfile.mkdtemp(prefix='weboob_session_')
|
||||||
|
print >>sys.stderr, 'Debug data will be saved in this directory: %s' % self.responses_dirname
|
||||||
|
elif not os.path.isdir(self.responses_dirname):
|
||||||
|
os.makedirs(self.responses_dirname)
|
||||||
|
# get the content-type, remove optionnal charset part
|
||||||
|
mimetype = response.headers.get('Content-Type', '').split(';')[0]
|
||||||
|
# due to http://bugs.python.org/issue1043134
|
||||||
|
if mimetype == 'text/plain':
|
||||||
|
ext = '.txt'
|
||||||
|
else:
|
||||||
|
# try to get an extension (and avoid adding 'None')
|
||||||
|
ext = mimetypes.guess_extension(mimetype, False) or ''
|
||||||
|
response_filepath = os.path.join(self.responses_dirname, unicode(self.responses_count)+ext)
|
||||||
|
with open(response_filepath, 'w') as f:
|
||||||
|
f.write(response.content)
|
||||||
|
match_filepath = os.path.join(self.responses_dirname, 'url_response_match.txt')
|
||||||
|
with open(match_filepath, 'a') as f:
|
||||||
|
f.write('%s\t%s\n' % (response.url, os.path.basename(response_filepath)))
|
||||||
|
self.responses_count += 1
|
||||||
|
|
||||||
|
msg = u'Response saved to %s' % response_filepath
|
||||||
|
if warning:
|
||||||
|
self.logger.warning(msg)
|
||||||
|
else:
|
||||||
|
self.logger.info(msg)
|
||||||
|
|
||||||
def _setup_session(self, profile):
|
def _setup_session(self, profile):
|
||||||
"""
|
"""
|
||||||
Set up a python-requests session for our usage.
|
Set up a python-requests session for our usage.
|
||||||
"""
|
"""
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
|
|
||||||
|
session.verify = self.VERIFY
|
||||||
if self.TIMEOUT:
|
if self.TIMEOUT:
|
||||||
session.timeout = self.TIMEOUT
|
session.timeout = self.TIMEOUT
|
||||||
## weboob only can provide proxy and HTTP auth options
|
## weboob only can provide proxy and HTTP auth options
|
||||||
session.trust_env = False
|
session.trust_env = False
|
||||||
# TODO connect config['verbose'] to our logger
|
|
||||||
|
|
||||||
profile.setup_session(session)
|
profile.setup_session(session)
|
||||||
|
|
||||||
|
if self.SAVE_RESPONSES:
|
||||||
|
session.hooks['response'].append(self._save)
|
||||||
|
|
||||||
self.session = session
|
self.session = session
|
||||||
|
|
||||||
def location(self, url, **kwargs):
|
def location(self, url, **kwargs):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue