Skip to content

Commit

Permalink
update search user api
Browse files Browse the repository at this point in the history
use search_emailusers_in_list to optimize database performance
  • Loading branch information
imwhatiam committed Nov 21, 2018
1 parent b40b655 commit 496b1c9
Showing 1 changed file with 19 additions and 9 deletions.
28 changes: 19 additions & 9 deletions seahub/api2/endpoints/search_user.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright (c) 2012-2016 Seafile Ltd.
import os
import sys
import json
import logging

from django.db.models import Q
Expand Down Expand Up @@ -122,14 +123,14 @@ def get(self, request, format=None):
email_list = {}.fromkeys(email_list).keys()

email_result = []

# remove nonexistent or inactive user
for email in email_list:
try:
user = User.objects.get(email=email)
if user.is_active:
email_result.append(email)
except User.DoesNotExist:
continue
email_list_json = json.dumps(email_list)
user_obj_list = ccnet_api.get_emailusers_in_list('DB', email_list_json) + \
ccnet_api.get_emailusers_in_list('LDAP', email_list_json)
for user_obj in user_obj_list:
if user_obj.is_active:
email_result.append(user_obj.email)

if django_settings.ENABLE_ADDRESSBOOK_OPT_IN:
# get users who has setted to show in address book
Expand Down Expand Up @@ -177,6 +178,9 @@ def format_searched_user_result(request, users, size):
return results

def search_user_from_ccnet(q):
""" Return 10 items at most.
"""

users = []

db_users = ccnet_api.search_emailusers('DB', q, 0, 10)
Expand All @@ -200,10 +204,12 @@ def search_user_from_ccnet(q):
return email_list

def search_user_from_profile(q):
""" Return 10 items at most.
"""
# 'nickname__icontains' for search by nickname
# 'contact_email__icontains' for search by contact email
users = Profile.objects.filter(Q(nickname__icontains=q) | \
Q(contact_email__icontains=q)).values('user')
Q(contact_email__icontains=q)).values('user')[:10]

email_list = []
for user in users:
Expand All @@ -212,9 +218,11 @@ def search_user_from_profile(q):
return email_list

def search_user_from_profile_with_limits(q, limited_emails):
""" Return 10 items at most.
"""
# search within limited_emails
users = Profile.objects.filter(Q(user__in=limited_emails) &
(Q(nickname__icontains=q) | Q(contact_email__icontains=q))).values('user')
(Q(nickname__icontains=q) | Q(contact_email__icontains=q))).values('user')[:10]

email_list = []
for user in users:
Expand All @@ -223,6 +231,8 @@ def search_user_from_profile_with_limits(q, limited_emails):
return email_list

def search_user_when_global_address_book_disabled(request, q):
""" Return 10 items at most.
"""

email_list = []
username = request.user.username
Expand Down

0 comments on commit 496b1c9

Please sign in to comment.