From 8c2b3e9b84c954dd3bc50b8eff49000e109ca031 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Fri, 12 Apr 2019 14:45:44 -0400 Subject: [PATCH] Fix Django 2.0 deprecation warnings --- awx/api/urls/__init__.py | 5 ++++- awx/api/versioning.py | 2 +- awx/conf/tests/functional/conftest.py | 2 +- awx/main/fields.py | 7 +++++-- awx/main/middleware.py | 3 +-- awx/main/models/credential/__init__.py | 1 + awx/main/models/ha.py | 7 ++++--- awx/main/models/organization.py | 1 + awx/main/models/rbac.py | 2 +- awx/main/tests/functional/conftest.py | 2 +- awx/main/tests/unit/conftest.py | 2 +- awx/settings/defaults.py | 1 - awx/sso/conf.py | 2 +- awx/sso/views.py | 2 +- requirements/requirements_dev.txt | 2 +- 15 files changed, 24 insertions(+), 17 deletions(-) diff --git a/awx/api/urls/__init__.py b/awx/api/urls/__init__.py index 22c0a39999..e8827bfa1e 100644 --- a/awx/api/urls/__init__.py +++ b/awx/api/urls/__init__.py @@ -4,4 +4,7 @@ from __future__ import absolute_import, unicode_literals from .urls import urlpatterns -__all__ = ['urlpatterns'] +__all__ = ['urlpatterns', 'app_name'] + + +app_name = 'api' diff --git a/awx/api/versioning.py b/awx/api/versioning.py index 2e00d5cbcb..4e5d5a9288 100644 --- a/awx/api/versioning.py +++ b/awx/api/versioning.py @@ -2,7 +2,7 @@ # All Rights Reserved. from django.conf import settings -from django.core.urlresolvers import NoReverseMatch +from django.urls import NoReverseMatch from rest_framework.reverse import _reverse from rest_framework.versioning import URLPathVersioning as BaseVersioning diff --git a/awx/conf/tests/functional/conftest.py b/awx/conf/tests/functional/conftest.py index 6a3725af49..707d75e6fa 100644 --- a/awx/conf/tests/functional/conftest.py +++ b/awx/conf/tests/functional/conftest.py @@ -2,7 +2,7 @@ import urllib.parse import pytest -from django.core.urlresolvers import resolve +from django.urls import resolve from django.contrib.auth.models import User from rest_framework.test import ( diff --git a/awx/main/fields.py b/awx/main/fields.py index 963723319d..f322691183 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -18,7 +18,7 @@ from django.db.models.signals import ( ) from django.db.models.signals import m2m_changed from django.db import models -from django.db.models.fields.related import add_lazy_relation +from django.db.models.fields.related import lazy_related_operation from django.db.models.fields.related_descriptors import ( ReverseOneToOneDescriptor, ForwardManyToOneDescriptor, @@ -227,6 +227,7 @@ class ImplicitRoleField(models.ForeignKey): kwargs.setdefault('related_name', '+') kwargs.setdefault('null', 'True') kwargs.setdefault('editable', False) + kwargs.setdefault('on_delete', models.CASCADE) super(ImplicitRoleField, self).__init__(*args, **kwargs) def deconstruct(self): @@ -244,7 +245,9 @@ class ImplicitRoleField(models.ForeignKey): post_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save') post_delete.connect(self._post_delete, cls, True, dispatch_uid='implicit-role-post-delete') - add_lazy_relation(cls, self, "self", self.bind_m2m_changed) + + function = lambda local, related, field: self.bind_m2m_changed(field, related, local) + lazy_related_operation(function, cls, "self", field=self) def bind_m2m_changed(self, _self, _role_class, cls): if not self.parent_role: diff --git a/awx/main/middleware.py b/awx/main/middleware.py index e2dcd9c1da..551faf0594 100644 --- a/awx/main/middleware.py +++ b/awx/main/middleware.py @@ -19,8 +19,7 @@ from django.utils.functional import curry from django.shortcuts import get_object_or_404, redirect from django.apps import apps from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse -from django.urls import resolve +from django.urls import reverse, resolve from awx.main.models import ActivityStream from awx.main.utils.named_url_graph import generate_graph, GraphNode diff --git a/awx/main/models/credential/__init__.py b/awx/main/models/credential/__init__.py index 1beec8cc58..753a04788d 100644 --- a/awx/main/models/credential/__init__.py +++ b/awx/main/models/credential/__init__.py @@ -249,6 +249,7 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique, ResourceMixin): 'CredentialType', related_name='credentials', null=False, + on_delete=models.CASCADE, help_text=_('Specify the type of credential you want to create. Refer ' 'to the Ansible Tower documentation for details on each type.') ) diff --git a/awx/main/models/ha.py b/awx/main/models/ha.py index 4f9fa3b0a2..43e713b2bc 100644 --- a/awx/main/models/ha.py +++ b/awx/main/models/ha.py @@ -172,7 +172,8 @@ class InstanceGroup(HasPolicyEditsMixin, BaseModel, RelatedJobsMixin): help_text=_('Instance Group to remotely control this group.'), editable=False, default=None, - null=True + null=True, + on_delete=models.CASCADE ) policy_instance_percentage = models.IntegerField( default=0, @@ -264,8 +265,8 @@ class JobOrigin(models.Model): This is fine, and code should be able to handle it. A job with no origin is always assumed to *not* have the current instance as its origin. """ - unified_job = models.OneToOneField(UnifiedJob, related_name='job_origin') - instance = models.ForeignKey(Instance) + unified_job = models.OneToOneField(UnifiedJob, related_name='job_origin', on_delete=models.CASCADE) + instance = models.ForeignKey(Instance, on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py index 00753cb860..54e8d7ad08 100644 --- a/awx/main/models/organization.py +++ b/awx/main/models/organization.py @@ -147,6 +147,7 @@ class Profile(CreatedModifiedModel): 'auth.User', related_name='profile', editable=False, + on_delete=models.CASCADE ) ldap_dn = models.CharField( max_length=1024, diff --git a/awx/main/models/rbac.py b/awx/main/models/rbac.py index 439c01846a..e4c5053616 100644 --- a/awx/main/models/rbac.py +++ b/awx/main/models/rbac.py @@ -150,7 +150,7 @@ class Role(models.Model): related_name='descendents' ) # auto-generated by `rebuild_role_ancestor_list` members = models.ManyToManyField('auth.User', related_name='roles') - content_type = models.ForeignKey(ContentType, null=True, default=None) + content_type = models.ForeignKey(ContentType, null=True, default=None, on_delete=models.CASCADE) object_id = models.PositiveIntegerField(null=True, default=None) content_object = GenericForeignKey('content_type', 'object_id') diff --git a/awx/main/tests/functional/conftest.py b/awx/main/tests/functional/conftest.py index 000e71899e..5a0efa37ae 100644 --- a/awx/main/tests/functional/conftest.py +++ b/awx/main/tests/functional/conftest.py @@ -7,7 +7,7 @@ import urllib.parse from unittest.mock import PropertyMock # Django -from django.core.urlresolvers import resolve +from django.urls import resolve from django.contrib.auth.models import User from django.core.serializers.json import DjangoJSONEncoder from django.db.backends.sqlite3.base import SQLiteCursorWrapper diff --git a/awx/main/tests/unit/conftest.py b/awx/main/tests/unit/conftest.py index a411e3e085..729f14ecaf 100644 --- a/awx/main/tests/unit/conftest.py +++ b/awx/main/tests/unit/conftest.py @@ -6,7 +6,7 @@ from unittest.mock import PropertyMock from awx.api.urls import urlpatterns as api_patterns # Django -from django.core.urlresolvers import RegexURLResolver, RegexURLPattern +from django.urls import RegexURLResolver, RegexURLPattern @pytest.fixture(autouse=True) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 7eb41aaf95..432b42a362 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -455,7 +455,6 @@ except ImportError: pass DEBUG_TOOLBAR_CONFIG = { - 'INTERCEPT_REDIRECTS': False, 'ENABLE_STACKTRACES' : True, } diff --git a/awx/sso/conf.py b/awx/sso/conf.py index 4f923a6c63..2ac51de6cd 100644 --- a/awx/sso/conf.py +++ b/awx/sso/conf.py @@ -4,7 +4,7 @@ import urllib.parse as urlparse # Django from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ # Django REST Framework diff --git a/awx/sso/views.py b/awx/sso/views.py index 8de4ae71a5..9eb0c33a95 100644 --- a/awx/sso/views.py +++ b/awx/sso/views.py @@ -6,7 +6,7 @@ import urllib.parse import logging # Django -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import HttpResponse from django.views.generic import View from django.views.generic.base import RedirectView diff --git a/requirements/requirements_dev.txt b/requirements/requirements_dev.txt index 89679c5e75..ad6a8c890d 100644 --- a/requirements/requirements_dev.txt +++ b/requirements/requirements_dev.txt @@ -1,4 +1,4 @@ -django-debug-toolbar==1.5 +django-debug-toolbar==1.11 django-rest-swagger pprofile ipython==5.2.1