Moved isIP* to utils from ircutils.

This commit is contained in:
Jeremy Fincher 2004-01-16 17:33:51 +00:00
parent b2f23c6f63
commit 29426e2f1d
6 changed files with 57 additions and 54 deletions

View File

@ -77,7 +77,7 @@ class Fun(callbacks.Privmsg):
Returns the hexadecimal IP for that IP.
"""
ip = privmsgs.getArgs(args)
if not ircutils.isIP(ip):
if not utils.isIP(ip):
irc.error('%r is not a valid IP.' % ip)
return
quads = ip.split('.')

View File

@ -63,7 +63,7 @@ class Network(callbacks.Privmsg):
Returns the ip of <host> or the reverse DNS hostname of <ip>.
"""
host = privmsgs.getArgs(args)
if ircutils.isIP(host):
if utils.isIP(host):
hostname = socket.getfqdn(host)
if hostname == host:
irc.reply('Host not found.')

View File

@ -52,6 +52,8 @@ import operator
from itertools import imap
from cStringIO import StringIO as sio
import utils
def isUserHostmask(s):
"""Returns whether or not the string s is a valid User hostmask."""
p1 = s.find('!')
@ -161,41 +163,6 @@ def hostmaskPatternEqual(pattern, hostmask):
_hostmaskPatternEqualCache[(pattern, hostmask)] = b
return b
_ipchars = string.digits + '.'
def isIP(s):
"""Returns whether or not a given string is an IPV4 address.
>>> isIP('255.255.255.255')
1
>>> isIP('abc.abc.abc.abc')
0
"""
try:
return bool(socket.inet_aton(s))
except socket.error:
return False
def isIPV6(s):
"""Returns whether or not a given string is an IPV6 address."""
try:
return bool(socket.inet_pton(socket.AF_INET6, s))
except socket.error:
try:
socket.inet_pton(socket.AF_INET6, '::')
except socket.error:
# We gotta fake it.
if s.count('::') <= 1:
L = s.split(':')
if len(L) <= 8:
for x in L:
if x:
try:
int(x, 16)
except ValueError:
return False
return True
return False
def banmask(hostmask):
"""Returns a properly generic banning hostmask for a hostmask.
@ -208,11 +175,11 @@ def banmask(hostmask):
"""
assert isUserHostmask(hostmask)
host = hostFromHostmask(hostmask)
if isIP(host):
if utils.isIP(host):
L = host.split('.')
L[-1] = '*'
return '*!*@' + '.'.join(L)
elif isIPV6(host):
elif utils.isIPV6(host):
L = host.split(':')
L[-1] = '*'
return '*!*@' + ':'.join(L)
@ -374,7 +341,8 @@ def replyTo(msg):
def dccIP(ip):
"""Returns in IP in the proper for DCC."""
assert isIP(ip), 'argument must be a string ip in xxx.yyy.zzz.www format.'
assert utils.isIP(ip), \
'argument must be a string ip in xxx.yyy.zzz.www format.'
i = 0
x = 256**3
for quad in ip.split('.'):

View File

@ -44,6 +44,7 @@ import re
import md5
import sha
import types
import socket
import string
import sgmllib
import compiler
@ -534,6 +535,42 @@ def changeFunctionName(f, name, doc=None):
newf.__doc__ = doc
return newf
_ipchars = string.digits + '.'
def isIP(s):
"""Returns whether or not a given string is an IPV4 address.
>>> isIP('255.255.255.255')
1
>>> isIP('abc.abc.abc.abc')
0
"""
try:
return bool(socket.inet_aton(s))
except socket.error:
return False
def isIPV6(s):
"""Returns whether or not a given string is an IPV6 address."""
try:
return bool(socket.inet_pton(socket.AF_INET6, s))
except socket.error:
try:
socket.inet_pton(socket.AF_INET6, '::')
except socket.error:
# We gotta fake it.
if s.count('::') <= 1:
L = s.split(':')
if len(L) <= 8:
for x in L:
if x:
try:
int(x, 16)
except ValueError:
return False
return True
return False
if __name__ == '__main__':
import sys, doctest
doctest.testmod(sys.modules['__main__'])

View File

@ -122,20 +122,6 @@ class FunctionsTestCase(unittest.TestCase):
self.assertEqual(bolds, ircutils.safeArgument(bolds))
self.assertEqual(colors, ircutils.safeArgument(colors))
def testIsIP(self):
self.failIf(ircutils.isIP('a.b.c'))
self.failIf(ircutils.isIP('256.0.0.0'))
self.failUnless(ircutils.isIP('127.1'))
self.failUnless(ircutils.isIP('0.0.0.0'))
self.failUnless(ircutils.isIP('100.100.100.100'))
# This test is too flaky to bother with.
# self.failUnless(ircutils.isIP('255.255.255.255'))
def testIsIPV6(self):
f = ircutils.isIPV6
self.failUnless(f('2001::'))
self.failUnless(f('2001:888:0:1::666'))
def testIsNick(self):
self.failUnless(ircutils.isNick('jemfinch'))
self.failUnless(ircutils.isNick('jemfinch0'))

View File

@ -320,7 +320,19 @@ class UtilsTest(unittest.TestCase):
self.assertEqual(list(utils.nonCommentNonEmptyLines(L)),
['foo', 'bar', 'biff'])
def testIsIP(self):
self.failIf(utils.isIP('a.b.c'))
self.failIf(utils.isIP('256.0.0.0'))
self.failUnless(utils.isIP('127.1'))
self.failUnless(utils.isIP('0.0.0.0'))
self.failUnless(utils.isIP('100.100.100.100'))
# This test is too flaky to bother with.
# self.failUnless(utils.isIP('255.255.255.255'))
def testIsIPV6(self):
f = utils.isIPV6
self.failUnless(f('2001::'))
self.failUnless(f('2001:888:0:1::666'))
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: