Просмотр исходного кода

Refactor Extras Migration Version Check (#2604)

* Add constant for DB_MINIMUM_VERSION

* Refactor verify_postgresql_version to use Django connection pg_version method for comparing versions.

* Remove StrictVersion import

* Remove DB_MINIMUM_VERSION as not necessary in constants.

* Define DB_MINIMUM_VERSION locally to freeze to migration.

* Refactor database version verification to use django builtin methods.
Tyler Bigler 7 лет назад
Родитель
Сommit
f052bbc36e

+ 7 - 9
netbox/extras/migrations/0001_initial_squashed_0010_customfield_filter_logic.py

@@ -2,9 +2,6 @@
 # Generated by Django 1.11.14 on 2018-07-31 02:19
 from __future__ import unicode_literals
 
-import re
-from distutils.version import StrictVersion
-
 from django.conf import settings
 import django.contrib.postgres.fields.jsonb
 from django.db import connection, migrations, models
@@ -19,13 +16,14 @@ def verify_postgresql_version(apps, schema_editor):
     """
     Verify that PostgreSQL is version 9.4 or higher.
     """
+    # https://www.postgresql.org/docs/current/libpq-status.html#LIBPQ-PQSERVERVERSION
+    DB_MINIMUM_VERSION = 90400  # 9.4.0
+
     try:
-        with connection.cursor() as cursor:
-            cursor.execute("SELECT VERSION()")
-            row = cursor.fetchone()
-            pg_version = re.match(r'^PostgreSQL (\d+\.\d+(\.\d+)?)', row[0]).group(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))
+        pg_version = connection.pg_version
+
+        if pg_version < DB_MINIMUM_VERSION:
+            raise Exception("PostgreSQL 9.4.0 ({}) or higher is required ({} found). Upgrade PostgreSQL and then run migrations again.".format(DB_MINIMUM_VERSION, pg_version))
 
     # Skip if the database is missing (e.g. for CI testing) or misconfigured.
     except OperationalError:

+ 7 - 8
netbox/extras/migrations/0008_reports.py

@@ -1,8 +1,6 @@
 # -*- 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
-import re
 
 from django.conf import settings
 import django.contrib.postgres.fields.jsonb
@@ -15,13 +13,14 @@ def verify_postgresql_version(apps, schema_editor):
     """
     Verify that PostgreSQL is version 9.4 or higher.
     """
+    # https://www.postgresql.org/docs/current/libpq-status.html#LIBPQ-PQSERVERVERSION
+    DB_MINIMUM_VERSION = 90400  # 9.4.0
+
     try:
-        with connection.cursor() as cursor:
-            cursor.execute("SELECT VERSION()")
-            row = cursor.fetchone()
-            pg_version = re.match(r'^PostgreSQL (\d+\.\d+(\.\d+)?)', row[0]).group(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))
+        pg_version = connection.pg_version
+
+        if pg_version < DB_MINIMUM_VERSION:
+            raise Exception("PostgreSQL 9.4.0 ({}) or higher is required ({} found). Upgrade PostgreSQL and then run migrations again.".format(DB_MINIMUM_VERSION, pg_version))
 
     # Skip if the database is missing (e.g. for CI testing) or misconfigured.
     except OperationalError: