Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions NOTES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ Dependency changes

* NAV 5.3 requires PostgreSQL to be at least version *9.6*.

Furthermore, NAV 5.3 moves to Django 3.2, resulting in several changes in
version dependencies of related libraries:

* :mod:`Django`>=3.2,<3.3
* :mod:`django-crispy-forms`>=1.8,<1.9
* :mod:`djangorestframework`>=3.12,<3.13
* :mod:`markdown`>=3.3,<3.4

Backwards incompatible changes
------------------------------
Expand Down
2 changes: 1 addition & 1 deletion doc/howto/generic-install-from-source.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ wheels for your platform). These include the ``psycopg2`` driver and the

The current Python requirements are as follows:

.. literalinclude:: ../../requirements/django111.txt
.. literalinclude:: ../../requirements/django32.txt
:language: text

.. literalinclude:: ../../requirements/base.txt
Expand Down
3 changes: 0 additions & 3 deletions python/nav/auditlog/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,5 @@
from __future__ import unicode_literals


default_app_config = 'nav.auditlog.apps.AuditlogConfig'


def find_modelname(obj):
return obj._meta.db_table
6 changes: 3 additions & 3 deletions python/nav/auditlog/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@

from __future__ import unicode_literals, absolute_import

from django.conf.urls import url
from django.urls import re_path

from .views import AuditlogOverview, AuditlogNetboxDetail


