Browse Source

Fixes #1576: Move PostgreSQL validation logic into the relevant migration

Jeremy Stretch 7 years ago
parent
commit
b04ade8060
2 changed files with 22 additions and 19 deletions
  1. 22 1
      netbox/extras/migrations/0008_reports.py
  2. 0 18
      netbox/netbox/__init__.py

+ 22 - 1
netbox/extras/migrations/0008_reports.py

@@ -1,11 +1,31 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 # Generated by Django 1.11.4 on 2017-09-26 21:25
 # Generated by Django 1.11.4 on 2017-09-26 21:25
 from __future__ import unicode_literals
 from __future__ import unicode_literals
+from distutils.version import StrictVersion
 
 
 from django.conf import settings
 from django.conf import settings
 import django.contrib.postgres.fields.jsonb
 import django.contrib.postgres.fields.jsonb
-from django.db import migrations, models
+from django.db import connection, migrations, models
 import django.db.models.deletion
 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):
 class Migration(migrations.Migration):
@@ -16,6 +36,7 @@ class Migration(migrations.Migration):
     ]
     ]
 
 
     operations = [
     operations = [
+        migrations.RunPython(verify_postgresql_version),
         migrations.CreateModel(
         migrations.CreateModel(
             name='ReportResult',
             name='ReportResult',
             fields=[
             fields=[

+ 0 - 18
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