#encoding: utf-8
+import datetime
from django.conf import settings
from django.contrib.sites.models import Site
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'
)
class SearchRegistry(object):
- # Holds a registry of search types by slug.
+ """Holds a registry of search types by slug."""
+
def __init__(self):
self._registry = {}
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]
context = self.get_extra_context()
context.update({
'title': self.get_title(),
- 'url': self.get_url()
+ 'url': self.get_url(),
+ 'result': self.result
})
return context
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)
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):
def get_result_url(self, result):
return result['unescapedUrl']
-
- def get_result_extra_context(self, result):
- return result
registry.register(GoogleSearch)