parent
f201d150dd
commit
64116bc541
|
@ -1,5 +1,6 @@
|
|||
"""API resources"""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
import json
|
||||
import redis
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Utility classes for api module"""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
|
||||
from django.core.paginator import Paginator, InvalidPage
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Models for the bookmarks app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils.translation import ugettext_lazy as _, ugettext
|
||||
|
@ -24,7 +25,7 @@ class Bookmark(models.Model):
|
|||
date = models.DateTimeField(_('Date'), auto_now_add=True)
|
||||
url = models.CharField(_('URL'), max_length=255, null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ['-date']
|
||||
unique_together = ('user', 'project', 'version', 'page')
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Django forms for the builds app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django import forms
|
||||
|
||||
from readthedocs.builds.models import VersionAlias, Version
|
||||
|
@ -10,7 +11,7 @@ from readthedocs.core.utils import trigger_build
|
|||
|
||||
class AliasForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = VersionAlias
|
||||
fields = (
|
||||
'project',
|
||||
|
@ -28,7 +29,7 @@ class AliasForm(forms.ModelForm):
|
|||
|
||||
class VersionForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Version
|
||||
fields = ['active', 'privacy_level', 'tags']
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Models for the builds app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
import re
|
||||
import os.path
|
||||
|
@ -78,7 +79,7 @@ class Version(models.Model):
|
|||
|
||||
objects = VersionManager.from_queryset(VersionQuerySet)()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
unique_together = [('project', 'slug')]
|
||||
ordering = ['-verbose_name']
|
||||
permissions = (
|
||||
|
@ -349,7 +350,7 @@ class Build(models.Model):
|
|||
|
||||
objects = BuildQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ['-date']
|
||||
get_latest_by = 'date'
|
||||
index_together = [
|
||||
|
@ -411,7 +412,7 @@ class BuildCommandResult(BuildCommandResultMixin, models.Model):
|
|||
start_time = models.DateTimeField(_('Start time'))
|
||||
end_time = models.DateTimeField(_('End time'))
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ['start_time']
|
||||
get_latest_by = 'start_time'
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ another number would be confusing.
|
|||
"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import range
|
||||
import math
|
||||
import re
|
||||
import string
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Views for builds app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Utility to purge MaxCDN files, if configured."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import range
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
"""Models for the comments app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
@ -110,7 +112,7 @@ class DocumentNodeSerializer(serializers.ModelSerializer):
|
|||
last_commit = serializers.CharField(source='latest_commit')
|
||||
snapshots_count = serializers.CharField(source='snapshots.count')
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = DocumentNode
|
||||
exclude = ('')
|
||||
|
||||
|
@ -121,7 +123,7 @@ class NodeSnapshot(models.Model):
|
|||
node = models.ForeignKey(DocumentNode, related_name="snapshots")
|
||||
commit = models.CharField(max_length=255)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
get_latest_by = 'date'
|
||||
# Snapshots are *almost* unique_together just for node and hash,
|
||||
# but for the possibility that a node's hash might change and then change back
|
||||
|
@ -194,7 +196,7 @@ class DocumentComment(models.Model):
|
|||
class DocumentCommentSerializer(serializers.ModelSerializer):
|
||||
node = DocumentNodeSerializer()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = DocumentComment
|
||||
fields = ('date', 'user', 'text', 'node')
|
||||
|
||||
|
@ -225,7 +227,7 @@ class ModerationAction(models.Model):
|
|||
def __unicode__(self):
|
||||
return "%s - %s" % (self.user_id, self.get_decision_display())
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
get_latest_by = 'date'
|
||||
|
||||
def approved(self):
|
||||
|
@ -234,6 +236,6 @@ class ModerationAction(models.Model):
|
|||
|
||||
class ModerationActionSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = ModerationAction
|
||||
exclude = ()
|
||||
|
|
|
@ -34,7 +34,7 @@ class AccountAdapter(DefaultAccountAdapter):
|
|||
# Allauth sends some additional data in the context, remove it if the
|
||||
# pieces can't be pickled
|
||||
removed_keys = []
|
||||
for key in context.keys():
|
||||
for key in list(context.keys()):
|
||||
try:
|
||||
_ = pickle.dumps(context[key]) # noqa for F841
|
||||
except (pickle.PickleError, TypeError):
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Forms for core app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
|
||||
from haystack.forms import SearchForm
|
||||
|
@ -18,7 +19,7 @@ class UserProfileForm(forms.ModelForm):
|
|||
first_name = CharField(label=_('First name'), required=False)
|
||||
last_name = CharField(label=_('Last name'), required=False)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = UserProfile
|
||||
# Don't allow users edit someone else's user page,
|
||||
fields = ['first_name', 'last_name', 'homepage']
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Middleware for core app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Common mixin classes for views"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from vanilla import ListView
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.decorators import method_decorator
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""URL resolver for documentation"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import re
|
||||
|
||||
from django.conf import settings
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Class based settings for complex settings inheritance"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import inspect
|
||||
import sys
|
||||
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
"""Signal handling for core app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
import logging
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from django.dispatch import Signal
|
||||
from corsheaders import signals
|
||||
|
|
|
@ -54,6 +54,7 @@ Example layout
|
|||
"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import os
|
||||
import shutil
|
||||
import logging
|
||||
|
@ -188,7 +189,7 @@ class Symlink(object):
|
|||
if rel.alias:
|
||||
from_to[rel.alias] = rel.child.slug
|
||||
subprojects.add(rel.alias)
|
||||
for from_slug, to_slug in from_to.items():
|
||||
for from_slug, to_slug in list(from_to.items()):
|
||||
self._log(u"Symlinking subproject: {0} -> {1}".format(from_slug, to_slug))
|
||||
symlink = os.path.join(self.subproject_root, from_slug)
|
||||
docs_dir = os.path.join(
|
||||
|
@ -223,7 +224,7 @@ class Symlink(object):
|
|||
if not os.path.lexists(language_dir):
|
||||
safe_makedirs(language_dir)
|
||||
|
||||
for (language, slug) in translations.items():
|
||||
for (language, slug) in list(translations.items()):
|
||||
self._log(u"Symlinking translation: {0}->{1}".format(language, slug))
|
||||
symlink = os.path.join(self.project_root, language)
|
||||
docs_dir = os.path.join(self.WEB_ROOT, slug, language)
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
"""Template tags for core app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
import urllib
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
from builtins import str
|
||||
import urllib.request, urllib.parse, urllib.error
|
||||
import hashlib
|
||||
|
||||
from django import template
|
||||
|
@ -23,7 +26,7 @@ def gravatar(email, size=48):
|
|||
render an img tag with the hashed up bits needed for leetness
|
||||
omgwtfstillreading
|
||||
"""
|
||||
url = "http://www.gravatar.com/avatar.php?%s" % urllib.urlencode({
|
||||
url = "http://www.gravatar.com/avatar.php?%s" % urllib.parse.urlencode({
|
||||
'gravatar_id': hashlib.md5(email).hexdigest(),
|
||||
'size': str(size)
|
||||
})
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
"""Common utilty functions"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
import errno
|
||||
import getpass
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils import six
|
||||
|
|
|
@ -5,6 +5,8 @@ documentation and header rendering, and server errors.
|
|||
"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from past.utils import old_div
|
||||
import os
|
||||
import logging
|
||||
|
||||
|
@ -102,7 +104,7 @@ def wipe_version(request, project_slug, version_slug):
|
|||
|
||||
|
||||
def divide_by_zero(request): # pylint: disable=unused-argument
|
||||
return 1 / 0
|
||||
return old_div(1, 0)
|
||||
|
||||
|
||||
def server_error_500(request, exception, template_name='500.html'): # pylint: disable=unused-argument # noqa
|
||||
|
|
|
@ -118,14 +118,14 @@ def _build_url(url, projects, branches):
|
|||
all_built[project.slug] = built
|
||||
all_not_building[project.slug] = not_building
|
||||
|
||||
for project_slug, built in all_built.items():
|
||||
for project_slug, built in list(all_built.items()):
|
||||
if built:
|
||||
msg = '(URL Build) Build Started: %s [%s]' % (
|
||||
url, ' '.join(built))
|
||||
log_info(project_slug, msg=msg)
|
||||
ret += msg
|
||||
|
||||
for project_slug, not_building in all_not_building.items():
|
||||
for project_slug, not_building in list(all_not_building.items()):
|
||||
if not_building:
|
||||
msg = '(URL Build) Not Building: %s [%s]' % (
|
||||
url, ' '.join(not_building))
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Base classes for Builders."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from functools import wraps
|
||||
import os
|
||||
import logging
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
"""An API to load config from a readthedocs.yml file."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import filter
|
||||
from builtins import object
|
||||
from readthedocs_build.config import (ConfigError, BuildConfig, InvalidConfig,
|
||||
load as load_config)
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
"""Documentation Builder Environments"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
@ -420,7 +422,7 @@ class BuildEnvironment(object):
|
|||
"An unexpected error occurred")
|
||||
|
||||
# Attempt to stop unicode errors on build reporting
|
||||
for key, val in self.build.items():
|
||||
for key, val in list(self.build.items()):
|
||||
if isinstance(val, six.string_types):
|
||||
self.build[key] = val.decode('utf-8', 'ignore')
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""An abstraction over virtualenv and Conda environments."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Forms for RTD donations"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
|
||||
from django import forms
|
||||
|
@ -23,7 +24,7 @@ class SupporterForm(StripeResourceMixin, StripeModelForm):
|
|||
:py:class:`StripeModelForm`
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Supporter
|
||||
fields = (
|
||||
'last_4_digits',
|
||||
|
@ -97,7 +98,7 @@ class EthicalAdForm(StripeResourceMixin, StripeModelForm):
|
|||
:py:class:`StripeModelForm`
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Supporter
|
||||
fields = (
|
||||
'last_4_digits',
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
"""Mixin classes for donation views"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from builtins import object
|
||||
from past.utils import old_div
|
||||
from django.db.models import Avg, Sum
|
||||
|
||||
from .models import Supporter
|
||||
|
@ -19,7 +22,7 @@ class DonateProgressMixin(object):
|
|||
dollars = sums.get('dollars', None) or 0
|
||||
avg = int(avgs.get('dollars', None) or 0)
|
||||
count = Supporter.objects.count()
|
||||
percent = int((float(dollars) / 24000.0) * 100.0)
|
||||
percent = int((old_div(float(dollars), 24000.0)) * 100.0)
|
||||
context.update({
|
||||
'donate_amount': dollars,
|
||||
'donate_avg': avg,
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
# pylint: disable=redefined-builtin
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from past.utils import old_div
|
||||
from builtins import object
|
||||
from django.db import models
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
@ -68,7 +71,7 @@ class SupporterPromo(models.Model):
|
|||
blank=True, null=True)
|
||||
live = models.BooleanField(_('Live'), default=False)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ('analytics_id', '-live')
|
||||
|
||||
def __unicode__(self):
|
||||
|
@ -136,7 +139,7 @@ class SupporterPromo(models.Model):
|
|||
return impression.click_ratio
|
||||
|
||||
def views_per_day(self):
|
||||
return int(float(self.sold_impressions) / float(self.sold_days))
|
||||
return int(old_div(float(self.sold_impressions), float(self.sold_days)))
|
||||
|
||||
def views_shown_today(self, day=None):
|
||||
if not day:
|
||||
|
@ -160,7 +163,7 @@ class SupporterPromo(models.Model):
|
|||
if self.total_views() == 0:
|
||||
return float(0)
|
||||
return '%.4f' % float(
|
||||
(float(self.total_clicks()) / float(self.total_views())) * 100
|
||||
(old_div(float(self.total_clicks()), float(self.total_views()))) * 100
|
||||
)
|
||||
|
||||
def report_html_text(self):
|
||||
|
@ -179,7 +182,7 @@ class BaseImpression(models.Model):
|
|||
views = models.IntegerField(_('View'), default=0)
|
||||
clicks = models.IntegerField(_('Clicks'), default=0)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ('-date',)
|
||||
unique_together = ('promo', 'date')
|
||||
abstract = True
|
||||
|
@ -229,7 +232,7 @@ class ProjectImpressions(BaseImpression):
|
|||
project = models.ForeignKey(Project, related_name='impressions',
|
||||
blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
unique_together = ('project', 'promo', 'date')
|
||||
|
||||
def __unicode__(self):
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from __future__ import absolute_import
|
||||
from builtins import range
|
||||
import json
|
||||
import mock
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Gold subscription forms"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django import forms
|
||||
|
||||
from stripe.error import InvalidRequestError
|
||||
|
@ -19,7 +20,7 @@ class GoldSubscriptionForm(StripeResourceMixin, StripeModelForm):
|
|||
:py:class:`StripeResourceMixin` for common operations against the Stripe API.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = GoldUser
|
||||
fields = ['last_4_digits', 'level']
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
"""Django models for recurring donations aka Gold Membership."""
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from past.utils import old_div
|
||||
import math
|
||||
|
||||
from django.db import models
|
||||
|
@ -45,5 +47,5 @@ class GoldUser(models.Model):
|
|||
@property
|
||||
def num_supported_projects(self):
|
||||
dollars = int(self.level.split('-')[-1])
|
||||
num_projects = int(math.floor(dollars / DOLLARS_PER_PROJECT))
|
||||
num_projects = int(math.floor(old_div(dollars, DOLLARS_PER_PROJECT)))
|
||||
return num_projects
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
"""Integration models for external services"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from builtins import str
|
||||
from past.utils import old_div
|
||||
from builtins import object
|
||||
import json
|
||||
import uuid
|
||||
import re
|
||||
|
@ -60,13 +64,13 @@ class HttpExchangeManager(models.Manager):
|
|||
# title case-y hyphen separated values.
|
||||
request_headers = dict(
|
||||
(key[5:].title().replace('_', '-'), str(val))
|
||||
for (key, val) in req.META.items()
|
||||
for (key, val) in list(req.META.items())
|
||||
if key.startswith('HTTP_')
|
||||
)
|
||||
request_headers['Content-Type'] = req.content_type
|
||||
# Remove unwanted headers
|
||||
for filter_rule in self.REQ_FILTER_RULES:
|
||||
for key in request_headers.keys():
|
||||
for key in list(request_headers.keys()):
|
||||
if filter_rule.match(key):
|
||||
del request_headers[key]
|
||||
|
||||
|
@ -128,7 +132,7 @@ class HttpExchange(models.Model):
|
|||
|
||||
objects = HttpExchangeManager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ['-date']
|
||||
|
||||
def __unicode__(self):
|
||||
|
@ -137,7 +141,7 @@ class HttpExchange(models.Model):
|
|||
@property
|
||||
def failed(self):
|
||||
# Assume anything that isn't 2xx level status code is an error
|
||||
return int(self.status_code / 100) != 2
|
||||
return int(old_div(self.status_code, 100)) != 2
|
||||
|
||||
def formatted_json(self, field):
|
||||
"""Try to return pretty printed and Pygment highlighted code"""
|
||||
|
@ -189,7 +193,7 @@ class IntegrationQuerySet(models.QuerySet):
|
|||
if cls_replace is None:
|
||||
return original
|
||||
new = cls_replace()
|
||||
for k, v in original.__dict__.items():
|
||||
for k, v in list(original.__dict__.items()):
|
||||
new.__dict__[k] = v
|
||||
return new
|
||||
|
||||
|
@ -261,7 +265,7 @@ class GitHubWebhook(Integration):
|
|||
integration_type_id = Integration.GITHUB_WEBHOOK
|
||||
has_sync = True
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
proxy = True
|
||||
|
||||
@property
|
||||
|
@ -277,7 +281,7 @@ class BitbucketWebhook(Integration):
|
|||
integration_type_id = Integration.BITBUCKET_WEBHOOK
|
||||
has_sync = True
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
proxy = True
|
||||
|
||||
@property
|
||||
|
@ -293,7 +297,7 @@ class GenericAPIWebhook(Integration):
|
|||
integration_type_id = Integration.API_WEBHOOK
|
||||
has_sync = False
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
proxy = True
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
|
|
@ -7,6 +7,7 @@ displayed on the site.
|
|||
"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.conf import settings
|
||||
from django.http import HttpRequest
|
||||
from django.utils.module_loading import import_string
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Support for templating of notifications."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.conf import settings
|
||||
from django.template import Template, Context
|
||||
from django.template.loader import render_to_string
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""OAuth service models"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import json
|
||||
|
||||
from django.db import models
|
||||
|
@ -114,7 +115,7 @@ class RemoteRepository(models.Model):
|
|||
|
||||
objects = RemoteRepositoryQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ['organization__name', 'name']
|
||||
verbose_name_plural = 'remote repositories'
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
"""OAuth utility functions"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""OAuth utility functions"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
import logging
|
||||
import json
|
||||
import re
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""OAuth utility functions"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
import logging
|
||||
import json
|
||||
import re
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
"""Payment forms"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
import logging
|
||||
|
||||
from stripe.resource import Customer, Charge
|
||||
|
@ -27,7 +29,7 @@ class StripeResourceMixin(object):
|
|||
pass
|
||||
return resource.create(**attrs)
|
||||
else:
|
||||
for (key, val) in attrs.items():
|
||||
for (key, val) in list(attrs.items()):
|
||||
setattr(instance, key, val)
|
||||
instance.save()
|
||||
return instance
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Payment view mixin classes"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Django Managers and Querysets to apply project privacy restrictions."""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.db import models
|
||||
|
||||
from guardian.shortcuts import get_objects_for_user
|
||||
|
|
|
@ -5,6 +5,7 @@ the local machine.
|
|||
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import getpass
|
||||
import logging
|
||||
import os
|
||||
|
|
|
@ -95,7 +95,7 @@ def create_profile(request, form_class, success_url=None,
|
|||
if extra_context is None:
|
||||
extra_context = {}
|
||||
context = RequestContext(request)
|
||||
for key, value in extra_context.items():
|
||||
for key, value in list(extra_context.items()):
|
||||
context[key] = callable(value) and value() or value
|
||||
|
||||
return render_to_response(template_name,
|
||||
|
@ -172,7 +172,7 @@ def edit_profile(request, form_class, success_url=None,
|
|||
if extra_context is None:
|
||||
extra_context = {}
|
||||
context = RequestContext(request)
|
||||
for key, value in extra_context.items():
|
||||
for key, value in list(extra_context.items()):
|
||||
context[key] = callable(value) and value() or value
|
||||
|
||||
return render_to_response(template_name, {
|
||||
|
@ -244,7 +244,7 @@ def profile_detail(request, username, public_profile_field=None,
|
|||
if extra_context is None:
|
||||
extra_context = {}
|
||||
context = RequestContext(request)
|
||||
for key, value in extra_context.items():
|
||||
for key, value in list(extra_context.items()):
|
||||
context[key] = callable(value) and value() or value
|
||||
|
||||
return render_to_response(template_name,
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
"""Project forms"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
from builtins import object
|
||||
from random import choice
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
|
@ -73,7 +76,7 @@ class ProjectBasicsForm(ProjectForm):
|
|||
|
||||
"""Form for basic project fields"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Project
|
||||
fields = ('name', 'repo', 'repo_type')
|
||||
|
||||
|
@ -153,7 +156,7 @@ class ProjectExtraForm(ProjectForm):
|
|||
|
||||
"""Additional project information form"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Project
|
||||
fields = (
|
||||
'description',
|
||||
|
@ -180,7 +183,7 @@ class ProjectAdvancedForm(ProjectTriggerBuildMixin, ProjectForm):
|
|||
help_text=_("(Beta) The Python interpreter used to create the virtual "
|
||||
"environment."))
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Project
|
||||
fields = (
|
||||
# Standard build edits
|
||||
|
@ -216,7 +219,7 @@ class ProjectAdvancedForm(ProjectTriggerBuildMixin, ProjectForm):
|
|||
class UpdateProjectForm(ProjectTriggerBuildMixin, ProjectBasicsForm,
|
||||
ProjectExtraForm):
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Project
|
||||
fields = (
|
||||
# Basics
|
||||
|
@ -497,7 +500,7 @@ class RedirectForm(forms.ModelForm):
|
|||
|
||||
"""Form for project redirects"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Redirect
|
||||
fields = ['redirect_type', 'from_url', 'to_url']
|
||||
|
||||
|
@ -521,7 +524,7 @@ class DomainForm(forms.ModelForm):
|
|||
|
||||
project = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Domain
|
||||
exclude = ['machine', 'cname', 'count', 'https']
|
||||
|
||||
|
@ -558,7 +561,7 @@ class IntegrationForm(forms.ModelForm):
|
|||
|
||||
project = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Integration
|
||||
exclude = ['provider_data', 'exchanges']
|
||||
|
||||
|
@ -580,7 +583,7 @@ class ProjectAdvertisingForm(forms.ModelForm):
|
|||
|
||||
"""Project promotion opt-out form"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Project
|
||||
fields = ['allow_promos']
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
from __future__ import unicode_literals, print_function
|
||||
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
from django.db import models, migrations
|
||||
import readthedocs.core.validators
|
||||
|
||||
|
@ -10,7 +12,7 @@ import sys
|
|||
if sys.version_info > (3,):
|
||||
import urllib.parse as urlparse
|
||||
else:
|
||||
import urlparse
|
||||
import urllib.parse
|
||||
|
||||
|
||||
def migrate_url(apps, schema_editor):
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
"""Project models"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
from builtins import object
|
||||
import fnmatch
|
||||
import logging
|
||||
import sys
|
||||
|
@ -39,7 +42,7 @@ if sys.version_info > (3,):
|
|||
from urllib.parse import urlparse
|
||||
# pylint: enable=import-error
|
||||
else:
|
||||
from urlparse import urlparse
|
||||
from urllib.parse import urlparse
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -279,7 +282,7 @@ class Project(models.Model):
|
|||
objects = ProjectQuerySet.as_manager()
|
||||
all_objects = models.Manager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ('slug',)
|
||||
permissions = (
|
||||
# Translators: Permission around whether a user can view the
|
||||
|
@ -857,7 +860,7 @@ class Notification(models.Model):
|
|||
related_name='%(class)s_notifications')
|
||||
objects = RelatedProjectQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
abstract = True
|
||||
|
||||
|
||||
|
@ -902,7 +905,7 @@ class Domain(models.Model):
|
|||
|
||||
objects = RelatedProjectQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
ordering = ('-canonical', '-machine', 'domain')
|
||||
|
||||
def __unicode__(self):
|
||||
|
|
|
@ -5,6 +5,7 @@ rebuilding documentation.
|
|||
"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
import os
|
||||
import shutil
|
||||
import json
|
||||
|
@ -261,7 +262,7 @@ class UpdateDocsTask(Task):
|
|||
build = {}
|
||||
if build_pk:
|
||||
build = api_v2.build(build_pk).get()
|
||||
return dict((key, val) for (key, val) in build.items()
|
||||
return dict((key, val) for (key, val) in list(build.items())
|
||||
if key not in ['project', 'version', 'resource_uri',
|
||||
'absolute_uri'])
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Utility functions used by projects"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import fnmatch
|
||||
import os
|
||||
import subprocess
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
"""Project version handling"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import range
|
||||
from builtins import object
|
||||
import unicodedata
|
||||
from collections import defaultdict
|
||||
from packaging.version import Version
|
||||
|
@ -45,7 +47,7 @@ class VersionManager(object):
|
|||
del self._state[to_remove]
|
||||
|
||||
def prune_minor(self, num_latest):
|
||||
for major, minors in self._state.items():
|
||||
for major, minors in list(self._state.items()):
|
||||
all_keys = sorted(set(minors.keys()))
|
||||
minor_keep = []
|
||||
for __ in range(num_latest):
|
||||
|
@ -55,8 +57,8 @@ class VersionManager(object):
|
|||
del self._state[major][to_remove]
|
||||
|
||||
def prune_point(self, num_latest):
|
||||
for major, minors in self._state.items():
|
||||
for minor in minors.keys():
|
||||
for major, minors in list(self._state.items()):
|
||||
for minor in list(minors.keys()):
|
||||
try:
|
||||
self._state[major][minor] = sorted(
|
||||
set(self._state[major][minor]))[-num_latest:]
|
||||
|
@ -66,8 +68,8 @@ class VersionManager(object):
|
|||
|
||||
def get_version_list(self):
|
||||
versions = []
|
||||
for major_val in self._state.values():
|
||||
for version_list in major_val.values():
|
||||
for major_val in list(self._state.values()):
|
||||
for version_list in list(major_val.values()):
|
||||
versions.extend(version_list)
|
||||
versions = sorted(versions)
|
||||
return [
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Mix-in classes for project views."""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Mixin classes for project views"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from readthedocs.projects.models import Project
|
||||
|
|
|
@ -248,7 +248,7 @@ class ImportWizardView(ProjectSpamMixin, PrivateViewMixin, SessionWizardView):
|
|||
tags = form_data.pop('tags', [])
|
||||
for tag in tags:
|
||||
project.tags.add(tag)
|
||||
for field, value in form_data.items():
|
||||
for field, value in list(form_data.items()):
|
||||
if field in extra_fields:
|
||||
setattr(project, field, value)
|
||||
basic_only = True
|
||||
|
@ -295,7 +295,7 @@ class ImportDemoView(PrivateViewMixin, View):
|
|||
messages.success(
|
||||
request, _('Your demo project is currently being imported'))
|
||||
else:
|
||||
for (__, msg) in form.errors.items():
|
||||
for (__, msg) in list(form.errors.items()):
|
||||
log.error(msg)
|
||||
messages.error(request,
|
||||
_('There was a problem adding the demo project'))
|
||||
|
|
|
@ -329,7 +329,7 @@ def elastic_project_search(request, project_slug):
|
|||
if results:
|
||||
# pre and post 1.0 compat
|
||||
for num, hit in enumerate(results['hits']['hits']):
|
||||
for key, val in hit['fields'].items():
|
||||
for key, val in list(hit['fields'].items()):
|
||||
if isinstance(val, list):
|
||||
results['hits']['hits'][num]['fields'][key] = val[0]
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Django models for the redirects app."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
@ -69,7 +70,7 @@ class Redirect(models.Model):
|
|||
|
||||
objects = RedirectManager()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
verbose_name = _('redirect')
|
||||
verbose_name_plural = _('redirects')
|
||||
ordering = ('-update_dt',)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from rest_framework import serializers
|
||||
|
||||
from readthedocs.builds.models import Build, BuildCommandResult, Version
|
||||
|
@ -9,7 +10,7 @@ from readthedocs.oauth.models import RemoteOrganization, RemoteRepository
|
|||
class ProjectSerializer(serializers.ModelSerializer):
|
||||
canonical_url = serializers.ReadOnlyField(source='get_docs_url')
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Project
|
||||
fields = (
|
||||
'id',
|
||||
|
@ -26,7 +27,7 @@ class VersionSerializer(serializers.ModelSerializer):
|
|||
project = ProjectSerializer()
|
||||
downloads = serializers.DictField(source='get_downloads', read_only=True)
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Version
|
||||
fields = (
|
||||
'id',
|
||||
|
@ -40,7 +41,7 @@ class VersionSerializer(serializers.ModelSerializer):
|
|||
class BuildCommandSerializer(serializers.ModelSerializer):
|
||||
run_time = serializers.ReadOnlyField()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = BuildCommandResult
|
||||
exclude = ('')
|
||||
|
||||
|
@ -52,7 +53,7 @@ class BuildSerializer(serializers.ModelSerializer):
|
|||
commands = BuildCommandSerializer(many=True, read_only=True)
|
||||
state_display = serializers.ReadOnlyField(source='get_state_display')
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Build
|
||||
exclude = ('builder',)
|
||||
|
||||
|
@ -61,7 +62,7 @@ class BuildSerializerFull(BuildSerializer):
|
|||
|
||||
"""Writeable Build instance serializer, for admin access by builders"""
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Build
|
||||
exclude = ('')
|
||||
|
||||
|
@ -76,7 +77,7 @@ class SearchIndexSerializer(serializers.Serializer):
|
|||
class DomainSerializer(serializers.ModelSerializer):
|
||||
project = ProjectSerializer()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = Domain
|
||||
fields = (
|
||||
'id',
|
||||
|
@ -90,7 +91,7 @@ class DomainSerializer(serializers.ModelSerializer):
|
|||
|
||||
class RemoteOrganizationSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = RemoteOrganization
|
||||
exclude = ('json', 'email', 'users')
|
||||
|
||||
|
@ -102,7 +103,7 @@ class RemoteRepositorySerializer(serializers.ModelSerializer):
|
|||
organization = RemoteOrganizationSerializer()
|
||||
matches = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = RemoteRepository
|
||||
exclude = ('json', 'users')
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import json
|
||||
import logging
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Base classes and mixins for unit tests."""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import os
|
||||
import shutil
|
||||
import logging
|
||||
|
@ -105,7 +106,7 @@ class WizardTestCase(RequestFactoryTestMixin, TestCase):
|
|||
try:
|
||||
data = dict(
|
||||
('{0}-{1}'.format(step, k), v)
|
||||
for (k, v) in self.step_data[step].items()
|
||||
for (k, v) in list(self.step_data[step].items())
|
||||
)
|
||||
except KeyError:
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# pylint: disable=missing-docstring
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import mock
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Mock versions of many API-related classes."""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from contextlib import contextmanager
|
||||
import json
|
||||
import mock
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
import json
|
||||
import base64
|
||||
import datetime
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import str
|
||||
import os.path
|
||||
import shutil
|
||||
import uuid
|
||||
|
@ -271,7 +272,7 @@ class TestBuildCommand(TestCase):
|
|||
env = {'FOOBAR': 'foobar',
|
||||
'BIN_PATH': 'foobar'}
|
||||
cmd = BuildCommand('echo', environment=env)
|
||||
for key in env.keys():
|
||||
for key in list(env.keys()):
|
||||
self.assertEqual(cmd.environment[key], env[key])
|
||||
|
||||
def test_result(self):
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from readthedocs.core.utils.extend import (SettingsOverrideObject,
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from __future__ import absolute_import
|
||||
from builtins import range
|
||||
import django_dynamic_fixture as fixture
|
||||
from django.test import TestCase, RequestFactory
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
import json
|
||||
import logging
|
||||
from urllib import urlencode
|
||||
from urllib.parse import urlencode
|
||||
|
||||
import mock
|
||||
from django_dynamic_fixture import get
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
from builtins import object
|
||||
import re
|
||||
|
||||
from django.contrib.admindocs.views import extract_views_from_urlpatterns
|
||||
|
@ -61,7 +62,7 @@ class URLAccessMixin(object):
|
|||
response_attrs.update(response_data)
|
||||
if self.context_data and getattr(response, 'context'):
|
||||
self._test_context(response)
|
||||
for (key, val) in response_attrs.items():
|
||||
for (key, val) in list(response_attrs.items()):
|
||||
resp_val = getattr(response, key)
|
||||
self.assertEqual(
|
||||
resp_val,
|
||||
|
@ -83,7 +84,7 @@ class URLAccessMixin(object):
|
|||
self.context_data.append(self.pip)
|
||||
"""
|
||||
|
||||
for key in response.context.keys():
|
||||
for key in list(response.context.keys()):
|
||||
obj = response.context[key]
|
||||
for not_obj in self.context_data:
|
||||
if isinstance(obj, list) or isinstance(obj, set) or isinstance(obj, tuple):
|
||||
|
@ -98,7 +99,7 @@ class URLAccessMixin(object):
|
|||
added_kwargs = {}
|
||||
for (view, regex, namespace, name) in deconstructed_urls:
|
||||
request_data = self.request_data.get(name, {}).copy()
|
||||
for key in re.compile(regex).groupindex.keys():
|
||||
for key in list(re.compile(regex).groupindex.keys()):
|
||||
if key in list(request_data.keys()):
|
||||
added_kwargs[key] = request_data[key]
|
||||
continue
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
@ -93,7 +94,7 @@ class TempSiterootCase(object):
|
|||
new_callable=mock.PropertyMock
|
||||
),
|
||||
}
|
||||
self.patches = dict((key, mock.start()) for (key, mock) in self.mocks.items())
|
||||
self.patches = dict((key, mock.start()) for (key, mock) in list(self.mocks.items()))
|
||||
self.patches['PublicSymlinkBase.CNAME_ROOT'].return_value = os.path.join(
|
||||
settings.SITE_ROOT, 'public_cname_root'
|
||||
)
|
||||
|
|
|
@ -44,7 +44,7 @@ class TestProfileMiddleware(RequestFactoryTestMixin, TestCase):
|
|||
self.data = {}
|
||||
for key in data:
|
||||
self.data.update({('{0}-{1}'.format(key, k), v)
|
||||
for (k, v) in data[key].items()})
|
||||
for (k, v) in list(data[key].items())})
|
||||
self.data['{0}-current_step'.format(self.wizard_class_slug)] = 'extra'
|
||||
|
||||
def test_profile_middleware_no_profile(self):
|
||||
|
@ -108,7 +108,7 @@ class TestBasicsForm(WizardTestCase):
|
|||
|
||||
proj = Project.objects.get(name='foobar')
|
||||
self.assertIsNotNone(proj)
|
||||
for (key, val) in self.step_data['basics'].items():
|
||||
for (key, val) in list(self.step_data['basics'].items()):
|
||||
self.assertEqual(getattr(proj, key), val)
|
||||
self.assertEqual(proj.documentation_type, 'sphinx')
|
||||
|
||||
|
@ -170,7 +170,7 @@ class TestAdvancedForm(TestBasicsForm):
|
|||
[u'bar', u'baz', u'foo']
|
||||
)
|
||||
data.update(self.step_data['extra'])
|
||||
for (key, val) in data.items():
|
||||
for (key, val) in list(data.items()):
|
||||
self.assertEqual(getattr(proj, key), val)
|
||||
|
||||
def test_form_missing_extra(self):
|
||||
|
|
|
@ -15,6 +15,7 @@ TODO: Handle page removal case in Page.
|
|||
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import datetime
|
||||
|
||||
from elasticsearch import Elasticsearch, exceptions
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
"""Functions related to converting content into dict/JSON structures."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import next
|
||||
from builtins import range
|
||||
import codecs
|
||||
import fnmatch
|
||||
import json
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
"""Utilities related to reading and generating indexable search content."""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from builtins import next
|
||||
from builtins import range
|
||||
import os
|
||||
import fnmatch
|
||||
import re
|
||||
|
|
|
@ -47,7 +47,7 @@ def elastic_search(request):
|
|||
if results:
|
||||
# pre and post 1.0 compat
|
||||
for num, hit in enumerate(results['hits']['hits']):
|
||||
for key, val in hit['fields'].items():
|
||||
for key, val in list(hit['fields'].items()):
|
||||
if isinstance(val, list):
|
||||
results['hits']['hits'][num]['fields'][key] = val[0]
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
"""Bazaar-related utilities."""
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
import csv
|
||||
import re
|
||||
import sys
|
||||
|
@ -10,7 +12,7 @@ from readthedocs.vcs_support.base import BaseVCS, VCSVersion
|
|||
if sys.version_info > (3,):
|
||||
from io import StringIO
|
||||
else:
|
||||
from StringIO import StringIO
|
||||
from io import StringIO
|
||||
|
||||
|
||||
class Backend(BaseVCS):
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
"""Git-related utilities."""
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
import re
|
||||
import logging
|
||||
import csv
|
||||
|
@ -12,7 +14,7 @@ from readthedocs.vcs_support.base import BaseVCS, VCSVersion
|
|||
if sys.version_info > (3,):
|
||||
from io import StringIO
|
||||
else:
|
||||
from StringIO import StringIO
|
||||
from io import StringIO
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
"""Subversion-related utilities."""
|
||||
from __future__ import absolute_import
|
||||
from future import standard_library
|
||||
standard_library.install_aliases()
|
||||
import csv
|
||||
import sys
|
||||
|
||||
|
@ -9,7 +11,7 @@ from readthedocs.vcs_support.base import BaseVCS, VCSVersion
|
|||
if sys.version_info > (3,):
|
||||
from io import StringIO
|
||||
else:
|
||||
from StringIO import StringIO
|
||||
from io import StringIO
|
||||
|
||||
|
||||
class Backend(BaseVCS):
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Base classes for VCS backends."""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Locking utilities."""
|
||||
from __future__ import absolute_import
|
||||
from builtins import object
|
||||
import logging
|
||||
import os
|
||||
import time
|
||||
|
|
|
@ -10,6 +10,7 @@ mkdocs==0.14.0
|
|||
readthedocs-build==2.0.6
|
||||
django==1.9.12
|
||||
six==1.10.0
|
||||
future==0.16.0
|
||||
|
||||
django-tastypie==0.13.0
|
||||
django-haystack==2.6.0
|
||||
|
|
Loading…
Reference in New Issue