X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/fb8a270fa22abc217efc471d860c76d5a2352c61..700615d15881697c10a77ca65c84a84a5dd1e4d6:/philo/contrib/sobol/search.py diff --git a/philo/contrib/sobol/search.py b/philo/contrib/sobol/search.py index 39b93c7..4ab5980 100644 --- a/philo/contrib/sobol/search.py +++ b/philo/contrib/sobol/search.py @@ -1,4 +1,5 @@ #encoding: utf-8 +import datetime from django.conf import settings from django.contrib.sites.models import Site @@ -9,17 +10,21 @@ from django.utils.http import urlquote_plus from django.utils.safestring import mark_safe from django.utils.text import capfirst from django.template import loader, Context, Template -import datetime -from philo.contrib.sobol.utils import make_tracking_querydict -try: - from eventlet.green import urllib2 -except: +from philo.contrib.sobol.utils import make_tracking_querydict, RegistryIterator + + +if getattr(settings, 'SOBOL_USE_EVENTLET', False): + try: + from eventlet.green import urllib2 + except: + import urllib2 +else: import urllib2 __all__ = ( - 'Result', 'BaseSearch', 'DatabaseSearch', 'URLSearch', 'JSONSearch', 'GoogleSearch', 'registry' + 'Result', 'BaseSearch', 'DatabaseSearch', 'URLSearch', 'JSONSearch', 'GoogleSearch', 'SearchRegistry', 'registry' ) @@ -36,7 +41,8 @@ class RegistrationError(Exception): class SearchRegistry(object): - # Holds a registry of search types by slug. + """Holds a registry of search types by slug.""" + def __init__(self): self._registry = {} @@ -63,11 +69,10 @@ class SearchRegistry(object): return self._registry.items() def iteritems(self): - return self._registry.iteritems() + return RegistryIterator(self._registry, 'iteritems') def iterchoices(self): - for slug, search in self.iteritems(): - yield slug, search.verbose_name + return RegistryIterator(self._registry, 'iteritems', lambda x: (x[0], x[1].verbose_name)) def __getitem__(self, key): return self._registry[key] @@ -110,7 +115,8 @@ class Result(object): context = self.get_extra_context() context.update({ 'title': self.get_title(), - 'url': self.get_url() + 'url': self.get_url(), + 'result': self.result }) return context @@ -126,7 +132,7 @@ class Result(object): class BaseSearchMetaclass(type): def __new__(cls, name, bases, attrs): if 'verbose_name' not in attrs: - attrs['verbose_name'] = capfirst(convert_camelcase(name)) + attrs['verbose_name'] = capfirst(' '.join(convert_camelcase(name).rsplit(' ', 1)[:-1])) if 'slug' not in attrs: attrs['slug'] = name.lower() return super(BaseSearchMetaclass, cls).__new__(cls, name, bases, attrs) @@ -246,7 +252,7 @@ class BaseSearch(object): return make_tracking_querydict(self.search_arg, self.more_results_url) def __unicode__(self): - return ' '.join(self.__class__.verbose_name.rsplit(' ', 1)[:-1]) + ' results' + return self.verbose_name class DatabaseSearch(BaseSearch): @@ -350,9 +356,6 @@ class GoogleSearch(JSONSearch): def get_result_url(self, result): return result['unescapedUrl'] - - def get_result_extra_context(self, result): - return result registry.register(GoogleSearch)