From b04ade8060d52bdd798020cd1cfb641a6cb1b5dc Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 12 Oct 2017 16:02:15 -0400 Subject: [PATCH] Fixes #1576: Move PostgreSQL validation logic into the relevant migration --- netbox/extras/migrations/0008_reports.py | 23 ++++++++++++++++++++++- netbox/netbox/__init__.py | 18 ------------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/netbox/extras/migrations/0008_reports.py b/netbox/extras/migrations/0008_reports.py index c9fc16cc3..8d91ed4bd 100644 --- a/netbox/extras/migrations/0008_reports.py +++ b/netbox/extras/migrations/0008_reports.py @@ -1,11 +1,31 @@ # -*- coding: utf-8 -*- # Generated by Django 1.11.4 on 2017-09-26 21:25 from __future__ import unicode_literals +from distutils.version import StrictVersion from django.conf import settings import django.contrib.postgres.fields.jsonb -from django.db import migrations, models +from django.db import connection, migrations, models import django.db.models.deletion +from django.db.utils import OperationalError + + +def verify_postgresql_version(apps, schema_editor): + """ + Verify that PostgreSQL is version 9.4 or higher. + """ + try: + with connection.cursor() as cursor: + cursor.execute("SELECT VERSION()") + row = cursor.fetchone() + pg_version = row[0].split()[1] + if StrictVersion(pg_version) < StrictVersion('9.4.0'): + raise Exception("PostgreSQL 9.4.0 or higher is required ({} found). Upgrade PostgreSQL and then run migrations again.".format(pg_version)) + + # Skip if the database is missing (e.g. for CI testing) or misconfigured. + except OperationalError: + pass + class Migration(migrations.Migration): @@ -16,6 +36,7 @@ class Migration(migrations.Migration): ] operations = [ + migrations.RunPython(verify_postgresql_version), migrations.CreateModel( name='ReportResult', fields=[ diff --git a/netbox/netbox/__init__.py b/netbox/netbox/__init__.py index 361659e58..e69de29bb 100644 --- a/netbox/netbox/__init__.py +++ b/netbox/netbox/__init__.py @@ -1,18 +0,0 @@ -from distutils.version import StrictVersion - -from django.db import connection -from django.db.utils import OperationalError - - -# NetBox v2.2 and later requires PostgreSQL 9.4 or higher. -try: - with connection.cursor() as cursor: - cursor.execute("SELECT VERSION()") - row = cursor.fetchone() - pg_version = row[0].split()[1] - if StrictVersion(pg_version) < StrictVersion('9.4.0'): - raise Exception("PostgreSQL 9.4.0 or higher is required. ({} found)".format(pg_version)) - -# Skip if the database is missing (e.g. for CI testing) or misconfigured. -except OperationalError: - pass