From 51dbbd206e1533fb87acb3917e46a1eafdc6eac6 Mon Sep 17 00:00:00 2001 From: Arthur Rio Date: Wed, 10 Jun 2015 16:38:06 -0700 Subject: [PATCH 1/3] Update contenttypes import. RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes --- dynamic_initial_data/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dynamic_initial_data/models.py b/dynamic_initial_data/models.py index f60de1e..707c09f 100644 --- a/dynamic_initial_data/models.py +++ b/dynamic_initial_data/models.py @@ -1,4 +1,4 @@ -from django.contrib.contenttypes import generic +from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models from manager_utils import ManagerUtilsManager @@ -12,7 +12,7 @@ class RegisteredForDeletionReceipt(models.Model): # The model object that was registered model_obj_type = models.ForeignKey(ContentType) model_obj_id = models.PositiveIntegerField() - model_obj = generic.GenericForeignKey('model_obj_type', 'model_obj_id', for_concrete_model=False) + model_obj = GenericForeignKey('model_obj_type', 'model_obj_id', for_concrete_model=False) # The time at which it was registered for deletion register_time = models.DateTimeField() From 603a48a82ae2f962aba5405b7f7e81924248a66b Mon Sep 17 00:00:00 2001 From: Arthur Rio Date: Wed, 10 Jun 2015 16:39:51 -0700 Subject: [PATCH 2/3] Replace import_by_path with import_string and update exception catching accordingly. RemovedInDjango19Warning: import_by_path() has been deprecated. Use import_string() instead. --- dynamic_initial_data/base.py | 9 ++++----- dynamic_initial_data/tests/base_tests.py | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/dynamic_initial_data/base.py b/dynamic_initial_data/base.py index 0c3157e..d8a9287 100644 --- a/dynamic_initial_data/base.py +++ b/dynamic_initial_data/base.py @@ -2,9 +2,8 @@ from django.apps import apps from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ImproperlyConfigured from django.db.transaction import atomic -from django.utils.module_loading import import_by_path +from django.utils.module_loading import import_string from dynamic_initial_data.exceptions import InitialDataCircularDependency, InitialDataMissingApp from dynamic_initial_data.models import RegisteredForDeletionReceipt @@ -89,7 +88,7 @@ def load_app(self, app): return self.loaded_apps.get(app) self.loaded_apps[app] = None - initial_data_class = import_by_path(self.get_class_path(app)) + initial_data_class = import_string(self.get_class_path(app)) if issubclass(initial_data_class, BaseInitialData): self.log('Loaded app {0}'.format(app)) self.loaded_apps[app] = initial_data_class @@ -113,7 +112,7 @@ def update_app(self, app): # load the initial data class try: initial_data_class = self.load_app(app) - except ImproperlyConfigured: + except ImportError: self.log('Could not load {0}'.format(app)) return @@ -212,7 +211,7 @@ def get_dependency_call_list(self, app, call_list=None): # load the initial data class for the app try: initial_data_class = self.load_app(app) - except ImproperlyConfigured: + except ImportError: raise InitialDataMissingApp(dep=app) dependencies = initial_data_class.dependencies diff --git a/dynamic_initial_data/tests/base_tests.py b/dynamic_initial_data/tests/base_tests.py index 260a675..5bee61f 100644 --- a/dynamic_initial_data/tests/base_tests.py +++ b/dynamic_initial_data/tests/base_tests.py @@ -222,14 +222,14 @@ def test_verbose_option(self): # cover the branch that prints if verbose is true initial_data_manager.log('test') - @patch('dynamic_initial_data.base.import_by_path', return_value=MockInitialData) + @patch('dynamic_initial_data.base.import_string', return_value=MockInitialData) def test_load_app_exists(self, import_patch): """ Tests the load_app method on an app that exists """ self.assertEqual(MockInitialData, InitialDataUpdater().load_app('fake')) - @patch('dynamic_initial_data.base.import_by_path', return_value=MockInitialData) + @patch('dynamic_initial_data.base.import_string', return_value=MockInitialData) def test_load_app_cached(self, import_patch): """ Tests that the cache is hit since import is only called once. @@ -240,7 +240,7 @@ def test_load_app_cached(self, import_patch): initial_data_updater.load_app('fake') self.assertEquals(import_patch.call_count, 1) - @patch('dynamic_initial_data.base.import_by_path', return_value=MockClass) + @patch('dynamic_initial_data.base.import_string', return_value=MockClass) def test_load_app_doesnt_exist(self, import_patch): """ Tests the load_app method on an app that doesnt exist From 1647e68632ff6f1c36381503a9604ce719e645b0 Mon Sep 17 00:00:00 2001 From: Arthur Rio Date: Wed, 10 Jun 2015 16:40:52 -0700 Subject: [PATCH 3/3] Don't automatically import base from __init__.py RemovedInDjango19Warning: Model class dynamic_initial_data.models.RegisteredForDeletionReceipt doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9. If using: from dynamic_initial_data import BaseInitialData Need to update to: from dynamic_initial_data.base import BaseInitialData --- dynamic_initial_data/__init__.py | 1 - dynamic_initial_data/tests/integration_tests.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dynamic_initial_data/__init__.py b/dynamic_initial_data/__init__.py index 892afe0..cec34bb 100644 --- a/dynamic_initial_data/__init__.py +++ b/dynamic_initial_data/__init__.py @@ -1,5 +1,4 @@ # flake8: noqa from .version import __version__ -from .base import BaseInitialData default_app_config = 'dynamic_initial_data.apps.DynamicInitialDataConfig' diff --git a/dynamic_initial_data/tests/integration_tests.py b/dynamic_initial_data/tests/integration_tests.py index 92b74e5..927e500 100644 --- a/dynamic_initial_data/tests/integration_tests.py +++ b/dynamic_initial_data/tests/integration_tests.py @@ -1,8 +1,7 @@ from django.test import TestCase from mock import patch -from dynamic_initial_data import BaseInitialData -from dynamic_initial_data.base import InitialDataUpdater +from dynamic_initial_data.base import BaseInitialData, InitialDataUpdater from dynamic_initial_data.models import RegisteredForDeletionReceipt from dynamic_initial_data.tests.models import Account