git.ithinksw.org
/
philo.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implemented more robust delayed registry iteration. Modules declaring new searches...
[philo.git]
/
philo
/
contrib
/
sobol
/
search.py
diff --git
a/philo/contrib/sobol/search.py
b/philo/contrib/sobol/search.py
index
39b93c7
..
4ab5980
100644
(file)
--- a/
philo/contrib/sobol/search.py
+++ b/
philo/contrib/sobol/search.py
@@
-1,4
+1,5
@@
#encoding: utf-8
#encoding: utf-8
+import datetime
from django.conf import settings
from django.contrib.sites.models import Site
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
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__ = (
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):
class SearchRegistry(object):
- # Holds a registry of search types by slug.
+ """Holds a registry of search types by slug."""
+
def __init__(self):
self._registry = {}
def __init__(self):
self._registry = {}
@@
-63,11
+69,10
@@
class SearchRegistry(object):
return self._registry.items()
def iteritems(self):
return self._registry.items()
def iteritems(self):
- return
self._registry.iteritems(
)
+ return
RegistryIterator(self._registry, 'iteritems'
)
def iterchoices(self):
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]
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(),
context = self.get_extra_context()
context.update({
'title': self.get_title(),
- 'url': self.get_url()
+ 'url': self.get_url(),
+ 'result': self.result
})
return context
})
return context
@@
-126,7
+132,7
@@
class Result(object):
class BaseSearchMetaclass(type):
def __new__(cls, name, bases, attrs):
if 'verbose_name' not in attrs:
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)
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 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):
class DatabaseSearch(BaseSearch):
@@
-350,9
+356,6
@@
class GoogleSearch(JSONSearch):
def get_result_url(self, result):
return result['unescapedUrl']
def get_result_url(self, result):
return result['unescapedUrl']
-
- def get_result_extra_context(self, result):
- return result
registry.register(GoogleSearch)
registry.register(GoogleSearch)