Changes for future Python 3.x compatibility

Replace backticks with repr(), replace .has_key() with "in".


git-svn-id: https://linkchecker.svn.sourceforge.net/svnroot/linkchecker/trunk/linkchecker@3680 e7d03fd6-7b0d-0410-9947-9c21f3af8025
This commit is contained in:
calvin 2008-03-19 10:22:57 +00:00
parent 0e6c1494c9
commit 4ce0ddd166
22 changed files with 47 additions and 50 deletions

View file

@ -182,7 +182,7 @@ class HttpUrl (internpaturl.InternPatternUrl, proxysupport.ProxySupport):
self.method = "HEAD"
# check the http connection
response = self.check_http_connection()
if self.headers and self.headers.has_key("Server"):
if self.headers and "Server" in self.headers:
server = self.headers['Server']
else:
server = _("unknown")

View file

@ -66,7 +66,7 @@ class MailtoUrl (urlbase.UrlBase):
self.headers = {}
self.addresses = email.Utils.getaddresses([self.cutout_addresses()])
for key in ("to", "cc", "bcc"):
if self.headers.has_key(key):
if key in self.headers:
for val in self.headers[key]:
a = urllib.unquote(val)
self.addresses.extend(email.Utils.getaddresses([a]))

View file

@ -20,7 +20,7 @@ class TestFcgi (unittest.TestCase):
doc = ['<HTML><HEAD><TITLE>FCGI TestApp</TITLE></HEAD>\n'
'<BODY>\n']
doc.append('<H2>FCGI TestApp</H2><P>')
if req.env.has_key('CONTENT_LENGTH'):
if 'CONTENT_LENGTH' in req.env:
cl = int(req.env['CONTENT_LENGTH'])
doc.append('<br><b>POST data (%s):</b><br><pre>' % cl)
keys = fs.keys()

View file

@ -90,8 +90,8 @@ class LCConfigParser (ConfigParser.RawConfigParser, object):
for val in filelist:
val = val.strip()
# no file output for the blacklist and none Logger
if linkcheck.Loggers.has_key(val) and \
val not in ["blacklist", "none"]:
if val in linkcheck.Loggers and \
val not in ("blacklist", "none"):
output = self.config.logger_new(val, fileoutput=1)
self.config['fileoutput'].append(output)
if self.has_option(section, "interactive"):

View file

@ -68,13 +68,13 @@ class ListDict (dict):
self._keys = []
def setdefault (self, key, *args):
if not self.has_key(key):
if key not in self:
self._keys.append(key)
return super(ListDict, self).setdefault(key, *args)
def __setitem__ (self, key, value):
"""Add key,value to dict, append key to sorted list."""
if not self.has_key(key):
if key not in self:
self._keys.append(key)
super(ListDict, self).__setitem__(key, value)

View file

@ -360,7 +360,7 @@ def from_headers (strheader):
"""
fp = StringIO.StringIO(strheader)
headers = rfc822.Message(fp, seekable=True)
if not headers.has_key("Host"):
if "Host" not in headers:
raise ValueError("Required header 'Host:' missing")
host = headers["Host"]
scheme = headers.get("Scheme", "http")

View file

@ -151,7 +151,7 @@ class Message(object):
self.first = True
def __repr__(self):
return '<DNS message, ID ' + `self.id` + '>'
return '<DNS message, ID %r>' % self.id
def __str__(self):
return self.to_text()

View file

@ -54,7 +54,7 @@ class NameDict(dict):
depth = self.max_depth
for i in xrange(-depth, 0):
n = linkcheck.dns.name.Name(name[i:])
if self.has_key(n):
if n in self:
return (n, self[n])
v = self[linkcheck.dns.name.empty]
return (linkcheck.dns.name.empty, v)

View file

@ -101,7 +101,7 @@ def to_text(value):
raise ValueError, "class must be between >= 0 and <= 65535"
text = _by_value.get(value)
if text is None:
text = 'CLASS' + `value`
text = 'CLASS' + repr(value)
return text
def is_metaclass(rdclass):
@ -110,6 +110,4 @@ def is_metaclass(rdclass):
@type rdclass: int
@rtype: bool"""
if _metaclasses.has_key(rdclass):
return True
return False
return rdclass in _metaclasses

View file

