Mercurial > hg > urlmatch
changeset 10:b02420253bfd default tip
add recomposition and a test for it
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 28 Jun 2011 18:39:18 -0700 |
parents | 8d47894191a0 |
children | |
files | tests/doctest.txt urlmatch.py |
diffstat | 2 files changed, 30 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/doctest.txt Mon Jun 27 11:22:40 2011 -0700 +++ b/tests/doctest.txt Tue Jun 28 18:39:18 2011 -0700 @@ -20,11 +20,14 @@ >>> sorted(matcher.match('example')) # -> example.* ['http://www.example.com/foo/bar/fleem', 'http://www.example.com/foo/blah', 'https://www.example.com/foo/', 'https://www.example.net/foo/'] -Test decomposition:: +Test decomposition and recomposition:: >>> matcher = UrlMatcher() - >>> sorted(matcher.decompose('http://www.example.com/foo').items()) + >>> decomposed = matcher.decompose('http://www.example.com/foo') + >>> sorted(decomposed.items()) [('domain', ['example', 'com', 'www']), ('path', ['foo']), ('scheme', 'http')] + >>> matcher.recompose(decomposed) + 'http://www.example.com/foo' Test url diffs::
--- a/urlmatch.py Mon Jun 27 11:22:40 2011 -0700 +++ b/urlmatch.py Tue Jun 28 18:39:18 2011 -0700 @@ -39,6 +39,31 @@ return urldict + @classmethod + def recompose(cls, url): + """reconstruct a deconstructed url""" + + # must have a domain + assert 'domain' in url + assert url['domain'] + + # reconstruct domain + if len(url['domain']) == 1: + return url['domain'][0] # what else to do? + retval = '%s.%s' % tuple(url['domain'][:2]) + if len(url['domain']) > 2: + retval = '.'.join(reversed(url['domain'][2:])) + '.' + retval + + # add the scheme + if 'scheme' in url: + retval = url['scheme'] + '://' + retval + + # add the path + if 'path' in url: + retval += '/' + '/'.join(url['path']) + + return retval + def add(self, url): if url not in self.urls: self.urls[url] = self.decompose(url)