From e0e69589f7ffe68bdad1170ac4aed5944131c7a1 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 25 Jan 2024 14:59:32 -0500 Subject: [PATCH 1/4] Integrations: add created and updated fields to model --- .../0011_add_created_and_updated_fields.py | 35 +++++++++++++++++++ readthedocs/integrations/models.py | 9 ++--- 2 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py diff --git a/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py b/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py new file mode 100644 index 00000000000..ec8b3902c29 --- /dev/null +++ b/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py @@ -0,0 +1,35 @@ +# Generated by Django 4.2.9 on 2024-01-25 17:46 + +import django.utils.timezone +import django_extensions.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("integrations", "0010_remove_old_jsonfields"), + ] + + operations = [ + migrations.AlterModelOptions( + name="integration", + options={"get_latest_by": "modified"}, + ), + migrations.AddField( + model_name="integration", + name="created", + field=django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, + default=django.utils.timezone.now, + verbose_name="created", + ), + preserve_default=False, + ), + migrations.AddField( + model_name="integration", + name="modified", + field=django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name="modified" + ), + ), + ] diff --git a/readthedocs/integrations/models.py b/readthedocs/integrations/models.py index f508d0c4c2f..06a1d153f73 100644 --- a/readthedocs/integrations/models.py +++ b/readthedocs/integrations/models.py @@ -1,18 +1,15 @@ """Integration models for external services.""" - import json import re import uuid -from django.contrib.contenttypes.fields import ( - GenericForeignKey, - GenericRelation, -) +from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.contrib.contenttypes.models import ContentType from django.db import models, transaction from django.utils.crypto import get_random_string from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ +from django_extensions.db.models import TimeStampedModel from pygments import highlight from pygments.formatters import HtmlFormatter from pygments.lexers import JsonLexer @@ -262,7 +259,7 @@ def create(self, **kwargs): return obj -class Integration(models.Model): +class Integration(TimeStampedModel): """Inbound webhook integration for projects.""" From 28956a69004b54d22bfe3bd83a5a1395894370da Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Mon, 29 Jan 2024 13:53:19 -0500 Subject: [PATCH 2/4] Set fields as nullable --- .../0011_add_created_and_updated_fields.py | 7 ++++++- readthedocs/integrations/models.py | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py b/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py index ec8b3902c29..63c44208c7d 100644 --- a/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py +++ b/readthedocs/integrations/migrations/0011_add_created_and_updated_fields.py @@ -22,6 +22,8 @@ class Migration(migrations.Migration): auto_now_add=True, default=django.utils.timezone.now, verbose_name="created", + null=True, + blank=True, ), preserve_default=False, ), @@ -29,7 +31,10 @@ class Migration(migrations.Migration): model_name="integration", name="modified", field=django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" + auto_now=True, + verbose_name="modified", + null=True, + blank=True, ), ), ] diff --git a/readthedocs/integrations/models.py b/readthedocs/integrations/models.py index 06a1d153f73..ea812aee9fd 100644 --- a/readthedocs/integrations/models.py +++ b/readthedocs/integrations/models.py @@ -9,6 +9,7 @@ from django.utils.crypto import get_random_string from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ +from django_extensions.db.fields import CreationDateTimeField, ModificationDateTimeField from django_extensions.db.models import TimeStampedModel from pygments import highlight from pygments.formatters import HtmlFormatter @@ -277,6 +278,19 @@ class Integration(TimeStampedModel): INTEGRATIONS = WEBHOOK_INTEGRATIONS + # Overridden from TimeStampedModel just to allow null values. + # TODO: remove after deploy. + created = CreationDateTimeField( + _("created"), + null=True, + blank=True, + ) + modified = ModificationDateTimeField( + _("modified"), + null=True, + blank=True, + ) + project = models.ForeignKey( Project, related_name="integrations", From 03a6be7eea7443620bb7deeed8462f1dcac70c37 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Mon, 29 Jan 2024 14:21:52 -0500 Subject: [PATCH 3/4] Add data migration --- .../0012_migrate_timestamp_fields.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py diff --git a/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py b/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py new file mode 100644 index 00000000000..634771e199b --- /dev/null +++ b/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.9 on 2024-01-29 19:16 + +from django.db import migrations +from django.utils import timezone + + +def forwards_func(apps, schema_editor): + Integration = apps.get_model("integrations", "Integration") + Integration.objects.filter(created=None).update(created=timezone.now()) + Integration.objects.filter(modified=None).update(modified=timezone.now()) + + +class Migration(migrations.Migration): + + dependencies = [ + ("integrations", "0011_add_created_and_updated_fields"), + ] + + operations = [migrations.RunPython(forwards_func)] From 9139cde7460e68ecafc3aa87a84f739ff8025a22 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Mon, 29 Jan 2024 14:35:48 -0500 Subject: [PATCH 4/4] Format --- .../integrations/migrations/0012_migrate_timestamp_fields.py | 1 - 1 file changed, 1 deletion(-) diff --git a/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py b/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py index 634771e199b..ea15c7dd8d7 100644 --- a/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py +++ b/readthedocs/integrations/migrations/0012_migrate_timestamp_fields.py @@ -11,7 +11,6 @@ def forwards_func(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ("integrations", "0011_add_created_and_updated_fields"), ]