@ -192,7 +192,7 @@ def to_text(value):
raise ValueError, "type must be between >= 0 and <= 65535"
text = _by_value.get(value)
if text is None:
text = 'TYPE' + `value`
text = 'TYPE' + repr(value)
return text
def is_metatype(rdtype):
@ -201,9 +201,7 @@ def is_metatype(rdtype):
@type rdtype: int
@rtype: bool"""
if rdtype >= TKEY and rdtype <= ANY or _metatypes.has_key(rdtype):
return True
return False
return rdtype >= TKEY and rdtype <= ANY or rdtype in _metatypes
def is_singleton(rdtype):
"""True if the type is a singleton.
@ -211,6 +209,4 @@ def is_singleton(rdtype):
@type rdtype: int
@rtype: bool"""
if _singletons.has_key(rdtype):
return True
return False
return rdtype in _singletons

View file

@ -240,7 +240,7 @@ class Cache(object):
@type key: (linkcheck.dns.name.Name, int, int) tuple or None
"""
if not key is None:
if self.data.has_key(key):
if key in self.data:
del self.data[key]
else:
self.data = {}

View file

@ -201,7 +201,7 @@ class Zone(object):
"""
name = self._validate_name(name)
if self.nodes.has_key(name):
if name in self.nodes:
del self.nodes[name]
def find_rdataset(self, name, rdtype, covers=linkcheck.dns.rdatatype.NONE,

View file

@ -224,7 +224,7 @@ def HandleManTypes (r, conn):
'FCGI_MAX_REQS' : FCGI_MAX_REQS,
'FCGI_MPXS_CONNS': FCGI_MPXS_CONNS}
for i in r.values.keys():
if _vars.has_key(i):
if i in _vars:
v[i] = _vars[i]
r.values = _vars
r.write_record(conn)
@ -397,7 +397,7 @@ class FCGI (object):
self.env = os.environ
self.stdin, self.out, self.err = sys.stdin, sys.stdout, sys.stderr
if os.environ.has_key('FCGI_WEB_SERVER_ADDRS'):
if 'FCGI_WEB_SERVER_ADDRS' in os.environ:
addrs = os.environ['FCGI_WEB_SERVER_ADDRS'].split(',')
good_addrs = [ addr.strip() for addr in addrs ]
else:
@ -494,7 +494,7 @@ class FCGI (object):
def getFieldStorage (self):
method = 'GET'
if self.env.has_key('REQUEST_METHOD'):
if 'REQUEST_METHOD' in self.env:
method = self.env['REQUEST_METHOD'].upper()
if method == 'GET':
return cgi.FieldStorage(environ=self.env, keep_blank_values=1)

View file

@ -120,7 +120,7 @@ def get_headers_lang (headers):
"""
Return preferred supported language in given HTTP headers.
"""
if not headers.has_key('Accept-Language'):
if 'Accept-Language' not in headers:
return default_language
languages = headers['Accept-Language'].split(",")
# sort with preference values

View file

@ -84,9 +84,9 @@ def checklink (out=sys.stdout, form=None, env=os.environ):
config["recursionlevel"] = int(form["level"].value)
config["logger"] = config.logger_new('html', fd=out)
config["threads"] = 0
if form.has_key("anchors"):
if "anchors" in form:
config["anchors"] = True
if not form.has_key("errors"):
if "errors" not in form:
config["verbose"] = True
# avoid checking of local files or other nasty stuff
pat = "!^%s$" % linkcheck.url.safe_url_pattern
@ -121,7 +121,7 @@ def checkform (form):
only plain strings as exception text.
"""
# check lang support
if form.has_key("language"):
if "language" in form:
lang = form['language'].value
if lang in _supported_langs:
os.environ['LC_MESSAGES'] = lang
@ -129,7 +129,7 @@ def checkform (form):
else:
raise FormError(_("unsupported language"))
# check url syntax
if form.has_key("url"):
if "url" in form:
url = form["url"].value
if not url or url == "http://":
raise FormError(_("empty url was given"))
@ -138,13 +138,13 @@ def checkform (form):
else:
raise FormError(_("no url was given"))
# check recursion level
if form.has_key("level"):
if "level" in form:
level = form["level"].value
if not _is_level(level):
raise FormError(_("invalid recursion level"))
# check options
for option in ("anchors", "errors", "intern"):
if form.has_key(option):
if option in form:
if not form[option].value == "on":
raise FormError(_("invalid %s option syntax") % option)
@ -158,12 +158,12 @@ def logit (form, env):
elif type(_logfile) == types.StringType:
_logfile = file(_logfile, "a")
_logfile.write("\n"+linkcheck.strformat.strtime(time.time())+"\n")
for var in ["HTTP_USER_AGENT", "REMOTE_ADDR",
"REMOTE_HOST", "REMOTE_PORT"]:
if env.has_key(var):
for var in ("HTTP_USER_AGENT", "REMOTE_ADDR",
"REMOTE_HOST", "REMOTE_PORT"):
if var in env:
_logfile.write(var+"="+env[var]+"\n")
for key in ["level", "url", "anchors", "errors", "intern", "language"]:
if form.has_key(key):
for key in ("level", "url", "anchors", "errors", "intern", "language"):
if key in form:
_logfile.write(str(form[key])+"\n")

