Skip to content

Commit 41e8c8d

Browse files
authored
Merge pull request #2938 from rtfd/restapi-linting-less
Fix linting problems with restapi application
2 parents 0f6361b + caed5bb commit 41e8c8d

13 files changed

+47
-27
lines changed

prospector-more.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ inherits: prospector
22

33
strictness: medium
44

5-
ignore-paths:
6-
- restapi/
7-
85
pylint:
96
options:
107
docstring-min-length: 20

readthedocs/restapi/client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Simple client to access our API with Slumber credentials."""
12
import logging
23

34
from slumber import API, serialize

readthedocs/restapi/permissions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Defines access permissions for the API."""
12
from rest_framework import permissions
23
from readthedocs.privacy.backend import AdminPermission
34

readthedocs/restapi/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Defines serializers for each of our models."""
12
from rest_framework import serializers
23

34
from readthedocs.builds.models import Build, BuildCommandResult, Version

readthedocs/restapi/signals.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""We define custom Django signals to trigger when a footer is rendered."""
12
import django.dispatch
23

34
footer_response = django.dispatch.Signal(

readthedocs/restapi/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Define routes between URL paths and views/endpoints."""
12
from django.conf.urls import url, include
23

34
from rest_framework import routers

readthedocs/restapi/utils.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1+
"""Utility functions that are used by both views and celery tasks."""
12
import hashlib
23
import logging
34

4-
import requests
5-
65
from readthedocs.builds.constants import NON_REPOSITORY_VERSIONS
76
from readthedocs.builds.models import Version
87
from readthedocs.search.indexes import PageIndex, ProjectIndex, SectionIndex
98

109
log = logging.getLogger(__name__)
1110

1211

13-
def sync_versions(project, versions, type):
12+
def sync_versions(project, versions, type): # pylint: disable=redefined-builtin
1413
"""Update the database with the current versions from the repository."""
1514
# Bookkeeping for keeping tag/branch identifies correct
1615
verbose_names = [v['verbose_name'] for v in versions]
@@ -39,8 +38,8 @@ def sync_versions(project, versions, type):
3938
type=type,
4039
machine=False,
4140
)
42-
log.info("(Sync Versions) Updated Version: [%s=%s] " % (
43-
version['verbose_name'], version['identifier']))
41+
log.info("(Sync Versions) Updated Version: [%s=%s] ",
42+
version['verbose_name'], version['identifier'])
4443
else:
4544
# New Version
4645
created_version = Version.objects.create(
@@ -51,7 +50,7 @@ def sync_versions(project, versions, type):
5150
)
5251
added.add(created_version.slug)
5352
if added:
54-
log.info("(Sync Versions) Added Versions: [%s] " % ' '.join(added))
53+
log.info("(Sync Versions) Added Versions: [%s] ", ' '.join(added))
5554
return added
5655

5756

@@ -72,7 +71,7 @@ def delete_versions(project, version_data):
7271

7372
if to_delete_qs.count():
7473
ret_val = {obj.slug for obj in to_delete_qs}
75-
log.info("(Sync Versions) Deleted Versions: [%s]" % ' '.join(ret_val))
74+
log.info("(Sync Versions) Deleted Versions: [%s]", ' '.join(ret_val))
7675
to_delete_qs.delete()
7776
return ret_val
7877
else:
@@ -86,6 +85,8 @@ def index_search_request(version, page_list, commit, project_scale, page_scale,
8685
In order to keep sub-projects all indexed on the same shard, indexes will be
8786
updated using the parent project's slug as the routing value.
8887
"""
88+
# TODO refactor this function
89+
# pylint: disable=too-many-locals
8990
project = version.project
9091

9192
log_msg = ' '.join([page['path'] for page in page_list])
@@ -112,7 +113,7 @@ def index_search_request(version, page_list, commit, project_scale, page_scale,
112113
routes = [project.slug]
113114
routes.extend([p.parent.slug for p in project.superprojects.all()])
114115
for page in page_list:
115-
log.debug("Indexing page: %s:%s" % (project.slug, page['path']))
116+
log.debug("Indexing page: %s:%s", project.slug, page['path'])
116117
page_id = (hashlib
117118
.md5('-'.join([project.slug, version.slug, page['path']]))
118119
.hexdigest())
@@ -129,18 +130,18 @@ def index_search_request(version, page_list, commit, project_scale, page_scale,
129130
'weight': page_scale + project_scale,
130131
})
131132
if section:
132-
for section in page['sections']:
133+
for sect in page['sections']:
133134
section_index_list.append({
134135
'id': (hashlib
135136
.md5('-'.join([project.slug, version.slug,
136-
page['path'], section['id']]))
137+
page['path'], sect['id']]))
137138
.hexdigest()),
138139
'project': project.slug,
139140
'version': version.slug,
140141
'path': page['path'],
141-
'page_id': section['id'],
142-
'title': section['title'],
143-
'content': section['content'],
142+
'page_id': sect['id'],
143+
'title': sect['title'],
144+
'content': sect['content'],
144145
'weight': page_scale,
145146
})
146147
for route in routes:

