X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/c9802c5cb6ad16a895cd5434d6f7695d1ae930f7..1a3157137358d887b9c93d91e87df9ffce6c2f45:/philo/contrib/sobol/utils.py diff --git a/philo/contrib/sobol/utils.py b/philo/contrib/sobol/utils.py index 5c52c81..6fd5a49 100644 --- a/philo/contrib/sobol/utils.py +++ b/philo/contrib/sobol/utils.py @@ -12,22 +12,40 @@ HASH_REDIRECT_GET_KEY = 's' def make_redirect_hash(search_arg, url): + """Hashes a redirect for a ``search_arg`` and ``url`` to avoid providing a simple URL spoofing service.""" return sha1(smart_str(search_arg + url + settings.SECRET_KEY)).hexdigest()[::2] def check_redirect_hash(hash, search_arg, url): + """Checks whether a hash is valid for a given ``search_arg`` and ``url``.""" return hash == make_redirect_hash(search_arg, url) def make_tracking_querydict(search_arg, url): - """ - Returns a QueryDict instance containing the information necessary - for tracking clicks of this url. - - NOTE: will this kind of initialization handle quoting correctly? - """ + """Returns a :class:`QueryDict` instance containing the information necessary for tracking :class:`.Click`\ s on the ``url``.""" return QueryDict("%s=%s&%s=%s&%s=%s" % ( SEARCH_ARG_GET_KEY, urlquote_plus(search_arg), URL_REDIRECT_GET_KEY, urlquote(url), HASH_REDIRECT_GET_KEY, make_redirect_hash(search_arg, url)) - ) \ No newline at end of file + ) + + +class RegistryIterator(object): + def __init__(self, registry, iterattr='__iter__', transform=lambda x:x): + if not hasattr(registry, iterattr): + raise AttributeError("Registry has no attribute %s" % iterattr) + self.registry = registry + self.iterattr = iterattr + self.transform = transform + + def __iter__(self): + return self + + def next(self): + if not hasattr(self, '_iter'): + self._iter = getattr(self.registry, self.iterattr)() + + return self.transform(self._iter.next()) + + def copy(self): + return self.__class__(self.registry, self.iterattr, self.transform) \ No newline at end of file