View file

@ -57,7 +57,7 @@ class Logger (object):
"""
# what log parts should be in output
self.logparts = None # log all parts
if args.has_key('parts'):
if 'parts' in args:
if "all" not in args['parts']:
# only log given parts
self.logparts = args['parts']
@ -88,7 +88,7 @@ class Logger (object):
self.fd = None
if args.get('fileoutput'):
self.filename = os.path.expanduser(args['filename'])
elif args.has_key('fd'):
elif 'fd' in args:
self.fd = args['fd']
else:
self.fd = sys.stdout

View file

@ -69,7 +69,7 @@ class DOTLogger (linkcheck.logger.Logger):
Write one node and all possible edges.
"""
node = url_data
if node.url and not self.nodes.has_key(node.url):
if node.url and node.url not in self.nodes:
node.id = self.nodeid
self.nodes[node.url] = node
self.nodeid += 1
@ -92,7 +92,7 @@ class DOTLogger (linkcheck.logger.Logger):
manner. Better would be a mapping of parent URLs.
"""
for node in self.nodes.itervalues():
if self.nodes.has_key(node.parent_url):
if node.parent_url in self.nodes:
source = self.nodes[node.parent_url].id
target = node.id
self.writeln(u" %d -> %d [" % (source, target))

View file

@ -70,7 +70,7 @@ class GMLLogger (linkcheck.logger.Logger):
Write one node and all possible edges.
"""
node = url_data
if node.url and not self.nodes.has_key(node.url):
if node.url and node.url not in self.nodes:
node.id = self.nodeid
self.nodes[node.url] = node
self.nodeid += 1
@ -94,7 +94,7 @@ class GMLLogger (linkcheck.logger.Logger):
manner. Better would be a mapping of parent URLs.
"""
for node in self.nodes.itervalues():
if self.nodes.has_key(node.parent_url):
if node.parent_url in self.nodes:
self.writeln(u" edge [")
self.writeln(u' label "%s"' % (node.base_url or u""))
if self.has_part("parenturl") and node.parent_url:

View file

@ -50,7 +50,7 @@ class GraphXMLLogger (xmllog.XMLLogger):
Write one node and all possible edges.
"""
node = url_data
if node.url and not self.nodes.has_key(node.url):
if node.url and node.url not in self.nodes:
node.id = self.nodeid
self.nodes[node.url] = node
self.nodeid += 1
@ -77,7 +77,7 @@ class GraphXMLLogger (xmllog.XMLLogger):
manner. Better would be a mapping of parent URLs.
"""
for node in self.nodes.itervalues():
if self.nodes.has_key(node.parent_url):
if node.parent_url in self.nodes:
attrs = {
u"source": u"%d" % self.nodes[node.parent_url].id,
u"target": u"%d" % node.id,

View file

@ -213,10 +213,13 @@ class TestCaselessDict (unittest.TestCase):
self.d.clear()
self.assert_(not self.d)
def test_has_key (self):
def test_containment (self):
self.assert_(not self.d)
self.assert_("A" not in self.d)
self.assert_("a" not in self.d)
self.d["a"] = 5
self.assert_(self.d.has_key("A"))
self.assert_("A" in self.d)
self.assert_("a" in self.d)
def test_setdefault (self):
self.assert_(not self.d)

View file

@ -152,7 +152,7 @@ def parse_qsl (qs, keep_blank_values=0, strict_parsing=0):
nv = name_value.split('=', 1)
if len(nv) != 2:
if strict_parsing:
raise ValueError("bad query field: %s" % `name_value`)
raise ValueError("bad query field: %r" % name_value)
elif len(nv) == 1:
# None value indicates missing equal sign
nv = (nv[0], None)

View file

@ -121,7 +121,7 @@ class MyInstall (install, object):
opt_name = opt[0]
if opt_name[-1] == "=":
opt_name = opt_name[0:-1]
if self.negative_opt.has_key(opt_name):
if opt_name in self.negative_opt:
opt_name = string.translate(self.negative_opt[opt_name],
longopt_xlate)
val = not getattr(self, opt_name)