diff --git a/archivebox/api/migrations/0003_outboundwebhook_apitoken_abid_apitoken_uuid_and_more.py b/archivebox/api/migrations/0003_rename_user_apitoken_created_by_apitoken_abid_and_more.py similarity index 83% rename from archivebox/api/migrations/0003_outboundwebhook_apitoken_abid_apitoken_uuid_and_more.py rename to archivebox/api/migrations/0003_rename_user_apitoken_created_by_apitoken_abid_and_more.py index 5674406a..58bcac5a 100644 --- a/archivebox/api/migrations/0003_outboundwebhook_apitoken_abid_apitoken_uuid_and_more.py +++ b/archivebox/api/migrations/0003_rename_user_apitoken_created_by_apitoken_abid_and_more.py @@ -1,9 +1,12 @@ -# Generated by Django 5.0.6 on 2024-05-13 10:58 +# Generated by Django 5.0.6 on 2024-06-03 01:52 +import abid_utils.models import charidfield.fields +import django.db.models.deletion import signal_webhooks.fields import signal_webhooks.utils import uuid +from django.conf import settings from django.db import migrations, models @@ -11,37 +14,24 @@ class Migration(migrations.Migration): dependencies = [ ('api', '0002_alter_apitoken_options'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ - migrations.CreateModel( - name='OutboundWebhook', - fields=[ - ('name', models.CharField(db_index=True, help_text='Give your webhook a descriptive name (e.g. Notify ACME Slack channel of any new ArchiveResults).', max_length=255, unique=True, verbose_name='name')), - ('signal', models.CharField(choices=[('CREATE', 'Create'), ('UPDATE', 'Update'), ('DELETE', 'Delete'), ('M2M', 'M2M changed'), ('CREATE_OR_UPDATE', 'Create or Update'), ('CREATE_OR_DELETE', 'Create or Delete'), ('CREATE_OR_M2M', 'Create or M2M changed'), ('UPDATE_OR_DELETE', 'Update or Delete'), ('UPDATE_OR_M2M', 'Update or M2M changed'), ('DELETE_OR_M2M', 'Delete or M2M changed'), ('CREATE_UPDATE_OR_DELETE', 'Create, Update or Delete'), ('CREATE_UPDATE_OR_M2M', 'Create, Update or M2M changed'), ('CREATE_DELETE_OR_M2M', 'Create, Delete or M2M changed'), ('UPDATE_DELETE_OR_M2M', 'Update, Delete or M2M changed'), ('CREATE_UPDATE_DELETE_OR_M2M', 'Create, Update or Delete, or M2M changed')], help_text='The type of event the webhook should fire for (e.g. Create, Update, Delete).', max_length=255, verbose_name='signal')), - ('ref', models.CharField(db_index=True, help_text='Dot import notation of the model the webhook should fire for (e.g. core.models.Snapshot or core.models.ArchiveResult).', max_length=1023, validators=[signal_webhooks.utils.model_from_reference], verbose_name='referenced model')), - ('endpoint', models.URLField(help_text='External URL to POST the webhook notification to (e.g. https://someapp.example.com/webhook/some-webhook-receiver).', max_length=2047, verbose_name='endpoint')), - ('headers', models.JSONField(blank=True, default=dict, help_text='Headers to send with the webhook request.', validators=[signal_webhooks.utils.is_dict], verbose_name='headers')), - ('auth_token', signal_webhooks.fields.TokenField(blank=True, default='', help_text='Authentication token to use in an Authorization header.', max_length=8000, validators=[signal_webhooks.utils.decode_cipher_key], verbose_name='authentication token')), - ('enabled', models.BooleanField(default=True, help_text='Is this webhook enabled?', verbose_name='enabled')), - ('keep_last_response', models.BooleanField(default=False, help_text='Should the webhook keep a log of the latest response it got?', verbose_name='keep last response')), - ('created', models.DateTimeField(auto_now_add=True, help_text='When the webhook was created.', verbose_name='created')), - ('updated', models.DateTimeField(auto_now=True, help_text='When the webhook was last updated.', verbose_name='updated')), - ('last_response', models.CharField(blank=True, default='', help_text='Latest response to this webhook.', max_length=8000, verbose_name='last response')), - ('last_success', models.DateTimeField(default=None, help_text='When the webhook last succeeded.', null=True, verbose_name='last success')), - ('last_failure', models.DateTimeField(default=None, help_text='When the webhook last failed.', null=True, verbose_name='last failure')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('abid', charidfield.fields.CharIDField(blank=True, db_index=True, default=None, help_text='ABID-format identifier for this entity (e.g. snp_01BJQMF54D093DXEAWZ6JYRPAQ)', max_length=30, null=True, prefix='whk', unique=True)), - ], - options={ - 'verbose_name': 'API Outbound Webhook', - 'abstract': False, - }, + migrations.RenameField( + model_name='apitoken', + old_name='user', + new_name='created_by', ), migrations.AddField( model_name='apitoken', name='abid', - field=charidfield.fields.CharIDField(blank=True, db_index=True, default=None, help_text='ABID-format identifier for this entity (e.g. snp_01BJQMF54D093DXEAWZ6JYRPAQ)', max_length=30, null=True, prefix='apt', unique=True), + field=charidfield.fields.CharIDField(blank=True, db_index=True, default=None, help_text='ABID-format identifier for this entity (e.g. snp_01BJQMF54D093DXEAWZ6JYRPAQ)', max_length=30, null=True, prefix='apt_', unique=True), + ), + migrations.AddField( + model_name='apitoken', + name='modified', + field=models.DateTimeField(auto_now=True), ), migrations.AddField( model_name='apitoken', @@ -53,6 +43,33 @@ class Migration(migrations.Migration): name='id', field=models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), ), + migrations.CreateModel( + name='OutboundWebhook', + fields=[ + ('name', models.CharField(db_index=True, help_text='Give your webhook a descriptive name (e.g. Notify ACME Slack channel of any new ArchiveResults).', max_length=255, unique=True, verbose_name='name')), + ('signal', models.CharField(choices=[('CREATE', 'Create'), ('UPDATE', 'Update'), ('DELETE', 'Delete'), ('M2M', 'M2M changed'), ('CREATE_OR_UPDATE', 'Create or Update'), ('CREATE_OR_DELETE', 'Create or Delete'), ('CREATE_OR_M2M', 'Create or M2M changed'), ('UPDATE_OR_DELETE', 'Update or Delete'), ('UPDATE_OR_M2M', 'Update or M2M changed'), ('DELETE_OR_M2M', 'Delete or M2M changed'), ('CREATE_UPDATE_OR_DELETE', 'Create, Update or Delete'), ('CREATE_UPDATE_OR_M2M', 'Create, Update or M2M changed'), ('CREATE_DELETE_OR_M2M', 'Create, Delete or M2M changed'), ('UPDATE_DELETE_OR_M2M', 'Update, Delete or M2M changed'), ('CREATE_UPDATE_DELETE_OR_M2M', 'Create, Update or Delete, or M2M changed')], help_text='The type of event the webhook should fire for (e.g. Create, Update, Delete).', max_length=255, verbose_name='signal')), + ('ref', models.CharField(db_index=True, help_text='Dot import notation of the model the webhook should fire for (e.g. core.models.Snapshot or core.models.ArchiveResult).', max_length=1023, validators=[signal_webhooks.utils.model_from_reference], verbose_name='referenced model')), + ('endpoint', models.URLField(help_text='External URL to POST the webhook notification to (e.g. https://someapp.example.com/webhook/some-webhook-receiver).', max_length=2047, verbose_name='endpoint')), + ('headers', models.JSONField(blank=True, default=dict, help_text='Headers to send with the webhook request.', validators=[signal_webhooks.utils.is_dict], verbose_name='headers')), + ('auth_token', signal_webhooks.fields.TokenField(blank=True, default='', help_text='Authentication token to use in an Authorization header.', max_length=8000, validators=[signal_webhooks.utils.decode_cipher_key], verbose_name='authentication token')), + ('enabled', models.BooleanField(default=True, help_text='Is this webhook enabled?', verbose_name='enabled')), + ('keep_last_response', models.BooleanField(default=False, help_text='Should the webhook keep a log of the latest response it got?', verbose_name='keep last response')), + ('updated', models.DateTimeField(auto_now=True, help_text='When the webhook was last updated.', verbose_name='updated')), + ('last_response', models.CharField(blank=True, default='', help_text='Latest response to this webhook.', max_length=8000, verbose_name='last response')), + ('last_success', models.DateTimeField(default=None, help_text='When the webhook last succeeded.', null=True, verbose_name='last success')), + ('last_failure', models.DateTimeField(default=None, help_text='When the webhook last failed.', null=True, verbose_name='last failure')), + ('created', models.DateTimeField(auto_now_add=True)), + ('modified', models.DateTimeField(auto_now=True)), + ('id', models.UUIDField(blank=True, null=True, unique=True)), + ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('abid', charidfield.fields.CharIDField(blank=True, db_index=True, default=None, help_text='ABID-format identifier for this entity (e.g. snp_01BJQMF54D093DXEAWZ6JYRPAQ)', max_length=30, null=True, prefix='whk_', unique=True)), + ('created_by', models.ForeignKey(default=abid_utils.models.get_or_create_system_user_pk, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'API Outbound Webhook', + 'abstract': False, + }, + ), migrations.AddConstraint( model_name='outboundwebhook', constraint=models.UniqueConstraint(fields=('ref', 'endpoint'), name='prevent_duplicate_hooks_api_outboundwebhook'), diff --git a/archivebox/api/migrations/0004_rename_user_apitoken_created_by_apitoken_modified_and_more.py b/archivebox/api/migrations/0004_rename_user_apitoken_created_by_apitoken_modified_and_more.py deleted file mode 100644 index 3c44f3fd..00000000 --- a/archivebox/api/migrations/0004_rename_user_apitoken_created_by_apitoken_modified_and_more.py +++ /dev/null @@ -1,58 +0,0 @@ -# Generated by Django 5.0.6 on 2024-05-13 14:36 - -import abid_utils.models -import charidfield.fields -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0003_outboundwebhook_apitoken_abid_apitoken_uuid_and_more'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.RenameField( - model_name='apitoken', - old_name='user', - new_name='created_by', - ), - migrations.AddField( - model_name='apitoken', - name='modified', - field=models.DateTimeField(auto_now=True), - ), - migrations.AddField( - model_name='outboundwebhook', - name='created_by', - field=models.ForeignKey(default=abid_utils.models.get_or_create_system_user_pk, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='outboundwebhook', - name='id', - field=models.UUIDField(blank=True, null=True, unique=True), - ), - migrations.AddField( - model_name='outboundwebhook', - name='modified', - field=models.DateTimeField(auto_now=True), - ), - migrations.AlterField( - model_name='apitoken', - name='abid', - field=charidfield.fields.CharIDField(blank=True, db_index=True, default=None, help_text='ABID-format identifier for this entity (e.g. snp_01BJQMF54D093DXEAWZ6JYRPAQ)', max_length=30, null=True, prefix='apt_', unique=True), - ), - migrations.AlterField( - model_name='outboundwebhook', - name='abid', - field=charidfield.fields.CharIDField(blank=True, db_index=True, default=None, help_text='ABID-format identifier for this entity (e.g. snp_01BJQMF54D093DXEAWZ6JYRPAQ)', max_length=30, null=True, prefix='whk_', unique=True), - ), - migrations.AlterField( - model_name='outboundwebhook', - name='created', - field=models.DateTimeField(auto_now_add=True), - ), - ]