Skip to content

Commit

Permalink
fixing python3 compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
safwanrahman committed Jul 16, 2018
1 parent f8d5e7f commit d30bac3
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 38 deletions.
26 changes: 8 additions & 18 deletions readthedocs/search/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from readthedocs.search.filters import SearchFilterBackend
from readthedocs.search.pagination import SearchPagination
from readthedocs.search.serializers import PageSearchSerializer
from readthedocs.search.utils import get_project_list_or_404


class PageSearchAPIView(generics.ListAPIView):
Expand Down Expand Up @@ -41,27 +42,16 @@ def validate_query_params(self):

def get_serializer_context(self):
context = super(PageSearchAPIView, self).get_serializer_context()
context['projects_info'] = self.get_projects_info()
context['projects_url'] = self.get_all_projects_url()
return context

def _get_all_projects(self):
"""Return list of project and its subprojects."""
project_slug = self.request.query_params.get('project')
queryset = Project.objects.api(self.request.user).only('slug')

project = generics.get_object_or_404(queryset, slug=project_slug)
subprojects = queryset.filter(superprojects__parent_id=project.id)

project_list = list(subprojects) + [project]
return project_list

def get_projects_info(self):
def get_all_projects_url(self):
version_slug = self.request.query_params.get('version')
all_projects = self._get_all_projects()
projects_info = {}
project_slug = self.request.query_params.get('project')
all_projects = get_project_list_or_404(project_slug=project_slug, user=self.request.user)
projects_url = {}

for project in all_projects:
data = {'docs_url': project.get_docs_url(version_slug=version_slug)}
projects_info[project.slug] = data
projects_url[project.slug] = project.get_docs_url(version_slug=version_slug)

return projects_info
return projects_url
4 changes: 2 additions & 2 deletions readthedocs/search/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ def filter_queryset(self, request, queryset, view):
# So change the variable name
es_search = queryset
version_slug = request.query_params.get('version')
projects_info = view.get_projects_info()
project_slug_list = projects_info.keys()
projects_info = view.get_all_projects_url()
project_slug_list = list(projects_info.keys())
# Elasticsearch ``terms`` query can take multiple values as list,
# while ``term`` query takes single value.
filtered_es_search = (es_search.filter('terms', project=project_slug_list)
Expand Down
7 changes: 3 additions & 4 deletions readthedocs/search/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ class PageSearchSerializer(serializers.Serializer):
highlight = serializers.SerializerMethodField()

def get_link(self, obj):
projects_info = self.context.get('projects_info')
if projects_info:
project_data = projects_info[obj.project]
docs_url = project_data['docs_url']
projects_url = self.context.get('projects_url')
if projects_url:
docs_url = projects_url[obj.project]
return docs_url + obj.path

def get_highlight(self, obj):
Expand Down
17 changes: 6 additions & 11 deletions readthedocs/search/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,17 +312,12 @@ def parse_sections(documentation_type, content):

# TODO: Rewrite all the views using this in Class Based View,
# and move this function to a mixin
def get_project_slug_list_or_404(project_slug, user):
"""
Return list of subproject's slug including own slug.
If the project is not available to user, redirect to 404
"""
def get_project_list_or_404(project_slug, user):
"""Return list of project and its subprojects."""
queryset = Project.objects.api(user).only('slug')
project = get_object_or_404(queryset, slug=project_slug)

subprojects_slug = (queryset.filter(superprojects__parent_id=project.id)
.values_list('slug', flat=True))
project = get_object_or_404(queryset, slug=project_slug)
subprojects = queryset.filter(superprojects__parent_id=project.id)

slug_list = [project.slug] + list(subprojects_slug)
return slug_list
project_list = list(subprojects) + [project]
return project_list
7 changes: 4 additions & 3 deletions readthedocs/search/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from readthedocs.projects.models import Project
from readthedocs.search import lib as search_lib
from readthedocs.search.documents import ProjectDocument, PageDocument
from readthedocs.search.utils import get_project_slug_list_or_404
from readthedocs.search.utils import get_project_list_or_404

log = logging.getLogger(__name__)
LOG_TEMPLATE = u'(Elastic Search) [{user}:{type}] [{project}:{version}:{language}] {msg}'
Expand Down Expand Up @@ -55,8 +55,9 @@ def elastic_search(request):
elif user_input.type == 'file':
kwargs = {}
if user_input.project:
project_slug_list = get_project_slug_list_or_404(project_slug=user_input.project,
user=request.user)
projects_list = get_project_list_or_404(project_slug=user_input.project,
user=request.user)
project_slug_list = [project.slug for project in projects_list]
kwargs['projects_list'] = project_slug_list
if user_input.version:
kwargs['versions_list'] = user_input.version
Expand Down

0 comments on commit d30bac3

Please sign in to comment.