You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.6 KiB
44 lines
1.6 KiB
"""Default URL reading functions"""
|
|
__all__ = ['_defaultFetcher']
|
|
__docformat__ = 'restructuredtext'
|
|
__version__ = '$Id: tokenize2.py 1547 2008-12-10 20:42:26Z cthedot $'
|
|
|
|
import cssutils
|
|
from cssutils import VERSION
|
|
import encutils
|
|
import errorhandler
|
|
import urllib2
|
|
|
|
log = errorhandler.ErrorHandler()
|
|
|
|
def _defaultFetcher(url):
|
|
"""Retrieve data from ``url``. cssutils default implementation of fetch
|
|
URL function.
|
|
|
|
Returns ``(encoding, string)`` or ``None``
|
|
"""
|
|
try:
|
|
request = urllib2.Request(url)
|
|
request.add_header('User-agent',
|
|
'cssutils %s (http://www.cthedot.de/cssutils/)' % VERSION)
|
|
res = urllib2.urlopen(request)
|
|
except OSError, e:
|
|
# e.g if file URL and not found
|
|
log.warn(e, error=OSError)
|
|
except (OSError, ValueError), e:
|
|
# invalid url, e.g. "1"
|
|
log.warn(u'ValueError, %s' % e.args[0], error=ValueError)
|
|
except urllib2.HTTPError, e:
|
|
# http error, e.g. 404, e can be raised
|
|
log.warn(u'HTTPError opening url=%s: %s %s' %
|
|
(url, e.code, e.msg), error=e)
|
|
except urllib2.URLError, e:
|
|
# URLError like mailto: or other IO errors, e can be raised
|
|
log.warn(u'URLError, %s' % e.reason, error=e)
|
|
else:
|
|
if res:
|
|
mimeType, encoding = encutils.getHTTPInfo(res)
|
|
if mimeType != u'text/css':
|
|
log.error(u'Expected "text/css" mime type for url=%r but found: %r' %
|
|
(url, mimeType), error=ValueError)
|
|
return encoding, res.read()
|
|
|