Exemplo n.º 1
0
    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'))
Exemplo n.º 2
0
 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))
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
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!'))
Exemplo n.º 5
0
    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!'))
Exemplo n.º 6
0
        # 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'