readthedocs/restapi/views/core_views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Utility endpoints relating to canonical urls, embedded content, etc."""
12
from rest_framework import decorators, permissions, status
23
from rest_framework.renderers import JSONRenderer
34
from rest_framework.response import Response

readthedocs/restapi/views/footer_views.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Endpoint to generate footer HTML."""
12
from django.shortcuts import get_object_or_404
23
from django.template import RequestContext, loader as template_loader
34
from django.conf import settings
@@ -18,6 +19,11 @@
1819

1920

2021
def get_version_compare_data(project, base_version=None):
22+
"""Retrieve metadata about the highest version available for this project.
23+
24+
:param base_version: We assert whether or not the base_version is also the
25+
highest version in the resulting "is_highest" value.
26+
"""
2127
highest_version_obj, highest_version_comparable = highest_version(
2228
project.versions.public().filter(active=True))
2329
ret_val = {
@@ -48,6 +54,9 @@ def get_version_compare_data(project, base_version=None):
4854
@decorators.permission_classes((permissions.AllowAny,))
4955
@decorators.renderer_classes((JSONRenderer, JSONPRenderer))
5056
def footer_html(request):
57+
"""Render and return footer markup."""
58+
# TODO refactor this function
59+
# pylint: disable=too-many-locals
5160
project_slug = request.GET.get('project', None)
5261
version_slug = request.GET.get('version', None)
5362
page_slug = request.GET.get('page', None)

readthedocs/restapi/views/integrations.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1+
"""Endpoints integrating with Github, Bitbucket, and other webhooks."""
12
import json
23
import logging
34

45
from rest_framework import permissions
56
from rest_framework.views import APIView
67
from rest_framework.renderers import JSONRenderer
78
from rest_framework.response import Response
8-
from rest_framework.exceptions import APIException, ParseError, NotFound
9+
from rest_framework.exceptions import ParseError, NotFound
910

1011
from django.shortcuts import get_object_or_404
11-
from django.http import Http404
1212

1313
from readthedocs.core.views.hooks import build_branches
1414
from readthedocs.core.signals import (webhook_github, webhook_bitbucket,
@@ -27,12 +27,14 @@
2727

2828
class WebhookMixin(object):
2929

30+
"""Base class for Webhook mixins."""
31+
3032
permission_classes = (permissions.AllowAny,)
3133
renderer_classes = (JSONRenderer,)
3234
integration = None
3335
integration_type = None
3436

35-
def post(self, request, project_slug, format=None):
37+
def post(self, request, project_slug):
3638
"""Set up webhook post view with request and project objects"""
3739
self.request = request
3840
self.project = None

readthedocs/restapi/views/model_views.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Endpoints for listing Projects, Versions, Builds, etc."""
12
import logging
23

34
from django.shortcuts import get_object_or_404
@@ -12,7 +13,6 @@
1213
from readthedocs.core.utils import trigger_build
1314
from readthedocs.oauth.services import GitHubService, registry
1415
from readthedocs.oauth.models import RemoteOrganization, RemoteRepository
15-
from readthedocs.builds.constants import STABLE
1616
from readthedocs.projects.models import Project, EmailHook, Domain
1717
from readthedocs.projects.version_handling import determine_stable_version
1818

@@ -29,6 +29,9 @@
2929

3030

3131
class ProjectViewSet(viewsets.ModelViewSet):
32+
33+
"""List, filter, etc. Projects."""
34+
3235
permission_classes = [APIPermission]
3336
renderer_classes = (JSONRenderer,)
3437
serializer_class = ProjectSerializer
@@ -44,7 +47,7 @@ def get_queryset(self):
4447
def valid_versions(self, request, **kwargs):
4548
"""Maintain state of versions that are wanted."""
4649
project = get_object_or_404(
47-
Project.objects.api(self.request.user), pk=kwargs['pk'])
50+
Project.objects.api(request.user), pk=kwargs['pk'])
4851
if not project.num_major or not project.num_minor or not project.num_point:
4952
return Response(
5053
{'error': 'Project does not support point version control'},
@@ -59,7 +62,7 @@ def valid_versions(self, request, **kwargs):
5962
})
6063

6164
@detail_route()
62-
def translations(self, request, pk, **kwargs):
65+
def translations(self, *_, **__):
6366
translations = self.get_object().translations.all()
6467
return Response({
6568
'translations': ProjectSerializer(translations, many=True).data
@@ -68,7 +71,7 @@ def translations(self, request, pk, **kwargs):
6871
@detail_route()
6972
def subprojects(self, request, **kwargs):
7073
project = get_object_or_404(
71-
Project.objects.api(self.request.user), pk=kwargs['pk'])
74+
Project.objects.api(request.user), pk=kwargs['pk'])
7275
rels = project.subprojects.all()
7376
children = [rel.child for rel in rels]
7477
return Response({
@@ -78,7 +81,7 @@ def subprojects(self, request, **kwargs):
7881
@decorators.detail_route(permission_classes=[permissions.IsAdminUser])
7982
def token(self, request, **kwargs):
8083
project = get_object_or_404(
81-
Project.objects.api(self.request.user), pk=kwargs['pk'])
84+
Project.objects.api(request.user), pk=kwargs['pk'])
8285
token = GitHubService.get_token_for_project(project, force_local=True)
8386
return Response({
8487
'token': token
@@ -87,7 +90,7 @@ def token(self, request, **kwargs):
8790
@decorators.detail_route()
8891
def canonical_url(self, request, **kwargs):
8992
project = get_object_or_404(
90-
Project.objects.api(self.request.user), pk=kwargs['pk'])
93+
Project.objects.api(request.user), pk=kwargs['pk'])
9194
return Response({
9295
'url': project.get_docs_url()
9396
})
@@ -100,7 +103,7 @@ def sync_versions(self, request, **kwargs):
100103
Returns the identifiers for the versions that have been deleted.
101104
"""
102105
project = get_object_or_404(
103-
Project.objects.api(self.request.user), pk=kwargs['pk'])
106+
Project.objects.api(request.user), pk=kwargs['pk'])
104107

105108
# If the currently highest non-prerelease version is active, then make
106109
# the new latest version active as well.
@@ -124,7 +127,7 @@ def sync_versions(self, request, **kwargs):
124127
added_versions.update(ret_set)
125128
deleted_versions = api_utils.delete_versions(project, data)
126129
except Exception, e:
127-
log.exception("Sync Versions Error: %s" % e.message)
130+
log.exception("Sync Versions Error: %s", e.message)
128131
return Response({'error': e.message}, status=status.HTTP_400_BAD_REQUEST)
129132

130133
promoted_version = project.update_stable_version()

readthedocs/restapi/views/search_views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Endpoints related to searching through projects, sections, etc."""
12
import logging
23

34
from rest_framework import decorators, permissions, status

readthedocs/restapi/views/task_views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""Endpoints relating to task/job status, etc."""
12
import logging
23

34
from django.core.urlresolvers import reverse

0 commit comments

Comments
 (0)