Remove support for recent searches

This commit is contained in:
Roberto Rosario
2016-10-27 03:59:14 -04:00
parent b8b2e0e929
commit aef395f4df
9 changed files with 1 additions and 202 deletions

View File

@@ -1,14 +0,0 @@
from __future__ import unicode_literals
from django.contrib import admin
from .models import RecentSearch
@admin.register(RecentSearch)
class RecentSearchAdmin(admin.ModelAdmin):
date_hierarchy = 'datetime_created'
list_display = ('user', 'query', 'datetime_created', 'hits')
list_display_links = ('user', 'query', 'datetime_created', 'hits')
list_filter = ('user',)
readonly_fields = ('user', 'query', 'datetime_created', 'hits')

View File

@@ -6,29 +6,6 @@ from rest_framework.exceptions import ParseError
from rest_api.filters import MayanObjectPermissionsFilter from rest_api.filters import MayanObjectPermissionsFilter
from .classes import SearchModel from .classes import SearchModel
from .filters import RecentSearchUserFilter
from .models import RecentSearch
from .serializers import RecentSearchSerializer
class APIRecentSearchListView(generics.ListAPIView):
"""
Returns a list of all the recent searches for the logged user.
"""
filter_backends = (RecentSearchUserFilter,)
queryset = RecentSearch.objects.all()
serializer_class = RecentSearchSerializer
class APIRecentSearchView(generics.RetrieveAPIView):
"""
Returns the selected recent search details.
"""
filter_backends = (RecentSearchUserFilter,)
queryset = RecentSearch.objects.all()
serializer_class = RecentSearchSerializer
class APISearchView(generics.ListAPIView): class APISearchView(generics.ListAPIView):

View File

@@ -12,7 +12,6 @@ from django.utils.module_loading import import_string
from acls.models import AccessControlList from acls.models import AccessControlList
from permissions import Permission from permissions import Permission
from .models import RecentSearch
from .settings import setting_limit from .settings import setting_limit
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -222,10 +221,6 @@ class SearchModel(object):
self.permission, user, queryset self.permission, user, queryset
) )
RecentSearch.objects.add_query_for_user(
user, query_string, len(result_set)
)
return queryset, result_set, elapsed_time return queryset, result_set, elapsed_time

View File

@@ -1,11 +0,0 @@
from __future__ import unicode_literals
from rest_framework.filters import BaseFilterBackend
class RecentSearchUserFilter(BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
if request.user.is_staff or request.user.is_superuser:
return queryset
else:
return queryset.filter(user=self.request.user)

View File

@@ -1,40 +0,0 @@
import urlparse
from django.contrib.auth.models import AnonymousUser
from django.db import models
from django.utils.http import urlencode
from .settings import setting_recent_count
class RecentSearchManager(models.Manager):
def add_query_for_user(self, user, query_string, hits):
parsed_query = urlparse.parse_qs(
urlencode(dict(query_string.items()))
)
for key, value in parsed_query.items():
parsed_query[key] = ' '.join(value)
if 'q' in query_string:
# Is a simple query
if not query_string['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 parsed_query and not isinstance(user, AnonymousUser):
# If the URL query has at least one variable with a value
new_recent, created = self.model.objects.get_or_create(
user=user, query=urlencode(parsed_query),
defaults={'hits': hits}
)
if not created:
new_recent.hits = hits
new_recent.save()
for recent_to_delete in self.model.objects.filter(user=user)[setting_recent_count.value:]:
recent_to_delete.delete()

View File

@@ -1,75 +0,0 @@
from __future__ import unicode_literals
import urllib
import urlparse
from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.encoding import (
python_2_unicode_compatible, smart_str, smart_unicode
)
from django.utils.translation import ugettext_lazy as _
from .managers import RecentSearchManager
@python_2_unicode_compatible
class RecentSearch(models.Model):
"""
Keeps a list of the [n] most recent search keywords for a given user
"""
user = models.ForeignKey(
settings.AUTH_USER_MODEL, editable=False, verbose_name=_('User')
)
query = models.TextField(editable=False, verbose_name=_('Query'))
datetime_created = models.DateTimeField(
auto_now=True, db_index=True, verbose_name=_('Datetime created')
)
hits = models.IntegerField(editable=False, verbose_name=_('Hits'))
objects = RecentSearchManager()
def __str__(self):
# TODO: Fix this hack, store the search model name in the recent
# search entry
from .classes import SearchModel
document_search = SearchModel.get('documents.Document')
query_dict = urlparse.parse_qs(
urllib.unquote_plus(smart_str(self.query))
)
if self.is_advanced():
# Advanced search
advanced_string = []
for key, value in query_dict.items():
search_field = document_search.get_search_field(key)
advanced_string.append(
'%s: %s' % (
search_field.label, smart_unicode(' '.join(value))
)
)
display_string = ', '.join(advanced_string)
else:
# Is a simple search
display_string = smart_unicode(' '.join(query_dict['q']))
return '%s (%s)' % (display_string, self.hits)
def save(self, *args, **kwargs):
super(RecentSearch, self).save(*args, **kwargs)
def url(self):
view = 'search:results' if self.is_advanced() else 'search:search'
return '%s?%s' % (reverse(view), self.query)
def is_advanced(self):
return 'q' not in urlparse.parse_qs(self.query)
class Meta:
ordering = ('-datetime_created',)
verbose_name = _('Recent search')
verbose_name_plural = _('Recent searches')

View File

@@ -1,19 +0,0 @@
from __future__ import unicode_literals
from rest_framework import serializers
from user_management.serializers import UserSerializer
from .models import RecentSearch
class RecentSearchSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='rest_api:recentsearch-detail'
)
user = UserSerializer()
class Meta:
fields = ('datetime_created', 'hits', 'query', 'url', 'user')
model = RecentSearch
read_only_fields = ('datetime_created', 'hits', 'query', 'user')

View File

@@ -10,7 +10,3 @@ setting_limit = namespace.add_setting(
global_name='SEARCH_LIMIT', default=100, global_name='SEARCH_LIMIT', default=100,
help_text=_('Maximum amount search hits to fetch and display.') help_text=_('Maximum amount search hits to fetch and display.')
) )
setting_recent_count = namespace.add_setting(
global_name='SEARCH_RECENT_COUNT', default=5,
help_text=_('Maximum number of search queries to remember per user.')
)

View File

@@ -2,9 +2,7 @@ from __future__ import unicode_literals
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from .api_views import ( from .api_views import APISearchView
APIRecentSearchListView, APIRecentSearchView, APISearchView
)
from .views import ( from .views import (
AdvancedSearchView, ResultsView, SearchAgainView, SearchView AdvancedSearchView, ResultsView, SearchAgainView, SearchView
) )
@@ -28,13 +26,5 @@ urlpatterns = patterns(
api_urls = patterns( api_urls = patterns(
'', '',
url(
r'^recent_searches/$', APIRecentSearchListView.as_view(),
name='recentsearch-list'
),
url(
r'^recent_searches/(?P<pk>[0-9]+)/$', APIRecentSearchView.as_view(),
name='recentsearch-detail'
),
url(r'^search/$', APISearchView.as_view(), name='search-view'), url(r'^search/$', APISearchView.as_view(), name='search-view'),
) )