diff --git a/.travis.yml b/.travis.yml index f9c5e75..fc6cf12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,15 @@ branches: only: - master +env: + - DJANGO="django>=2.0,<2.1" + - DJANGO="django>=1.11,<1.12" + +matrix: + exclude: + - python: "2.7" + env: DJANGO="django>=2.0,<2.1" + before_install: - pip install -U pip wheel setuptools - pip install --no-cache-dir -U -r requirements-test.txt @@ -17,6 +26,7 @@ before_install: - ./runisort install: + - pip install $DJANGO - python setup.py -q develop script: diff --git a/django_netjsongraph/base/admin.py b/django_netjsongraph/base/admin.py index f5bbc45..f6571e1 100644 --- a/django_netjsongraph/base/admin.py +++ b/django_netjsongraph/base/admin.py @@ -62,7 +62,7 @@ def get_actions(self, request): actions['delete_selected'] = delete return actions - def change_view(self, request, pk, form_url='', extra_context=None): + def change_view(self, request, object_id, form_url='', extra_context=None): extra_context = extra_context or {} prefix = 'admin:{0}_{1}'.format(self.opts.app_label, self.model.__name__.lower()) text = _('View topology graph') @@ -70,14 +70,14 @@ def change_view(self, request, pk, form_url='', extra_context=None): 'additional_buttons': [ { 'type': 'button', - 'url': reverse('{0}_visualize'.format(prefix), args=[pk]), + 'url': reverse('{0}_visualize'.format(prefix), args=[object_id]), 'class': 'visualizelink', 'value': text, 'title': '{0} (ALT+P)'.format(text) } ] }) - return super(AbstractTopologyAdmin, self).change_view(request, pk, form_url, extra_context) + return super(AbstractTopologyAdmin, self).change_view(request, object_id, form_url, extra_context) def get_urls(self): options = getattr(self.model, '_meta') diff --git a/django_netjsongraph/base/link.py b/django_netjsongraph/base/link.py index f48158e..0efe347 100644 --- a/django_netjsongraph/base/link.py +++ b/django_netjsongraph/base/link.py @@ -23,11 +23,14 @@ class AbstractLink(TimeStampedEditableModel): """ NetJSON NetworkGraph Link Object implementation """ - topology = models.ForeignKey('django_netjsongraph.Topology') + topology = models.ForeignKey('django_netjsongraph.Topology', + on_delete=models.CASCADE) source = models.ForeignKey('django_netjsongraph.Node', - related_name='source_link_set') + related_name='source_link_set', + on_delete=models.CASCADE) target = models.ForeignKey('django_netjsongraph.Node', - related_name='target_link_set') + related_name='target_link_set', + on_delete=models.CASCADE) cost = models.FloatField() cost_text = models.CharField(max_length=24, blank=True) STATUS = Choices('up', 'down') diff --git a/django_netjsongraph/base/node.py b/django_netjsongraph/base/node.py index 5d5c617..8174907 100644 --- a/django_netjsongraph/base/node.py +++ b/django_netjsongraph/base/node.py @@ -15,7 +15,8 @@ class AbstractNode(TimeStampedEditableModel): """ NetJSON NetworkGraph Node Object implementation """ - topology = models.ForeignKey('django_netjsongraph.Topology') + topology = models.ForeignKey('django_netjsongraph.Topology', + on_delete=models.CASCADE) label = models.CharField(max_length=64, blank=True) # netjson ID and local_addresses addresses = models.CharField(max_length=510, db_index=True) diff --git a/django_netjsongraph/base/snapshot.py b/django_netjsongraph/base/snapshot.py index 2792ed0..1ca3823 100644 --- a/django_netjsongraph/base/snapshot.py +++ b/django_netjsongraph/base/snapshot.py @@ -8,7 +8,8 @@ class AbstractSnapshot(TimeStampedEditableModel): """ NetJSON NetworkGraph Snapshot implementation """ - topology = models.ForeignKey('django_netjsongraph.topology') + topology = models.ForeignKey('django_netjsongraph.topology', + on_delete=models.CASCADE) data = models.TextField(blank=False) date = models.DateField(auto_now=True) diff --git a/django_netjsongraph/base/topology.py b/django_netjsongraph/base/topology.py index 8b03777..e6fc71d 100644 --- a/django_netjsongraph/base/topology.py +++ b/django_netjsongraph/base/topology.py @@ -3,8 +3,8 @@ from datetime import datetime, timedelta from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse from django.db import models +from django.urls import reverse from django.utils.encoding import python_2_unicode_compatible from django.utils.functional import cached_property from django.utils.module_loading import import_string diff --git a/django_netjsongraph/tests/base/test_admin.py b/django_netjsongraph/tests/base/test_admin.py index b5ee572..8bd57d5 100644 --- a/django_netjsongraph/tests/base/test_admin.py +++ b/django_netjsongraph/tests/base/test_admin.py @@ -1,6 +1,6 @@ import responses from django.contrib.auth import get_user_model -from django.core.urlresolvers import reverse +from django.urls import reverse from ...apps import DjangoNetjsongraphConfig as appconfig from ..utils import LoadMixin diff --git a/requirements.txt b/requirements.txt index dfd68ef..dc59d61 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -django>=1.11,<1.12 +django>=1.11,<2.1 djangorestframework>=3.3,<3.8 django-model-utils netdiff>=0.5.1,<=6.0 diff --git a/tests/settings.py b/tests/settings.py index f82f858..aa59942 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -29,7 +29,7 @@ 'rest_framework' ] -MIDDLEWARE_CLASSES = [ +MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', diff --git a/tests/urls.py b/tests/urls.py index f395a0a..a93962b 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -8,7 +8,7 @@ urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), url(r'^api/', include(netjsongraph_api)), url(r'', include(netjsongraph_visualizer)), ]