diff --git a/migrations/0001_initial.py b/migrations/0001_initial.py index 953bd0a..8e09b04 100644 --- a/migrations/0001_initial.py +++ b/migrations/0001_initial.py @@ -6,6 +6,7 @@ import django.contrib.postgres.fields.jsonb from django.db import migrations, models +from ..models import install_supports_jsonfield class Migration(migrations.Migration): @@ -13,18 +14,34 @@ class Migration(migrations.Migration): dependencies = [ ] - - operations = [ - migrations.CreateModel( - name='DataPoint', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('source', models.CharField(max_length=1024)), - ('generator', models.CharField(max_length=1024)), - ('created', models.DateTimeField()), - ('generated_at', django.contrib.gis.db.models.fields.PointField(null=True, srid=4326)), - ('recorded', models.DateTimeField()), - ('properties', django.contrib.postgres.fields.jsonb.JSONField()), - ], - ), - ] + + if install_supports_jsonfield(): + operations = [ + migrations.CreateModel( + name='DataPoint', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('source', models.CharField(max_length=1024)), + ('generator', models.CharField(max_length=1024)), + ('created', models.DateTimeField()), + ('generated_at', django.contrib.gis.db.models.fields.PointField(null=True, srid=4326)), + ('recorded', models.DateTimeField()), + ('properties', django.contrib.postgres.fields.jsonb.JSONField()), + ], + ), + ] + else: + operations = [ + migrations.CreateModel( + name='DataPoint', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('source', models.CharField(max_length=1024)), + ('generator', models.CharField(max_length=1024)), + ('created', models.DateTimeField()), + ('generated_at', django.contrib.gis.db.models.fields.PointField(null=True, srid=4326)), + ('recorded', models.DateTimeField()), + ('properties', models.TextField(max_length=(32 * 1024 * 1024 * 1024))), + ], + ), + ] diff --git a/migrations/0002_databundle.py b/migrations/0002_databundle.py index dbbed22..64e13d0 100644 --- a/migrations/0002_databundle.py +++ b/migrations/0002_databundle.py @@ -5,6 +5,7 @@ import django.contrib.postgres.fields.jsonb from django.db import migrations, models +from ..models import install_supports_jsonfield class Migration(migrations.Migration): @@ -12,14 +13,27 @@ class Migration(migrations.Migration): ('passive_data_kit', '0001_initial'), ] - operations = [ - migrations.CreateModel( - name='DataBundle', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('recorded', models.DateTimeField()), - ('properties', django.contrib.postgres.fields.jsonb.JSONField()), - ('processed', models.BooleanField(default=False)), - ], - ), - ] + if install_supports_jsonfield(): + operations = [ + migrations.CreateModel( + name='DataBundle', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('recorded', models.DateTimeField()), + ('properties', django.contrib.postgres.fields.jsonb.JSONField()), + ('processed', models.BooleanField(default=False)), + ], + ), + ] + else: + operations = [ + migrations.CreateModel( + name='DataBundle', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('recorded', models.DateTimeField()), + ('properties', models.TextField(max_length=(32 * 1024 * 1024 * 1024))), + ('processed', models.BooleanField(default=False)), + ], + ), + ] diff --git a/migrations/0009_reportjob.py b/migrations/0009_reportjob.py index 781bc30..d8e681a 100644 --- a/migrations/0009_reportjob.py +++ b/migrations/0009_reportjob.py @@ -7,6 +7,7 @@ from django.db import migrations, models import django.db.models.deletion +from ..models import install_supports_jsonfield class Migration(migrations.Migration): @@ -14,21 +15,40 @@ class Migration(migrations.Migration): migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('passive_data_kit', '0008_datapointvisualizations'), ] - - operations = [ - migrations.CreateModel( - name='ReportJob', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('requested', models.DateTimeField(db_index=True)), - ('started', models.DateTimeField(db_index=True)), - ('completed', models.DateTimeField(db_index=True)), - ('parameters', django.contrib.postgres.fields.jsonb.JSONField()), - ('destination', models.EmailField(max_length=1024)), - ('report', models.FileField(upload_to='pdk_reports')), - ('generator_identifier', models.CharField(db_index=True, max_length=1024)), - ('last_updated', models.DateTimeField(db_index=True)), - ('requester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] + + if install_supports_jsonfield(): + operations = [ + migrations.CreateModel( + name='ReportJob', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('requested', models.DateTimeField(db_index=True)), + ('started', models.DateTimeField(db_index=True)), + ('completed', models.DateTimeField(db_index=True)), + ('parameters', django.contrib.postgres.fields.jsonb.JSONField()), + ('destination', models.EmailField(max_length=1024)), + ('report', models.FileField(upload_to='pdk_reports')), + ('generator_identifier', models.CharField(db_index=True, max_length=1024)), + ('last_updated', models.DateTimeField(db_index=True)), + ('requester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] + else: + operations = [ + migrations.CreateModel( + name='ReportJob', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('requested', models.DateTimeField(db_index=True)), + ('started', models.DateTimeField(db_index=True)), + ('completed', models.DateTimeField(db_index=True)), + ('parameters', models.TextField(max_length=(32 * 1024 * 1024 * 1024))), + ('destination', models.EmailField(max_length=1024)), + ('report', models.FileField(upload_to='pdk_reports')), + ('generator_identifier', models.CharField(db_index=True, max_length=1024)), + ('last_updated', models.DateTimeField(db_index=True)), + ('requester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/models.py b/models.py index f09bd39..04f0b21 100644 --- a/models.py +++ b/models.py @@ -26,15 +26,9 @@ def generator_label(identifier): return identifier -_CACHED_SUPPORTS_JSON_FIELD = None def install_supports_jsonfield(): - if _CACHED_SUPPORTS_JSON_FIELD is not None: - return _CACHED_SUPPORTS_JSON_FIELD - - print(connection.backend_info) - - return False + return (connection.pg_version >= 90400) class DataPoint(models.Model): @@ -47,11 +41,19 @@ class DataPoint(models.Model): recorded = models.DateTimeField(db_index=True) - properties = JSONField() + if install_supports_jsonfield(): + properties = JSONField() + else: + properties = models.TextField(max_length=(32 * 1024 * 1024 * 1024)) + class DataBundle(models.Model): recorded = models.DateTimeField(db_index=True) - properties = JSONField() + + if install_supports_jsonfield(): + properties = JSONField() + else: + properties = models.TextField(max_length=(32 * 1024 * 1024 * 1024)) processed = models.BooleanField(default=False, db_index=True) @@ -139,7 +141,10 @@ class ReportJob(models.Model): started = models.DateTimeField(db_index=True, null=True, blank=True) completed = models.DateTimeField(db_index=True, null=True, blank=True) - parameters = JSONField() + if install_supports_jsonfield(): + parameters = JSONField() + else: + parameters = models.TextField(max_length=(32 * 1024 * 1024 * 1024)) report = models.FileField(upload_to='pdk_reports', null=True, blank=True)