[Python-checkins] r46029 - python/trunk/Lib/urllib2.py
georg.brandl
python-checkins at python.org
Wed May 17 17:17:01 CEST 2006
Author: georg.brandl
Date: Wed May 17 17:17:00 2006
New Revision: 46029
Modified:
python/trunk/Lib/urllib2.py
Log:
Delay-import some large modules to speed up urllib2 import.
(fixes #1484793).
Modified: python/trunk/Lib/urllib2.py
==============================================================================
--- python/trunk/Lib/urllib2.py (original)
+++ python/trunk/Lib/urllib2.py Wed May 17 17:17:00 2006
@@ -85,11 +85,8 @@
# abstract factory for opener
import base64
-import ftplib
-import httplib
-import inspect
import hashlib
-import mimetypes
+import httplib
import mimetools
import os
import posixpath
@@ -100,7 +97,6 @@
import time
import urlparse
import bisect
-import cookielib
try:
from cStringIO import StringIO
@@ -168,6 +164,23 @@
class GopherError(URLError):
pass
+# copied from cookielib.py
+cut_port_re = re.compile(r":\d+$")
+def request_host(request):
+ """Return request-host, as defined by RFC 2965.
+
+ Variation from RFC: returned value is lowercased, for convenient
+ comparison.
+
+ """
+ url = request.get_full_url()
+ host = urlparse.urlparse(url)[1]
+ if host == "":
+ host = request.get_header("Host", "")
+
+ # remove port, if present
+ host = cut_port_re.sub("", host, 1)
+ return host.lower()
class Request:
@@ -185,7 +198,7 @@
self.add_header(key, value)
self.unredirected_hdrs = {}
if origin_req_host is None:
- origin_req_host = cookielib.request_host(self)
+ origin_req_host = request_host(self)
self.origin_req_host = origin_req_host
self.unverifiable = unverifiable
@@ -413,6 +426,9 @@
If any of the handlers passed as arguments are subclasses of the
default handlers, the default handlers will not be used.
"""
+ import types
+ def isclass(obj):
+ return isinstance(obj, types.ClassType) or hasattr(obj, "__bases__")
opener = OpenerDirector()
default_classes = [ProxyHandler, UnknownHandler, HTTPHandler,
@@ -423,7 +439,7 @@
skip = []
for klass in default_classes:
for check in handlers:
- if inspect.isclass(check):
+ if isclass(check):
if issubclass(check, klass):
skip.append(klass)
elif isinstance(check, klass):
@@ -435,7 +451,7 @@
opener.add_handler(klass())
for h in handlers:
- if inspect.isclass(h):
+ if isclass(h):
h = h()
opener.add_handler(h)
return opener
@@ -1071,6 +1087,7 @@
class HTTPCookieProcessor(BaseHandler):
def __init__(self, cookiejar=None):
+ import cookielib
if cookiejar is None:
cookiejar = cookielib.CookieJar()
self.cookiejar = cookiejar
@@ -1168,6 +1185,7 @@
# not entirely sure what the rules are here
def open_local_file(self, req):
import email.Utils
+ import mimetypes
host = req.get_host()
file = req.get_selector()
localfile = url2pathname(file)
@@ -1188,6 +1206,8 @@
class FTPHandler(BaseHandler):
def ftp_open(self, req):
+ import ftplib
+ import mimetypes
host = req.get_host()
if not host:
raise IOError, ('ftp error', 'no host given')
More information about the Python-checkins
mailing list