Refactor and simply recent search functionality

This commit is contained in:
Roberto Rosario
2012-04-12 12:22:58 -04:00
parent 738e304545
commit 8e829612af
3 changed files with 39 additions and 42 deletions

View File

@@ -15,21 +15,6 @@ from dynamic_search.conf.settings import RECENT_COUNT
class RecentSearchManager(Manager):
def add_query_for_user(self, search_view):#user, url, hits):
query_dict = parse_qs(unquote_plus(smart_str(urlparse(search_view.request.get_full_path()).query)))
print 'query_dict', query_dict
print 'serial', dumps(query_dict)
#parsed_query = urlparse.parse_qs(query)
#for key, value in parsed_query.items():
# parsed_query[key] = ' '.join(value)#
#if 'q=' in query:
# # Is a simple query
# if not parsed_query.get('q'):
# # Don't store empty simple searches
# return
# else:
# # Cleanup query string and only store the q parameter
# parsed_query = {'q': parsed_query['q']}
if query_dict and not isinstance(search_view.request.user, AnonymousUser):
# If the URL query has at least one variable with a value
@@ -40,6 +25,9 @@ class RecentSearchManager(Manager):
for recent_to_delete in to_delete:
recent_to_delete.delete()
def get_for_user(self, user):
return [entry for entry in self.model.objects.filter(user=user) if entry.get_query()]
class IndexableObjectManager(Manager):
def get_indexables(self, datetime=None):

View File

@@ -13,6 +13,7 @@ from django.utils.translation import ugettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.utils.simplejson import loads
from django.utils.http import urlencode
from .managers import RecentSearchManager, IndexableObjectManager
from .api import registered_search_dict
@@ -30,28 +31,31 @@ class RecentSearch(models.Model):
objects = RecentSearchManager()
def __unicode__(self):
return self.form_string()
def form_string(self):
query = self.get_query()
if self.is_advanced():
return u'%s (%s)' % (self.get_query(), self.hits)
else:
return u'%s (%s)' % (self.get_query().get('q'), self.hits)
return u'%s (%s)' % (u' '.join(self.get_query().get('q')), self.hits)
def save(self, *args, **kwargs):
self.datetime_created = datetime.datetime.now()
super(RecentSearch, self).save(*args, **kwargs)
#def readable_query(self):
# return self.
#def url(self):
# view = 'results' if self.is_advanced() else 'search'
# return '%s?%s' % (reverse(view), self.query)
def get_query(self):
return loads(self.query)
try:
return loads(self.query)
except ValueError:
return {}
def is_advanced(self):
return 'q' not in self.get_query()
def get_absolute_url(self):
return '?'.join([reverse('search'), urlencode(self.get_query(), doseq=True)])
class Meta:
ordering = ('-datetime_created',)
verbose_name = _(u'recent search')

View File

@@ -1,10 +1,12 @@
from __future__ import absolute_import
from django.core.urlresolvers import reverse
from django.template import Library
from django.utils.translation import ugettext as _
from dynamic_search.forms import SearchForm
from dynamic_search.models import RecentSearch
from dynamic_search.conf.settings import RECENT_COUNT
from ..forms import SearchForm
from ..models import RecentSearch
from ..conf.settings import RECENT_COUNT
register = Library()
@@ -25,18 +27,21 @@ def search_form(context):
@register.inclusion_tag('generic_subtemplate.html', takes_context=True)
def recent_searches_template(context):
recent_searches = RecentSearch.objects.filter(user=context['user'])
context.update({
'request': context['request'],
'STATIC_URL': context['STATIC_URL'],
'side_bar': True,
'title': _(u'recent searches (maximum of %d)') % RECENT_COUNT,
'paragraphs': [
u'<a href="%(url)s"><span class="famfam active famfam-%(icon)s"></span>%(text)s</a>' % {
'text': rs,
'url': reverse('search'),
'icon': 'zoom_in' if rs.is_advanced() else 'zoom',
} for rs in recent_searches
]
})
return context
try:
recent_searches = RecentSearch.objects.get_for_user(user=context['user'])
context.update({
'request': context['request'],
'STATIC_URL': context['STATIC_URL'],
'side_bar': True,
'title': _(u'recent searches (maximum of %d)') % RECENT_COUNT,
'paragraphs': [
u'<a href="%(url)s"><span class="famfam active famfam-%(icon)s"></span>%(text)s</a>' % {
'text': recent_search,
'url': recent_search.get_absolute_url(),
'icon': 'zoom_in' if recent_search.is_advanced() else 'zoom',
} for recent_search in recent_searches
]
})
return context
except Exception, e:
print 'EEEEEEEEEEEE', e