From f052bbc36e5849060aa347a263d7be56f0218a72 Mon Sep 17 00:00:00 2001 From: Tyler Bigler Date: Mon, 26 Nov 2018 14:16:37 -0500 Subject: [PATCH] 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. --- ...ial_squashed_0010_customfield_filter_logic.py | 16 +++++++--------- netbox/extras/migrations/0008_reports.py | 15 +++++++-------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/netbox/extras/migrations/0001_initial_squashed_0010_customfield_filter_logic.py b/netbox/extras/migrations/0001_initial_squashed_0010_customfield_filter_logic.py index 0ac826ba4..1021c20c5 100644 --- a/netbox/extras/migrations/0001_initial_squashed_0010_customfield_filter_logic.py +++ b/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: diff --git a/netbox/extras/migrations/0008_reports.py b/netbox/extras/migrations/0008_reports.py index fbfde2cba..9c26f50ba 100644 --- a/netbox/extras/migrations/0008_reports.py +++ b/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: