diff --git a/addons/bitbucket/migrations/0001_initial.py b/addons/bitbucket/migrations/0001_initial.py index 9ee184730e4..dfde90f1fe5 100644 --- a/addons/bitbucket/migrations/0001_initial.py +++ b/addons/bitbucket/migrations/0001_initial.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-07 15:19 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals -from django.conf import settings +import addons.base.models from django.db import migrations, models -import django.db.models.deletion +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -14,8 +15,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osf', '0042_auto_20170707_1019'), ] operations = [ @@ -23,34 +22,34 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('user', models.TextField(blank=True, null=True)), ('repo', models.TextField(blank=True, null=True)), ('hook_id', models.TextField(blank=True, null=True)), - ('external_account', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_bitbucket_node_settings', to='osf.ExternalAccount')), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_bitbucket_node_settings', to='osf.AbstractNode')), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_bitbucket_user_settings', to=settings.AUTH_USER_MODEL)), ], options={ 'abstract': False, }, - ), - migrations.AddField( - model_name='nodesettings', - name='user_settings', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_bitbucket.UserSettings'), + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/bitbucket/migrations/0002_auto_20170808_1140.py b/addons/bitbucket/migrations/0002_auto_20170808_1140.py deleted file mode 100644 index de53c330e55..00000000000 --- a/addons/bitbucket/migrations/0002_auto_20170808_1140.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-08-08 16:40 -from __future__ import unicode_literals -import datetime -import pytz - -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_bitbucket', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/bitbucket/migrations/0002_auto_20220817_1915.py b/addons/bitbucket/migrations/0002_auto_20220817_1915.py new file mode 100644 index 00000000000..6646f72e6c5 --- /dev/null +++ b/addons/bitbucket/migrations/0002_auto_20220817_1915.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2022-08-17 19:15 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('addons_bitbucket', '0001_initial'), + ('osf', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='usersettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_bitbucket_user_settings', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='nodesettings', + name='external_account', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_bitbucket_node_settings', to='osf.ExternalAccount'), + ), + migrations.AddField( + model_name='nodesettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_bitbucket_node_settings', to='osf.AbstractNode'), + ), + migrations.AddField( + model_name='nodesettings', + name='user_settings', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_bitbucket.UserSettings'), + ), + ] diff --git a/addons/bitbucket/migrations/0003_rename_deleted_field.py b/addons/bitbucket/migrations/0003_rename_deleted_field.py deleted file mode 100644 index 7d109973199..00000000000 --- a/addons/bitbucket/migrations/0003_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_bitbucket', '0002_auto_20170808_1140'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/box/migrations/0001_initial.py b/addons/box/migrations/0001_initial.py index 3bc2dd525ce..f2053798e95 100644 --- a/addons/box/migrations/0001_initial.py +++ b/addons/box/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,8 +22,11 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder_id', models.TextField(blank=True, null=True)), ('folder_name', models.TextField(blank=True, null=True)), ('folder_path', models.TextField(blank=True, null=True)), @@ -28,17 +34,22 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/box/migrations/0002_auto_20170323_1534.py b/addons/box/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/box/migrations/0002_auto_20170323_1534.py rename to addons/box/migrations/0002_auto_20220817_1915.py index c0a358d0734..58be50b8bea 100644 --- a/addons/box/migrations/0002_auto_20170323_1534.py +++ b/addons/box/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,9 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('addons_box', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('osf', '0001_initial'), - ('addons_box', '0001_initial'), ] operations = [ diff --git a/addons/box/migrations/0003_auto_20170713_1125.py b/addons/box/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index 9dab29b4df2..00000000000 --- a/addons/box/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_box', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/box/migrations/0004_rename_deleted_field.py b/addons/box/migrations/0004_rename_deleted_field.py deleted file mode 100644 index c4a358452d6..00000000000 --- a/addons/box/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_box', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/dataverse/migrations/0001_initial.py b/addons/dataverse/migrations/0001_initial.py index 9ecb0eae070..8f0bdbe9345 100644 --- a/addons/dataverse/migrations/0001_initial.py +++ b/addons/dataverse/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,8 +22,11 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('dataverse_alias', models.TextField(blank=True, null=True)), ('dataverse', models.TextField(blank=True, null=True)), ('dataset_doi', models.TextField(blank=True, null=True)), @@ -30,17 +36,22 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/dataverse/migrations/0002_auto_20170323_1534.py b/addons/dataverse/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/dataverse/migrations/0002_auto_20170323_1534.py rename to addons/dataverse/migrations/0002_auto_20220817_1915.py index 9d61c2effcc..bb10ee76ec4 100644 --- a/addons/dataverse/migrations/0002_auto_20170323_1534.py +++ b/addons/dataverse/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings diff --git a/addons/dataverse/migrations/0003_auto_20170713_1125.py b/addons/dataverse/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index e17632303bd..00000000000 --- a/addons/dataverse/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_dataverse', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/dataverse/migrations/0004_rename_deleted_field.py b/addons/dataverse/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 893865fad4d..00000000000 --- a/addons/dataverse/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_dataverse', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/dropbox/migrations/0001_initial.py b/addons/dropbox/migrations/0001_initial.py index 21c6ac8494c..f62db239046 100644 --- a/addons/dropbox/migrations/0001_initial.py +++ b/addons/dropbox/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,24 +22,32 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder', models.TextField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/dropbox/migrations/0002_auto_20170323_1534.py b/addons/dropbox/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/dropbox/migrations/0002_auto_20170323_1534.py rename to addons/dropbox/migrations/0002_auto_20220817_1915.py index 4f8c0c7f0ec..1de073e684c 100644 --- a/addons/dropbox/migrations/0002_auto_20170323_1534.py +++ b/addons/dropbox/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,9 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('addons_dropbox', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('osf', '0001_initial'), - ('addons_dropbox', '0001_initial'), ] operations = [ diff --git a/addons/dropbox/migrations/0003_auto_20170713_1125.py b/addons/dropbox/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index ce0fcbb8958..00000000000 --- a/addons/dropbox/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_dropbox', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/dropbox/migrations/0004_rename_deleted_field.py b/addons/dropbox/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 5a0c8aa1f71..00000000000 --- a/addons/dropbox/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_dropbox', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/figshare/migrations/0001_initial.py b/addons/figshare/migrations/0001_initial.py index 3bc2dd525ce..f2053798e95 100644 --- a/addons/figshare/migrations/0001_initial.py +++ b/addons/figshare/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,8 +22,11 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder_id', models.TextField(blank=True, null=True)), ('folder_name', models.TextField(blank=True, null=True)), ('folder_path', models.TextField(blank=True, null=True)), @@ -28,17 +34,22 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/figshare/migrations/0002_auto_20170323_1534.py b/addons/figshare/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/figshare/migrations/0002_auto_20170323_1534.py rename to addons/figshare/migrations/0002_auto_20220817_1915.py index efb602d67ca..988ab59f118 100644 --- a/addons/figshare/migrations/0002_auto_20170323_1534.py +++ b/addons/figshare/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings diff --git a/addons/figshare/migrations/0003_auto_20170713_1125.py b/addons/figshare/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index a132859a90b..00000000000 --- a/addons/figshare/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_figshare', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/figshare/migrations/0004_rename_deleted_field.py b/addons/figshare/migrations/0004_rename_deleted_field.py deleted file mode 100644 index e801ec2efd3..00000000000 --- a/addons/figshare/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_figshare', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/forward/migrations/0001_initial.py b/addons/forward/migrations/0001_initial.py index 312bd3f6bc6..54708b319b1 100644 --- a/addons/forward/migrations/0001_initial.py +++ b/addons/forward/migrations/0001_initial.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals import dirtyfields.dirtyfields from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.models.validators +import osf.utils.fields class Migration(migrations.Migration): @@ -20,14 +22,17 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('url', models.URLField(blank=True, max_length=255, null=True)), ('label', models.TextField(blank=True, null=True, validators=[osf.models.validators.validate_no_html])), ], options={ 'abstract': False, }, - bases=(dirtyfields.dirtyfields.DirtyFieldsMixin, models.Model), + bases=(dirtyfields.dirtyfields.DirtyFieldsMixin, models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/forward/migrations/0002_nodesettings_owner.py b/addons/forward/migrations/0002_nodesettings_owner.py index 3f54ddcea69..069e5809be0 100644 --- a/addons/forward/migrations/0002_nodesettings_owner.py +++ b/addons/forward/migrations/0002_nodesettings_owner.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.db import migrations, models diff --git a/addons/forward/migrations/0003_auto_20170713_1125.py b/addons/forward/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index add7aa751da..00000000000 --- a/addons/forward/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_forward', '0002_nodesettings_owner'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/forward/migrations/0004_rename_deleted_field.py b/addons/forward/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 5156df292bf..00000000000 --- a/addons/forward/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_forward', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/github/migrations/0001_initial.py b/addons/github/migrations/0001_initial.py index 57883b46fd6..617fc761a88 100644 --- a/addons/github/migrations/0001_initial.py +++ b/addons/github/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,28 +22,36 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('user', models.TextField(blank=True, null=True)), ('repo', models.TextField(blank=True, null=True)), ('hook_id', models.TextField(blank=True, null=True)), ('hook_secret', models.TextField(blank=True, null=True)), - ('registration_data', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, null=True)), + ('registration_data', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/github/migrations/0002_auto_20170323_1534.py b/addons/github/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/github/migrations/0002_auto_20170323_1534.py rename to addons/github/migrations/0002_auto_20220817_1915.py index 2eaa4a76de9..44b4c2579de 100644 --- a/addons/github/migrations/0002_auto_20170323_1534.py +++ b/addons/github/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,9 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('addons_github', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('osf', '0001_initial'), - ('addons_github', '0001_initial'), ] operations = [ diff --git a/addons/github/migrations/0003_auto_20170713_1125.py b/addons/github/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index 084e1b73a7d..00000000000 --- a/addons/github/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_github', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/github/migrations/0004_rename_deleted_field.py b/addons/github/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 21852a0dbdd..00000000000 --- a/addons/github/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_github', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/gitlab/migrations/0001_initial.py b/addons/gitlab/migrations/0001_initial.py index ea4946e463e..29d64798ec4 100644 --- a/addons/gitlab/migrations/0001_initial.py +++ b/addons/gitlab/migrations/0001_initial.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.4 on 2017-10-24 18:30 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals -from django.conf import settings +import addons.base.models from django.db import migrations, models -import django.db.models.deletion +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -14,8 +15,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osf', '0065_auto_20171024_1330'), ] operations = [ @@ -23,36 +22,36 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('user', models.TextField(blank=True, null=True)), ('repo', models.TextField(blank=True, null=True)), ('repo_id', models.TextField(blank=True, null=True)), ('hook_id', models.TextField(blank=True, null=True)), ('hook_secret', models.TextField(blank=True, null=True)), - ('external_account', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_gitlab_node_settings', to='osf.ExternalAccount')), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_gitlab_node_settings', to='osf.AbstractNode')), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_gitlab_user_settings', to=settings.AUTH_USER_MODEL)), ], options={ 'abstract': False, }, - ), - migrations.AddField( - model_name='nodesettings', - name='user_settings', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_gitlab.UserSettings'), + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/gitlab/migrations/0002_auto_20171121_1426.py b/addons/gitlab/migrations/0002_auto_20171121_1426.py deleted file mode 100644 index 3f0839bfb6c..00000000000 --- a/addons/gitlab/migrations/0002_auto_20171121_1426.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.7 on 2017-11-21 20:26 -from __future__ import unicode_literals -import datetime -import pytz - -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_gitlab', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/gitlab/migrations/0002_auto_20220817_1915.py b/addons/gitlab/migrations/0002_auto_20220817_1915.py new file mode 100644 index 00000000000..a27b74c4726 --- /dev/null +++ b/addons/gitlab/migrations/0002_auto_20220817_1915.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2022-08-17 19:15 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('addons_gitlab', '0001_initial'), + ('osf', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='usersettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_gitlab_user_settings', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='nodesettings', + name='external_account', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_gitlab_node_settings', to='osf.ExternalAccount'), + ), + migrations.AddField( + model_name='nodesettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_gitlab_node_settings', to='osf.AbstractNode'), + ), + migrations.AddField( + model_name='nodesettings', + name='user_settings', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_gitlab.UserSettings'), + ), + ] diff --git a/addons/gitlab/migrations/0003_add_schemes_to_schemeless_hosts.py b/addons/gitlab/migrations/0003_add_schemes_to_schemeless_hosts.py deleted file mode 100644 index a173beb0be5..00000000000 --- a/addons/gitlab/migrations/0003_add_schemes_to_schemeless_hosts.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.13 on 2018-07-16 18:14 -from __future__ import unicode_literals - -import logging - -from django.db import migrations - -logger = logging.getLogger(__name__) - -def add_http_scheme_to_gitlab_host(apps, schema_editor): - ExternalAccount = apps.get_model('osf', 'ExternalAccount') - gitlab_accounts = ExternalAccount.objects.filter(provider='gitlab') - for gitlab_account in gitlab_accounts: - if not gitlab_account.oauth_secret.startswith('https://'): - gitlab_account.oauth_secret = 'https://{}'.format(gitlab_account.oauth_secret) - gitlab_account.save() - - -def revert_add_http_scheme_to_gitlab_host(apps, schema_editor): - logger.warning('No reverse migration for 0003_add_schemes_to_schemeless_hosts.py because we can\'t identify' - ' hostnames that were contained schemes before the initial migration.') - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_gitlab', '0002_auto_20171121_1426'), - ] - - operations = [ - migrations.RunPython(add_http_scheme_to_gitlab_host, revert_add_http_scheme_to_gitlab_host) - ] diff --git a/addons/gitlab/migrations/0004_auto_20190627_2029.py b/addons/gitlab/migrations/0004_auto_20190627_2029.py deleted file mode 100644 index b8294b8472b..00000000000 --- a/addons/gitlab/migrations/0004_auto_20190627_2029.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_gitlab', '0003_add_schemes_to_schemeless_hosts'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/googledrive/migrations/0001_initial.py b/addons/googledrive/migrations/0001_initial.py index 7dee99b2bac..cfb3d91bd54 100644 --- a/addons/googledrive/migrations/0001_initial.py +++ b/addons/googledrive/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,25 +22,33 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder_id', models.TextField(blank=True, null=True)), ('folder_path', models.TextField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/googledrive/migrations/0002_auto_20170323_1534.py b/addons/googledrive/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/googledrive/migrations/0002_auto_20170323_1534.py rename to addons/googledrive/migrations/0002_auto_20220817_1915.py index 44ec1e16540..2b4721c5b4c 100644 --- a/addons/googledrive/migrations/0002_auto_20170323_1534.py +++ b/addons/googledrive/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings diff --git a/addons/googledrive/migrations/0003_auto_20170713_1125.py b/addons/googledrive/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index 8dde20244ca..00000000000 --- a/addons/googledrive/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_googledrive', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/googledrive/migrations/0004_rename_deleted_field.py b/addons/googledrive/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 7b20e7504c7..00000000000 --- a/addons/googledrive/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_googledrive', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/mendeley/migrations/0001_initial.py b/addons/mendeley/migrations/0001_initial.py index 6b11be81ce9..b626699c880 100644 --- a/addons/mendeley/migrations/0001_initial.py +++ b/addons/mendeley/migrations/0001_initial.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,24 +21,32 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('list_id', models.TextField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/mendeley/migrations/0002_auto_20170323_1534.py b/addons/mendeley/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/mendeley/migrations/0002_auto_20170323_1534.py rename to addons/mendeley/migrations/0002_auto_20220817_1915.py index a9a3592f1ff..2e7dbc0e794 100644 --- a/addons/mendeley/migrations/0002_auto_20170323_1534.py +++ b/addons/mendeley/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,8 +12,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('addons_mendeley', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('osf', '0001_initial'), ] diff --git a/addons/mendeley/migrations/0003_auto_20170713_1125.py b/addons/mendeley/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index 89b92735338..00000000000 --- a/addons/mendeley/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_mendeley', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/mendeley/migrations/0004_rename_deleted_field.py b/addons/mendeley/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 03811701516..00000000000 --- a/addons/mendeley/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_mendeley', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/onedrive/migrations/0001_initial.py b/addons/onedrive/migrations/0001_initial.py index 3f2d62da419..925dc84e4e2 100644 --- a/addons/onedrive/migrations/0001_initial.py +++ b/addons/onedrive/migrations/0001_initial.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.7 on 2017-11-21 16:50 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals -from django.conf import settings +import addons.base.models from django.db import migrations, models -import django.db.models.deletion +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -14,8 +15,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osf', '0067_auto_20171121_1050'), ] operations = [ @@ -23,33 +22,34 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder_id', models.TextField(blank=True, null=True)), ('folder_path', models.TextField(blank=True, null=True)), - ('external_account', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_onedrive_node_settings', to='osf.ExternalAccount')), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_onedrive_node_settings', to='osf.AbstractNode')), + ('drive_id', models.TextField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_onedrive_user_settings', to=settings.AUTH_USER_MODEL)), ], options={ 'abstract': False, }, - ), - migrations.AddField( - model_name='nodesettings', - name='user_settings', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_onedrive.UserSettings'), + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/onedrive/migrations/0002_auto_20171121_1426.py b/addons/onedrive/migrations/0002_auto_20171121_1426.py deleted file mode 100644 index df83d82562a..00000000000 --- a/addons/onedrive/migrations/0002_auto_20171121_1426.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.7 on 2017-11-21 20:26 -from __future__ import unicode_literals -import datetime -import pytz - -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_onedrive', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/onedrive/migrations/0002_auto_20220817_1915.py b/addons/onedrive/migrations/0002_auto_20220817_1915.py new file mode 100644 index 00000000000..b2f9e3389a3 --- /dev/null +++ b/addons/onedrive/migrations/0002_auto_20220817_1915.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2022-08-17 19:15 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('addons_onedrive', '0001_initial'), + ('osf', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='usersettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_onedrive_user_settings', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='nodesettings', + name='external_account', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_onedrive_node_settings', to='osf.ExternalAccount'), + ), + migrations.AddField( + model_name='nodesettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_onedrive_node_settings', to='osf.AbstractNode'), + ), + migrations.AddField( + model_name='nodesettings', + name='user_settings', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_onedrive.UserSettings'), + ), + ] diff --git a/addons/onedrive/migrations/0003_rename_deleted_field.py b/addons/onedrive/migrations/0003_rename_deleted_field.py deleted file mode 100644 index c95df4ccfa1..00000000000 --- a/addons/onedrive/migrations/0003_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_onedrive', '0002_auto_20171121_1426'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/onedrive/migrations/0004_nodesettings_drive_id.py b/addons/onedrive/migrations/0004_nodesettings_drive_id.py deleted file mode 100644 index 04934b4a9bc..00000000000 --- a/addons/onedrive/migrations/0004_nodesettings_drive_id.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.28 on 2021-05-21 17:28 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_onedrive', '0003_rename_deleted_field'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='drive_id', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/addons/osfstorage/migrations/0001_initial.py b/addons/osfstorage/migrations/0001_initial.py index 1fd3437c84a..3a136f7cf62 100644 --- a/addons/osfstorage/migrations/0001_initial.py +++ b/addons/osfstorage/migrations/0001_initial.py @@ -1,9 +1,14 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django.db.models.deletion +import django_extensions.db.fields import osf.models.base +import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -18,11 +23,43 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), + ), + migrations.CreateModel( + name='Region', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('_id', models.CharField(db_index=True, max_length=255)), + ('name', models.CharField(max_length=200)), + ('waterbutler_credentials', osf.utils.fields.EncryptedJSONField(default=dict)), + ('waterbutler_url', models.URLField(default='http://localhost:7777')), + ('mfr_url', models.URLField(default='http://localhost:7778')), + ('waterbutler_settings', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), + ], + ), + migrations.CreateModel( + name='UserSettings', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('default_region', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_osfstorage.Region')), + ], + options={ + 'abstract': False, + }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/osfstorage/migrations/0002_auto_20170323_1534.py b/addons/osfstorage/migrations/0002_auto_20170323_1534.py deleted file mode 100644 index 25499c3e985..00000000000 --- a/addons/osfstorage/migrations/0002_auto_20170323_1534.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('addons_osfstorage', '0001_initial'), - ('osf', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='owner', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_osfstorage_node_settings', to='osf.AbstractNode'), - ), - migrations.AddField( - model_name='nodesettings', - name='root_node', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='osf.OsfStorageFolder'), - ), - ] diff --git a/addons/osfstorage/migrations/0002_auto_20220817_1915.py b/addons/osfstorage/migrations/0002_auto_20220817_1915.py new file mode 100644 index 00000000000..ebea6db86e5 --- /dev/null +++ b/addons/osfstorage/migrations/0002_auto_20220817_1915.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2022-08-17 19:15 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('osf', '0001_initial'), + ('addons_osfstorage', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='usersettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_osfstorage_user_settings', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterUniqueTogether( + name='region', + unique_together=set([('_id', 'name')]), + ), + migrations.AddField( + model_name='nodesettings', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_osfstorage_node_settings', to='osf.AbstractNode'), + ), + migrations.AddField( + model_name='nodesettings', + name='region', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_osfstorage.Region'), + ), + migrations.AddField( + model_name='nodesettings', + name='root_node', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='osf.OsfStorageFolder'), + ), + migrations.AddField( + model_name='nodesettings', + name='user_settings', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_osfstorage.UserSettings'), + ), + ] diff --git a/addons/osfstorage/migrations/0003_auto_20170713_1125.py b/addons/osfstorage/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index 4805d3e8a47..00000000000 --- a/addons/osfstorage/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_osfstorage', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/osfstorage/migrations/0004_storage_region_models.py b/addons/osfstorage/migrations/0004_storage_region_models.py deleted file mode 100644 index 4c66148e63d..00000000000 --- a/addons/osfstorage/migrations/0004_storage_region_models.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-15 19:37 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django_extensions.db.fields -import osf.models.base -import osf.utils.fields -import osf.utils.datetime_aware_jsonfield -from website.settings import WATERBUTLER_URL - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('addons_osfstorage', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.CreateModel( - name='Region', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('_id', models.CharField(db_index=True, max_length=255)), - ('name', models.CharField(max_length=200)), - ('waterbutler_credentials', osf.utils.fields.EncryptedJSONField(default=dict)), - ('waterbutler_url', models.URLField(default=WATERBUTLER_URL)), - ('waterbutler_settings', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), - ], - ), - migrations.CreateModel( - name='UserSettings', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('default_region', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_osfstorage.Region')), - ('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_osfstorage_user_settings', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'abstract': False, - }, - ), - migrations.AlterUniqueTogether( - name='region', - unique_together=set([('_id', 'name')]), - ), - migrations.AddField( - model_name='nodesettings', - name='region', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_osfstorage.Region'), - ), - migrations.AddField( - model_name='nodesettings', - name='user_settings', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_osfstorage.UserSettings'), - ), - ] diff --git a/addons/osfstorage/migrations/0005_region_mfr_url.py b/addons/osfstorage/migrations/0005_region_mfr_url.py deleted file mode 100644 index 1f91da25668..00000000000 --- a/addons/osfstorage/migrations/0005_region_mfr_url.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.13 on 2018-08-09 17:29 -from __future__ import unicode_literals - -from django.db import migrations, models -from website.settings import MFR_SERVER_URL - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_osfstorage', '0004_storage_region_models'), - ] - - operations = [ - migrations.AddField( - model_name='region', - name='mfr_url', - field=models.URLField(default=MFR_SERVER_URL), - ), - ] diff --git a/addons/osfstorage/migrations/0006_rename_deleted_field.py b/addons/osfstorage/migrations/0006_rename_deleted_field.py deleted file mode 100644 index 814e92eb2da..00000000000 --- a/addons/osfstorage/migrations/0006_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_osfstorage', '0005_region_mfr_url'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/osfstorage/models.py b/addons/osfstorage/models.py index aa9d8932317..3b386e8b76d 100644 --- a/addons/osfstorage/models.py +++ b/addons/osfstorage/models.py @@ -304,6 +304,9 @@ def create_version(self, creator, location, metadata=None): if metadata: version.update_metadata(metadata, save=False) + if 'osfstorage_region' in self.target.__dict__: # clear cache if cached + del self.target.osfstorage_region + version.region = self.target.osfstorage_region version._find_matching_archive(save=False) @@ -408,7 +411,7 @@ def save(self, skip_search=False, *args, **kwargs): class OsfStorageFolder(OsfStorageFileNode, Folder): - is_root = models.NullBooleanField() + is_root = models.BooleanField(null=True, blank=True) objects = OsfStorageFolderManager() diff --git a/addons/osfstorage/tests/test_models.py b/addons/osfstorage/tests/test_models.py index 85d975ce302..ca70f4fb182 100644 --- a/addons/osfstorage/tests/test_models.py +++ b/addons/osfstorage/tests/test_models.py @@ -198,10 +198,6 @@ def test_download_count_file(self, mock_session): def test_create_version(self): pass - @unittest.skip - def test_update_version_metadata(self): - pass - def test_delete_folder(self): parent = self.node_settings.get_root().append_folder('Test') kids = [] diff --git a/addons/osfstorage/views.py b/addons/osfstorage/views.py index 467f2510104..63b164174ce 100644 --- a/addons/osfstorage/views.py +++ b/addons/osfstorage/views.py @@ -128,7 +128,7 @@ def osfstorage_get_revisions(file_node, payload, target, **kwargs): version_count = file_node.versions.count() counts = dict(PageCounter.objects.filter(resource=file_node.target.guids.first().id, file=file_node, action='download').values_list('_id', 'total')) - qs = FileVersion.includable_objects.filter(basefilenode__id=file_node.id).include('creator__guids').order_by('-created') + qs = FileVersion.objects.filter(basefilenode__id=file_node.id).prefetch_related('creator__guids').order_by('-created') for i, version in enumerate(qs): version._download_count = counts.get('{}{}'.format(counter_prefix, version_count - i - 1), 0) diff --git a/addons/owncloud/migrations/0001_initial.py b/addons/owncloud/migrations/0001_initial.py index 230eeaff0bb..8271a44ca30 100644 --- a/addons/owncloud/migrations/0001_initial.py +++ b/addons/owncloud/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,24 +22,32 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder_id', models.TextField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/owncloud/migrations/0002_auto_20170323_1534.py b/addons/owncloud/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/owncloud/migrations/0002_auto_20170323_1534.py rename to addons/owncloud/migrations/0002_auto_20220817_1915.py index e42dd4c8683..516efc18919 100644 --- a/addons/owncloud/migrations/0002_auto_20170323_1534.py +++ b/addons/owncloud/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,8 +12,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('addons_owncloud', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('addons_owncloud', '0001_initial'), ('osf', '0001_initial'), ] diff --git a/addons/owncloud/migrations/0003_add_trailing_slash_back_to_implict_folders.py b/addons/owncloud/migrations/0003_add_trailing_slash_back_to_implict_folders.py deleted file mode 100644 index 06f07376d72..00000000000 --- a/addons/owncloud/migrations/0003_add_trailing_slash_back_to_implict_folders.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.1 on 2017-06-02 14:23 -from __future__ import unicode_literals - -from django.db import migrations - -def add_slash_to_implict_folders(apps, schema_editor): - NodeLog = apps.get_model('osf', 'NodeLog') - logs = NodeLog.objects.raw("""select * from osf_nodelog where osf_nodelog.action = 'owncloud_file_removed';""") - for log in logs: - if not ('.' in log.params['path'] and len(log.params['path'].split('.')[-1]) <= 5): # if it has ext we assume its a file. - log.params['path'] += '/' - log.save() - - -def remove_slash_to_implict_folders(apps, schema_editor): - NodeLog = apps.get_model('osf', 'NodeLog') - logs = NodeLog.objects.raw("""select * from osf_nodelog where osf_nodelog.action = 'owncloud_file_removed';""") - for log in logs: - if '.' in log.params['path'] and len(log.params['path'].split('.')[-1]) <= 5: # if it has ext we assume its a file. - log.params['path'] = log.params['path'].strip('/') - log.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_owncloud', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.RunPython(add_slash_to_implict_folders, remove_slash_to_implict_folders) - ] diff --git a/addons/owncloud/migrations/0003_auto_20170713_1125.py b/addons/owncloud/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index e67eedf6af8..00000000000 --- a/addons/owncloud/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_owncloud', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/owncloud/migrations/0004_merge_20171203_1325.py b/addons/owncloud/migrations/0004_merge_20171203_1325.py deleted file mode 100644 index 852b7d6843d..00000000000 --- a/addons/owncloud/migrations/0004_merge_20171203_1325.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.7 on 2017-12-03 19:25 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_owncloud', '0003_add_trailing_slash_back_to_implict_folders'), - ('addons_owncloud', '0003_auto_20170713_1125'), - ] - - operations = [ - ] diff --git a/addons/owncloud/migrations/0005_rename_deleted_field.py b/addons/owncloud/migrations/0005_rename_deleted_field.py deleted file mode 100644 index c77f3212e10..00000000000 --- a/addons/owncloud/migrations/0005_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_owncloud', '0004_merge_20171203_1325'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/s3/migrations/0001_initial.py b/addons/s3/migrations/0001_initial.py index e50e0ec97f6..1adf16de32b 100644 --- a/addons/s3/migrations/0001_initial.py +++ b/addons/s3/migrations/0001_initial.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals +import addons.base.models from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,8 +22,11 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('folder_id', models.TextField(blank=True, null=True)), ('folder_name', models.TextField(blank=True, null=True)), ('encrypt_uploads', models.BooleanField(default=True)), @@ -28,17 +34,22 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin, addons.base.models.BaseStorageAddon), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/s3/migrations/0002_auto_20170323_1534.py b/addons/s3/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/s3/migrations/0002_auto_20170323_1534.py rename to addons/s3/migrations/0002_auto_20220817_1915.py index 3edb4ed6308..c49ff36a70d 100644 --- a/addons/s3/migrations/0002_auto_20170323_1534.py +++ b/addons/s3/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,8 +12,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('addons_s3', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('addons_s3', '0001_initial'), ('osf', '0001_initial'), ] diff --git a/addons/s3/migrations/0003_auto_20170713_1125.py b/addons/s3/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index c7dbe0dda5c..00000000000 --- a/addons/s3/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_s3', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/s3/migrations/0004_rename_deleted_field.py b/addons/s3/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 94011347ad3..00000000000 --- a/addons/s3/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_s3', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/twofactor/migrations/0001_initial.py b/addons/twofactor/migrations/0001_initial.py index 7b74365b7b7..b5dded1f13d 100644 --- a/addons/twofactor/migrations/0001_initial.py +++ b/addons/twofactor/migrations/0001_initial.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.db import migrations, models +import django_extensions.db.fields import osf.models.base +import osf.utils.fields class Migration(migrations.Migration): @@ -18,8 +20,11 @@ class Migration(migrations.Migration): name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('totp_secret', models.TextField(blank=True, null=True)), ('totp_drift', models.IntegerField()), ('is_confirmed', models.BooleanField(default=False)), @@ -27,5 +32,6 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/twofactor/migrations/0002_usersettings_owner.py b/addons/twofactor/migrations/0002_usersettings_owner.py index 4b20b60e2cf..4c338a526e6 100644 --- a/addons/twofactor/migrations/0002_usersettings_owner.py +++ b/addons/twofactor/migrations/0002_usersettings_owner.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings diff --git a/addons/twofactor/migrations/0003_auto_20170713_1125.py b/addons/twofactor/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index bdadf69975d..00000000000 --- a/addons/twofactor/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_twofactor', '0002_usersettings_owner'), - ] - - operations = [ - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/twofactor/migrations/0004_rename_deleted_field.py b/addons/twofactor/migrations/0004_rename_deleted_field.py deleted file mode 100644 index 399c87961a1..00000000000 --- a/addons/twofactor/migrations/0004_rename_deleted_field.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_twofactor', '0003_auto_20170713_1125'), - ] - - operations = [ - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/wiki/migrations/0001_initial.py b/addons/wiki/migrations/0001_initial.py index 2c0ffa8e791..74bffba5845 100644 --- a/addons/wiki/migrations/0001_initial.py +++ b/addons/wiki/migrations/0001_initial.py @@ -1,11 +1,10 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals import addons.wiki.models -import django.contrib.postgres.fields from django.db import migrations, models -import django.utils.timezone +import django_extensions.db.fields import osf.models.base import osf.utils.fields @@ -22,27 +21,43 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('is_publicly_editable', models.BooleanField(db_index=True, default=False)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), migrations.CreateModel( - name='NodeWikiPage', + name='WikiPage', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('guid_string', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=255, null=True), blank=True, null=True, size=None)), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('content_type_pk', models.PositiveIntegerField(blank=True, null=True)), ('page_name', models.CharField(max_length=200, validators=[addons.wiki.models.validate_page_name])), - ('version', models.IntegerField(default=1)), - ('date', osf.utils.fields.NonNaiveDateTimeField(default=django.utils.timezone.now)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, db_index=True, null=True)), + ], + bases=(models.Model, osf.models.base.QuerySetExplainMixin), + ), + migrations.CreateModel( + name='WikiVersion', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), ('content', models.TextField(blank=True, default='')), + ('identifier', models.IntegerField(default=1)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/wiki/migrations/0002_auto_20170323_1534.py b/addons/wiki/migrations/0002_auto_20220817_1915.py similarity index 53% rename from addons/wiki/migrations/0002_auto_20170323_1534.py rename to addons/wiki/migrations/0002_auto_20220817_1915.py index ec2fddab78a..b35e83c4b15 100644 --- a/addons/wiki/migrations/0002_auto_20170323_1534.py +++ b/addons/wiki/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings @@ -12,19 +12,29 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('addons_wiki', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('osf', '0001_initial'), - ('addons_wiki', '0001_initial'), ] operations = [ migrations.AddField( - model_name='nodewikipage', + model_name='wikiversion', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='wikiversion', + name='wiki_page', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='versions', to='addons_wiki.WikiPage'), + ), + migrations.AddField( + model_name='wikipage', name='node', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='osf.AbstractNode'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='wikis', to='osf.AbstractNode'), ), migrations.AddField( - model_name='nodewikipage', + model_name='wikipage', name='user', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), ), @@ -33,4 +43,8 @@ class Migration(migrations.Migration): name='owner', field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_wiki_node_settings', to='osf.AbstractNode'), ), + migrations.AddIndex( + model_name='wikipage', + index=models.Index(fields=['page_name', 'node'], name='addons_wiki_page_na_6d5d96_idx'), + ), ] diff --git a/addons/wiki/migrations/0003_auto_20170403_2228.py b/addons/wiki/migrations/0003_auto_20170403_2228.py deleted file mode 100644 index 2d86fd2dc38..00000000000 --- a/addons/wiki/migrations/0003_auto_20170403_2228.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-04-04 03:28 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AlterField( - model_name='nodewikipage', - name='date', - field=osf.utils.fields.NonNaiveDateTimeField(auto_now_add=True), - ), - ] diff --git a/addons/wiki/migrations/0004_remove_nodewikipage_guid_string.py b/addons/wiki/migrations/0004_remove_nodewikipage_guid_string.py deleted file mode 100644 index bc241d0a80f..00000000000 --- a/addons/wiki/migrations/0004_remove_nodewikipage_guid_string.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11 on 2017-04-24 21:09 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0003_auto_20170403_2228'), - ] - - operations = [ - migrations.RemoveField( - model_name='nodewikipage', - name='guid_string', - ), - ] diff --git a/addons/wiki/migrations/0005_auto_20170713_1125.py b/addons/wiki/migrations/0005_auto_20170713_1125.py deleted file mode 100644 index ebbef480b7c..00000000000 --- a/addons/wiki/migrations/0005_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0004_remove_nodewikipage_guid_string'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='nodewikipage', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodewikipage', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/wiki/migrations/0006_wikipage_wikiversion.py b/addons/wiki/migrations/0006_wikipage_wikiversion.py deleted file mode 100644 index 594d3ef6e57..00000000000 --- a/addons/wiki/migrations/0006_wikipage_wikiversion.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-02-20 17:30 -from __future__ import unicode_literals - -import addons.wiki.models -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django_extensions.db.fields -import osf.models.base -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('osf', '0077_add_maintenance_permissions'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('addons_wiki', '0005_auto_20170713_1125'), - ] - - operations = [ - migrations.CreateModel( - name='WikiPage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('content_type_pk', models.PositiveIntegerField(blank=True, null=True)), - ('page_name', models.CharField(max_length=200, validators=[addons.wiki.models.validate_page_name])), - ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, db_index=True, null=True)), - ('node', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='wikis', to='osf.AbstractNode')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='WikiVersion', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('content', models.TextField(blank=True, default='')), - ('identifier', models.IntegerField(default=1)), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('wiki_page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='versions', to='addons_wiki.WikiPage')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/addons/wiki/migrations/0007_nodewikipage_former_guid.py b/addons/wiki/migrations/0007_nodewikipage_former_guid.py deleted file mode 100644 index aa9a0b6a389..00000000000 --- a/addons/wiki/migrations/0007_nodewikipage_former_guid.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-02-22 20:15 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0006_wikipage_wikiversion'), - ] - - operations = [ - migrations.AddField( - model_name='nodewikipage', - name='former_guid', - field=models.CharField(blank=True, max_length=100, null=True, db_index=True), - ), - ] diff --git a/addons/wiki/migrations/0008_store_guid_on_nodewikipage.py b/addons/wiki/migrations/0008_store_guid_on_nodewikipage.py deleted file mode 100644 index 48004e9b1e3..00000000000 --- a/addons/wiki/migrations/0008_store_guid_on_nodewikipage.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-02-22 20:16 -from __future__ import unicode_literals -from django.db import migrations -from django.db import connection -from django.contrib.contenttypes.models import ContentType - -def reverse_func(state, schema): - NodeWikiPage = state.get_model('addons_wiki', 'nodewikipage') - return NodeWikiPage.objects.update(former_guid=None) - -def add_guid_field(state, schema): - NodeWikiPage = state.get_model('addons_wiki', 'nodewikipage') - content_type_id = ContentType.objects.get_for_model(NodeWikiPage).id - with connection.cursor() as cursor: - cursor.execute( - """ - UPDATE addons_wiki_nodewikipage as nwp - SET former_guid=( - SELECT _id - FROM osf_guid - WHERE object_id = nwp2.id and content_type_id = %s - LIMIT 1 - ) - FROM addons_wiki_nodewikipage as nwp2 - WHERE nwp.id = nwp2.id - """, [content_type_id] - ) - return - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0007_nodewikipage_former_guid'), - ] - - operations = [ - migrations.RunPython(add_guid_field, reverse_func) - ] diff --git a/addons/wiki/migrations/0009_auto_20180302_1404.py b/addons/wiki/migrations/0009_auto_20180302_1404.py deleted file mode 100644 index 79a133d362a..00000000000 --- a/addons/wiki/migrations/0009_auto_20180302_1404.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-03-02 20:04 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0008_store_guid_on_nodewikipage'), - ] - - operations = [ - migrations.AddIndex( - model_name='wikipage', - index=models.Index(fields=['page_name', 'node'], name='addons_wiki_page_na_6d5d96_idx'), - ), - ] diff --git a/addons/wiki/migrations/0010_migrate_node_wiki_pages.py b/addons/wiki/migrations/0010_migrate_node_wiki_pages.py deleted file mode 100644 index b9f3c6466ce..00000000000 --- a/addons/wiki/migrations/0010_migrate_node_wiki_pages.py +++ /dev/null @@ -1,510 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-02-22 20:39 -from __future__ import unicode_literals - -import time -import logging -from tqdm import tqdm -from django.db import connection, migrations -from django.db.models import Q -from django.contrib.contenttypes.models import ContentType -from bulk_update.helper import bulk_update -from addons.wiki.models import WikiPage, WikiVersion -from osf.models import Comment, Guid - -logger = logging.getLogger(__name__) - - -def reverse_func(state, schema): - """ - Reverses NodeWikiPage migration. Repoints guids back to each NodeWikiPage, - repoints comment_targets, comments_viewed_timestamps, and deletes all WikiVersions and WikiPages - """ - NodeWikiPage = state.get_model('addons_wiki', 'nodewikipage') - AbstractNode = state.get_model('osf', 'AbstractNode') - - nwp_content_type_id = ContentType.objects.get_for_model(NodeWikiPage).id - - nodes = AbstractNode.objects.exclude(wiki_pages_versions={}) - progress_bar = tqdm(total=nodes.count() or 100) - for i, node in enumerate(nodes, 1): - progress_bar.update(i) - for wiki_key, version_list in node.wiki_pages_versions.items(): - if version_list: - for index, version in enumerate(version_list): - nwp = NodeWikiPage.objects.filter(former_guid=version).include(None)[0] - # All NodeWikiPages associated with a certain wiki key on a node point to the same WikiPage. - wp = WikiPage.load(version) - guid = migrate_guid_referent(Guid.load(version), nwp, nwp_content_type_id) - guid.save() - nwp = guid.referent - # Moved only for last item in wiki_pages_versions array for every page_name, NWP->WP is a many-to-one mapping. NWP->WV is a one-to-one mapping. - move_comment_target(Guid.load(wp._id), nwp) - update_comments_viewed_timestamp(node, wp._id, nwp) - progress_bar.close() - WikiVersion.objects.all().delete() - WikiPage.objects.all().delete() - logger.info('NodeWikiPages restored and WikiVersions and WikiPages removed.') - - -def move_comment_target(current_guid, desired_target): - """ - Move the comment's target from the current target to the desired target - Specifically for repointing WikiPage comments -> NodeWikiPage comments - """ - desired_target_guid_id = Guid.load(desired_target.former_guid).id - if Comment.objects.filter(Q(root_target=current_guid) | Q(target=current_guid)).exists(): - Comment.objects.filter(root_target=current_guid).update(root_target_id=desired_target_guid_id) - Comment.objects.filter(target=current_guid).update(target_id=desired_target_guid_id) - return - -def update_comments_viewed_timestamp(node, current_wiki_guid, desired_wiki_object): - """Replace the current_wiki_object keys in the comments_viewed_timestamp dict with the desired wiki_object_id """ - users_pending_save = [] - # We iterate over .contributor_set instead of .contributors in order - # to take advantage of .include('contributor__user') - for contrib in node.contributor_set.all(): - user = contrib.user - if user.comments_viewed_timestamp.get(current_wiki_guid, None): - timestamp = user.comments_viewed_timestamp[current_wiki_guid] - user.comments_viewed_timestamp[desired_wiki_object._id] = timestamp - del user.comments_viewed_timestamp[current_wiki_guid] - users_pending_save.append(user) - if users_pending_save: - bulk_update(users_pending_save, update_fields=['comments_viewed_timestamp']) - return users_pending_save - -def migrate_guid_referent(guid, desired_referent, content_type_id): - """ - Point the guid towards the desired_referent. - Pointing the NodeWikiPage guid towards the WikiPage will still allow links to work. - """ - guid.content_type_id = content_type_id - guid.object_id = desired_referent.id - return guid - -def migrate_node_wiki_pages(state, schema): - create_wiki_pages_sql(state, schema) - create_guids(state, schema) - create_wiki_versions_and_repoint_comments_sql(state, schema) - migrate_comments_viewed_timestamp_sql(state, schema) - migrate_guid_referent_sql(state, schema) - -def create_wiki_pages_sql(state, schema): - NodeWikiPage = state.get_model('addons_wiki', 'nodewikipage') - - then = time.time() - logger.info('Starting migration of WikiPages [SQL]:') - wikipage_content_type_id = ContentType.objects.get_for_model(WikiPage).id - nodewikipage_content_type_id = ContentType.objects.get_for_model(NodeWikiPage).id - with connection.cursor() as cursor: - cursor.execute( - """ - CREATE TEMPORARY TABLE temp_wikipages - ( - node_id INTEGER, - user_id INTEGER, - page_name_key TEXT, - latest_page_name_guid TEXT, - first_page_name_guid TEXT, - page_name_display TEXT, - created TIMESTAMP, - modified TIMESTAMP - ) - ON COMMIT DROP; - - -- Flatten out the wiki_page_versions json keys - INSERT INTO temp_wikipages (node_id, page_name_key) - SELECT - oan.id AS node_id - , jsonb_object_keys(oan.wiki_pages_versions) as page_name_key - FROM osf_abstractnode AS oan; - - -- Retrieve the latest guid for the json key - UPDATE temp_wikipages AS twp - SET - latest_page_name_guid = ( - SELECT trim(v::text, '"') - FROM osf_abstractnode ioan - , jsonb_array_elements(oan.wiki_pages_versions->twp.page_name_key) WITH ORDINALITY v(v, rn) - WHERE ioan.id = oan.id - ORDER BY v.rn DESC - LIMIT 1 - ) - FROM osf_abstractnode AS oan - WHERE oan.id = twp.node_id; - - -- Retrieve the first guid for the json key - UPDATE temp_wikipages AS twp - SET - first_page_name_guid = ( - SELECT trim(v::text, '"') - FROM osf_abstractnode ioan - , jsonb_array_elements(oan.wiki_pages_versions->twp.page_name_key) WITH ORDINALITY v(v, rn) - WHERE ioan.id = oan.id - ORDER BY v.rn ASC - LIMIT 1 - ) - FROM osf_abstractnode AS oan - WHERE oan.id = twp.node_id; - - -- Remove any json keys that reference empty arrays (bad data? e.g. abstract_node id=232092) - DELETE FROM temp_wikipages AS twp - WHERE twp.latest_page_name_guid IS NULL; - - -- Retrieve page_name nodewikipage field for the latest wiki page guid - UPDATE temp_wikipages AS twp - SET - page_name_display = anwp.page_name - FROM osf_guid AS og INNER JOIN addons_wiki_nodewikipage AS anwp ON (og.object_id = anwp.id AND og.content_type_id = %s) - WHERE og._id = twp.latest_page_name_guid; - - -- Retrieve user_id, created, and modified nodewikipage field for the first wiki page guid - UPDATE temp_wikipages AS twp - SET - user_id = anwp.user_id - , created = anwp.date - , modified = anwp.modified - FROM osf_guid AS og INNER JOIN addons_wiki_nodewikipage AS anwp ON (og.object_id = anwp.id AND og.content_type_id = %s) - WHERE og._id = twp.first_page_name_guid; - - -- Populate the wikipage table - INSERT INTO addons_wiki_wikipage (node_id, user_id, content_type_pk, page_name, created, modified) - SELECT - twp.node_id - , twp.user_id - , %s - , twp.page_name_display - , twp.created - , twp.modified - FROM temp_wikipages AS twp; - """, [nodewikipage_content_type_id, nodewikipage_content_type_id, wikipage_content_type_id] - ) - now = time.time() - logger.info('Finished migration of WikiPages [SQL]: {:.5} seconds'.format(now - then)) - -def create_guids(state, schema): - then = time.time() - content_type = ContentType.objects.get_for_model(WikiPage) - progress_bar = tqdm(total=WikiPage.objects.count() or 100) - logger.info('Creating new guids for all WikiPages:') - for i, wiki_page_id in enumerate(WikiPage.objects.values_list('id', flat=True), 1): - # looping instead of bulk_create, so _id's are not the same - progress_bar.update(i) - Guid.objects.create(object_id=wiki_page_id, content_type_id=content_type.id) - progress_bar.close() - now = time.time() - logger.info('WikiPage guids created: {:.5} seconds'.format(now - then)) - return - -def create_wiki_versions_and_repoint_comments_sql(state, schema): - NodeWikiPage = state.get_model('addons_wiki', 'nodewikipage') - - then = time.time() - logger.info('Starting migration of WikiVersions [SQL]:') - nodewikipage_content_type_id = ContentType.objects.get_for_model(NodeWikiPage).id - wikipage_content_type_id = ContentType.objects.get_for_model(WikiPage).id - with connection.cursor() as cursor: - cursor.execute( - """ - CREATE TEMPORARY TABLE temp_wikiversions - ( - node_id INTEGER, - user_id INTEGER, - page_name_key TEXT, - wiki_page_id INTEGER, - content TEXT, - identifier INTEGER, - created TIMESTAMP, - modified TIMESTAMP, - nwp_guid TEXT, - latest_page_name_guid TEXT, - page_name_display TEXT - ) - ON COMMIT DROP; - - CREATE INDEX ON temp_wikiversions (nwp_guid ASC); - CREATE INDEX ON temp_wikiversions (wiki_page_id ASC); - - -- Flatten out the wiki_page_versions arrays for each key - INSERT INTO temp_wikiversions (node_id, page_name_key, nwp_guid, content, user_id, modified, identifier, created) - SELECT - oan.id as node_id, - wiki_pages_versions.key, - trim(nwp_guid::text, '"') as node_wiki_page_guid, - nwp.content, - nwp.user_id, - nwp.modified, - nwp.version as identifier, - nwp.date as created - FROM osf_abstractnode as oan, - jsonb_each(oan.wiki_pages_versions) as wiki_pages_versions, - jsonb_array_elements(wiki_pages_versions->wiki_pages_versions.key) as nwp_guid - INNER JOIN addons_wiki_nodewikipage as nwp ON nwp.former_guid = trim(nwp_guid::text, '"'); - - -- Retrieve the latest guid for the json key - UPDATE temp_wikiversions AS twp - SET - latest_page_name_guid = ( - SELECT trim(v::text, '"') - FROM osf_abstractnode ioan - , jsonb_array_elements(oan.wiki_pages_versions->twp.page_name_key) WITH ORDINALITY v(v, rn) - WHERE ioan.id = oan.id - ORDER BY v.rn DESC - LIMIT 1 - ) - FROM osf_abstractnode AS oan - WHERE oan.id = twp.node_id; - - - -- Retrieve page_name nodewikipage field for the latest wiki page guid - UPDATE temp_wikiversions AS twb - SET - page_name_display = anwp.page_name - FROM osf_guid AS og INNER JOIN addons_wiki_nodewikipage AS anwp ON (og.object_id = anwp.id AND og.content_type_id = %s) - WHERE og._id = twb.latest_page_name_guid; - - -- Retrieve wiki page id - UPDATE temp_wikiversions AS twc - SET - wiki_page_id = ( - SELECT awp.id - FROM addons_wiki_wikipage as awp - WHERE (awp.node_id = twc.node_id - AND awp.page_name = twc.page_name_display) - LIMIT 1 - ); - - -- Borrowed from https://gist.github.com/jamarparris/6100413 - CREATE OR REPLACE FUNCTION generate_object_id() RETURNS varchar AS $$ - DECLARE - time_component bigint; - machine_id bigint := FLOOR(random() * 16777215); - process_id bigint; - seq_id bigint := FLOOR(random() * 16777215); - result varchar:= ''; - BEGIN - SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp())) INTO time_component; - SELECT pg_backend_pid() INTO process_id; - - result := result || lpad(to_hex(time_component), 8, '0'); - result := result || lpad(to_hex(machine_id), 6, '0'); - result := result || lpad(to_hex(process_id), 4, '0'); - result := result || lpad(to_hex(seq_id), 6, '0'); - RETURN result; - END; - $$ LANGUAGE PLPGSQL; - - -- Populate the wiki_version table - INSERT INTO addons_wiki_wikiversion (user_id, wiki_page_id, content, identifier, created, modified, _id) - SELECT - twv.user_id - , twv.wiki_page_id - , twv.content - , twv.identifier - , twv.created - , twv.modified - , generate_object_id() - FROM temp_wikiversions AS twv; - - -- Migrate Comments on NodeWikiPages to point to WikiPages - - -- Create temporary view to store mapping of NodeWikiPage's Guid.pk => WikiPage.id - CREATE OR REPLACE TEMPORARY VIEW nwp_guids_to_wp_id AS ( - SELECT - osf_guid.id as nwp_guid_id, - twv.wiki_page_id - FROM osf_guid - INNER JOIN temp_wikiversions twv ON (osf_guid._id = twv.nwp_guid) - WHERE osf_guid._id = twv.nwp_guid - ); - - -- Use above view to construct a mapping between NodeWikiPage GUID pk => WikiPage GUID pk - CREATE OR REPLACE TEMPORARY VIEW nwp_guids_to_wiki_page_guids as ( - SELECT - nwp_guids_to_wp_id.nwp_guid_id as nwp_guid_id, - osf_guid.id as wiki_page_guid_id - FROM osf_guid - INNER JOIN nwp_guids_to_wp_id ON (osf_guid.object_id = nwp_guids_to_wp_id.wiki_page_id) - WHERE osf_guid.object_id = nwp_guids_to_wp_id.wiki_page_id AND osf_guid.content_type_id = %s - ); - - -- Change Comment.root_target from NodeWikiPages to their corresponding WikiPage - UPDATE osf_comment - SET - root_target_id = ( - SELECT nwp_guids_to_wiki_page_guids.wiki_page_guid_id - FROM nwp_guids_to_wiki_page_guids - WHERE osf_comment.root_target_id = nwp_guids_to_wiki_page_guids.nwp_guid_id - LIMIT 1 - ) - WHERE root_target_id IN (SELECT nwp_guid_id FROM nwp_guids_to_wiki_page_guids); - - -- Change Comment.target from NodeWikiPages to their corresponding WikiPage - UPDATE osf_comment - SET - target_id = ( - SELECT nwp_guids_to_wiki_page_guids.wiki_page_guid_id - FROM nwp_guids_to_wiki_page_guids - WHERE osf_comment.target_id = nwp_guids_to_wiki_page_guids.nwp_guid_id - LIMIT 1 - ) - WHERE target_id IN (SELECT nwp_guid_id FROM nwp_guids_to_wiki_page_guids); - """, [nodewikipage_content_type_id, wikipage_content_type_id] - ) - now = time.time() - logger.info('Finished migration of WikiVersions [SQL]: {:.5} seconds'.format(now - then)) - -def migrate_comments_viewed_timestamp_sql(state, schema): - then = time.time() - logger.info('Starting migration of user comments_viewed_timestamp [SQL]:') - wikipage_content_type_id = ContentType.objects.get_for_model(WikiPage).id - with connection.cursor() as cursor: - cursor.execute( - """ - CREATE FUNCTION key_exists(json_field json, dictionary_key text) - RETURNS boolean AS $$ - BEGIN - RETURN (json_field->dictionary_key) IS NOT NULL; - END; - $$ LANGUAGE plpgsql; - - -- Defining a temporary table that has every update that needs to happen to users. - -- Obsolete NodeWikiPage guids in comments_viewed_timestamp need to be replaced with - -- corresponding new WikiPage guid - -- Table has node_id, user_id, nwp_guid (old NodeWikiPage guid) and wp_guid (WikiPage guid) - CREATE OR REPLACE FUNCTION update_comments_viewed_timestamp_sql() - RETURNS SETOF varchar AS - $func$ - DECLARE - rec record; - BEGIN - FOR rec IN - SELECT - oan.id as node_id, - osf_contributor.user_id as user_id, - (SELECT U0._id - FROM osf_guid AS U0 - WHERE U0.object_id=wp.id AND U0.content_type_id = %s) AS wp_guid, - nwp_guid - FROM osf_abstractnode as oan - -- Joins contributor to node on contributor.node_id - JOIN osf_contributor ON (oan.id = osf_contributor.node_id) - JOIN osf_osfuser ON (osf_osfuser.id = user_id) - -- Joins each of the wiki page key/version list from wiki_pages_versions - LEFT JOIN LATERAL jsonb_each(oan.wiki_pages_versions) AS wiki_pages_versions ON TRUE - -- Adds the last NWP id - LEFT JOIN LATERAL cast( - ( - SELECT trim(v::text, '"') - FROM osf_abstractnode ioan, jsonb_array_elements(wiki_pages_versions->wiki_pages_versions.key) WITH ORDINALITY v(v, rn) - WHERE ioan.id = oan.id - ORDER BY v.rn DESC - LIMIT 1 - ) AS text) AS nwp_guid ON TRUE - -- Joins the wiki page object, by finding the wiki page object on the node that has a page name similar to the key stored on wiki-pages versions - -- Should work most of the time, there is some bad data though - JOIN addons_wiki_wikipage AS wp ON (wp.node_id = oan.id) AND UPPER(wp.page_name::text) LIKE UPPER(wiki_pages_versions.key::text) - WHERE oan.wiki_pages_versions != '{}' AND osf_osfuser.comments_viewed_timestamp != '{}' AND key_exists(osf_osfuser.comments_viewed_timestamp::json, nwp_guid) - - LOOP - -- Loops through every row in temporary table above, and deletes old nwp_guid key and replaces with wp_guid key. - -- Looping instead of joining to osf_user table because temporary table above has multiple rows with the same user - UPDATE osf_osfuser - SET comments_viewed_timestamp = comments_viewed_timestamp - rec.nwp_guid || jsonb_build_object(rec.wp_guid, comments_viewed_timestamp->rec.nwp_guid) - WHERE osf_osfuser.id = rec.user_id; - END LOOP; - END - $func$ LANGUAGE plpgsql; - - SELECT update_comments_viewed_timestamp_sql(); - """, [wikipage_content_type_id] - ) - now = time.time() - logger.info('Finished migration of comments_viewed_timestamp [SQL]: {:.5} seconds'.format(now - then)) - -def migrate_guid_referent_sql(state, schema): - NodeWikiPage = state.get_model('addons_wiki', 'nodewikipage') - - then = time.time() - logger.info('Starting migration of Node Wiki Page guids, repointing them to Wiki Page guids [SQL]:') - wikipage_content_type_id = ContentType.objects.get_for_model(WikiPage).id - nodewikipage_content_type_id = ContentType.objects.get_for_model(NodeWikiPage).id - with connection.cursor() as cursor: - cursor.execute( - """ - CREATE TEMPORARY TABLE repoint_guids - ( - node_id INTEGER, - page_name_key TEXT, - nwp_guid TEXT, - latest_page_name_guid TEXT, - wiki_page_id INTEGER, - page_name_display TEXT - ) - ON COMMIT DROP; - - -- Flatten out the wiki_page_versions arrays for each key - INSERT INTO repoint_guids (node_id, page_name_key, nwp_guid) - SELECT - oan.id as node_id, - wiki_pages_versions.key, - trim(nwp_guid::text, '"') as node_wiki_page_guid - FROM osf_abstractnode as oan, - jsonb_each(oan.wiki_pages_versions) as wiki_pages_versions, - jsonb_array_elements(wiki_pages_versions->wiki_pages_versions.key) as nwp_guid - INNER JOIN addons_wiki_nodewikipage as nwp ON nwp.former_guid = trim(nwp_guid::text, '"'); - - -- Retrieve the latest guid for the json key - -- For example, if you have {'home': ['abcde', '12345', 'zyxwv']}, I need to preserve 'zyxwv' - UPDATE repoint_guids AS twp - SET - latest_page_name_guid = ( - SELECT trim(v::text, '"') - FROM osf_abstractnode ioan - , jsonb_array_elements(oan.wiki_pages_versions->twp.page_name_key) WITH ORDINALITY v(v, rn) - WHERE ioan.id = oan.id - ORDER BY v.rn DESC - LIMIT 1 - ) - FROM osf_abstractnode AS oan - WHERE oan.id = twp.node_id; - - -- Retrieve page_name nodewikipage field for the latest wiki page guid (The latest one is most current because wikis can be renamed) - UPDATE repoint_guids AS twb - SET - page_name_display = anwp.page_name - FROM osf_guid AS og INNER JOIN addons_wiki_nodewikipage AS anwp ON (og.object_id = anwp.id AND og.content_type_id = %s) - WHERE og._id = twb.latest_page_name_guid; - - -- Retrieve wiki page id using the node id and page name - UPDATE repoint_guids AS twc - SET - wiki_page_id = ( - SELECT awp.id - FROM addons_wiki_wikipage as awp - WHERE (awp.node_id = twc.node_id - AND awp.page_name = twc.page_name_display) - LIMIT 1 - ); - - -- Update osf_guid by joining with temporary table repoint_guids. - UPDATE osf_guid - SET content_type_id = %s, object_id = wiki_page_id - FROM repoint_guids - WHERE repoint_guids.nwp_guid = osf_guid._id; - """, [nodewikipage_content_type_id, wikipage_content_type_id] - ) - now = time.time() - logger.info('Finished repointing Node Wiki Page guids to Wiki Pages [SQL]: {:.5} seconds'.format(now - then)) - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0009_auto_20180302_1404'), - ] - - operations = [ - migrations.RunPython(migrate_node_wiki_pages, reverse_func), - ] diff --git a/addons/wiki/migrations/0011_auto_20180415_1649.py b/addons/wiki/migrations/0011_auto_20180415_1649.py deleted file mode 100644 index b3f0601b225..00000000000 --- a/addons/wiki/migrations/0011_auto_20180415_1649.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-04-15 21:49 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0010_migrate_node_wiki_pages'), - ] - - operations = [ - migrations.RemoveField( - model_name='nodewikipage', - name='node', - ), - migrations.RemoveField( - model_name='nodewikipage', - name='user', - ), - migrations.DeleteModel( - name='NodeWikiPage', - ), - ] diff --git a/addons/wiki/migrations/0012_rename_deleted_field.py b/addons/wiki/migrations/0012_rename_deleted_field.py deleted file mode 100644 index cf8b69560fb..00000000000 --- a/addons/wiki/migrations/0012_rename_deleted_field.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_wiki', '0011_auto_20180415_1649'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/addons/wiki/models.py b/addons/wiki/models.py index 36e935b91d7..4c4e9a89c35 100644 --- a/addons/wiki/models.py +++ b/addons/wiki/models.py @@ -67,16 +67,12 @@ def build_html_output(content, node): content, extensions=[ wikilinks.WikiLinkExtension( - configs=[ - ('base_url', ''), - ('end_url', ''), - ('build_url', functools.partial(build_wiki_url, node)) - ] + base_url='', + end_url='', + build_url=functools.partial(build_wiki_url, node) ), fenced_code.FencedCodeExtension(), - codehilite.CodeHiliteExtension( - [('css_class', 'highlight')] - ) + codehilite.CodeHiliteExtension(css_class='highlight') ] ) diff --git a/addons/zotero/migrations/0001_initial.py b/addons/zotero/migrations/0001_initial.py index 6b11be81ce9..f320aeec162 100644 --- a/addons/zotero/migrations/0001_initial.py +++ b/addons/zotero/migrations/0001_initial.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.db import migrations, models +import django_extensions.db.fields import osf.models.base import osf.utils.datetime_aware_jsonfield +import osf.utils.fields class Migration(migrations.Migration): @@ -19,24 +21,33 @@ class Migration(migrations.Migration): name='NodeSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), ('list_id', models.TextField(blank=True, null=True)), + ('library_id', models.TextField(blank=True, null=True)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), migrations.CreateModel( name='UserSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)), - ('deleted', models.BooleanField(default=False)), - ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict)), + ('is_deleted', models.BooleanField(default=False)), + ('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)), + ('oauth_grants', osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONField(blank=True, default=dict, encoder=osf.utils.datetime_aware_jsonfield.DateTimeAwareJSONEncoder)), ], options={ 'abstract': False, }, + bases=(models.Model, osf.models.base.QuerySetExplainMixin), ), ] diff --git a/addons/zotero/migrations/0002_auto_20170323_1534.py b/addons/zotero/migrations/0002_auto_20220817_1915.py similarity index 96% rename from addons/zotero/migrations/0002_auto_20170323_1534.py rename to addons/zotero/migrations/0002_auto_20220817_1915.py index a28d0e109cd..49cc9e1feb1 100644 --- a/addons/zotero/migrations/0002_auto_20170323_1534.py +++ b/addons/zotero/migrations/0002_auto_20220817_1915.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-03-23 20:34 +# Generated by Django 1.11.29 on 2022-08-17 19:15 from __future__ import unicode_literals from django.conf import settings diff --git a/addons/zotero/migrations/0003_auto_20170713_1125.py b/addons/zotero/migrations/0003_auto_20170713_1125.py deleted file mode 100644 index 48e9ab82886..00000000000 --- a/addons/zotero/migrations/0003_auto_20170713_1125.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.2 on 2017-07-13 16:25 -from __future__ import unicode_literals -import pytz - -import datetime -from django.db import migrations -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_zotero', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='nodesettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - migrations.AddField( - model_name='usersettings', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=pytz.utc), verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='usersettings', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/addons/zotero/migrations/0003_nodesettings_library_id.py b/addons/zotero/migrations/0003_nodesettings_library_id.py deleted file mode 100644 index d31fd2f415a..00000000000 --- a/addons/zotero/migrations/0003_nodesettings_library_id.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.4 on 2017-10-11 23:10 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_zotero', '0002_auto_20170323_1534'), - ] - - operations = [ - migrations.AddField( - model_name='nodesettings', - name='library_id', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/addons/zotero/migrations/0004_merge_20180112_0836.py b/addons/zotero/migrations/0004_merge_20180112_0836.py deleted file mode 100644 index 3e59e90ea82..00000000000 --- a/addons/zotero/migrations/0004_merge_20180112_0836.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.7 on 2018-01-12 14:36 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_zotero', '0003_auto_20170713_1125'), - ('addons_zotero', '0003_nodesettings_library_id'), - ] - - operations = [ - ] diff --git a/addons/zotero/migrations/0005_zotero_personal_libraries_20180216_0849.py b/addons/zotero/migrations/0005_zotero_personal_libraries_20180216_0849.py deleted file mode 100644 index 7f1a6d29a5b..00000000000 --- a/addons/zotero/migrations/0005_zotero_personal_libraries_20180216_0849.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2018-02-16 14:49 -from __future__ import unicode_literals - -from bulk_update.helper import bulk_update -from django.db import migrations - -def reverse_func(state, schema): - modify_node_settings(state, None) - modify_user_settings(state, False, None) - -def modify_node_settings(state, library_name): - """ - Updates the library_id for all ZoteroNodeSettings - """ - ZoteroNodeSettings = state.get_model('addons_zotero', 'NodeSettings') - ZoteroNodeSettings.objects.all().update(library_id=library_name) - -def modify_user_settings(state, add, library_name): - """ - For all zotero user settings, - :params state: app_state - :params library_name: library name to add or remove from user settings oauth metadata - :params add: True for adding library, False for removing it. - """ - ZoteroUserSettings = state.get_model('addons_zotero', 'UserSettings') - user_settings_pending_save = [] - - for user_setting in ZoteroUserSettings.objects.all(): - for node, ext_accounts in user_setting.oauth_grants.items(): - for ext_account in ext_accounts.keys(): - if add: - user_setting.oauth_grants[node][ext_account]['library'] = library_name - else: - user_setting.oauth_grants[node][ext_account].pop('library', None) - user_settings_pending_save.append(user_setting) - bulk_update(user_settings_pending_save) - -def migrate_zotero_libraries(state, schema): - """ - 1) For all zotero NodeSettings, mark library_id as 'personal', which has been the only - option prior to zotero group libraries being added - 2) For all zotero usersettings, add 'personal' library value to the nodes that have been given permission - to use zotero external accounts. - """ - modify_node_settings(state, 'personal') - modify_user_settings(state, True, 'personal') - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_zotero', '0004_merge_20180112_0836'), - ] - - operations = [ - migrations.RunPython(migrate_zotero_libraries, reverse_func) - ] diff --git a/addons/zotero/migrations/0006_rename_deleted_field.py b/addons/zotero/migrations/0006_rename_deleted_field.py deleted file mode 100644 index 16927d94cdb..00000000000 --- a/addons/zotero/migrations/0006_rename_deleted_field.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.15 on 2019-06-27 20:29 -from __future__ import unicode_literals - -from django.db import migrations -import osf.utils.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('addons_zotero', '0005_zotero_personal_libraries_20180216_0849'), - ] - - operations = [ - migrations.RenameField( - model_name='nodesettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.RenameField( - model_name='usersettings', - new_name='is_deleted', - old_name='deleted', - ), - migrations.AddField( - model_name='nodesettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='usersettings', - name='deleted', - field=osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True), - ), - ] diff --git a/admin/base/settings/defaults.py b/admin/base/settings/defaults.py index 0e2d29dae76..09cac7f1881 100644 --- a/admin/base/settings/defaults.py +++ b/admin/base/settings/defaults.py @@ -84,7 +84,6 @@ 'django_celery_results', 'raven.contrib.django.raven_compat', 'webpack_loader', - 'password_reset', 'guardian', 'waffle', 'elasticsearch_metrics', @@ -138,9 +137,9 @@ # Settings related to CORS Headers addon: allow API to receive authenticated requests from OSF # CORS plugin only matches based on "netloc" part of URL, so as workaround we add that to the list CORS_ORIGIN_ALLOW_ALL = False -CORS_ORIGIN_WHITELIST = (urlparse(osf_settings.DOMAIN).netloc, - osf_settings.DOMAIN, - ) +CORS_ORIGIN_WHITELIST = ( + osf_settings.DOMAIN.rstrip('/'), +) CORS_ALLOW_CREDENTIALS = True MIDDLEWARE = ( @@ -152,11 +151,10 @@ 'api.base.middleware.CeleryTaskMiddleware', 'api.base.middleware.PostcommitTaskMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', diff --git a/admin/base/urls.py b/admin/base/urls.py index d3354f425eb..a43968e9079 100644 --- a/admin/base/urls.py +++ b/admin/base/urls.py @@ -21,7 +21,6 @@ url(r'^collection_providers/', include('admin.collection_providers.urls', namespace='collection_providers')), url(r'^registration_providers/', include('admin.registration_providers.urls', namespace='registration_providers')), url(r'^account/', include('admin.common_auth.urls', namespace='auth')), - url(r'^password/', include('password_reset.urls')), url(r'^nodes/', include('admin.nodes.urls', namespace='nodes')), url(r'^preprints/', include('admin.preprints.urls', namespace='preprints')), url(r'^subjects/', include('admin.subjects.urls', namespace='subjects')), diff --git a/admin/brands/views.py b/admin/brands/views.py index ff093c447ea..3fc6a25ce6b 100644 --- a/admin/brands/views.py +++ b/admin/brands/views.py @@ -6,7 +6,7 @@ CreateView, UpdateView, ) -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.forms.models import model_to_dict from django.contrib import messages diff --git a/admin/common_auth/urls.py b/admin/common_auth/urls.py index b1fa39b9284..07e676a892e 100644 --- a/admin/common_auth/urls.py +++ b/admin/common_auth/urls.py @@ -1,8 +1,6 @@ from __future__ import absolute_import from django.conf.urls import url -from django.urls import reverse_lazy -from django.contrib.auth.views import password_change, password_change_done from admin.common_auth import views @@ -12,12 +10,6 @@ url(r'^login/?$', views.LoginView.as_view(), name='login'), url(r'^logout/$', views.logout_user, name='logout'), url(r'^register/$', views.RegisterUser.as_view(), name='register'), - url(r'^password_change/$', password_change, - {'post_change_redirect': reverse_lazy('auth:password_change_done')}, - name='password_change'), - url(r'^password_change/done/$', password_change_done, - {'template_name': 'password_change_done.html'}, - name='password_change_done'), url(r'^settings/desk/$', views.DeskUserCreateFormView.as_view(), name='desk'), url(r'^settings/desk/update/$', views.DeskUserUpdateFormView.as_view(), name='desk_update'), ] diff --git a/admin/internet_archive/views.py b/admin/internet_archive/views.py index e5a9fdaf9bd..254718726f5 100644 --- a/admin/internet_archive/views.py +++ b/admin/internet_archive/views.py @@ -13,7 +13,7 @@ from osf.management.commands.sync_ia_metadata import ( sync_ia_metadata, ) -from django.core.urlresolvers import reverse +from django.urls import reverse from django.shortcuts import redirect from admin.base.forms import ArchiveRegistrationWithPigeonForm from website import settings diff --git a/admin/management/views.py b/admin/management/views.py index 48ba1c8ca41..0ead29e0df7 100644 --- a/admin/management/views.py +++ b/admin/management/views.py @@ -6,7 +6,7 @@ from osf.management.commands.manage_switch_flags import manage_waffle from osf.management.commands.update_registration_schemas import update_registration_schemas from scripts.find_spammy_content import manage_spammy_content -from django.core.urlresolvers import reverse +from django.urls import reverse from django.shortcuts import redirect from osf.models import Preprint, Node, Registration diff --git a/admin/meetings/views.py b/admin/meetings/views.py index cbee5dae49b..df496a70a13 100644 --- a/admin/meetings/views.py +++ b/admin/meetings/views.py @@ -65,7 +65,7 @@ def form_valid(self, form): custom_fields, data = get_custom_fields(form.cleaned_data) if 'admins' in form.changed_data: admin_users = get_admin_users(data.get('admins')) - self.conf.admins = admin_users + self.conf.admins.set(admin_users) self.conf.name = data.get('name') self.conf.info_url = data.get('info_url') self.conf.logo_url = data.get('logo_url') diff --git a/admin/nodes/views.py b/admin/nodes/views.py index 73a210bb97b..4254e4fabea 100644 --- a/admin/nodes/views.py +++ b/admin/nodes/views.py @@ -4,7 +4,7 @@ from django.utils import timezone from django.core.exceptions import PermissionDenied, ValidationError -from django.core.urlresolvers import NoReverseMatch +from django.urls import NoReverseMatch from django.db.models import F, Case, When, IntegerField from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin diff --git a/admin/preprints/views.py b/admin/preprints/views.py index 7b25cd10359..0b8eca12825 100644 --- a/admin/preprints/views.py +++ b/admin/preprints/views.py @@ -1,6 +1,6 @@ from django.db.models import F from django.core.exceptions import PermissionDenied -from django.core.urlresolvers import NoReverseMatch +from django.urls import NoReverseMatch from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin from django.shortcuts import redirect diff --git a/admin/registration_schemas/views.py b/admin/registration_schemas/views.py index 4070a9109ae..aa205839029 100644 --- a/admin/registration_schemas/views.py +++ b/admin/registration_schemas/views.py @@ -5,7 +5,7 @@ from django.views.generic import ListView, TemplateView, FormView, DeleteView from admin.registration_schemas.forms import RegistrationSchemaCreateForm, RegistrationSchemaEditForm from django.contrib import messages -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.db.models import Max from django.http import HttpResponseRedirect diff --git a/admin/templates/base.html b/admin/templates/base.html index c3bc9086a07..d85bd31f226 100644 --- a/admin/templates/base.html +++ b/admin/templates/base.html @@ -1,4 +1,4 @@ -{% load staticfiles %} +{% load static %} {% load render_bundle from webpack_loader %} diff --git a/admin/templates/institutions/register_institutional_admin.html b/admin/templates/institutions/register_institutional_admin.html index e191d639a64..c1e94d3105e 100644 --- a/admin/templates/institutions/register_institutional_admin.html +++ b/admin/templates/institutions/register_institutional_admin.html @@ -1,6 +1,6 @@ {% extends 'base.html' %} {% load render_bundle from webpack_loader %} -{% load staticfiles %} +{% load static %} {% block content %}