def testModeGeneric(self): # 'generic' mode x = IS_URL(mode='generic') self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca'), ('google.ca', None)) self.assertEqual(x('google.ca:80'), ('http://google.ca:80', None)) self.assertEqual(x('blargg://unreal'), ('blargg://unreal', 'Enter a valid URL')) # 'generic' mode with custom allowed_schemes that still includes # 'http' (the default for prepend_scheme) x = IS_URL(mode='generic', allowed_schemes=['http', 'blargg']) self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('ftp://google.ca'), ('ftp://google.ca', 'Enter a valid URL')) self.assertEqual(x('google.ca'), ('google.ca', 'Enter a valid URL')) self.assertEqual(x('google.ca:80'), ('google.ca:80', 'Enter a valid URL')) self.assertEqual(x('blargg://unreal'), ('blargg://unreal', None)) # 'generic' mode with overriden prepend_scheme x = IS_URL(mode='generic', prepend_scheme='ftp') self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('ftp://google.ca'), ('ftp://google.ca', None)) self.assertEqual(x('google.ca'), ('google.ca', None)) self.assertEqual(x('google.ca:80'), ('ftp://google.ca:80', None)) self.assertEqual(x('blargg://unreal'), ('blargg://unreal', 'Enter a valid URL')) # 'generic' mode with overriden allowed_schemes and prepend_scheme x = IS_URL(mode='generic', allowed_schemes=[None, 'ftp', 'ftps' ], prepend_scheme='ftp') self.assertEqual(x('http://google.ca'), ('http://google.ca', 'Enter a valid URL')) self.assertEqual(x('google.ca'), ('google.ca', None)) self.assertEqual(x('ftp://google.ca'), ('ftp://google.ca', None)) self.assertEqual(x('google.ca:80'), ('ftp://google.ca:80', None)) self.assertEqual(x('blargg://unreal'), ('blargg://unreal', 'Enter a valid URL')) # Now any URL requiring prepending will fail, but prepending is still # enabled! x = IS_URL(mode='generic', allowed_schemes=['http']) self.assertEqual(x('google.ca'), ('google.ca', 'Enter a valid URL'))
def test_IS_URL(self): rtn = IS_URL()('abc.com') self.assertEqual(rtn, ('http://abc.com', None)) rtn = IS_URL(mode='generic')('abc.com') self.assertEqual(rtn, ('abc.com', None)) rtn = IS_URL(allowed_schemes=['https'], prepend_scheme='https')('https://abc.com') self.assertEqual(rtn, ('https://abc.com', None)) rtn = IS_URL(prepend_scheme='https')('abc.com') self.assertEqual(rtn, ('https://abc.com', None)) rtn = IS_URL(mode='generic', allowed_schemes=['ftps', 'https'], prepend_scheme='https')('https://abc.com') self.assertEqual(rtn, ('https://abc.com', None)) rtn = IS_URL(mode='generic', allowed_schemes=['ftps', 'https', None], prepend_scheme='https')('abc.com') self.assertEqual(rtn, ('abc.com', None)) # regression test for issue 773 rtn = IS_URL()('domain.ninja') self.assertEqual(rtn, ('http://domain.ninja', None)) # addition of allowed_tlds rtn = IS_URL(allowed_tlds=['com', 'net', 'org'])('domain.ninja') self.assertEqual(rtn, ('domain.ninja', 'Enter a valid URL')) # mode = 'generic' doesn't consider allowed_tlds rtn = IS_URL(mode='generic', allowed_tlds=['com', 'net', 'org'])('domain.ninja') self.assertEqual(rtn, ('domain.ninja', None))
def testExceptionalUse(self): # mode must be in set ['http', 'generic'] try: x = IS_URL(mode='ftp') x('http://www.google.ca') except Exception, e: if str(e) != "mode='ftp' is not valid": self.fail('Wrong exception: ' + str(e))
class TestUnicode(unittest.TestCase): x = IS_URL() y = IS_URL(allowed_schemes=[ 'https' ]) #excludes the option for abbreviated URLs with no scheme z = IS_URL(prepend_scheme=None ) # disables prepending the scheme in the return value def testUnicodeToAsciiUrl(self): self.assertEquals( unicode_to_ascii_authority(u'www.Alliancefran\xe7aise.nu'), 'www.xn--alliancefranaise-npb.nu') self.assertEquals(unicode_to_ascii_authority(u'www.benn.ca'), 'www.benn.ca') self.assertRaises(UnicodeError, unicode_to_ascii_authority, u'\u4e2d' * 1000) #label is too long def testValidUrls(self): self.assertEquals(self.x(u'www.Alliancefrancaise.nu'), ('http://www.Alliancefrancaise.nu', None)) self.assertEquals(self.x(u'www.Alliancefran\xe7aise.nu'), ('http://www.xn--alliancefranaise-npb.nu', None)) self.assertEquals( self.x(u'www.Alliancefran\xe7aise.nu:8080'), ('http://www.xn--alliancefranaise-npb.nu:8080', None)) self.assertEquals(self.x(u'http://www.Alliancefran\xe7aise.nu'), ('http://www.xn--alliancefranaise-npb.nu', None)) self.assertEquals( self.x(u'http://www.Alliancefran\xe7aise.nu/parnaise/blue'), ('http://www.xn--alliancefranaise-npb.nu/parnaise/blue', None)) self.assertEquals( self.x( u'http://www.Alliancefran\xe7aise.nu/parnaise/blue#fragment'), ('http://www.xn--alliancefranaise-npb.nu/parnaise/blue#fragment', None)) self.assertEquals( self. x(u'http://www.Alliancefran\xe7aise.nu/parnaise/blue?query=value#fragment' ), ('http://www.xn--alliancefranaise-npb.nu/parnaise/blue?query=value#fragment', None)) self.assertEquals( self. x(u'http://www.Alliancefran\xe7aise.nu:8080/parnaise/blue?query=value#fragment' ), ('http://www.xn--alliancefranaise-npb.nu:8080/parnaise/blue?query=value#fragment', None)) self.assertEquals( self. x(u'www.Alliancefran\xe7aise.nu/parnaise/blue?query=value#fragment' ), ('http://www.xn--alliancefranaise-npb.nu/parnaise/blue?query=value#fragment', None)) self.assertEquals(self.x(u'http://\u4e2d\u4fd4.com'), ('http://xn--fiq13b.com', None)) self.assertEquals(self.x(u'http://\u4e2d\u4fd4.com/\u4e86'), ('http://xn--fiq13b.com/%4e%86', None)) self.assertEquals( self.x(u'http://\u4e2d\u4fd4.com/\u4e86?query=\u4e86'), ('http://xn--fiq13b.com/%4e%86?query=%4e%86', None)) self.assertEquals( self.x(u'http://\u4e2d\u4fd4.com/\u4e86?query=\u4e86#fragment'), ('http://xn--fiq13b.com/%4e%86?query=%4e%86#fragment', None)) self.assertEquals( self.x(u'http://\u4e2d\u4fd4.com?query=\u4e86#fragment'), ('http://xn--fiq13b.com?query=%4e%86#fragment', None)) self.assertEquals(self.x(u'http://B\xfccher.ch'), ('http://xn--bcher-kva.ch', None)) self.assertEquals(self.x(u'http://\xe4\xf6\xfc\xdf.com'), ('http://xn--ss-uia6e4a.com', None)) self.assertEquals(self.x(u'http://visegr\xe1d.com'), ('http://xn--visegrd-mwa.com', None)) self.assertEquals(self.x(u'http://h\xe1zipatika.com'), ('http://xn--hzipatika-01a.com', None)) self.assertEquals(self.x(u'http://www.\xe7ukurova.com'), ('http://www.xn--ukurova-txa.com', None)) self.assertEquals( self.x(u'http://nixier\xf6hre.nixieclock-tube.com'), ('http://xn--nixierhre-57a.nixieclock-tube.com', None)) self.assertEquals(self.x(u'google.ca.'), ('http://google.ca.', None)) self.assertEquals(self.y(u'https://google.ca'), ('https://google.ca', None)) self.assertEquals(self.y(u'https://\u4e2d\u4fd4.com'), ('https://xn--fiq13b.com', None)) self.assertEquals(self.z(u'google.ca'), ('google.ca', None)) def testInvalidUrls(self): self.assertEquals(self.x(u'://ABC.com'), (u'://ABC.com', 'invalid url!')) self.assertEquals(self.x(u'http://\u4e2d\u4fd4.dne'), (u'http://\u4e2d\u4fd4.dne', 'invalid url!')) self.assertEquals(self.x(u'https://google.dne'), (u'https://google.dne', 'invalid url!')) self.assertEquals(self.x(u'https://google..ca'), (u'https://google..ca', 'invalid url!')) self.assertEquals(self.x(u'google..ca'), (u'google..ca', 'invalid url!')) self.assertEquals( self.x(u'http://' + u'\u4e2d' * 1000 + u'.com'), (u'http://' + u'\u4e2d' * 1000 + u'.com', 'invalid url!')) self.assertEquals( self.x(u'http://google.com#fragment_\u4e86'), (u'http://google.com#fragment_\u4e86', 'invalid url!')) self.assertEquals(self.x(u'http\u4e86://google.com'), (u'http\u4e86://google.com', 'invalid url!')) self.assertEquals( self.x(u'http\u4e86://google.com#fragment_\u4e86'), (u'http\u4e86://google.com#fragment_\u4e86', 'invalid url!')) self.assertEquals(self.y(u'http://\u4e2d\u4fd4.com/\u4e86'), (u'http://\u4e2d\u4fd4.com/\u4e86', 'invalid url!')) self.assertEquals(self.y(u'google.ca'), (u'google.ca', 'invalid url!')) self.assertEquals(self.z(u'invalid.domain..com'), (u'invalid.domain..com', 'invalid url!')) self.assertEquals(self.z(u'invalid.\u4e2d\u4fd4.blargg'), (u'invalid.\u4e2d\u4fd4.blargg', 'invalid url!'))
def testModeHttp(self): # defaults to mode='http' x = IS_URL() self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca:80'), ('http://google.ca:80', None)) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) self.assertEqual(x('google..ca'), ('google..ca', 'invalid url!')) self.assertEqual(x('google.ca..'), ('google.ca..', 'invalid url!')) # explicit use of 'http' mode x = IS_URL(mode='http') self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca:80'), ('http://google.ca:80', None)) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) # prepends 'https' instead of 'http' x = IS_URL(mode='http', prepend_scheme='https') self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca'), ('https://google.ca', None)) self.assertEqual(x('google.ca:80'), ('https://google.ca:80', None)) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) # prepending disabled x = IS_URL(prepend_scheme=None) self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca'), ('google.ca', None)) self.assertEqual(x('google.ca:80'), ('google.ca:80', None)) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) # custom allowed_schemes x = IS_URL(mode='http', allowed_schemes=[None, 'http']) self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('https://google.ca'), ('https://google.ca', 'invalid url!')) self.assertEqual(x('google.ca'), ('http://google.ca', None)) self.assertEqual(x('google.ca:80'), ('http://google.ca:80', None)) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) # custom allowed_schemes, excluding None x = IS_URL(allowed_schemes=['http']) self.assertEqual(x('http://google.ca'), ('http://google.ca', None)) self.assertEqual(x('https://google.ca'), ('https://google.ca', 'invalid url!')) self.assertEqual(x('google.ca'), ('google.ca', 'invalid url!')) self.assertEqual(x('google.ca:80'), ('google.ca:80', 'invalid url!')) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) # custom allowed_schemes and prepend_scheme x = IS_URL(allowed_schemes=[None, 'https'], prepend_scheme='https') self.assertEqual(x('http://google.ca'), ('http://google.ca', 'invalid url!')) self.assertEqual(x('https://google.ca'), ('https://google.ca', None)) self.assertEqual(x('google.ca'), ('https://google.ca', None)) self.assertEqual(x('google.ca:80'), ('https://google.ca:80', None)) self.assertEqual(x('unreal.blargg'), ('unreal.blargg', 'invalid url!')) # Now any URL requiring prepending will fail, but prepending is still enabled! x = IS_URL(allowed_schemes=['http']) self.assertEqual(x('google.ca'), ('google.ca', 'invalid url!'))
# mode must be in set ['http', 'generic'] try: x = IS_URL(mode='ftp') x('http://www.google.ca') except Exception, e: if str(e) != "mode='ftp' is not valid": self.fail('Wrong exception: ' + str(e)) else: self.fail("Accepted invalid mode: 'ftp'") # allowed_schemes in 'http' mode must be in set [None, 'http', 'https'] try: x = IS_URL(allowed_schemes=[None, 'ftp', 'ftps'], prepend_scheme='ftp') x('http://www.benn.ca' ) # we can only reasonably know about the error at calling time except Exception, e: if str(e)\ != "allowed_scheme value 'ftp' is not in [None, 'http', 'https']": self.fail('Wrong exception: ' + str(e)) else: self.fail( "Accepted invalid allowed_schemes: [None, 'ftp', 'ftps']") # prepend_scheme's value must be in allowed_schemes (default for 'http' mode is [None, 'http', 'https']) try: x = IS_URL(prepend_scheme='ftp') x('http://www.benn.ca'