urlpatterns = [
url(r'^$', AuditlogOverview.as_view(), name='auditlog-home'),
url(
re_path(r'^$', AuditlogOverview.as_view(), name='auditlog-home'),
re_path(
r'^netbox/(?P<netboxid>\d+)$',
AuditlogNetboxDetail.as_view(),
name='auditlog-netbox-detail',
Expand Down
2 changes: 0 additions & 2 deletions python/nav/django/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
"""Django customization for NAV."""

default_app_config = 'nav.django.apps.NavDjangoConfig'
2 changes: 2 additions & 0 deletions python/nav/django/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@
'django.contrib.postgres',
)

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
'DEFAULT_PAGINATION_CLASS': 'nav.web.api.v1.NavPageNumberPagination',
Expand Down
74 changes: 37 additions & 37 deletions python/nav/django/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import sys
import os
import logging
from django.conf.urls import include, url
from django.urls import re_path, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

from nav.config import find_config_dir
Expand All @@ -30,42 +30,42 @@
_logger = logging.getLogger(__name__)

urlpatterns += [
url(r'^status/', include('nav.web.status2.urls')),
url(r'^ajax/', include('nav.web.ajax.urls')),
url(r'^business/', include('nav.web.business.urls')),
url(r'^alertprofiles/', include('nav.web.alertprofiles.urls')),
url(r'^api/', include(('nav.web.api.urls', 'api'))),
# url(r'^api/', include(('nav.web.api.urls', 'api'), namespace='api')),
url(r'^arnold/', include('nav.web.arnold.urls')),
url(r'^devicehistory/', include('nav.web.devicehistory.urls')),
url(r'^geomap/', include('nav.web.geomap.urls')),
url(r'^search/', include('nav.web.info.urls')),
url(r'^ipdevinfo/', include('nav.web.ipdevinfo.urls')),
url(r'^l2trace/', include('nav.web.l2trace.urls')),
url(r'^machinetracker/', include('nav.web.machinetracker.urls')),
url(r'^macwatch/', include('nav.web.macwatch.urls')),
url(r'^maintenance/', include('nav.web.maintenance.urls')),
url(r'^messages/', include('nav.web.messages.urls')),
url(r'^neighbors/', include('nav.web.neighbors.urls')),
url(r'^netmap/', include('nav.web.netmap.urls')),
url(r'^networkexplorer/', include('nav.web.networkexplorer.urls')),
url(r'^portadmin/', include('nav.web.portadmin.urls')),
url(r'^radius/', include('nav.web.radius.urls')),
url(r'^report/', include('nav.web.report.urls')),
url(r'^seeddb/', include('nav.web.seeddb.urls')),
url(r'^stats/', include('nav.web.sortedstats.urls')),
url(r'^syslogger/', include('nav.web.syslogger.urls')),
url(r'^ipam/', include('nav.web.ipam.urls')),
url(r'^threshold/', include('nav.web.threshold.urls')),
url(r'^graphite/', include('nav.web.graphite.urls')),
url(r'^navlets/', include('nav.web.navlets.urls')),
url(r'^watchdog/', include('nav.web.watchdog.urls')),
url(r'^useradmin/', include('nav.web.useradmin.urls')),
url(r'^styleguide/', styleguide_index),
url(r'^refresh_session/', refresh_session, name='refresh-session'),
url(r'^auditlog/', include('nav.auditlog.urls')),
url(r'^interfaces/', include('nav.web.interface_browser.urls')),
url(r'^500/', force_500),
re_path(r'^status/', include('nav.web.status2.urls')),
re_path(r'^ajax/', include('nav.web.ajax.urls')),
re_path(r'^business/', include('nav.web.business.urls')),
re_path(r'^alertprofiles/', include('nav.web.alertprofiles.urls')),
re_path(r'^api/', include(('nav.web.api.urls', 'api'))),
# re_path(r'^api/', include(('nav.web.api.urls', 'api'), namespace='api')),
re_path(r'^arnold/', include('nav.web.arnold.urls')),
re_path(r'^devicehistory/', include('nav.web.devicehistory.urls')),
re_path(r'^geomap/', include('nav.web.geomap.urls')),
re_path(r'^search/', include('nav.web.info.urls')),
re_path(r'^ipdevinfo/', include('nav.web.ipdevinfo.urls')),
re_path(r'^l2trace/', include('nav.web.l2trace.urls')),
re_path(r'^machinetracker/', include('nav.web.machinetracker.urls')),
re_path(r'^macwatch/', include('nav.web.macwatch.urls')),
re_path(r'^maintenance/', include('nav.web.maintenance.urls')),
re_path(r'^messages/', include('nav.web.messages.urls')),
re_path(r'^neighbors/', include('nav.web.neighbors.urls')),
re_path(r'^netmap/', include('nav.web.netmap.urls')),
re_path(r'^networkexplorer/', include('nav.web.networkexplorer.urls')),
re_path(r'^portadmin/', include('nav.web.portadmin.urls')),
re_path(r'^radius/', include('nav.web.radius.urls')),
re_path(r'^report/', include('nav.web.report.urls')),
re_path(r'^seeddb/', include('nav.web.seeddb.urls')),
re_path(r'^stats/', include('nav.web.sortedstats.urls')),
re_path(r'^syslogger/', include('nav.web.syslogger.urls')),
re_path(r'^ipam/', include('nav.web.ipam.urls')),
re_path(r'^threshold/', include('nav.web.threshold.urls')),
re_path(r'^graphite/', include('nav.web.graphite.urls')),
re_path(r'^navlets/', include('nav.web.navlets.urls')),
re_path(r'^watchdog/', include('nav.web.watchdog.urls')),
re_path(r'^useradmin/', include('nav.web.useradmin.urls')),
re_path(r'^styleguide/', styleguide_index),
re_path(r'^refresh_session/', refresh_session, name='refresh-session'),
re_path(r'^auditlog/', include('nav.auditlog.urls')),
re_path(r'^interfaces/', include('nav.web.interface_browser.urls')),
re_path(r'^500/', force_500),
]

# Load local url-config
Expand Down
6 changes: 3 additions & 3 deletions python/nav/django/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from decimal import Decimal, InvalidOperation

import six
from django.utils.translation import ugettext
from django.utils.translation import gettext
from django.core.exceptions import ValidationError


Expand Down Expand Up @@ -66,12 +66,12 @@ def validate_hstore(value):
else:
dictionary = value
except ValueError as e:
raise ValidationError(ugettext(u'Invalid JSON: {0}').format(e))
raise ValidationError(gettext(u'Invalid JSON: {0}').format(e))

# ensure is a dictionary
if not isinstance(dictionary, dict):
raise ValidationError(
ugettext(u'No lists or values allowed, only dictionaries')
gettext(u'No lists or values allowed, only dictionaries')
)

value = json.dumps(dictionary, cls=JSONBytesEncoder)
Expand Down
3 changes: 2 additions & 1 deletion python/nav/ipdevpoll/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
"""ipdevpoll signals, using Django signals framework."""
import django.dispatch

netbox_type_changed = django.dispatch.Signal(providing_args=["netbox_id", "new_type"])
# providing args: "netbox_id", "new_type"
netbox_type_changed = django.dispatch.Signal()
2 changes: 0 additions & 2 deletions python/nav/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
#
"""Django ORM wrapper for the NAV manage database"""

default_app_config = 'nav.models.apps.NavModelsConfig'

# from nav.bootstrap import bootstrap_django
#
# bootstrap_django(__file__)
4 changes: 2 additions & 2 deletions python/nav/models/manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ class NetboxEntity(models.Model):
model_name = VarcharField(null=True)
alias = VarcharField(null=True)
asset_id = VarcharField(null=True)
fru = models.NullBooleanField(verbose_name='Is a field replaceable unit')
fru = models.BooleanField(null=True, verbose_name='Is a field replaceable unit')
mfg_date = models.DateTimeField(null=True)
uris = VarcharField(null=True)
gone_since = models.DateTimeField(null=True)
Expand Down Expand Up @@ -2515,7 +2515,7 @@ class IpdevpollJobLog(models.Model):
job_name = VarcharField(null=False, blank=False)
end_time = models.DateTimeField(auto_now_add=True, null=False)
duration = models.FloatField(null=True)
success = models.NullBooleanField(default=False, null=True)
success = models.BooleanField(default=False, null=True)
interval = models.IntegerField(null=True)

class Meta(object):
Expand Down
2 changes: 0 additions & 2 deletions python/nav/web/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@

_logger = logging.getLogger(__name__)

default_app_config = 'nav.web.apps.NAVWebAppConfig'

webfrontConfig = configparser.ConfigParser()
_configfile = find_config_file(os.path.join('webfront', 'webfront.conf'))
if _configfile:
Expand Down
10 changes: 5 additions & 5 deletions python/nav/web/ajax/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,28 @@
for open access.
"""

from django.conf.urls import url
from django.urls import re_path
from nav.web.ajax import views


# URL's that does not require authorization
urlpatterns = [
url(
re_path(
r'^open/roommapper/rooms/$',
views.get_rooms_with_position,
name='room-positions',
),
url(
re_path(
r'^open/roommapper/rooms/(?P<roomid>.+)/$',
views.get_rooms_with_position,
name='room-position',
),
url(
re_path(
r'^open/roommapper/locations/(?P<locationid>.+)/$',
views.get_rooms_with_position_for_location,
name='location-position',
),
url(
re_path(
r'^open/neighbormap/(?P<netboxid>\d+)/$',
views.get_neighbors,
name='ajax-get-neighbors',
Expand Down
Loading