From c08eac787349ed9b89c972dda81c3a14c8db1ad6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 14:33:38 +0200 Subject: [PATCH 01/17] Disable pylint check for logging-format-interpolation Otherwise pylint will raise a warning if this is used: logger.debug('Logging value: {value}'.format(value=123)) And recommends using: logger.debug('Logging value: %(value)s', value=123) --- prospector.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prospector.yml b/prospector.yml index 511aeb41eb6..2e3cfac5c96 100644 --- a/prospector.yml +++ b/prospector.yml @@ -22,6 +22,8 @@ pep8: pylint: max-line-length: 100 + disable: + - logging-format-interpolation mccabe: run: false From 28a0dfa8e8408621ff18dff8036a153d6ca1d953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 12:29:04 +0200 Subject: [PATCH 02/17] Resolve linting messages in readthedocs.api.* --- readthedocs/api/base.py | 12 ++++++------ readthedocs/api/utils.py | 4 +--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/readthedocs/api/base.py b/readthedocs/api/base.py index e2a47daf9ac..d3d235b77dc 100644 --- a/readthedocs/api/base.py +++ b/readthedocs/api/base.py @@ -32,7 +32,7 @@ class ProjectResource(ModelResource, SearchMixin): users = fields.ToManyField('readthedocs.api.base.UserResource', 'users') - class Meta: + class Meta(object): include_absolute_url = True allowed_methods = ['get', 'post', 'put'] queryset = Project.objects.api() @@ -121,7 +121,7 @@ def override_urls(self): class VersionResource(ModelResource): project = fields.ForeignKey(ProjectResource, 'project', full=True) - class Meta: + class Meta(object): allowed_methods = ['get', 'put', 'post'] always_return_data = True queryset = Version.objects.api() @@ -212,7 +212,7 @@ class BuildResource(ModelResource): project = fields.ForeignKey('readthedocs.api.base.ProjectResource', 'project') version = fields.ForeignKey('readthedocs.api.base.VersionResource', 'version') - class Meta: + class Meta(object): always_return_data = True include_absolute_url = True allowed_methods = ['get', 'post', 'put'] @@ -246,7 +246,7 @@ def override_urls(self): class FileResource(ModelResource, SearchMixin): project = fields.ForeignKey(ProjectResource, 'project', full=True) - class Meta: + class Meta(object): allowed_methods = ['get', 'post'] queryset = ImportedFile.objects.all() excludes = ['md5', 'slug'] @@ -278,7 +278,7 @@ def get_anchor(self, request, **kwargs): query = request.GET.get('q', '') redis_data = redis_client.keys("*redirects:v4*%s*" % query) - #-2 because http: + # -2 because http: urls = [''.join(data.split(':')[6:]) for data in redis_data if 'http://' in data] object_list = {'objects': urls} @@ -289,7 +289,7 @@ def get_anchor(self, request, **kwargs): class UserResource(ModelResource): - class Meta: + class Meta(object): allowed_methods = ['get'] queryset = User.objects.all() fields = ['username', 'first_name', 'last_name', 'last_login', 'id'] diff --git a/readthedocs/api/utils.py b/readthedocs/api/utils.py index 901938af120..cc4c2810382 100644 --- a/readthedocs/api/utils.py +++ b/readthedocs/api/utils.py @@ -168,9 +168,7 @@ def obj_get_list(self, request=None, *args, **kwargs): except ValueError, e: raise NotFound(ugettext("Invalid resource lookup data provided " "(mismatched type).: %(error)s") - % { - 'error': e - }) + % {'error': e}) class OwnerAuthorization(Authorization): From cca1888c9f8a2c0252aafe47507056927c189920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 16:54:04 +0200 Subject: [PATCH 03/17] Resolve linting messages in readthedocs.bookmarks.* --- readthedocs/bookmarks/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readthedocs/bookmarks/views.py b/readthedocs/bookmarks/views.py index ea86572062f..c83cba9aba1 100644 --- a/readthedocs/bookmarks/views.py +++ b/readthedocs/bookmarks/views.py @@ -13,10 +13,12 @@ from readthedocs.bookmarks.models import Bookmark from readthedocs.projects.models import Project + # These views are CSRF exempt because of Django's CSRF middleware failing here # https://github.com/django/django/blob/stable/1.6.x/django/middleware/csrf.py#L135-L159 # We don't have a valid referrer because we're on a subdomain + class BookmarkExistsView(View): @method_decorator(csrf_exempt) From e17973e5d982b11332907aa5c88516565ff72618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 12:35:40 +0200 Subject: [PATCH 04/17] Resolve linting messages in readthedocs.comments.* --- readthedocs/comments/models.py | 10 +++++++--- readthedocs/comments/session.py | 3 ++- readthedocs/comments/views.py | 14 +++++++++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/readthedocs/comments/models.py b/readthedocs/comments/models.py index f5d4331de3f..7e53ba8003b 100644 --- a/readthedocs/comments/models.py +++ b/readthedocs/comments/models.py @@ -23,13 +23,17 @@ def create(self, *args, **kwargs): return node def from_hash(self, version_slug, page, node_hash, project_slug=None): - snapshots = NodeSnapshot.objects.filter(hash=node_hash, node__version__slug=version_slug, node__page=page) + snapshots = NodeSnapshot.objects.filter(hash=node_hash, + node__version__slug=version_slug, + node__page=page) if project_slug: snapshots = snapshots.filter(node__project__slug=project_slug) if len(snapshots) == 0: - raise DocumentNode.DoesNotExist("No node exists on %s with a current hash of %s" % (page, node_hash)) + raise DocumentNode.DoesNotExist( + "No node exists on %s with a current hash of %s" % ( + page, node_hash)) if len(snapshots) == 1: # If we have found only one snapshot, we know we have the correct node. @@ -176,7 +180,7 @@ def has_been_approved_since_most_recent_node_change(self): return False def is_orphaned(self): - self.node # TODO + raise NotImplementedError('TODO') class DocumentCommentSerializer(serializers.ModelSerializer): diff --git a/readthedocs/comments/session.py b/readthedocs/comments/session.py index e77110bfdf3..bdb074b0325 100644 --- a/readthedocs/comments/session.py +++ b/readthedocs/comments/session.py @@ -1,5 +1,6 @@ from rest_framework.authentication import SessionAuthentication + class UnsafeSessionAuthentication(SessionAuthentication): def authenticate(self, request): @@ -7,6 +8,6 @@ def authenticate(self, request): user = getattr(http_request, 'user', None) if not user or not user.is_active: - return None + return None return (user, None) diff --git a/readthedocs/comments/views.py b/readthedocs/comments/views.py index 05d2cd60994..d00ba666306 100644 --- a/readthedocs/comments/views.py +++ b/readthedocs/comments/views.py @@ -21,8 +21,9 @@ from rest_framework.viewsets import ModelViewSet from sphinx.websupport import WebSupport -from readthedocs.comments.models import DocumentComment, DocumentNode, NodeSnapshot, DocumentCommentSerializer,\ - DocumentNodeSerializer, ModerationActionSerializer +from readthedocs.comments.models import ( + DocumentComment, DocumentNode, NodeSnapshot, DocumentCommentSerializer, + DocumentNodeSerializer, ModerationActionSerializer) from readthedocs.privacy.backend import AdminNotAuthorized from readthedocs.projects.models import Project from readthedocs.restapi.permissions import IsOwner, CommentModeratorOrReadOnly @@ -79,7 +80,6 @@ def attach_comment(request): comment.node = snapshot.node serialized_comment = DocumentCommentSerializer(comment) - serialized_comment.data return Response(serialized_comment.data) @@ -144,7 +144,9 @@ def update_node(request): version = post_data['version'] page = post_data['page'] - node = DocumentNode.objects.from_hash(node_hash=old_hash, project_slug=project, version_slug=version, page=page) + node = DocumentNode.objects.from_hash( + node_hash=old_hash, project_slug=project, version_slug=version, + page=page) node.update_hash(new_hash, commit) return Response(DocumentNodeSerializer(node).data) @@ -168,7 +170,9 @@ def get_queryset(self): queryset = DocumentComment.objects.filter(node=node) except KeyError: - raise ParseError('To get comments by node, you must also provide page, version, and project.') + raise ParseError( + 'To get comments by node, you must also provide page, ' + 'version, and project.') except DocumentNode.DoesNotExist: queryset = DocumentComment.objects.none() elif qp.get('project'): From 593b812540042b7c741b8ad040ecbf651e8bfa0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 14:45:27 +0200 Subject: [PATCH 05/17] Resolve linting messages in readthedocs.core.* --- readthedocs/core/hacks.py | 6 +- .../core/management/commands/archive.py | 1 + .../core/management/commands/build_files.py | 3 +- .../core/management/commands/clean_builds.py | 1 - readthedocs/core/management/commands/pull.py | 1 + .../commands/reindex_elasticsearch.py | 4 +- .../core/management/commands/symlink.py | 1 + readthedocs/core/middleware.py | 13 ++- readthedocs/core/models.py | 1 + readthedocs/core/utils.py | 6 +- readthedocs/core/views.py | 101 ++++++++++-------- 11 files changed, 82 insertions(+), 56 deletions(-) diff --git a/readthedocs/core/hacks.py b/readthedocs/core/hacks.py index c1a0a4722fd..31f35285e45 100644 --- a/readthedocs/core/hacks.py +++ b/readthedocs/core/hacks.py @@ -7,7 +7,7 @@ def find_module(self, name, path): try: return imp.find_module(name, path) except ImportError: - #raise + # raise return FreeLoader() @@ -25,7 +25,7 @@ def __call__(self, *args, **kwargs): return Mock() -class FreeLoader: +class FreeLoader(object): def load_module(self, fullname): return Mock() @@ -37,4 +37,4 @@ def patch_meta_path(): def unpatch_meta_path(): sys.meta_path.remove(FreeLoader._class) - #sys.meta_path = [] + # sys.meta_path = [] diff --git a/readthedocs/core/management/commands/archive.py b/readthedocs/core/management/commands/archive.py index 36ce949634c..8ff1b6a6d4b 100644 --- a/readthedocs/core/management/commands/archive.py +++ b/readthedocs/core/management/commands/archive.py @@ -9,6 +9,7 @@ log = logging.getLogger(__name__) + class Command(BaseCommand): """Custom management command to rebuild documentation for all projects on the site. Invoked via ``./manage.py update_repos``. diff --git a/readthedocs/core/management/commands/build_files.py b/readthedocs/core/management/commands/build_files.py index 9759a3b6e03..607dbca42a6 100644 --- a/readthedocs/core/management/commands/build_files.py +++ b/readthedocs/core/management/commands/build_files.py @@ -29,7 +29,8 @@ def handle(self, *args, **options): Build/index all versions or a single project's version ''' # Delete all existing as a cleanup for any deleted projects. - #ImportedFile.objects.all().delete() + + # ImportedFile.objects.all().delete() project = options['project'] if project: diff --git a/readthedocs/core/management/commands/clean_builds.py b/readthedocs/core/management/commands/clean_builds.py index 90fb7be5a6f..dc3d0c7a48b 100644 --- a/readthedocs/core/management/commands/clean_builds.py +++ b/readthedocs/core/management/commands/clean_builds.py @@ -45,7 +45,6 @@ def handle(self, *args, **options): if latest_build.date > max_date: log.warn('{0} is newer than {1}'.format( latest_build, max_date)) - next path = version.get_build_path() if path is not None: log.info( diff --git a/readthedocs/core/management/commands/pull.py b/readthedocs/core/management/commands/pull.py index 40c5b437800..29fa4b91460 100644 --- a/readthedocs/core/management/commands/pull.py +++ b/readthedocs/core/management/commands/pull.py @@ -10,6 +10,7 @@ log = logging.getLogger(__name__) + class Command(BaseCommand): def handle(self, *args, **options): if len(args): diff --git a/readthedocs/core/management/commands/reindex_elasticsearch.py b/readthedocs/core/management/commands/reindex_elasticsearch.py index 435b059d072..76f25dbd3bd 100644 --- a/readthedocs/core/management/commands/reindex_elasticsearch.py +++ b/readthedocs/core/management/commands/reindex_elasticsearch.py @@ -43,6 +43,8 @@ def handle(self, *args, **options): commit = None try: page_list = parse_json.process_all_json_files(version, build_dir=False) - index_search_request(version=version, page_list=page_list, commit=commit, project_scale=0, page_scale=0, section=False, delete=False) + index_search_request( + version=version, page_list=page_list, commit=commit, + project_scale=0, page_scale=0, section=False, delete=False) except Exception: log.error('Build failed for %s' % version, exc_info=True) diff --git a/readthedocs/core/management/commands/symlink.py b/readthedocs/core/management/commands/symlink.py index c92ece37765..c663dd26284 100644 --- a/readthedocs/core/management/commands/symlink.py +++ b/readthedocs/core/management/commands/symlink.py @@ -9,6 +9,7 @@ log = logging.getLogger(__name__) + class Command(BaseCommand): def handle(self, *args, **options): if len(args): diff --git a/readthedocs/core/middleware.py b/readthedocs/core/middleware.py index c93b50c40e8..275d9318802 100644 --- a/readthedocs/core/middleware.py +++ b/readthedocs/core/middleware.py @@ -48,7 +48,8 @@ def process_request(self, request): request.slug = request.META['HTTP_X_RTD_SLUG'].lower() request.urlconf = 'core.subdomain_urls' request.rtdheader = True - log.debug(LOG_TEMPLATE.format(msg='X-RTD-Slug header detetected: %s' % request.slug, **log_kwargs)) + log.debug(LOG_TEMPLATE.format( + msg='X-RTD-Slug header detetected: %s' % request.slug, **log_kwargs)) except KeyError: # Try header first, then DNS try: @@ -62,10 +63,14 @@ def process_request(self, request): cache.set(host, slug, 60 * 60) # Cache the slug -> host mapping permanently. redis_conn.sadd("rtd_slug:v1:%s" % slug, host) - log.debug(LOG_TEMPLATE.format(msg='CNAME cached: %s->%s' % (slug, host), **log_kwargs)) + log.debug(LOG_TEMPLATE.format( + msg='CNAME cached: %s->%s' % (slug, host), + **log_kwargs)) request.slug = slug request.urlconf = 'core.subdomain_urls' - log.debug(LOG_TEMPLATE.format(msg='CNAME detetected: %s' % request.slug, **log_kwargs)) + log.debug(LOG_TEMPLATE.format( + msg='CNAME detetected: %s' % request.slug, + **log_kwargs)) except: # Some crazy person is CNAMEing to us. 404. log.exception(LOG_TEMPLATE.format(msg='CNAME 404', **log_kwargs)) @@ -78,7 +83,7 @@ def process_request(self, request): log.debug(LOG_TEMPLATE.format(msg='404ing long domain', **log_kwargs)) raise Http404(_('Invalid hostname')) log.debug(LOG_TEMPLATE.format(msg='Allowing long domain name', **log_kwargs)) - #raise Http404(_('Invalid hostname')) + # raise Http404(_('Invalid hostname')) # Normal request. return None diff --git a/readthedocs/core/models.py b/readthedocs/core/models.py index b24d84558e1..55073b55b77 100644 --- a/readthedocs/core/models.py +++ b/readthedocs/core/models.py @@ -10,6 +10,7 @@ log = logging.getLogger(__name__) + class UserProfile (models.Model): """Additional information about a User. """ diff --git a/readthedocs/core/utils.py b/readthedocs/core/utils.py index 794d0d4de80..aa18642cb1a 100644 --- a/readthedocs/core/utils.py +++ b/readthedocs/core/utils.py @@ -75,10 +75,12 @@ def trigger_build(project, version=None, record=True, force=False, basic=False): state='triggered', success=True, ) - update_docs.delay(pk=project.pk, version_pk=version.pk, record=record, force=force, basic=basic, build_pk=build.pk) + update_docs.delay(pk=project.pk, version_pk=version.pk, record=record, + force=force, basic=basic, build_pk=build.pk) else: build = None - update_docs.delay(pk=project.pk, version_pk=version.pk, record=record, force=force, basic=basic) + update_docs.delay(pk=project.pk, version_pk=version.pk, record=record, + force=force, basic=basic) return build diff --git a/readthedocs/core/views.py b/readthedocs/core/views.py index faaa5671ba7..e853d493185 100644 --- a/readthedocs/core/views.py +++ b/readthedocs/core/views.py @@ -16,7 +16,7 @@ from haystack.query import EmptySearchQuerySet from haystack.query import SearchQuerySet -from celery.task.control import inspect +from celery.task.control import inspect # noqa: pylint false positive import stripe from readthedocs.builds.models import Build @@ -56,9 +56,10 @@ def get_context_data(self, **kwargs): latest = [] latest_builds = Build.objects.order_by('-date')[:100] for build in latest_builds: - if (build.project.privacy_level == constants.PUBLIC - and build.project not in latest - and len(latest) < 10): + if ( + build.project.privacy_level == constants.PUBLIC and + build.project not in latest and + len(latest) < 10): latest.append(build.project) context['project_list'] = latest context['featured_list'] = Project.objects.filter(featured=True) @@ -114,7 +115,7 @@ def queue_info(request): def live_builds(request): builds = Build.objects.filter(state='building')[:5] - WEBSOCKET_HOST = getattr(settings, 'WEBSOCKET_HOST', 'localhost:8088') + websocket_host = getattr(settings, 'WEBSOCKET_HOST', 'localhost:8088') count = builds.count() percent = 100 if count > 1: @@ -122,7 +123,7 @@ def live_builds(request): return render_to_response('all_builds.html', {'builds': builds, 'build_percent': percent, - 'WEBSOCKET_HOST': WEBSOCKET_HOST}, + 'websocket_host': websocket_host}, context_instance=RequestContext(request)) @@ -137,7 +138,8 @@ def wipe_version(request, project_slug, version_slug): del_dirs = [version.project.checkout_path( version.slug), version.project.venv_path(version.slug)] for del_dir in del_dirs: - # Support hacky "broadcast" with MULTIPLE_BUILD_SERVERS setting, otherwise put in normal celery queue + # Support hacky "broadcast" with MULTIPLE_BUILD_SERVERS setting, + # otherwise put in normal celery queue for server in getattr(settings, "MULTIPLE_BUILD_SERVERS", ['celery']): log.info('Removing files on %s' % server) remove_dir.apply_async( @@ -199,7 +201,9 @@ def _build_branches(project, branch_list): def _build_url(url, branches): try: - projects = Project.objects.filter(repo__endswith=url) | Project.objects.filter(repo__endswith=url + '.git') + projects = ( + Project.objects.filter(repo__endswith=url) | + Project.objects.filter(repo__endswith=url + '.git')) if not projects.count(): raise NoProjectException() for project in projects: @@ -427,7 +431,8 @@ def serve_docs(request, lang_slug, version_slug, filename, project_slug=None): project_slug = request.slug try: proj = Project.objects.protected(request.user).get(slug=project_slug) - ver = Version.objects.public(request.user).get(project__slug=project_slug, slug=version_slug) + ver = Version.objects.public(request.user).get( + project__slug=project_slug, slug=version_slug) except (Project.DoesNotExist, Version.DoesNotExist): proj = None ver = None @@ -458,16 +463,17 @@ def _serve_docs(request, project, version, filename, lang_slug=None, # This is required because we're forming the filenames outselves instead of # letting the web server do it. elif ( - (project.documentation_type == 'sphinx_htmldir' or project.documentation_type == 'mkdocs') - and "_static" not in filename - and ".css" not in filename - and ".js" not in filename - and ".png" not in filename - and ".jpg" not in filename - and "_images" not in filename - and ".html" not in filename - and "font" not in filename - and not "inv" in filename): + (project.documentation_type == 'sphinx_htmldir' or + project.documentation_type == 'mkdocs') and + "_static" not in filename and + ".css" not in filename and + ".js" not in filename and + ".png" not in filename and + ".jpg" not in filename and + "_images" not in filename and + ".html" not in filename and + "font" not in filename and + "inv" not in filename): filename += "index.html" else: filename = filename.rstrip('/') @@ -541,36 +547,38 @@ def _try_redirect(request, full_path=None): return None if project: - for redirect in project.redirects.all(): - if redirect.redirect_type == 'prefix': - if full_path.startswith(redirect.from_url): - log.debug('Redirecting %s' % redirect) - cut_path = re.sub('^%s' % redirect.from_url, '', full_path) + for project_redirect in project.redirects.all(): + if project_redirect.redirect_type == 'prefix': + if full_path.startswith(project_redirect.from_url): + log.debug('Redirecting %s' % project_redirect) + cut_path = re.sub('^%s' % project_redirect.from_url, '', full_path) to = redirect_filename(project=project, filename=cut_path) return HttpResponseRedirect(to) - elif redirect.redirect_type == 'page': - if full_path == redirect.from_url: - log.debug('Redirecting %s' % redirect) - to = redirect_filename(project=project, filename=redirect.to_url.lstrip('/')) + elif project_redirect.redirect_type == 'page': + if full_path == project_redirect.from_url: + log.debug('Redirecting %s' % project_redirect) + to = redirect_filename( + project=project, + filename=project_redirect.to_url.lstrip('/')) return HttpResponseRedirect(to) - elif redirect.redirect_type == 'exact': - if full_path == redirect.from_url: - log.debug('Redirecting %s' % redirect) - return HttpResponseRedirect(redirect.to_url) + elif project_redirect.redirect_type == 'exact': + if full_path == project_redirect.from_url: + log.debug('Redirecting %s' % project_redirect) + return HttpResponseRedirect(project_redirect.to_url) # Handle full sub-level redirects - if '$rest' in redirect.from_url: - match = redirect.from_url.split('$rest')[0] + if '$rest' in project_redirect.from_url: + match = project_redirect.from_url.split('$rest')[0] if full_path.startswith(match): - cut_path = re.sub('^%s' % match, redirect.to_url, full_path) + cut_path = re.sub('^%s' % match, project_redirect.to_url, full_path) return HttpResponseRedirect(cut_path) - elif redirect.redirect_type == 'sphinx_html': + elif project_redirect.redirect_type == 'sphinx_html': if full_path.endswith('/'): - log.debug('Redirecting %s' % redirect) + log.debug('Redirecting %s' % project_redirect) to = re.sub('/$', '.html', full_path) return HttpResponseRedirect(to) - elif redirect.redirect_type == 'sphinx_htmldir': + elif project_redirect.redirect_type == 'sphinx_htmldir': if full_path.endswith('.html'): - log.debug('Redirecting %s' % redirect) + log.debug('Redirecting %s' % project_redirect) to = re.sub('.html$', '/', full_path) return HttpResponseRedirect(to) return None @@ -589,7 +597,9 @@ def server_error_404(request, template_name='404.html'): return r -def server_helpful_404(request, project_slug=None, lang_slug=None, version_slug=None, filename=None, template_name='404.html'): +def server_helpful_404( + request, project_slug=None, lang_slug=None, version_slug=None, + filename=None, template_name='404.html'): response = _try_redirect(request, full_path=filename) if response: return response @@ -651,8 +661,10 @@ def get_suggestion(project_slug, lang_slug, version_slug, pagename, user): else: # Case #7: Show available translations of the version suggestion['type'] = 'list' - suggestion[ - 'message'] = "Requested page seems not to be translated in requested language. But it's available in these languages." + suggestion['message'] = ( + "Requested page seems not to be translated in " + "requested language. But it's available in these " + "languages.") suggestion['list'] = [] suggestion['list'].append({ 'label': proj.language, @@ -681,8 +693,9 @@ def get_suggestion(project_slug, lang_slug, version_slug, pagename, user): if trans: # requested language is available # Case #6: Show available versions of the translation suggestion['type'] = 'list' - suggestion[ - 'message'] = "Requested version seems not to have been built yet. But these versions are available." + suggestion['message'] = ( + "Requested version seems not to have been built yet. " + "But these versions are available.") suggestion['list'] = [] for v in Version.objects.public(user, trans, True): suggestion['list'].append({ From 6c65964ba5680ea18cf192b9efc34ab212bff9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 13:43:06 +0200 Subject: [PATCH 06/17] Resolve linting messages in readthedocs.doc_builder.* --- readthedocs/doc_builder/backends/mkdocs.py | 47 ++++++++++++---------- readthedocs/doc_builder/backends/sphinx.py | 14 +++++-- readthedocs/doc_builder/base.py | 3 +- readthedocs/doc_builder/environments.py | 1 - readthedocs/doc_builder/loader.py | 8 +++- 5 files changed, 44 insertions(+), 29 deletions(-) diff --git a/readthedocs/doc_builder/backends/mkdocs.py b/readthedocs/doc_builder/backends/mkdocs.py index 97cb2701411..efbc4beeced 100644 --- a/readthedocs/doc_builder/backends/mkdocs.py +++ b/readthedocs/doc_builder/backends/mkdocs.py @@ -23,7 +23,9 @@ class BaseMkdocs(BaseBuilder): def __init__(self, *args, **kwargs): super(BaseMkdocs, self).__init__(*args, **kwargs) - self.old_artifact_path = os.path.join(self.version.project.checkout_path(self.version.slug), self.build_dir) + self.old_artifact_path = os.path.join( + self.version.project.checkout_path(self.version.slug), + self.build_dir) def append_conf(self, **kwargs): """ @@ -46,34 +48,34 @@ def append_conf(self, **kwargs): # Set mkdocs config values - MEDIA_URL = getattr(settings, 'MEDIA_URL', 'https://media.readthedocs.org') + media_url = getattr(settings, 'MEDIA_URL', 'https://media.readthedocs.org') # Mkdocs needs a full domain here because it tries to link to local media files - if not MEDIA_URL.startswith('http'): - MEDIA_URL = 'http://localhost:8000' + MEDIA_URL + if not media_url.startswith('http'): + media_url = 'http://localhost:8000' + media_url if 'extra_javascript' in user_config: user_config['extra_javascript'].append('readthedocs-data.js') user_config['extra_javascript'].append( 'readthedocs-dynamic-include.js') user_config['extra_javascript'].append( - '%sjavascript/readthedocs-doc-embed.js' % MEDIA_URL) + '%sjavascript/readthedocs-doc-embed.js' % media_url) else: user_config['extra_javascript'] = [ 'readthedocs-data.js', 'readthedocs-dynamic-include.js', - '%sjavascript/readthedocs-doc-embed.js' % MEDIA_URL, + '%sjavascript/readthedocs-doc-embed.js' % media_url, ] if 'extra_css' in user_config: user_config['extra_css'].append( - '%s/css/badge_only.css' % MEDIA_URL) + '%s/css/badge_only.css' % media_url) user_config['extra_css'].append( - '%s/css/readthedocs-doc-embed.css' % MEDIA_URL) + '%s/css/readthedocs-doc-embed.css' % media_url) else: user_config['extra_css'] = [ - '%scss/badge_only.css' % MEDIA_URL, - '%scss/readthedocs-doc-embed.css' % MEDIA_URL, + '%scss/badge_only.css' % media_url, + '%scss/readthedocs-doc-embed.css' % media_url, ] # Set our custom theme dir for mkdocs @@ -84,7 +86,8 @@ def append_conf(self, **kwargs): # RTD javascript writing - READTHEDOCS_DATA = { + # Will be available in the JavaScript as READTHEDOCS_DATA. + readthedocs_data = { 'project': self.version.project.slug, 'version': self.version.verbose_name, 'language': self.version.project.language, @@ -96,12 +99,12 @@ def append_conf(self, **kwargs): 'api_host': getattr(settings, 'SLUMBER_API_HOST', 'https://readthedocs.org'), 'commit': self.version.project.vcs_repo(self.version.slug).commit, } - data_json = json.dumps(READTHEDOCS_DATA, indent=4) + data_json = json.dumps(readthedocs_data, indent=4) data_ctx = Context({ 'data_json': data_json, - 'current_version': READTHEDOCS_DATA['version'], - 'slug': READTHEDOCS_DATA['project'], - 'html_theme': READTHEDOCS_DATA['theme'], + 'current_version': readthedocs_data['version'], + 'slug': readthedocs_data['project'], + 'html_theme': readthedocs_data['theme'], 'pagename': None, }) data_string = template_loader.get_template( @@ -127,14 +130,16 @@ def append_conf(self, **kwargs): @restoring_chdir def build(self, **kwargs): checkout_path = self.version.project.checkout_path(self.version.slug) - #site_path = os.path.join(checkout_path, 'site') + # site_path = os.path.join(checkout_path, 'site') os.chdir(checkout_path) # Actual build - build_command = "{command} {builder} --clean --site-dir={build_dir} --theme=readthedocs".format( - command=self.version.project.venv_bin(version=self.version.slug, bin='mkdocs'), - builder=self.builder, - build_dir=self.build_dir, - ) + build_command = ( + "{command} {builder} --clean --site-dir={build_dir} --theme=readthedocs" + .format( + command=self.version.project.venv_bin(version=self.version.slug, bin='mkdocs'), + builder=self.builder, + build_dir=self.build_dir, + )) results = run(build_command, shell=True) return results diff --git a/readthedocs/doc_builder/backends/sphinx.py b/readthedocs/doc_builder/backends/sphinx.py index 549274bd1dc..9cfc53d31c2 100644 --- a/readthedocs/doc_builder/backends/sphinx.py +++ b/readthedocs/doc_builder/backends/sphinx.py @@ -32,7 +32,9 @@ class BaseSphinx(BaseBuilder): def __init__(self, *args, **kwargs): super(BaseSphinx, self).__init__(*args, **kwargs) try: - self.old_artifact_path = os.path.join(self.version.project.conf_dir(self.version.slug), self.sphinx_build_dir) + self.old_artifact_path = os.path.join( + self.version.project.conf_dir(self.version.slug), + self.sphinx_build_dir) except ProjectImportError: docs_dir = self.docs_dir() self.old_artifact_path = os.path.join(docs_dir, self.sphinx_build_dir) @@ -72,11 +74,13 @@ def append_conf(self, **kwargs): conf_py_path = self.version.get_conf_py_path() remote_version = self.version.get_vcs_slug() - github_user, github_repo = version_utils.get_github_username_repo(url=self.version.project.repo) + github_user, github_repo = version_utils.get_github_username_repo( + url=self.version.project.repo) github_version_is_editable = (self.version.type == 'branch') display_github = github_user is not None - bitbucket_user, bitbucket_repo = version_utils.get_bitbucket_username_repo(url=self.version.project.repo) + bitbucket_user, bitbucket_repo = version_utils.get_bitbucket_username_repo( + url=self.version.project.repo) bitbucket_version_is_editable = (self.version.type == 'branch') display_bitbucket = bitbucket_user is not None @@ -261,7 +265,9 @@ def move(self, **kwargs): os.makedirs(self.target) exact = os.path.join(self.old_artifact_path, "%s.pdf" % self.version.project.slug) - exact_upper = os.path.join(self.old_artifact_path, "%s.pdf" % self.version.project.slug.capitalize()) + exact_upper = os.path.join( + self.old_artifact_path, + "%s.pdf" % self.version.project.slug.capitalize()) if self.pdf_file_name and os.path.exists(self.pdf_file_name): from_file = self.pdf_file_name diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index c2625b93c30..0b5eeb9adcf 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -97,7 +97,8 @@ def create_index(self, extension='md', **kwargs): if not os.path.exists(index_filename): readme_filename = os.path.join(docs_dir, 'README.{ext}'.format(ext=extension)) if os.path.exists(readme_filename): - os.system('mv {readme} {index}'.format(index=index_filename, readme=readme_filename)) + os.system('mv {readme} {index}'.format(index=index_filename, + readme=readme_filename)) else: index_file = open(index_filename, 'w+') index_text = """ diff --git a/readthedocs/doc_builder/environments.py b/readthedocs/doc_builder/environments.py index fb27eca67b3..2fc9d982192 100644 --- a/readthedocs/doc_builder/environments.py +++ b/readthedocs/doc_builder/environments.py @@ -12,7 +12,6 @@ from django.conf import settings from rest_framework.renderers import JSONRenderer -from readthedocs.projects.utils import run from readthedocs.restapi.serializers import VersionFullSerializer log = logging.getLogger(__name__) diff --git a/readthedocs/doc_builder/loader.py b/readthedocs/doc_builder/loader.py index 29b8ab167da..29f79f25050 100644 --- a/readthedocs/doc_builder/loader.py +++ b/readthedocs/doc_builder/loader.py @@ -2,8 +2,12 @@ from django.conf import settings # Managers -mkdocs = import_module(getattr(settings, 'MKDOCS_BACKEND', 'readthedocs.doc_builder.backends.mkdocs')) -sphinx = import_module(getattr(settings, 'SPHINX_BACKEND', 'readthedocs.doc_builder.backends.sphinx')) +mkdocs = import_module( + getattr(settings, 'MKDOCS_BACKEND', + 'readthedocs.doc_builder.backends.mkdocs')) +sphinx = import_module( + getattr(settings, 'SPHINX_BACKEND', + 'readthedocs.doc_builder.backends.sphinx')) BUILDER_BY_NAME = { # Possible HTML Builders From e7e21188daba6efe02d44c2cef9c1b48c45c0636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 13:54:13 +0200 Subject: [PATCH 07/17] Resolve linting messages in readthedocs.donate.* --- readthedocs/donate/urls.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/readthedocs/donate/urls.py b/readthedocs/donate/urls.py index 9114ca32d63..97cc3558c0e 100644 --- a/readthedocs/donate/urls.py +++ b/readthedocs/donate/urls.py @@ -1,11 +1,13 @@ from django.conf.urls import url, patterns, include -from . import views +from .views import DonateCreateView +from .views import DonateListView +from .views import DonateSuccessView urlpatterns = patterns( '', - url(r'^$', views.DonateListView.as_view(), name='donate'), - url(r'^contribute/$', views.DonateCreateView.as_view(), name='donate_add'), - url(r'^contribute/thanks$', views.DonateSuccessView.as_view(), name='donate_success'), + url(r'^$', DonateListView.as_view(), name='donate'), + url(r'^contribute/$', DonateCreateView.as_view(), name='donate_add'), + url(r'^contribute/thanks$', DonateSuccessView.as_view(), name='donate_success'), ) From 063ecd4bcaebed9218ca14ac9ca3caa271582500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 17:09:52 +0200 Subject: [PATCH 08/17] Resolve linting messages in readthedocs.gold.* --- readthedocs/gold/models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/readthedocs/gold/models.py b/readthedocs/gold/models.py index 7208ab65f22..c9916bae488 100644 --- a/readthedocs/gold/models.py +++ b/readthedocs/gold/models.py @@ -20,8 +20,7 @@ class GoldUser(models.Model): user = models.ForeignKey('auth.User', verbose_name=_('User'), unique=True, related_name='gold') level = models.CharField(_('Level'), max_length=20, choices=LEVEL_CHOICES, default='supporter') projects = models.ManyToManyField(Project, verbose_name=_('Projects'), - related_name='gold_owners') - + related_name='gold_owners') last_4_digits = models.CharField(max_length=4) stripe_id = models.CharField(max_length=255) From 3b8074193906e85775937db33d409f151ebdb637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 13:56:43 +0200 Subject: [PATCH 09/17] Resolve linting messages in readthedocs.privacy.* --- readthedocs/privacy/backend.py | 4 +- readthedocs/privacy/backends/syncers.py | 52 +++++++++++++------------ readthedocs/privacy/loader.py | 20 +++++++--- 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/readthedocs/privacy/backend.py b/readthedocs/privacy/backend.py index be23162d6e8..bbf701b08c4 100644 --- a/readthedocs/privacy/backend.py +++ b/readthedocs/privacy/backend.py @@ -105,7 +105,8 @@ def _add_user_repos(self, queryset, user=None, *args, **kwargs): return queryset.distinct() def public(self, user=None, project=None, only_active=True, *args, **kwargs): - queryset = self.filter(project__privacy_level=constants.PUBLIC, privacy_level=constants.PUBLIC) + queryset = self.filter(project__privacy_level=constants.PUBLIC, + privacy_level=constants.PUBLIC) if user: queryset = self._add_user_repos(queryset, user) if project: @@ -151,4 +152,3 @@ def is_admin(cls, user, project): class AdminNotAuthorized(ValueError): pass - diff --git a/readthedocs/privacy/backends/syncers.py b/readthedocs/privacy/backends/syncers.py index d1d31544529..88fdc34c09b 100644 --- a/readthedocs/privacy/backends/syncers.py +++ b/readthedocs/privacy/backends/syncers.py @@ -38,12 +38,12 @@ def copy(cls, path, target, file=False, **kwargs): Respects the ``MULTIPLE_APP_SERVERS`` setting when copying. """ - SYNC_USER = getattr(settings, 'SYNC_USER', getpass.getuser()) - MULTIPLE_APP_SERVERS = getattr(settings, 'MULTIPLE_APP_SERVERS', []) - if MULTIPLE_APP_SERVERS: + sync_user = getattr(settings, 'SYNC_USER', getpass.getuser()) + app_servers = getattr(settings, 'MULTIPLE_APP_SERVERS', []) + if app_servers: log.info("Remote Copy %s to %s" % (path, target)) - for server in MULTIPLE_APP_SERVERS: - mkdir_cmd = ("ssh %s@%s mkdir -p %s" % (SYNC_USER, server, target)) + for server in app_servers: + mkdir_cmd = ("ssh %s@%s mkdir -p %s" % (sync_user, server, target)) ret = os.system(mkdir_cmd) if ret != 0: log.info("COPY ERROR to app servers:") @@ -53,13 +53,14 @@ def copy(cls, path, target, file=False, **kwargs): else: slash = "/" # Add a slash when copying directories - sync_cmd = "rsync -e 'ssh -T' -av --delete {path}{slash} {user}@{server}:{target}".format( - path=path, - slash=slash, - user=SYNC_USER, - server=server, - target=target, - ) + sync_cmd = ( + "rsync -e 'ssh -T' -av --delete {path}{slash} {user}@{server}:{target}" + .format( + path=path, + slash=slash, + user=sync_user, + server=server, + target=target)) ret = os.system(sync_cmd) if ret != 0: log.info("COPY ERROR to app servers.") @@ -75,28 +76,29 @@ def copy(cls, path, target, host, file=False, **kwargs): Respects the ``MULTIPLE_APP_SERVERS`` setting when copying. """ - SYNC_USER = getattr(settings, 'SYNC_USER', getpass.getuser()) - MULTIPLE_APP_SERVERS = getattr(settings, 'MULTIPLE_APP_SERVERS', []) + sync_user = getattr(settings, 'SYNC_USER', getpass.getuser()) + app_servers = getattr(settings, 'MULTIPLE_APP_SERVERS', []) if not file: path += "/" log.info("Remote Copy %s to %s" % (path, target)) - for server in MULTIPLE_APP_SERVERS: + for server in app_servers: if not file: mkdir_cmd = "ssh {user}@{server} mkdir -p {target}".format( - user=SYNC_USER, server=server, target=target + user=sync_user, server=server, target=target ) ret = os.system(mkdir_cmd) if ret != 0: log.info("MKDIR ERROR to app servers:") log.info(mkdir_cmd) # Add a slash when copying directories - sync_cmd = "ssh {user}@{server} 'rsync -av --delete {user}@{host}:{path} {target}'".format( - host=host, - path=path, - user=SYNC_USER, - server=server, - target=target, - ) + sync_cmd = ( + "ssh {user}@{server} 'rsync -av --delete {user}@{host}:{path} {target}'" + .format( + host=host, + path=path, + user=sync_user, + server=server, + target=target)) ret = os.system(sync_cmd) if ret != 0: log.info("COPY ERROR to app servers.") @@ -112,7 +114,7 @@ def copy(cls, path, target, host, file=False, **kwargs): Respects the ``MULTIPLE_APP_SERVERS`` setting when copying. """ - SYNC_USER = getattr(settings, 'SYNC_USER', getpass.getuser()) + sync_user = getattr(settings, 'SYNC_USER', getpass.getuser()) if not file: path += "/" log.info("Local Copy %s to %s" % (path, target)) @@ -121,7 +123,7 @@ def copy(cls, path, target, host, file=False, **kwargs): sync_cmd = "rsync -e 'ssh -T' -av --delete {user}@{host}:{path} {target}".format( host=host, path=path, - user=SYNC_USER, + user=sync_user, target=target, ) ret = os.system(sync_cmd) diff --git a/readthedocs/privacy/loader.py b/readthedocs/privacy/loader.py index 691bac6d9ff..0fc5d58008b 100644 --- a/readthedocs/privacy/loader.py +++ b/readthedocs/privacy/loader.py @@ -2,12 +2,22 @@ from django.conf import settings # Managers -ProjectManager = import_by_path(getattr(settings, 'PROJECT_MANAGER', 'readthedocs.privacy.backend.ProjectManager')) -VersionManager = import_by_path(getattr(settings, 'VERSION_MANAGER', 'readthedocs.privacy.backend.VersionManager')) -RelatedProjectManager = import_by_path(getattr(settings, 'RELATED_PROJECT_MANAGER', 'readthedocs.privacy.backend.RelatedProjectManager')) +ProjectManager = import_by_path( + getattr(settings, 'PROJECT_MANAGER', + 'readthedocs.privacy.backend.ProjectManager')) +VersionManager = import_by_path( + getattr(settings, 'VERSION_MANAGER', + 'readthedocs.privacy.backend.VersionManager')) +RelatedProjectManager = import_by_path( + getattr(settings, 'RELATED_PROJECT_MANAGER', + 'readthedocs.privacy.backend.RelatedProjectManager')) # Permissions -AdminPermission = import_by_path(getattr(settings, 'ADMIN_PERMISSION', 'readthedocs.privacy.backend.AdminPermission')) +AdminPermission = import_by_path( + getattr(settings, 'ADMIN_PERMISSION', + 'readthedocs.privacy.backend.AdminPermission')) # Syncers -Syncer = import_by_path(getattr(settings, 'FILE_SYNCER', 'readthedocs.privacy.backends.syncers.LocalSyncer')) +Syncer = import_by_path( + getattr(settings, 'FILE_SYNCER', + 'readthedocs.privacy.backends.syncers.LocalSyncer')) From afcf98ba92f09c632b296abcfb02e7442de12cac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 15:11:18 +0200 Subject: [PATCH 10/17] Resolve linting messages in readthedocs.profiles.* --- readthedocs/profiles/views.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/readthedocs/profiles/views.py b/readthedocs/profiles/views.py index fe1eb23d531..0670ca1fa7d 100644 --- a/readthedocs/profiles/views.py +++ b/readthedocs/profiles/views.py @@ -178,12 +178,11 @@ def edit_profile(request, form_class, success_url=None, for key, value in extra_context.items(): context[key] = callable(value) and value() or value - return render_to_response(template_name, - {'form': form, - 'profile': profile_obj, - 'user': profile_obj.user, - }, - context_instance=context) + return render_to_response(template_name, { + 'form': form, + 'profile': profile_obj, + 'user': profile_obj.user, + }, context_instance=context) edit_profile = login_required(edit_profile) From f85f54ea49ec4fe2fa48eb7ab0d75f533df88850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 17:51:03 +0200 Subject: [PATCH 11/17] Resolve linting messages in readthedocs.projects.* --- .../commands/import_project_from_live.py | 2 -- readthedocs/projects/search_indexes.py | 4 +-- readthedocs/projects/views/private.py | 35 +++++++++++-------- readthedocs/projects/views/public.py | 31 ++++++++++------ 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/readthedocs/projects/management/commands/import_project_from_live.py b/readthedocs/projects/management/commands/import_project_from_live.py index b9565b7e982..700b3153e4f 100644 --- a/readthedocs/projects/management/commands/import_project_from_live.py +++ b/readthedocs/projects/management/commands/import_project_from_live.py @@ -45,7 +45,6 @@ def handle(self, *args, **options): except Project.DoesNotExist: project = Project(slug=slug) - project.python_interpreter copy_attributes = ( 'pub_date', 'modified_date', @@ -86,7 +85,6 @@ def handle(self, *args, **options): for attribute in copy_attributes: setattr(project, attribute, project_data[attribute]) - project.python_interpreter project.user = user1 project.save() if user1: diff --git a/readthedocs/projects/search_indexes.py b/readthedocs/projects/search_indexes.py index a6fb7e663d2..f19f84024f7 100644 --- a/readthedocs/projects/search_indexes.py +++ b/readthedocs/projects/search_indexes.py @@ -34,7 +34,7 @@ def prepare_absolute_url(self, obj): def get_model(self): return Project - def index_queryset(self): + def index_queryset(self, using=None): "Used when the entire index for model is updated." return self.get_model().objects.public() @@ -93,7 +93,7 @@ def prepare_text(self, obj): def get_model(self): return ImportedFile - def index_queryset(self): + def index_queryset(self, using=None): "Used when the entire index for model is updated." return (self.get_model().objects .filter(project__privacy_level=constants.PUBLIC)) diff --git a/readthedocs/projects/views/private.py b/readthedocs/projects/views/private.py index a1ad15363b7..1f9b30d3bcb 100644 --- a/readthedocs/projects/views/private.py +++ b/readthedocs/projects/views/private.py @@ -27,11 +27,11 @@ from readthedocs.core.utils import trigger_build from readthedocs.oauth.models import GithubProject, BitbucketProject from readthedocs.oauth import utils as oauth_utils -from readthedocs.projects.forms import (ProjectBackendForm, ProjectBasicsForm, - ProjectExtraForm, ProjectAdvancedForm, - UpdateProjectForm, SubprojectForm, - build_versions_form, UserForm, EmailHookForm, - TranslationForm, RedirectForm, WebHookForm) +from readthedocs.projects.forms import ( + ProjectBackendForm, ProjectBasicsForm, ProjectExtraForm, + ProjectAdvancedForm, UpdateProjectForm, SubprojectForm, + build_versions_form, UserForm, EmailHookForm, TranslationForm, + RedirectForm, WebHookForm) from readthedocs.projects.models import Project, EmailHook, WebHook from readthedocs.projects import constants, tasks @@ -97,12 +97,11 @@ def project_manage(request, project_slug): @login_required def project_comments_moderation(request, project_slug): project = get_object_or_404(Project.objects.for_admin_user(request.user), - slug=project_slug) + slug=project_slug) return render( request, 'projects/project_comments_moderation.html', - {'project': project} - ) + {'project': project}) @login_required @@ -189,7 +188,9 @@ def project_versions(request, project_slug): @login_required def project_version_detail(request, project_slug, version_slug): project = get_object_or_404(Project.objects.for_admin_user(request.user), slug=project_slug) - version = get_object_or_404(Version.objects.public(user=request.user, project=project, only_active=False), slug=version_slug) + version = get_object_or_404( + Version.objects.public(user=request.user, project=project, only_active=False), + slug=version_slug) form = VersionForm(request.POST or None, instance=version) @@ -260,7 +261,7 @@ def get_form_from_step(self, step): def get_template_names(self): '''Return template names based on step name''' - return 'projects/import_{0}.html'.format(self.steps.current, 'base') + return 'projects/import_{0}.html'.format(self.steps.current) def done(self, form_list, **kwargs): '''Save form data as object instance @@ -277,8 +278,7 @@ def done(self, form_list, **kwargs): for form in form_list[1:]: for (field, value) in form.cleaned_data.items(): setattr(project, field, value) - else: - basic_only = True + basic_only = True project.save() project_import.send(sender=project, request=self.request) trigger_build(project, basic=basic_only) @@ -391,7 +391,9 @@ class AliasList(PrivateViewMixin, ListView): template_name = 'projects/alias_list.html', def get_queryset(self): - self.project = get_object_or_404(Project.objects.for_admin_user(self.request.user), slug=self.kwargs.get('project_slug')) + self.project = get_object_or_404( + Project.objects.for_admin_user(self.request.user), + slug=self.kwargs.get('project_slug')) return self.project.aliases.all() @@ -655,7 +657,9 @@ def project_import_bitbucket(request, sync=False): @login_required def project_version_delete_html(request, project_slug, version_slug): project = get_object_or_404(Project.objects.for_admin_user(request.user), slug=project_slug) - version = get_object_or_404(Version.objects.public(user=request.user, project=project, only_active=False), slug=version_slug) + version = get_object_or_404( + Version.objects.public(user=request.user, project=project, only_active=False), + slug=version_slug) if not version.active: version.built = False @@ -663,4 +667,5 @@ def project_version_delete_html(request, project_slug, version_slug): tasks.clear_artifacts.delay(version.pk) else: raise Http404 - return HttpResponseRedirect(reverse('project_version_list', kwargs={'project_slug': project_slug})) + return HttpResponseRedirect( + reverse('project_version_list', kwargs={'project_slug': project_slug})) diff --git a/readthedocs/projects/views/public.py b/readthedocs/projects/views/public.py index 310a9e1b341..a0f7e91ec02 100644 --- a/readthedocs/projects/views/public.py +++ b/readthedocs/projects/views/public.py @@ -123,20 +123,26 @@ def project_badge(request, project_slug, redirect=True): version_slug = request.GET.get('version', LATEST) style = request.GET.get('style', 'flat') try: - version = Version.objects.public(request.user).get(project__slug=project_slug, slug=version_slug) + version = Version.objects.public(request.user).get( + project__slug=project_slug, slug=version_slug) except Version.DoesNotExist: - url = 'https://img.shields.io/badge/docs-unknown%20version-yellow.svg?style={style}'.format(style=style) + url = ( + 'https://img.shields.io/badge/docs-unknown%20version-yellow.svg?style={style}' + .format(style=style)) return _badge_return(redirect, url) version_builds = version.builds.filter(type='html', state='finished').order_by('-date') if not version_builds.exists(): - url = 'https://img.shields.io/badge/docs-no%20builds-yellow.svg?style={style}'.format(style=style) + url = ( + 'https://img.shields.io/badge/docs-no%20builds-yellow.svg?style={style}' + .format(style=style)) return _badge_return(redirect, url) last_build = version_builds[0] if last_build.success: color = 'brightgreen' else: color = 'red' - url = 'https://img.shields.io/badge/docs-%s-%s.svg?style=%s' % (version.slug.replace('-', '--'), color, style) + url = 'https://img.shields.io/badge/docs-%s-%s.svg?style=%s' % ( + version.slug.replace('-', '--'), color, style) return _badge_return(redirect, url) @@ -184,8 +190,8 @@ def project_download_media(request, project_slug, type, version_slug): queryset = Project.objects.protected(request.user).filter(slug=project_slug) if not queryset.exists(): raise Http404 - DEFAULT_PRIVACY_LEVEL = getattr(settings, 'DEFAULT_PRIVACY_LEVEL', 'public') - if DEFAULT_PRIVACY_LEVEL == 'public' or settings.DEBUG: + privacy_level = getattr(settings, 'DEFAULT_PRIVACY_LEVEL', 'public') + if privacy_level == 'public' or settings.DEBUG: path = os.path.join(settings.MEDIA_URL, type, project_slug, version_slug, '%s.%s' % (project_slug, type.replace('htmlzip', 'zip'))) return HttpResponseRedirect(path) @@ -268,7 +274,7 @@ def version_filter_autocomplete(request, project_slug): context_instance=RequestContext(request), ) else: - raise HttpResponse(status=400) + return HttpResponse(status=400) def file_autocomplete(request, project_slug): @@ -382,8 +388,9 @@ def project_versions(request, project_slug): inactive_filter = VersionSlugFilter(request.GET, queryset=inactive_versions) active_filter = VersionSlugFilter(request.GET, queryset=active_versions) - # If there's a wiped query string, check the string against the versions list and display a success message. - # Deleting directories doesn't know how to fail. :) + # If there's a wiped query string, check the string against the versions + # list and display a success message. Deleting directories doesn't know how + # to fail. :) wiped = request.GET.get('wipe', '') wiped_version = versions.filter(slug=wiped) if wiped and wiped_version.count(): @@ -421,8 +428,10 @@ def project_analytics(request, project_slug): analytics = None if analytics: - page_list = list(reversed(sorted(analytics['page'].items(), key=operator.itemgetter(1)))) - version_list = list(reversed(sorted(analytics['version'].items(), key=operator.itemgetter(1)))) + page_list = list(reversed(sorted(analytics['page'].items(), + key=operator.itemgetter(1)))) + version_list = list(reversed(sorted(analytics['version'].items(), + key=operator.itemgetter(1)))) else: page_list = [] version_list = [] From 937f287226c1b1b477bce52c0cccb0d0567d924a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 15:15:01 +0200 Subject: [PATCH 12/17] Resolve linting messages in readthedocs.oauth.* --- readthedocs/oauth/utils.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/readthedocs/oauth/utils.py b/readthedocs/oauth/utils.py index 3cc4bcc09c3..a2ebc06bbf0 100644 --- a/readthedocs/oauth/utils.py +++ b/readthedocs/oauth/utils.py @@ -13,7 +13,8 @@ def get_oauth_session(user, provider): - tokens = SocialToken.objects.filter(account__user__username=user.username, app__provider=provider) + tokens = SocialToken.objects.filter( + account__user__username=user.username, app__provider=provider) if tokens.exists(): token = tokens[0] else: @@ -85,7 +86,9 @@ def get_token_for_project(project, force_local=False): token = api.project(project.pk).token().get()['token'] else: for user in project.users.all(): - tokens = SocialToken.objects.filter(account__user__username=user.username, app__provider='github') + tokens = SocialToken.objects.filter( + account__user__username=user.username, + app__provider='github') if tokens.exists(): token = tokens[0].token except Exception: @@ -136,7 +139,10 @@ def import_github(user, sync): org_resp = session.get('https://api.github.com/orgs/%s' % org_json['login']) org_obj = make_github_organization(user=user, org_json=org_resp.json()) # Add repos - org_repos_resp = github_paginate(session, 'https://api.github.com/orgs/%s/repos?per_page=100' % org_json['login']) + org_repos_resp = github_paginate( + session, + 'https://api.github.com/orgs/%s/repos?per_page=100' % ( + org_json['login'])) for repo in org_repos_resp: make_github_project(user=user, org=org_obj, privacy=repo_type, repo_json=repo) except TypeError, e: @@ -214,7 +220,10 @@ def import_bitbucket(user, sync): if sync and session: # Get user repos try: - owner_resp = bitbucket_paginate(session, 'https://bitbucket.org/api/2.0/repositories/{owner}'.format(owner=user.username)) + owner_resp = bitbucket_paginate( + session, + 'https://bitbucket.org/api/2.0/repositories/{owner}'.format( + owner=user.username)) process_bitbucket_json(user, owner_resp, repo_type) except TypeError, e: print e @@ -222,7 +231,10 @@ def import_bitbucket(user, sync): # Get org repos resp = session.get('https://bitbucket.org/api/1.0/user/privileges/') for team in resp.json()['teams'].keys(): - org_resp = bitbucket_paginate(session, 'https://bitbucket.org/api/2.0/teams/{team}/repositories'.format(team=team)) + org_resp = bitbucket_paginate( + session, + 'https://bitbucket.org/api/2.0/teams/{team}/repositories'.format( + team=team)) process_bitbucket_json(user, org_resp, repo_type) return session is not None From dc6a2fe2839f0224e4834b6be28a92c4da43feac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 14:50:52 +0200 Subject: [PATCH 13/17] Resolve linting messages in readthedocs.restapi.* --- readthedocs/restapi/permissions.py | 3 --- readthedocs/restapi/urls.py | 12 +++++++++--- readthedocs/restapi/utils.py | 13 +++++++++---- readthedocs/restapi/views/core_views.py | 4 +++- readthedocs/restapi/views/footer_views.py | 17 +++++++++++------ readthedocs/restapi/views/model_views.py | 4 +++- readthedocs/restapi/views/search_views.py | 13 +++++++++---- 7 files changed, 44 insertions(+), 22 deletions(-) diff --git a/readthedocs/restapi/permissions.py b/readthedocs/restapi/permissions.py index 135f239a5ef..855206bf0dd 100644 --- a/readthedocs/restapi/permissions.py +++ b/readthedocs/restapi/permissions.py @@ -43,6 +43,3 @@ def has_object_permission(self, request, view, obj): has_perm = super(APIPermission, self).has_object_permission( request, view, obj) return has_perm or (request.user and request.user.is_staff) - - - diff --git a/readthedocs/restapi/urls.py b/readthedocs/restapi/urls.py index 97f5fd1817a..1aa21988166 100644 --- a/readthedocs/restapi/urls.py +++ b/readthedocs/restapi/urls.py @@ -19,8 +19,14 @@ url(r'docurl/', 'readthedocs.restapi.views.core_views.docurl', name='docurl'), url(r'cname/', 'readthedocs.restapi.views.core_views.cname', name='cname'), url(r'footer_html/', 'readthedocs.restapi.views.footer_views.footer_html', name='footer_html'), - url(r'index_search/', 'readthedocs.restapi.views.search_views.index_search', name='index_search'), + url(r'index_search/', + 'readthedocs.restapi.views.search_views.index_search', + name='index_search'), url(r'search/$', 'readthedocs.restapi.views.search_views.search', name='api_search'), - url(r'search/project/$', 'readthedocs.restapi.views.search_views.project_search', name='api_project_search'), - url(r'search/section/$', 'readthedocs.restapi.views.search_views.section_search', name='api_section_search'), + url(r'search/project/$', + 'readthedocs.restapi.views.search_views.project_search', + name='api_project_search'), + url(r'search/section/$', + 'readthedocs.restapi.views.search_views.section_search', + name='api_section_search'), ) diff --git a/readthedocs/restapi/utils.py b/readthedocs/restapi/utils.py index 1afd5d08422..2cbfe50cece 100644 --- a/readthedocs/restapi/utils.py +++ b/readthedocs/restapi/utils.py @@ -41,7 +41,8 @@ def sync_versions(project, versions, type): type=type, machine=False, ) - log.info("(Sync Versions) Updated Version: [%s=%s] " % (version['verbose_name'], version['identifier'])) + log.info("(Sync Versions) Updated Version: [%s=%s] " % ( + version['verbose_name'], version['identifier'])) else: # New Version created_version = Version.objects.create( @@ -82,7 +83,8 @@ def delete_versions(project, version_data): return set() -def index_search_request(version, page_list, commit, project_scale, page_scale, section=True, delete=True): +def index_search_request(version, page_list, commit, project_scale, page_scale, + section=True, delete=True): log_msg = ' '.join([page['path'] for page in page_list]) log.info("(Server Search) Indexing Pages: %s [%s]" % ( version.project.slug, log_msg)) @@ -90,7 +92,7 @@ def index_search_request(version, page_list, commit, project_scale, page_scale, page_obj = PageIndex() section_obj = SectionIndex() - #tags = [tag.name for tag in project.tags.all()] + # tags = [tag.name for tag in project.tags.all()] project_obj = ProjectIndex() project_obj.index_document(data={ @@ -125,7 +127,10 @@ def index_search_request(version, page_list, commit, project_scale, page_scale, if section: for section in page['sections']: section_index_list.append({ - 'id': hashlib.md5('%s-%s-%s-%s' % (project.slug, version.slug, page['path'], section['id'])).hexdigest(), + 'id': hashlib.md5( + '%s-%s-%s-%s' % (project.slug, version.slug, + page['path'], section['id']) + ).hexdigest(), 'project': project.slug, 'version': version.slug, 'path': page['path'], diff --git a/readthedocs/restapi/views/core_views.py b/readthedocs/restapi/views/core_views.py index bbfe3c0d4b6..d227bae43a8 100644 --- a/readthedocs/restapi/views/core_views.py +++ b/readthedocs/restapi/views/core_views.py @@ -59,7 +59,9 @@ def docurl(request): doc = request.GET.get('doc', 'index') project = get_object_or_404(Project, slug=project) - version = get_object_or_404(Version.objects.public(request.user, project=project, only_active=False), slug=version) + version = get_object_or_404( + Version.objects.public(request.user, project=project, only_active=False), + slug=version) return Response({ 'url': make_document_url(project=project, version=version.slug, page=doc) }) diff --git a/readthedocs/restapi/views/footer_views.py b/readthedocs/restapi/views/footer_views.py index ef8af615252..42e75c79994 100644 --- a/readthedocs/restapi/views/footer_views.py +++ b/readthedocs/restapi/views/footer_views.py @@ -27,11 +27,15 @@ def footer_html(request): new_theme = (theme == "sphinx_rtd_theme") using_theme = (theme == "default") project = get_object_or_404(Project, slug=project_slug) - version = get_object_or_404(Version.objects.public(request.user, project=project, only_active=False), slug=version_slug) + version = get_object_or_404( + Version.objects.public(request.user, project=project, only_active=False), + slug=version_slug) main_project = project.main_language_project or project if page_slug and page_slug != "index": - if main_project.documentation_type == "sphinx_htmldir" or main_project.documentation_type == "mkdocs": + if ( + main_project.documentation_type == "sphinx_htmldir" or + main_project.documentation_type == "mkdocs"): path = page_slug + "/" elif main_project.documentation_type == "sphinx_singlehtml": path = "index.html#document-" + page_slug @@ -41,10 +45,11 @@ def footer_html(request): path = "" if version.type == 'tag' and version.project.has_pdf(version.slug): - print_url = 'https://keminglabs.com/print-the-docs/quote?project={project}&version={version}'.format( - project=project.slug, - version=version.slug, - ) + print_url = ( + 'https://keminglabs.com/print-the-docs/quote?project={project}&version={version}' + .format( + project=project.slug, + version=version.slug)) else: print_url = None diff --git a/readthedocs/restapi/views/model_views.py b/readthedocs/restapi/views/model_views.py index a1e1c90be30..1d083c1484f 100644 --- a/readthedocs/restapi/views/model_views.py +++ b/readthedocs/restapi/views/model_views.py @@ -43,7 +43,9 @@ def valid_versions(self, request, **kwargs): project = get_object_or_404( Project.objects.api(self.request.user), pk=kwargs['pk']) if not project.num_major or not project.num_minor or not project.num_point: - return Response({'error': 'Project does not support point version control'}, status=status.HTTP_400_BAD_REQUEST) + return Response( + {'error': 'Project does not support point version control'}, + status=status.HTTP_400_BAD_REQUEST) version_strings = project.supported_versions() # Disable making old versions inactive for now. # project.versions.exclude(verbose_name__in=version_strings).update(active=False) diff --git a/readthedocs/restapi/views/search_views.py b/readthedocs/restapi/views/search_views.py index 5c3694f215a..f6f9d8b910d 100644 --- a/readthedocs/restapi/views/search_views.py +++ b/readthedocs/restapi/views/search_views.py @@ -32,7 +32,9 @@ def index_search(request): project_scale = 1 page_scale = 1 - utils.index_search_request(version=version, page_list=data['page_list'], commit=commit, project_scale=project_scale, page_scale=page_scale) + utils.index_search_request( + version=version, page_list=data['page_list'], commit=commit, + project_scale=project_scale, page_scale=page_scale) return Response({'indexed': True}) @@ -133,8 +135,9 @@ def section_search(request): Facets ------ - When you search, you will have a ``project`` facet, which includes the number of matching sections per project. - When you search inside a project, the ``path`` facet will show the number of matching sections per page. + When you search, you will have a ``project`` facet, which includes the + number of matching sections per project. When you search inside a project, + the ``path`` facet will show the number of matching sections per page. Possible GET args ----------------- @@ -155,7 +158,9 @@ def section_search(request): """ query = request.GET.get('q', None) if not query: - return Response({'error': 'Search term required. Use the "q" GET arg to search. '}, status=status.HTTP_400_BAD_REQUEST) + return Response( + {'error': 'Search term required. Use the "q" GET arg to search. '}, + status=status.HTTP_400_BAD_REQUEST) project_slug = request.GET.get('project', None) version_slug = request.GET.get('version', LATEST) From 94ff257ca779e3a31a2d155b59030c46c5d31f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 17:29:46 +0200 Subject: [PATCH 14/17] Resolve linting messages in readthedocs.rtd_tests.* --- readthedocs/rtd_tests/base.py | 8 ++++++-- readthedocs/rtd_tests/factories/comments_factories.py | 4 ++-- readthedocs/rtd_tests/factories/general_factories.py | 1 - readthedocs/rtd_tests/fixtures/__init__.py | 1 - readthedocs/rtd_tests/mocks/mock_api.py | 7 ++++--- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/readthedocs/rtd_tests/base.py b/readthedocs/rtd_tests/base.py index 36c4b67f777..2b69fe0391b 100644 --- a/readthedocs/rtd_tests/base.py +++ b/readthedocs/rtd_tests/base.py @@ -61,7 +61,9 @@ def post_step(self, step, **data): self.assertIsNotNone(resp) return resp - def assertWizardResponse(self, response, step=None): + # We use camelCase on purpose here to conform with unittest's naming + # conventions. + def assertWizardResponse(self, response, step=None): # noqa '''Assert successful wizard response''' # Is is the last form if step is None: @@ -84,7 +86,9 @@ def assertWizardResponse(self, response, step=None): self.assertIn('{0}-current_step'.format(self.wizard_class_slug), response.content) - def assertWizardFailure(self, response, field, match=None): + # We use camelCase on purpose here to conform with unittest's naming + # conventions. + def assertWizardFailure(self, response, field, match=None): # noqa '''Assert field threw a validation error response diff --git a/readthedocs/rtd_tests/factories/comments_factories.py b/readthedocs/rtd_tests/factories/comments_factories.py index c6db4f738b9..0ac7088fa08 100644 --- a/readthedocs/rtd_tests/factories/comments_factories.py +++ b/readthedocs/rtd_tests/factories/comments_factories.py @@ -23,12 +23,12 @@ class DocumentNodeFactory(factory.DjangoModelFactory): page = "page-about-nothing" @classmethod - def _create(self, *args, **kwargs): + def _create(cls, *args, **kwargs): if not kwargs.get('hash'): kwargs['hash'] = random.getrandbits(128) if not kwargs.get('commit'): kwargs['commit'] = random.getrandbits(128) - return super(DocumentNodeFactory, self)._create(*args, **kwargs) + return super(DocumentNodeFactory, cls)._create(*args, **kwargs) class DocumentCommentFactory(factory.DjangoModelFactory): diff --git a/readthedocs/rtd_tests/factories/general_factories.py b/readthedocs/rtd_tests/factories/general_factories.py index a3293cffafb..c32fa447662 100644 --- a/readthedocs/rtd_tests/factories/general_factories.py +++ b/readthedocs/rtd_tests/factories/general_factories.py @@ -7,7 +7,6 @@ class UserFactory(factory.Factory): username = factory.Sequence(lambda n: 'joe %s' % n) - @classmethod def _prepare(cls, create, password="password_sentinel", **kwargs): ''' diff --git a/readthedocs/rtd_tests/fixtures/__init__.py b/readthedocs/rtd_tests/fixtures/__init__.py index 3b1d9972821..e69de29bb2d 100644 --- a/readthedocs/rtd_tests/fixtures/__init__.py +++ b/readthedocs/rtd_tests/fixtures/__init__.py @@ -1 +0,0 @@ -#. diff --git a/readthedocs/rtd_tests/mocks/mock_api.py b/readthedocs/rtd_tests/mocks/mock_api.py index 240ad1d62fa..0ec2ddc36c0 100644 --- a/readthedocs/rtd_tests/mocks/mock_api.py +++ b/readthedocs/rtd_tests/mocks/mock_api.py @@ -4,12 +4,13 @@ # Mock tastypi API. + class ProjectData(object): def get(self): return dict() -def mockVersion(repo): +def mock_version(repo): class MockVersion(object): def __init__(self, x=None): pass @@ -65,13 +66,13 @@ def get(self, **kwargs): if 'slug' in kwargs: return {'objects': [version], 'project': project} else: - return version + return version return MockVersion class MockApi(object): def __init__(self, repo): - self.version = mockVersion(repo) + self.version = mock_version(repo) def project(self, x): return ProjectData() From 85c69ced90ed3be502e4ba75dfa93de9dfb85281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 14:53:10 +0200 Subject: [PATCH 15/17] Resolve linting messages in readthedocs.search.* --- readthedocs/search/indexes.py | 9 +++++---- readthedocs/search/parse_json.py | 4 +++- readthedocs/search/utils.py | 13 +++++++++---- readthedocs/search/views.py | 5 ++++- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/readthedocs/search/indexes.py b/readthedocs/search/indexes.py index a34daf9e844..935d0f64ded 100644 --- a/readthedocs/search/indexes.py +++ b/readthedocs/search/indexes.py @@ -169,13 +169,13 @@ def get_mapping(self): """ Returns the mapping for this _index and _type. """ - raise NotImplemented + raise NotImplementedError() - def extract_document(self, pk, obj): + def extract_document(self, data): """ Extracts the Elasticsearch document for this object instance. """ - raise NotImplemented + raise NotImplementedError() def update_aliases(self, new_index, delete=True): """ @@ -295,7 +295,8 @@ def get_mapping(self): def extract_document(self, data): doc = {} - attrs = ('id', 'project', 'title', 'headers', 'version', 'path', 'content', 'taxonomy', 'commit') + attrs = ('id', 'project', 'title', 'headers', 'version', 'path', + 'content', 'taxonomy', 'commit') for attr in attrs: doc[attr] = data.get(attr, '') diff --git a/readthedocs/search/parse_json.py b/readthedocs/search/parse_json.py index ab2be56364c..0dd19456581 100644 --- a/readthedocs/search/parse_json.py +++ b/readthedocs/search/parse_json.py @@ -18,7 +18,8 @@ def process_all_json_files(version, build_dir=True): if build_dir: full_path = version.project.full_json_path(version.slug) else: - full_path = version.project.get_production_media_path(type='json', version_slug=version.slug, include_file=False) + full_path = version.project.get_production_media_path( + type='json', version_slug=version.slug, include_file=False) html_files = [] for root, dirs, files in os.walk(full_path): for filename in fnmatch.filter(files, '*.fjson'): @@ -110,6 +111,7 @@ def process_file(filename): return {'headers': headers, 'content': body_content, 'path': path, 'title': title, 'sections': sections} + def recurse_while_none(element): if element.text is None: return recurse_while_none(element.getchildren()[0]) diff --git a/readthedocs/search/utils.py b/readthedocs/search/utils.py index 34a7bcf2a82..7dcd0abee23 100644 --- a/readthedocs/search/utils.py +++ b/readthedocs/search/utils.py @@ -16,7 +16,8 @@ def process_mkdocs_json(version, build_dir=True): if build_dir: full_path = version.project.full_json_path(version.slug) else: - full_path = version.project.get_production_media_path(type='json', version_slug=version.slug, include_file=False) + full_path = version.project.get_production_media_path( + type='json', version_slug=version.slug, include_file=False) html_files = [] for root, dirs, files in os.walk(full_path): @@ -32,9 +33,13 @@ def process_mkdocs_json(version, build_dir=True): title = sections[0]['title'] except IndexError: title = relative_path - page_list.append( - {'content': html, 'path': relative_path, 'title': title, 'headers': headers, 'sections': sections} - ) + page_list.append({ + 'content': html, + 'path': relative_path, + 'title': title, + 'headers': headers, + 'sections': sections, + }) return page_list diff --git a/readthedocs/search/views.py b/readthedocs/search/views.py index 513d4843356..a610fc6d4bb 100644 --- a/readthedocs/search/views.py +++ b/readthedocs/search/views.py @@ -30,6 +30,7 @@ log = logging.getLogger(__name__) LOG_TEMPLATE = u"(Elastic Search) [{user}:{type}] [{project}:{version}:{language}] {msg}" + def elastic_search(request): """ Use elastic search for global search @@ -50,7 +51,9 @@ def elastic_search(request): if type == 'project': results = search_lib.search_project(request, query, language=language) elif type == 'file': - results = search_lib.search_file(request, query, project=project, version=version, taxonomy=taxonomy) + results = search_lib.search_file(request, query, project=project, + version=version, + taxonomy=taxonomy) if results: # pre and post 1.0 compat From cab98050776448c58b03f65c0cdcd3da77ed2b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 12:23:56 +0200 Subject: [PATCH 16/17] Resolve linting messages in readthedocs.settings.* --- readthedocs/settings/base.py | 23 +++++++++++++---------- readthedocs/settings/onebox.py | 6 +++--- readthedocs/settings/sqlite.py | 6 +++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/readthedocs/settings/base.py b/readthedocs/settings/base.py index 0a57eecc187..f919ea6aa31 100644 --- a/readthedocs/settings/base.py +++ b/readthedocs/settings/base.py @@ -43,7 +43,7 @@ STATIC_ROOT = os.path.join(SITE_ROOT, 'media/static/') STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(SITE_ROOT, 'readthedocs', 'static')] -#STATICFILES_FINDERS = () +# STATICFILES_FINDERS = () CACHES = { 'default': { @@ -56,7 +56,7 @@ LOGIN_REDIRECT_URL = '/dashboard/' FORCE_WWW = False -#APPEND_SLASH = False +# APPEND_SLASH = False # Docker DOCKER_ENABLE = False @@ -87,7 +87,8 @@ USE_I18N = True USE_L10N = True SITE_ID = 1 -SECRET_KEY = 'replace-this-please' + +SECRET_KEY = 'replace-this-please' # noqa: ignore dodgy check ACCOUNT_ACTIVATION_DAYS = 7 @@ -113,7 +114,7 @@ 'readthedocs.core.middleware.SubdomainMiddleware', 'readthedocs.core.middleware.SingleVersionMiddleware', 'corsheaders.middleware.CorsMiddleware', - #'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', + # 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', ) AUTHENTICATION_BACKENDS = ( @@ -130,7 +131,9 @@ ACCOUNT_AUTHENTICATION_METHOD = "username_email" SOCIALACCOUNT_EMAIL_VERIFICATION = "none" -CORS_ORIGIN_REGEX_WHITELIST = ('^http://(.+)\.readthedocs\.org$', '^https://(.+)\.readthedocs\.org$') +CORS_ORIGIN_REGEX_WHITELIST = ( + '^http://(.+)\.readthedocs\.org$', + '^https://(.+)\.readthedocs\.org$') # So people can post to their accounts CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_HEADERS = ( @@ -212,7 +215,7 @@ 'allauth.socialaccount', 'allauth.socialaccount.providers.github', 'allauth.socialaccount.providers.bitbucket', - #'allauth.socialaccount.providers.twitter', + # 'allauth.socialaccount.providers.twitter', ] REST_FRAMEWORK = { @@ -429,10 +432,10 @@ 'propagate': False, }, # Uncomment if you want to see Elasticsearch queries in the console. - #'elasticsearch.trace': { - # 'level': 'DEBUG', - # 'handlers': ['console'], - #}, + # 'elasticsearch.trace': { + # 'level': 'DEBUG', + # 'handlers': ['console'], + # }, # Default handler for everything that we're doing. Hopefully this # doesn't double-print the Django things as well. Not 100% sure how diff --git a/readthedocs/settings/onebox.py b/readthedocs/settings/onebox.py index 38f63d578ea..6eca604ca78 100644 --- a/readthedocs/settings/onebox.py +++ b/readthedocs/settings/onebox.py @@ -44,14 +44,14 @@ SESSION_COOKIE_DOMAIN = None SLUMBER_USERNAME = 'test' -SLUMBER_PASSWORD = 'test' +SLUMBER_PASSWORD = 'test' # noqa SLUMBER_API_HOST = 'http://localhost:8000' WEBSOCKET_HOST = 'localhost:8088' DONT_HIT_DB = False -#PRODUCTION_DOMAIN = 'readthedocs.org' -#USE_SUBDOMAIN = True +# PRODUCTION_DOMAIN = 'readthedocs.org' +# USE_SUBDOMAIN = True if not os.environ.get('DJANGO_SETTINGS_SKIP_LOCAL', False): diff --git a/readthedocs/settings/sqlite.py b/readthedocs/settings/sqlite.py index 5a250c550ff..0db87207c2b 100644 --- a/readthedocs/settings/sqlite.py +++ b/readthedocs/settings/sqlite.py @@ -17,7 +17,7 @@ BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' -#CELERY_ALWAYS_EAGER = False +# CELERY_ALWAYS_EAGER = False SESSION_COOKIE_DOMAIN = None @@ -25,9 +25,9 @@ CACHE_BACKEND = 'dummy://' SLUMBER_USERNAME = 'test' -SLUMBER_PASSWORD = 'test' +SLUMBER_PASSWORD = 'test' # noqa: ignore dodgy check SLUMBER_API_HOST = 'http://localhost:8000' -#GROK_API_HOST = 'http://localhost:5555' +# GROK_API_HOST = 'http://localhost:5555' PRODUCTION_DOMAIN = 'localhost:8000' WEBSOCKET_HOST = 'localhost:8088' From ab2034223c64b68c05c156ebf7b2ab2253507a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 14:54:31 +0200 Subject: [PATCH 17/17] Resolve linting messages in readthedocs.vcs_support.* --- readthedocs/vcs_support/backends/git.py | 8 ++++---- readthedocs/vcs_support/backends/svn.py | 5 +++-- readthedocs/vcs_support/base.py | 10 ++++------ readthedocs/vcs_support/utils.py | 2 +- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/readthedocs/vcs_support/backends/git.py b/readthedocs/vcs_support/backends/git.py index 812f715c2fd..4e138471109 100644 --- a/readthedocs/vcs_support/backends/git.py +++ b/readthedocs/vcs_support/backends/git.py @@ -15,7 +15,6 @@ class Backend(BaseVCS): supports_branches = True fallback_branch = 'master' # default branch - def __init__(self, *args, **kwargs): super(Backend, self).__init__(*args, **kwargs) self.token = kwargs.get('token', None) @@ -30,8 +29,9 @@ def _get_clone_url(self): clone_url = 'https://%s@%s' % (self.token, hacked_url) return clone_url # Don't edit URL because all hosts aren't the same - #else: - #clone_url = 'git://%s' % (hacked_url) + + # else: + # clone_url = 'git://%s' % (hacked_url) return self.repo_url def set_remote_url(self, url): @@ -168,7 +168,7 @@ def checkout(self, identifier=None): identifier = self.find_ref(identifier) - #Checkout the correct identifier for this branch. + # Checkout the correct identifier for this branch. code, out, err = self.checkout_revision(identifier) if code != 0: return code, out, err diff --git a/readthedocs/vcs_support/backends/svn.py b/readthedocs/vcs_support/backends/svn.py index 7d87452f413..d125a332a92 100644 --- a/readthedocs/vcs_support/backends/svn.py +++ b/readthedocs/vcs_support/backends/svn.py @@ -37,8 +37,9 @@ def up(self): ("Failed to get code from '%s' (svn revert): %s" % (self.repo_url, retcode)) ) - retcode, out, err = self.run('svn', 'up', '--accept', 'theirs-full', - '--trust-server-cert', '--non-interactive') + retcode, out, err = self.run( + 'svn', 'up', '--accept', 'theirs-full', + '--trust-server-cert', '--non-interactive') if retcode != 0: raise ProjectImportError( "Failed to get code from '%s' (svn up): %s" % (self.repo_url, diff --git a/readthedocs/vcs_support/base.py b/readthedocs/vcs_support/base.py index fb3c7f7959b..4c430c0b43e 100644 --- a/readthedocs/vcs_support/base.py +++ b/readthedocs/vcs_support/base.py @@ -81,9 +81,9 @@ class BaseVCS(BaseCLI): supports_tags = False # Whether this VCS supports tags or not. supports_branches = False # Whether this VCS supports branches or not. - #========================================================================== + # ========================================================================= # General methods - #========================================================================== + # ========================================================================= def __init__(self, project, version, **kwargs): self.default_branch = project.default_branch @@ -107,11 +107,11 @@ def update(self): """ self.check_working_dir() - #========================================================================== + # ========================================================================= # Tag / Branch related methods # These methods only apply if supports_tags = True and/or # support_branches = True - #========================================================================== + # ========================================================================= @property def tags(self): @@ -129,7 +129,6 @@ def branches(self): """ raise NotImplementedError - @property def commit(self): """ @@ -137,7 +136,6 @@ def commit(self): """ raise NotImplementedError - def checkout(self, identifier=None): """ Set the state to the given identifier. diff --git a/readthedocs/vcs_support/utils.py b/readthedocs/vcs_support/utils.py index 7794183f9fe..de2e2bd09c5 100644 --- a/readthedocs/vcs_support/utils.py +++ b/readthedocs/vcs_support/utils.py @@ -5,6 +5,7 @@ log = logging.getLogger(__name__) + class LockTimeout(Exception): pass @@ -94,4 +95,3 @@ def __exit__(self, exc_type, exc_val, exc_tb): except (IOError, OSError): log.error("Lock (%s): Failed to release, ignoring..." % self.name, exc_info=True) -