From ab8b798547e82ca79882ba28b1920077c803425f Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Fri, 5 Apr 2019 18:24:32 +0100 Subject: pysite -> pydis_site --- pydis_site/apps/api/migrations/0001_initial.py | 21 +++++++++++ .../apps/api/migrations/0002_documentationlink.py | 21 +++++++++++ .../api/migrations/0003_offtopicchannelname.py | 20 ++++++++++ pydis_site/apps/api/migrations/0004_role.py | 23 +++++++++++ pydis_site/apps/api/migrations/0005_user.py | 38 +++++++++++++++++++ .../apps/api/migrations/0006_add_help_texts.py | 44 ++++++++++++++++++++++ pydis_site/apps/api/migrations/0007_tag.py | 23 +++++++++++ .../api/migrations/0008_tag_embed_validator.py | 23 +++++++++++ pydis_site/apps/api/migrations/0009_snakefact.py | 21 +++++++++++ pydis_site/apps/api/migrations/0010_snakeidiom.py | 21 +++++++++++ .../apps/api/migrations/0011_auto_20181020_1904.py | 18 +++++++++ .../apps/api/migrations/0012_specialsnake.py | 22 +++++++++++ .../apps/api/migrations/0013_specialsnake_image.py | 21 +++++++++++ .../apps/api/migrations/0014_auto_20181025_1959.py | 23 +++++++++++ .../apps/api/migrations/0015_auto_20181027_1617.py | 19 ++++++++++ .../apps/api/migrations/0016_auto_20181027_1619.py | 18 +++++++++ .../apps/api/migrations/0017_auto_20181029_1921.py | 19 ++++++++++ .../api/migrations/0018_messagedeletioncontext.py | 24 ++++++++++++ pydis_site/apps/api/migrations/0018_user_rename.py | 17 +++++++++ .../apps/api/migrations/0019_deletedmessage.py | 34 +++++++++++++++++ .../apps/api/migrations/0019_user_in_guild.py | 18 +++++++++ .../migrations/0020_add_snake_field_validators.py | 24 ++++++++++++ pydis_site/apps/api/migrations/0020_infraction.py | 30 +++++++++++++++ .../migrations/0021_add_special_snake_validator.py | 19 ++++++++++ .../api/migrations/0021_infraction_reason_null.py | 18 +++++++++ .../api/migrations/0021_merge_20181125_1015.py | 14 +++++++ .../api/migrations/0022_infraction_remove_note.py | 18 +++++++++ .../0023_merge_infractions_snake_validators.py | 14 +++++++ .../migrations/0024_add_note_infraction_type.py | 18 +++++++++ ...25_allow_custom_inserted_at_infraction_field.py | 19 ++++++++++ ...proper_default_for_infraction_insertion_date.py | 19 ++++++++++ .../api/migrations/0027_merge_20190120_0852.py | 14 +++++++ .../migrations/0028_allow_message_content_blank.py | 18 +++++++++ .../migrations/0029_add_infraction_type_watch.py | 18 +++++++++ pydis_site/apps/api/migrations/0030_reminder.py | 27 +++++++++++++ pydis_site/apps/api/migrations/0031_nomination.py | 26 +++++++++++++ pydis_site/apps/api/migrations/0032_botsetting.py | 23 +++++++++++ .../api/migrations/0033_create_defcon_settings.py | 30 +++++++++++++++ .../0034_add_botsetting_name_validator.py | 20 ++++++++++ pydis_site/apps/api/migrations/__init__.py | 0 40 files changed, 857 insertions(+) create mode 100644 pydis_site/apps/api/migrations/0001_initial.py create mode 100644 pydis_site/apps/api/migrations/0002_documentationlink.py create mode 100644 pydis_site/apps/api/migrations/0003_offtopicchannelname.py create mode 100644 pydis_site/apps/api/migrations/0004_role.py create mode 100644 pydis_site/apps/api/migrations/0005_user.py create mode 100644 pydis_site/apps/api/migrations/0006_add_help_texts.py create mode 100644 pydis_site/apps/api/migrations/0007_tag.py create mode 100644 pydis_site/apps/api/migrations/0008_tag_embed_validator.py create mode 100644 pydis_site/apps/api/migrations/0009_snakefact.py create mode 100644 pydis_site/apps/api/migrations/0010_snakeidiom.py create mode 100644 pydis_site/apps/api/migrations/0011_auto_20181020_1904.py create mode 100644 pydis_site/apps/api/migrations/0012_specialsnake.py create mode 100644 pydis_site/apps/api/migrations/0013_specialsnake_image.py create mode 100644 pydis_site/apps/api/migrations/0014_auto_20181025_1959.py create mode 100644 pydis_site/apps/api/migrations/0015_auto_20181027_1617.py create mode 100644 pydis_site/apps/api/migrations/0016_auto_20181027_1619.py create mode 100644 pydis_site/apps/api/migrations/0017_auto_20181029_1921.py create mode 100644 pydis_site/apps/api/migrations/0018_messagedeletioncontext.py create mode 100644 pydis_site/apps/api/migrations/0018_user_rename.py create mode 100644 pydis_site/apps/api/migrations/0019_deletedmessage.py create mode 100644 pydis_site/apps/api/migrations/0019_user_in_guild.py create mode 100644 pydis_site/apps/api/migrations/0020_add_snake_field_validators.py create mode 100644 pydis_site/apps/api/migrations/0020_infraction.py create mode 100644 pydis_site/apps/api/migrations/0021_add_special_snake_validator.py create mode 100644 pydis_site/apps/api/migrations/0021_infraction_reason_null.py create mode 100644 pydis_site/apps/api/migrations/0021_merge_20181125_1015.py create mode 100644 pydis_site/apps/api/migrations/0022_infraction_remove_note.py create mode 100644 pydis_site/apps/api/migrations/0023_merge_infractions_snake_validators.py create mode 100644 pydis_site/apps/api/migrations/0024_add_note_infraction_type.py create mode 100644 pydis_site/apps/api/migrations/0025_allow_custom_inserted_at_infraction_field.py create mode 100644 pydis_site/apps/api/migrations/0026_use_proper_default_for_infraction_insertion_date.py create mode 100644 pydis_site/apps/api/migrations/0027_merge_20190120_0852.py create mode 100644 pydis_site/apps/api/migrations/0028_allow_message_content_blank.py create mode 100644 pydis_site/apps/api/migrations/0029_add_infraction_type_watch.py create mode 100644 pydis_site/apps/api/migrations/0030_reminder.py create mode 100644 pydis_site/apps/api/migrations/0031_nomination.py create mode 100644 pydis_site/apps/api/migrations/0032_botsetting.py create mode 100644 pydis_site/apps/api/migrations/0033_create_defcon_settings.py create mode 100644 pydis_site/apps/api/migrations/0034_add_botsetting_name_validator.py create mode 100644 pydis_site/apps/api/migrations/__init__.py (limited to 'pydis_site/apps/api/migrations') diff --git a/pydis_site/apps/api/migrations/0001_initial.py b/pydis_site/apps/api/migrations/0001_initial.py new file mode 100644 index 00000000..dca6d17f --- /dev/null +++ b/pydis_site/apps/api/migrations/0001_initial.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1 on 2018-08-15 17:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='SnakeName', + fields=[ + ('name', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('scientific', models.CharField(max_length=150)), + ], + ), + ] diff --git a/pydis_site/apps/api/migrations/0002_documentationlink.py b/pydis_site/apps/api/migrations/0002_documentationlink.py new file mode 100644 index 00000000..5dee679a --- /dev/null +++ b/pydis_site/apps/api/migrations/0002_documentationlink.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1 on 2018-08-16 19:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='DocumentationLink', + fields=[ + ('package', models.CharField(max_length=50, primary_key=True, serialize=False)), + ('base_url', models.URLField()), + ('inventory_url', models.URLField()), + ], + ), + ] diff --git a/pydis_site/apps/api/migrations/0003_offtopicchannelname.py b/pydis_site/apps/api/migrations/0003_offtopicchannelname.py new file mode 100644 index 00000000..2f19bfd8 --- /dev/null +++ b/pydis_site/apps/api/migrations/0003_offtopicchannelname.py @@ -0,0 +1,20 @@ +# Generated by Django 2.1 on 2018-08-31 22:21 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0002_documentationlink'), + ] + + operations = [ + migrations.CreateModel( + name='OffTopicChannelName', + fields=[ + ('name', models.CharField(max_length=96, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex='^[a-z0-9-]+$')])), + ], + ), + ] diff --git a/pydis_site/apps/api/migrations/0004_role.py b/pydis_site/apps/api/migrations/0004_role.py new file mode 100644 index 00000000..0a6b6c43 --- /dev/null +++ b/pydis_site/apps/api/migrations/0004_role.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1 on 2018-09-01 19:54 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0003_offtopicchannelname'), + ] + + operations = [ + migrations.CreateModel( + name='Role', + fields=[ + ('id', models.BigIntegerField(help_text="The role's ID, taken from Discord.", primary_key=True, serialize=False, validators=[django.core.validators.MinValueValidator(limit_value=0, message='Role IDs cannot be negative.')])), + ('name', models.CharField(help_text="The role's name, taken from Discord.", max_length=100)), + ('colour', models.IntegerField(help_text='The integer value of the colour of this role from Discord.', validators=[django.core.validators.MinValueValidator(limit_value=0, message='Colour hex cannot be negative.')])), + ('permissions', models.IntegerField(help_text='The integer value of the permission bitset of this role from Discord.', validators=[django.core.validators.MinValueValidator(limit_value=0, message='Role permissions cannot be negative.'), django.core.validators.MaxValueValidator(limit_value=8589934592, message='Role permission bitset exceeds value of having all permissions')])), + ], + ), + ] diff --git a/pydis_site/apps/api/migrations/0005_user.py b/pydis_site/apps/api/migrations/0005_user.py new file mode 100644 index 00000000..a771119c --- /dev/null +++ b/pydis_site/apps/api/migrations/0005_user.py @@ -0,0 +1,38 @@ +# Generated by Django 2.1 on 2018-09-01 20:02 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0004_role'), + ] + + operations = [ + migrations.CreateModel( + name='Member', + fields=[ + ('id', models.BigIntegerField(help_text='The ID of this user, taken from Discord.', primary_key=True, serialize=False, validators=[django.core.validators.MinValueValidator(limit_value=0, message='User IDs cannot be negative.')])), + ('name', models.CharField(help_text='The username, taken from Discord.', max_length=32)), + ('discriminator', models.PositiveSmallIntegerField(help_text='The discriminator of this user, taken from Discord.', validators=[django.core.validators.MaxValueValidator(limit_value=9999, message='Discriminators may not exceed `9999`.')])), + ('avatar_hash', models.CharField(help_text="The user's avatar hash, taken from Discord. Null if the user does not have any custom avatar.", max_length=100, null=True)), + ], + ), + migrations.AlterField( + model_name='role', + name='id', + field=models.BigIntegerField(help_text='The role ID, taken from Discord.', primary_key=True, serialize=False, validators=[django.core.validators.MinValueValidator(limit_value=0, message='Role IDs cannot be negative.')]), + ), + migrations.AlterField( + model_name='role', + name='name', + field=models.CharField(help_text='The role name, taken from Discord.', max_length=100), + ), + migrations.AddField( + model_name='member', + name='roles', + field=models.ManyToManyField(help_text='Any roles this user has on our server.', to='api.Role'), + ), + ] diff --git a/pydis_site/apps/api/migrations/0006_add_help_texts.py b/pydis_site/apps/api/migrations/0006_add_help_texts.py new file mode 100644 index 00000000..a57d2289 --- /dev/null +++ b/pydis_site/apps/api/migrations/0006_add_help_texts.py @@ -0,0 +1,44 @@ +# Generated by Django 2.1.1 on 2018-09-21 20:26 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0005_user'), + ] + + operations = [ + migrations.AlterField( + model_name='documentationlink', + name='base_url', + field=models.URLField(help_text='The base URL from which documentation will be available for this project. Used to generate links to various symbols within this package.'), + ), + migrations.AlterField( + model_name='documentationlink', + name='inventory_url', + field=models.URLField(help_text='The URL at which the Sphinx inventory is available for this package.'), + ), + migrations.AlterField( + model_name='documentationlink', + name='package', + field=models.CharField(help_text='The Python package name that this documentation link belongs to.', max_length=50, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='offtopicchannelname', + name='name', + field=models.CharField(help_text='The actual channel name that will be used on our Discord server.', max_length=96, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex='^[a-z0-9-]+$')]), + ), + migrations.AlterField( + model_name='snakename', + name='name', + field=models.CharField(help_text="The regular name for this snake, e.g. 'Python'.", max_length=100, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='snakename', + name='scientific', + field=models.CharField(help_text="The scientific name for this snake, e.g. 'Python bivittatus'.", max_length=150), + ), + ] diff --git a/pydis_site/apps/api/migrations/0007_tag.py b/pydis_site/apps/api/migrations/0007_tag.py new file mode 100644 index 00000000..c22715f9 --- /dev/null +++ b/pydis_site/apps/api/migrations/0007_tag.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1.1 on 2018-09-21 22:05 + +import pydis_site.apps.api.models +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0006_add_help_texts'), + ] + + operations = [ + migrations.CreateModel( + name='Tag', + fields=[ + ('title', models.CharField(help_text='The title of this tag, shown in searches and providing a quick overview over what this embed contains.', max_length=100, primary_key=True, serialize=False)), + ('embed', django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual embed shown by this tag.')), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0008_tag_embed_validator.py b/pydis_site/apps/api/migrations/0008_tag_embed_validator.py new file mode 100644 index 00000000..eecc0bc3 --- /dev/null +++ b/pydis_site/apps/api/migrations/0008_tag_embed_validator.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1.1 on 2018-09-23 10:07 + +import pydis_site.apps.api.validators +import django.contrib.postgres.fields.jsonb +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0007_tag'), + ] + + operations = [ + migrations.AlterField( + model_name='tag', + name='embed', + field=django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual embed shown by this tag.', validators=[ + + + pydis_site.apps.api.validators.validate_tag_embed]), + ), + ] diff --git a/pydis_site/apps/api/migrations/0009_snakefact.py b/pydis_site/apps/api/migrations/0009_snakefact.py new file mode 100644 index 00000000..4fc63bc9 --- /dev/null +++ b/pydis_site/apps/api/migrations/0009_snakefact.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1.2 on 2018-10-11 14:25 + +import pydis_site.apps.api.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0008_tag_embed_validator'), + ] + + operations = [ + migrations.CreateModel( + name='SnakeFact', + fields=[ + ('fact', models.CharField(help_text='A fact about snakes.', max_length=200, primary_key=True, serialize=False)), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0010_snakeidiom.py b/pydis_site/apps/api/migrations/0010_snakeidiom.py new file mode 100644 index 00000000..be089cf4 --- /dev/null +++ b/pydis_site/apps/api/migrations/0010_snakeidiom.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1.2 on 2018-10-19 16:27 + +import pydis_site.apps.api.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0009_snakefact'), + ] + + operations = [ + migrations.CreateModel( + name='SnakeIdiom', + fields=[ + ('idiom', models.CharField(help_text='A snake idiom', max_length=140, primary_key=True, serialize=False)), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0011_auto_20181020_1904.py b/pydis_site/apps/api/migrations/0011_auto_20181020_1904.py new file mode 100644 index 00000000..bb5a6325 --- /dev/null +++ b/pydis_site/apps/api/migrations/0011_auto_20181020_1904.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.2 on 2018-10-20 19:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0010_snakeidiom'), + ] + + operations = [ + migrations.AlterField( + model_name='snakeidiom', + name='idiom', + field=models.CharField(help_text='A saying about a snake.', max_length=140, primary_key=True, serialize=False), + ), + ] diff --git a/pydis_site/apps/api/migrations/0012_specialsnake.py b/pydis_site/apps/api/migrations/0012_specialsnake.py new file mode 100644 index 00000000..77072526 --- /dev/null +++ b/pydis_site/apps/api/migrations/0012_specialsnake.py @@ -0,0 +1,22 @@ +# Generated by Django 2.1.2 on 2018-10-22 09:53 + +import pydis_site.apps.api.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0011_auto_20181020_1904'), + ] + + operations = [ + migrations.CreateModel( + name='SpecialSnake', + fields=[ + ('name', models.CharField(max_length=140, primary_key=True, serialize=False)), + ('info', models.TextField()), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0013_specialsnake_image.py b/pydis_site/apps/api/migrations/0013_specialsnake_image.py new file mode 100644 index 00000000..a0d0d318 --- /dev/null +++ b/pydis_site/apps/api/migrations/0013_specialsnake_image.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1.2 on 2018-10-23 11:51 + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0012_specialsnake'), + ] + + operations = [ + migrations.AddField( + model_name='specialsnake', + name='image', + field=models.URLField(default=datetime.datetime(2018, 10, 23, 11, 51, 23, 703868, tzinfo=utc)), + preserve_default=False, + ), + ] diff --git a/pydis_site/apps/api/migrations/0014_auto_20181025_1959.py b/pydis_site/apps/api/migrations/0014_auto_20181025_1959.py new file mode 100644 index 00000000..3599d2cd --- /dev/null +++ b/pydis_site/apps/api/migrations/0014_auto_20181025_1959.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1.2 on 2018-10-25 19:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0013_specialsnake_image'), + ] + + operations = [ + migrations.AlterField( + model_name='specialsnake', + name='info', + field=models.TextField(help_text='Info about a special snake.'), + ), + migrations.AlterField( + model_name='specialsnake', + name='name', + field=models.CharField(help_text='A special snake name.', max_length=140, primary_key=True, serialize=False), + ), + ] diff --git a/pydis_site/apps/api/migrations/0015_auto_20181027_1617.py b/pydis_site/apps/api/migrations/0015_auto_20181027_1617.py new file mode 100644 index 00000000..8973ff6d --- /dev/null +++ b/pydis_site/apps/api/migrations/0015_auto_20181027_1617.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.2 on 2018-10-27 16:17 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0014_auto_20181025_1959'), + ] + + operations = [ + migrations.AlterField( + model_name='specialsnake', + name='image', + field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(), size=None), + ), + ] diff --git a/pydis_site/apps/api/migrations/0016_auto_20181027_1619.py b/pydis_site/apps/api/migrations/0016_auto_20181027_1619.py new file mode 100644 index 00000000..b8bdfb16 --- /dev/null +++ b/pydis_site/apps/api/migrations/0016_auto_20181027_1619.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.2 on 2018-10-27 16:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0015_auto_20181027_1617'), + ] + + operations = [ + migrations.RenameField( + model_name='specialsnake', + old_name='image', + new_name='images', + ), + ] diff --git a/pydis_site/apps/api/migrations/0017_auto_20181029_1921.py b/pydis_site/apps/api/migrations/0017_auto_20181029_1921.py new file mode 100644 index 00000000..012bda61 --- /dev/null +++ b/pydis_site/apps/api/migrations/0017_auto_20181029_1921.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.2 on 2018-10-29 19:21 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0016_auto_20181027_1619'), + ] + + operations = [ + migrations.AlterField( + model_name='specialsnake', + name='images', + field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(), help_text='Images displaying this special snake.', size=None), + ), + ] diff --git a/pydis_site/apps/api/migrations/0018_messagedeletioncontext.py b/pydis_site/apps/api/migrations/0018_messagedeletioncontext.py new file mode 100644 index 00000000..dced1288 --- /dev/null +++ b/pydis_site/apps/api/migrations/0018_messagedeletioncontext.py @@ -0,0 +1,24 @@ +# Generated by Django 2.1.1 on 2018-11-18 20:12 + +import pydis_site.apps.api.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0017_auto_20181029_1921'), + ] + + operations = [ + migrations.CreateModel( + name='MessageDeletionContext', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('creation', models.DateTimeField(help_text='When this deletion took place.')), + ('actor', models.ForeignKey(help_text='The original actor causing this deletion. Could be the author of a manual clean command invocation, the bot when executing automatic actions, or nothing to indicate that the bulk deletion was not issued by us.', null=True, on_delete=django.db.models.deletion.CASCADE, to='api.User')), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0018_user_rename.py b/pydis_site/apps/api/migrations/0018_user_rename.py new file mode 100644 index 00000000..f88eb5bc --- /dev/null +++ b/pydis_site/apps/api/migrations/0018_user_rename.py @@ -0,0 +1,17 @@ +# Generated by Django 2.1.3 on 2018-11-19 20:09 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0017_auto_20181029_1921'), + ] + + operations = [ + migrations.RenameModel( + old_name='Member', + new_name='User', + ), + ] diff --git a/pydis_site/apps/api/migrations/0019_deletedmessage.py b/pydis_site/apps/api/migrations/0019_deletedmessage.py new file mode 100644 index 00000000..7a039675 --- /dev/null +++ b/pydis_site/apps/api/migrations/0019_deletedmessage.py @@ -0,0 +1,34 @@ +# Generated by Django 2.1.1 on 2018-11-18 20:26 + +import pydis_site.apps.api.models +import pydis_site.apps.api.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0018_messagedeletioncontext'), + ] + + operations = [ + migrations.CreateModel( + name='DeletedMessage', + fields=[ + ('id', models.BigIntegerField(help_text='The message ID as taken from Discord.', primary_key=True, serialize=False, validators=[django.core.validators.MinValueValidator(limit_value=0, message='Message IDs cannot be negative.')])), + ('channel_id', models.BigIntegerField(help_text='The channel ID that this message was sent in, taken from Discord.', validators=[django.core.validators.MinValueValidator(limit_value=0, message='Channel IDs cannot be negative.')])), + ('content', models.CharField(help_text='The content of this message, taken from Discord.', max_length=2000)), + ('embeds', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.jsonb.JSONField(validators=[ + + + pydis_site.apps.api.validators.validate_tag_embed]), help_text='Embeds attached to this message.', size=None)), + ('author', models.ForeignKey(help_text='The author of this message.', on_delete=django.db.models.deletion.CASCADE, to='api.User')), + ('deletion_context', models.ForeignKey(help_text='The deletion context this message is part of.', on_delete=django.db.models.deletion.CASCADE, to='api.MessageDeletionContext')), + ], + options={ + 'abstract': False, + }, + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0019_user_in_guild.py b/pydis_site/apps/api/migrations/0019_user_in_guild.py new file mode 100644 index 00000000..fda008c4 --- /dev/null +++ b/pydis_site/apps/api/migrations/0019_user_in_guild.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.3 on 2018-11-19 20:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0018_user_rename'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='in_guild', + field=models.BooleanField(default=True, help_text='Whether this user is in our server.'), + ), + ] diff --git a/pydis_site/apps/api/migrations/0020_add_snake_field_validators.py b/pydis_site/apps/api/migrations/0020_add_snake_field_validators.py new file mode 100644 index 00000000..3b625f9b --- /dev/null +++ b/pydis_site/apps/api/migrations/0020_add_snake_field_validators.py @@ -0,0 +1,24 @@ +# Generated by Django 2.1.2 on 2018-11-24 17:11 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0019_user_in_guild'), + ] + + operations = [ + migrations.AlterField( + model_name='snakename', + name='name', + field=models.CharField(help_text="The regular name for this snake, e.g. 'Python'.", max_length=100, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex='^([^0-9])+$')]), + ), + migrations.AlterField( + model_name='snakename', + name='scientific', + field=models.CharField(help_text="The scientific name for this snake, e.g. 'Python bivittatus'.", max_length=150, validators=[django.core.validators.RegexValidator(regex='^([^0-9])+$')]), + ), + ] diff --git a/pydis_site/apps/api/migrations/0020_infraction.py b/pydis_site/apps/api/migrations/0020_infraction.py new file mode 100644 index 00000000..6bef6b77 --- /dev/null +++ b/pydis_site/apps/api/migrations/0020_infraction.py @@ -0,0 +1,30 @@ +# Generated by Django 2.1.3 on 2018-11-19 22:02 + +import pydis_site.apps.api.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0019_user_in_guild'), + ] + + operations = [ + migrations.CreateModel( + name='Infraction', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('inserted_at', models.DateTimeField(auto_now_add=True, help_text='The date and time of the creation of this infraction.')), + ('expires_at', models.DateTimeField(help_text="The date and time of the expiration of this infraction. Null if the infraction is permanent or it can't expire.", null=True)), + ('active', models.BooleanField(default=True, help_text='Whether the infraction is still active.')), + ('type', models.CharField(choices=[('note', 'Note'), ('warning', 'Warning'), ('mute', 'Mute'), ('ban', 'Ban'), ('kick', 'Kick'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9)), + ('reason', models.TextField(help_text='The reason for the infraction.')), + ('hidden', models.BooleanField(default=False, help_text='Whether the infraction is a shadow infraction.')), + ('actor', models.ForeignKey(help_text='The user which applied the infraction.', on_delete=django.db.models.deletion.CASCADE, related_name='infractions_given', to='api.User')), + ('user', models.ForeignKey(help_text='The user to which the infraction was applied.', on_delete=django.db.models.deletion.CASCADE, related_name='infractions_received', to='api.User')), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0021_add_special_snake_validator.py b/pydis_site/apps/api/migrations/0021_add_special_snake_validator.py new file mode 100644 index 00000000..d41b96e5 --- /dev/null +++ b/pydis_site/apps/api/migrations/0021_add_special_snake_validator.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.2 on 2018-11-25 14:59 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0020_add_snake_field_validators'), + ] + + operations = [ + migrations.AlterField( + model_name='specialsnake', + name='name', + field=models.CharField(help_text='A special snake name.', max_length=140, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex='^([^0-9])+$')]), + ), + ] diff --git a/pydis_site/apps/api/migrations/0021_infraction_reason_null.py b/pydis_site/apps/api/migrations/0021_infraction_reason_null.py new file mode 100644 index 00000000..6600f230 --- /dev/null +++ b/pydis_site/apps/api/migrations/0021_infraction_reason_null.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.3 on 2018-11-21 00:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0020_infraction'), + ] + + operations = [ + migrations.AlterField( + model_name='infraction', + name='reason', + field=models.TextField(help_text='The reason for the infraction.', null=True), + ), + ] diff --git a/pydis_site/apps/api/migrations/0021_merge_20181125_1015.py b/pydis_site/apps/api/migrations/0021_merge_20181125_1015.py new file mode 100644 index 00000000..d8eaa510 --- /dev/null +++ b/pydis_site/apps/api/migrations/0021_merge_20181125_1015.py @@ -0,0 +1,14 @@ +# Generated by Django 2.1.1 on 2018-11-25 10:15 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0020_add_snake_field_validators'), + ('api', '0019_deletedmessage'), + ] + + operations = [ + ] diff --git a/pydis_site/apps/api/migrations/0022_infraction_remove_note.py b/pydis_site/apps/api/migrations/0022_infraction_remove_note.py new file mode 100644 index 00000000..eba84610 --- /dev/null +++ b/pydis_site/apps/api/migrations/0022_infraction_remove_note.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.3 on 2018-11-21 21:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0021_infraction_reason_null'), + ] + + operations = [ + migrations.AlterField( + model_name='infraction', + name='type', + field=models.CharField(choices=[('warning', 'Warning'), ('mute', 'Mute'), ('ban', 'Ban'), ('kick', 'Kick'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9), + ), + ] diff --git a/pydis_site/apps/api/migrations/0023_merge_infractions_snake_validators.py b/pydis_site/apps/api/migrations/0023_merge_infractions_snake_validators.py new file mode 100644 index 00000000..916f78f2 --- /dev/null +++ b/pydis_site/apps/api/migrations/0023_merge_infractions_snake_validators.py @@ -0,0 +1,14 @@ +# Generated by Django 2.1.3 on 2018-11-29 19:37 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0022_infraction_remove_note'), + ('api', '0021_add_special_snake_validator'), + ] + + operations = [ + ] diff --git a/pydis_site/apps/api/migrations/0024_add_note_infraction_type.py b/pydis_site/apps/api/migrations/0024_add_note_infraction_type.py new file mode 100644 index 00000000..4adb53b8 --- /dev/null +++ b/pydis_site/apps/api/migrations/0024_add_note_infraction_type.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.4 on 2019-01-05 14:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0023_merge_infractions_snake_validators'), + ] + + operations = [ + migrations.AlterField( + model_name='infraction', + name='type', + field=models.CharField(choices=[('note', 'Note'), ('warning', 'Warning'), ('mute', 'Mute'), ('kick', 'Kick'), ('ban', 'Ban'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9), + ), + ] diff --git a/pydis_site/apps/api/migrations/0025_allow_custom_inserted_at_infraction_field.py b/pydis_site/apps/api/migrations/0025_allow_custom_inserted_at_infraction_field.py new file mode 100644 index 00000000..0c02cb91 --- /dev/null +++ b/pydis_site/apps/api/migrations/0025_allow_custom_inserted_at_infraction_field.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.4 on 2019-01-06 16:01 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0024_add_note_infraction_type'), + ] + + operations = [ + migrations.AlterField( + model_name='infraction', + name='inserted_at', + field=models.DateTimeField(default=datetime.datetime.utcnow, help_text='The date and time of the creation of this infraction.'), + ), + ] diff --git a/pydis_site/apps/api/migrations/0026_use_proper_default_for_infraction_insertion_date.py b/pydis_site/apps/api/migrations/0026_use_proper_default_for_infraction_insertion_date.py new file mode 100644 index 00000000..56f3b2b8 --- /dev/null +++ b/pydis_site/apps/api/migrations/0026_use_proper_default_for_infraction_insertion_date.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.5 on 2019-01-09 19:50 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0025_allow_custom_inserted_at_infraction_field'), + ] + + operations = [ + migrations.AlterField( + model_name='infraction', + name='inserted_at', + field=models.DateTimeField(default=django.utils.timezone.now, help_text='The date and time of the creation of this infraction.'), + ), + ] diff --git a/pydis_site/apps/api/migrations/0027_merge_20190120_0852.py b/pydis_site/apps/api/migrations/0027_merge_20190120_0852.py new file mode 100644 index 00000000..6fab4fd0 --- /dev/null +++ b/pydis_site/apps/api/migrations/0027_merge_20190120_0852.py @@ -0,0 +1,14 @@ +# Generated by Django 2.1.5 on 2019-01-20 08:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0026_use_proper_default_for_infraction_insertion_date'), + ('api', '0021_merge_20181125_1015'), + ] + + operations = [ + ] diff --git a/pydis_site/apps/api/migrations/0028_allow_message_content_blank.py b/pydis_site/apps/api/migrations/0028_allow_message_content_blank.py new file mode 100644 index 00000000..6d57db27 --- /dev/null +++ b/pydis_site/apps/api/migrations/0028_allow_message_content_blank.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.5 on 2019-01-20 09:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0027_merge_20190120_0852'), + ] + + operations = [ + migrations.AlterField( + model_name='deletedmessage', + name='content', + field=models.CharField(blank=True, help_text='The content of this message, taken from Discord.', max_length=2000), + ), + ] diff --git a/pydis_site/apps/api/migrations/0029_add_infraction_type_watch.py b/pydis_site/apps/api/migrations/0029_add_infraction_type_watch.py new file mode 100644 index 00000000..c6f88a11 --- /dev/null +++ b/pydis_site/apps/api/migrations/0029_add_infraction_type_watch.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.5 on 2019-01-20 11:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0028_allow_message_content_blank'), + ] + + operations = [ + migrations.AlterField( + model_name='infraction', + name='type', + field=models.CharField(choices=[('note', 'Note'), ('warning', 'Warning'), ('watch', 'Watch'), ('mute', 'Mute'), ('kick', 'Kick'), ('ban', 'Ban'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9), + ), + ] diff --git a/pydis_site/apps/api/migrations/0030_reminder.py b/pydis_site/apps/api/migrations/0030_reminder.py new file mode 100644 index 00000000..8c42f6dc --- /dev/null +++ b/pydis_site/apps/api/migrations/0030_reminder.py @@ -0,0 +1,27 @@ +# Generated by Django 2.1.5 on 2019-01-22 22:17 + +import pydis_site.apps.api.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0029_add_infraction_type_watch'), + ] + + operations = [ + migrations.CreateModel( + name='Reminder', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('active', models.BooleanField(default=True, help_text='Whether this reminder is still active. If not, it has been sent out to the user.')), + ('channel_id', models.BigIntegerField(help_text='The channel ID that this message was sent in, taken from Discord.', validators=[django.core.validators.MinValueValidator(limit_value=0, message='Channel IDs cannot be negative.')])), + ('content', models.CharField(help_text='The content that the user wants to be reminded of.', max_length=1500)), + ('expiration', models.DateTimeField(help_text='When this reminder should be sent.')), + ('author', models.ForeignKey(help_text='The creator of this reminder.', on_delete=django.db.models.deletion.CASCADE, to='api.User')), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0031_nomination.py b/pydis_site/apps/api/migrations/0031_nomination.py new file mode 100644 index 00000000..75e69701 --- /dev/null +++ b/pydis_site/apps/api/migrations/0031_nomination.py @@ -0,0 +1,26 @@ +# Generated by Django 2.1.5 on 2019-01-27 11:01 + +import pydis_site.apps.api.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0030_reminder'), + ] + + operations = [ + migrations.CreateModel( + name='Nomination', + fields=[ + ('active', models.BooleanField(default=True, help_text='Whether this nomination is still relevant.')), + ('reason', models.TextField(help_text='Why this user was nominated.')), + ('user', models.OneToOneField(help_text='The nominated user.', on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='nomination', serialize=False, to='api.User')), + ('inserted_at', models.DateTimeField(auto_now_add=True, help_text='The creation date of this nomination.')), + ('author', models.ForeignKey(help_text='The staff member that nominated this user.', on_delete=django.db.models.deletion.CASCADE, related_name='nomination_set', to='api.User')), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0032_botsetting.py b/pydis_site/apps/api/migrations/0032_botsetting.py new file mode 100644 index 00000000..25186a2b --- /dev/null +++ b/pydis_site/apps/api/migrations/0032_botsetting.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1.5 on 2019-02-07 19:03 + +import pydis_site.apps.api.models +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0031_nomination'), + ] + + operations = [ + migrations.CreateModel( + name='BotSetting', + fields=[ + ('name', models.CharField(max_length=50, primary_key=True, serialize=False)), + ('data', django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual settings of this setting.')), + ], + bases=(pydis_site.apps.api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/pydis_site/apps/api/migrations/0033_create_defcon_settings.py b/pydis_site/apps/api/migrations/0033_create_defcon_settings.py new file mode 100644 index 00000000..830f3fb0 --- /dev/null +++ b/pydis_site/apps/api/migrations/0033_create_defcon_settings.py @@ -0,0 +1,30 @@ +# Generated by Django 2.1.5 on 2019-02-18 19:30 + +from django.db import migrations + + +def up(apps, schema_editor): + BotSetting = apps.get_model('api', 'BotSetting') + setting = BotSetting( + name='defcon', + data={ + 'enabled': False, + 'days': 0 + } + ).save() + + +def down(apps, schema_editor): # pragma: no cover - not necessary to test + BotSetting = apps.get_model('api', 'BotSetting') + BotSetting.get(name='defcon').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0032_botsetting'), + ] + + operations = [ + migrations.RunPython(up, down) + ] diff --git a/pydis_site/apps/api/migrations/0034_add_botsetting_name_validator.py b/pydis_site/apps/api/migrations/0034_add_botsetting_name_validator.py new file mode 100644 index 00000000..bd370d8e --- /dev/null +++ b/pydis_site/apps/api/migrations/0034_add_botsetting_name_validator.py @@ -0,0 +1,20 @@ +# Generated by Django 2.1.5 on 2019-02-18 19:41 + +import pydis_site.apps.api.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0033_create_defcon_settings'), + ] + + operations = [ + migrations.AlterField( + model_name='botsetting', + name='name', + field=models.CharField(max_length=50, primary_key=True, serialize=False, validators=[ + pydis_site.apps.api.validators.validate_bot_setting_name]), + ), + ] diff --git a/pydis_site/apps/api/migrations/__init__.py b/pydis_site/apps/api/migrations/__init__.py new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3 From d576432e6145df464273f0f22d841cc9f5804b07 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Fri, 5 Apr 2019 20:59:22 +0100 Subject: Address review by @jchristgit --- Dockerfile | 1 - Pipfile | 42 +++++++++++----------- Pipfile.lock | 2 +- azure-pipelines.yml | 15 +++----- docker-compose.yml | 8 ++--- docker/app/Dockerfile | 42 ++++++++++++++++++++++ docker/app/alpine/3.6/Dockerfile | 33 ----------------- docker/app/alpine/3.7/Dockerfile | 32 ----------------- docker/app/stretch/3.6/Dockerfile | 39 -------------------- docker/app/stretch/3.7/Dockerfile | 39 -------------------- docker/pysite.dockerapp | 2 +- .../api/migrations/0008_tag_embed_validator.py | 5 +-- .../apps/api/migrations/0019_deletedmessage.py | 5 +-- pydis_site/apps/api/views.py | 2 +- pydis_site/apps/api/viewsets.py | 8 ++--- 15 files changed, 81 insertions(+), 194 deletions(-) delete mode 120000 Dockerfile create mode 100644 docker/app/Dockerfile delete mode 100644 docker/app/alpine/3.6/Dockerfile delete mode 100644 docker/app/alpine/3.7/Dockerfile delete mode 100644 docker/app/stretch/3.6/Dockerfile delete mode 100644 docker/app/stretch/3.7/Dockerfile (limited to 'pydis_site/apps/api/migrations') diff --git a/Dockerfile b/Dockerfile deleted file mode 120000 index 9b50dcb7..00000000 --- a/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -docker/app/alpine/3.7/Dockerfile \ No newline at end of file diff --git a/Pipfile b/Pipfile index 7a12f79d..932746d2 100644 --- a/Pipfile +++ b/Pipfile @@ -4,29 +4,29 @@ url = "https://pypi.org/simple" verify_ssl = true [dev-packages] -flake8 = "*" -flake8-bandit = "*" -flake8-bugbear = "*" -flake8-import-order = "*" -flake8-string-format = "*" -flake8-tidy-imports = "*" -mccabe = "*" -pep8-naming = "*" -coverage = "*" -unittest-xml-reporting = "*" +flake8 = "~=3.7.7" +flake8-bandit = "~=2.1.0" +flake8-bugbear = "~=19.3.0" +flake8-import-order = "~=0.18.1" +flake8-string-format = "~=0.2.3" +flake8-tidy-imports = "~=2.0.0" +mccabe = "~=0.6.1" +pep8-naming = "~=0.8.2" +coverage = "~=4.5.3" +unittest-xml-reporting = "~=2.5.1" [packages] -django = ">=2.2" -django-crispy-forms = "*" -django-environ = "*" -django-filter = "*" -django-hosts = "*" -djangorestframework = "*" -djangorestframework-bulk = "*" -uwsgi = "*" -psycopg2-binary = "*" -django-simple-bulma = "*" -django-crispy-bulma = "*" +django = "~=2.2" +django-crispy-forms = "~=1.7.2" +django-environ = "~=0.4.5" +django-filter = "~=2.1.0" +django-hosts = "~=3.0" +djangorestframework = "~=3.9.2" +djangorestframework-bulk = "~=0.2.1" +uwsgi = "~=2.0.18" +psycopg2-binary = "~=2.8" +django-simple-bulma = ">=1.1.6,<2.0" +django-crispy-bulma = ">=0.1.2,<2.0" [requires] python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index 9422d7b8..c574a6f1 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "8b0d5f0bcf74d3de74397538e673a96b56935085ed611f8d160213ca3af90109" + "sha256": "e7a956892e9d18b6ac8ab13fe8e139d29196e236fbb194f4cb8b37308ea91c6e" }, "pipfile-spec": 6, "requires": { diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1e6d67f0..78bbffae 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,12 +17,7 @@ jobs: - script: docker run -v $(pwd):/app:ro --rm ruby:alpine /bin/ash -c "gem install mdl && cd /app && mdl" displayName: run markdownlint - - script: | - echo 'set -ex' > script.sh - echo 'for dockerfile in docker/**/**/**/Dockerfile; do' >> script.sh - echo ' docker run -i hadolint/hadolint hadolint --ignore DL3008 --ignore DL3018 --ignore DL3019 - < $dockerfile' >> script.sh - echo 'done' >> script.sh - sh script.sh + - script: docker run -i hadolint/hadolint hadolint --ignore DL3008 --ignore DL3018 --ignore DL3019 - < docker/app/Dockerfile displayName: run hadolint - job: lint_python @@ -47,7 +42,7 @@ jobs: architecture: x64 - script: > - python -m pip install $(grep -E '^(coverage|flake8|mccabe|pep8-naming)' pyproject.toml | cut -d' ' -f1) + python -m pip install $(grep -E '^(coverage|flake8|mccabe|pep8-naming)' Pipfile | cut -d' ' -f1) displayName: install lint requirements - script: flake8 @@ -93,7 +88,7 @@ jobs: echo "CREATE DATABASE pysite OWNER pysite;" >> pgscript.sql sudo su postgres -c "psql < pgscript.sql" env: - USER_CREATE_COMMAND: CREATE USER pydis_site WITH PASSWORD 'pydis_site' CREATEDB + USER_CREATE_COMMAND: CREATE USER pysite WITH PASSWORD 'pysite' CREATEDB displayName: set up the database - script: python -m pip install pipenv && python -m pipenv install --dev --system @@ -104,7 +99,7 @@ jobs: coverage run --branch manage.py test --testrunner xmlrunner.extra.djangotestrunner.XMLTestRunner --no-input env: CI: azure - DATABASE_URL: postgres://pydis_site:pydis_site@localhost/pydis_site + DATABASE_URL: postgres://pysite:pysite@localhost/pysite displayName: run tests - script: coverage report @@ -132,7 +127,7 @@ jobs: command: 'login' - script: | - docker build -t pythondiscord/django:latest . + docker build -t pythondiscord/django:latest docker/app/Dockerfile docker push pythondiscord/django:latest displayName: Build and push the image diff --git a/docker-compose.yml b/docker-compose.yml index 8519e763..2d3e8f3b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,14 +20,14 @@ services: postgres: image: postgres:11-alpine environment: - POSTGRES_DB: pydis_site + POSTGRES_DB: pysite POSTGRES_PASSWORD: supersecretpassword - POSTGRES_USER: pydis_site + POSTGRES_USER: pysite web: build: context: . - dockerfile: docker/app/alpine/3.7/Dockerfile + dockerfile: docker/app/Dockerfile command: docker/app/migrate_and_serve.sh ports: - "127.0.0.1:8000:8000" @@ -36,7 +36,7 @@ services: volumes: - .:/app:ro environment: - DATABASE_URL: postgres://pydis_site:supersecretpassword@postgres/pydis_site + DATABASE_URL: postgres://pysite:supersecretpassword@postgres/pysite DEBUG: "true" SECRET_KEY: suitable-for-development-only diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile new file mode 100644 index 00000000..93d0c378 --- /dev/null +++ b/docker/app/Dockerfile @@ -0,0 +1,42 @@ +FROM bitnami/python:3.7-prod + +STOPSIGNAL SIGQUIT +ARG EXTRAS=deploy + +RUN adduser \ + --disabled-login \ + --no-create-home \ + --uid 1500 \ + pysite + +RUN apt-get update -y \ + && \ + apt-get install --no-install-recommends -y \ + gcc \ + libc-dev \ + libpq-dev \ + && \ + apt-get clean \ + && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY Pipfile Pipfile.lock /app/ + +RUN rm -r /opt/bitnami/python/lib/python3.*/site-packages/setuptools* && \ + pip install --no-cache-dir -U setuptools + +RUN python3 -m pip install pipenv \ + && python3 -m pipenv install --dev --system --deploy + +COPY . . + +RUN SECRET_KEY=placeholder DATABASE_URL=sqlite:// python3 manage.py collectstatic --no-input --clear --verbosity 0 + +RUN apt-get purge -y \ + gcc \ + libc-dev \ + libpq-dev + +CMD ["uwsgi", "--ini", "docker/app/uwsgi.ini"] diff --git a/docker/app/alpine/3.6/Dockerfile b/docker/app/alpine/3.6/Dockerfile deleted file mode 100644 index c40b6593..00000000 --- a/docker/app/alpine/3.6/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -FROM python:3.6-alpine - -STOPSIGNAL SIGQUIT -ARG EXTRAS=deploy - -RUN adduser \ - -D \ - -H \ - -u 1500 \ - pysite - -RUN apk add --no-cache --virtual build \ - gcc \ - linux-headers \ - musl-dev \ - && \ - apk add --no-cache \ - curl \ - postgresql-dev - -WORKDIR /app - -COPY Pipfile /app/Pipfile -COPY Pipfile.lock /app/Pipfile.lock -RUN python3 -m pip install pipenv \ - && python3 -m pipenv install --dev --system --deploy \ - && apk del --purge build - -COPY . . - -RUN python3 manage.py collectstatic --no-input --clear - -CMD ["uwsgi", "--ini", "docker/app/uwsgi.ini"] diff --git a/docker/app/alpine/3.7/Dockerfile b/docker/app/alpine/3.7/Dockerfile deleted file mode 100644 index 9dfbfe09..00000000 --- a/docker/app/alpine/3.7/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -FROM python:3.7-alpine - -STOPSIGNAL SIGQUIT - -RUN adduser \ - -D \ - -H \ - -u 1500 \ - pysite - -RUN apk add --no-cache --update --virtual build \ - gcc \ - linux-headers \ - musl-dev \ - && \ - apk add \ - curl \ - postgresql-dev - -WORKDIR /app - -COPY Pipfile /app/Pipfile -COPY Pipfile.lock /app/Pipfile.lock -RUN python3 -m pip install pipenv \ - && python3 -m pipenv install --dev --system --deploy \ - && apk del --purge build - -COPY . . - -RUN python3 manage.py collectstatic --no-input --clear - -CMD ["uwsgi", "--ini", "docker/app/uwsgi.ini"] diff --git a/docker/app/stretch/3.6/Dockerfile b/docker/app/stretch/3.6/Dockerfile deleted file mode 100644 index 5f97a510..00000000 --- a/docker/app/stretch/3.6/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM python:3.6-stretch - -STOPSIGNAL SIGQUIT -ARG EXTRAS=deploy - -RUN adduser \ - --disabled-login \ - --no-create-home \ - --uid 1500 \ - pysite - -RUN apt-get update -y \ - && \ - apt-get install --no-install-recommends -y \ - gcc \ - libc-dev \ - libpq-dev \ - && \ - apt-get clean \ - && \ - rm -rf /var/lib/apt/lists/* - -WORKDIR /app - -COPY Pipfile /app/Pipfile -COPY Pipfile.lock /app/Pipfile.lock -RUN python3 -m pip install pipenv \ - && python3 -m pipenv install --dev --system --deploy - -COPY . . - -RUN python3 manage.py collectstatic --no-input --clear - -RUN apt-get purge -y \ - gcc \ - libc-dev \ - libpq-dev - -CMD ["uwsgi", "--ini", "docker/app/uwsgi.ini"] diff --git a/docker/app/stretch/3.7/Dockerfile b/docker/app/stretch/3.7/Dockerfile deleted file mode 100644 index a1538ddd..00000000 --- a/docker/app/stretch/3.7/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM python:3.7-stretch - -STOPSIGNAL SIGQUIT -ARG EXTRAS=deploy - -RUN adduser \ - --disabled-login \ - --no-create-home \ - --uid 1500 \ - pysite - -RUN apt-get update -y \ - && \ - apt-get install --no-install-recommends -y \ - gcc \ - libc-dev \ - libpq-dev \ - && \ - apt-get clean \ - && \ - rm -rf /var/lib/apt/lists/* - -WORKDIR /app - -COPY Pipfile /app/Pipfile -COPY Pipfile.lock /app/Pipfile.lock -RUN python3 -m pip install pipenv \ - && python3 -m pipenv install --dev --system --deploy - -COPY . . - -RUN python3 manage.py collectstatic --no-input --clear - -RUN apt-get purge -y \ - gcc \ - libc-dev \ - libpq-dev - -CMD ["uwsgi", "--ini", "docker/app/uwsgi.ini"] diff --git a/docker/pysite.dockerapp b/docker/pysite.dockerapp index 738fcfdd..dc472b2e 100644 --- a/docker/pysite.dockerapp +++ b/docker/pysite.dockerapp @@ -1,5 +1,5 @@ version: 0.3.0 -name: pydis_site +name: pysite description: | Our community website, built on Django and PostgreSQL. namespace: python-discord diff --git a/pydis_site/apps/api/migrations/0008_tag_embed_validator.py b/pydis_site/apps/api/migrations/0008_tag_embed_validator.py index eecc0bc3..ea8f03d2 100644 --- a/pydis_site/apps/api/migrations/0008_tag_embed_validator.py +++ b/pydis_site/apps/api/migrations/0008_tag_embed_validator.py @@ -15,9 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='tag', name='embed', - field=django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual embed shown by this tag.', validators=[ - - - pydis_site.apps.api.validators.validate_tag_embed]), + field=django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual embed shown by this tag.', validators=[pydis_site.apps.api.validators.validate_tag_embed]), ), ] diff --git a/pydis_site/apps/api/migrations/0019_deletedmessage.py b/pydis_site/apps/api/migrations/0019_deletedmessage.py index 7a039675..f451ecf4 100644 --- a/pydis_site/apps/api/migrations/0019_deletedmessage.py +++ b/pydis_site/apps/api/migrations/0019_deletedmessage.py @@ -19,10 +19,7 @@ class Migration(migrations.Migration): ('id', models.BigIntegerField(help_text='The message ID as taken from Discord.', primary_key=True, serialize=False, validators=[django.core.validators.MinValueValidator(limit_value=0, message='Message IDs cannot be negative.')])), ('channel_id', models.BigIntegerField(help_text='The channel ID that this message was sent in, taken from Discord.', validators=[django.core.validators.MinValueValidator(limit_value=0, message='Channel IDs cannot be negative.')])), ('content', models.CharField(help_text='The content of this message, taken from Discord.', max_length=2000)), - ('embeds', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.jsonb.JSONField(validators=[ - - - pydis_site.apps.api.validators.validate_tag_embed]), help_text='Embeds attached to this message.', size=None)), + ('embeds', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.jsonb.JSONField(validators=[pydis_site.apps.api.validators.validate_tag_embed]), help_text='Embeds attached to this message.', size=None)), ('author', models.ForeignKey(help_text='The author of this message.', on_delete=django.db.models.deletion.CASCADE, to='api.User')), ('deletion_context', models.ForeignKey(help_text='The deletion context this message is part of.', on_delete=django.db.models.deletion.CASCADE, to='api.MessageDeletionContext')), ], diff --git a/pydis_site/apps/api/views.py b/pydis_site/apps/api/views.py index 3160e8f7..f88e1039 100644 --- a/pydis_site/apps/api/views.py +++ b/pydis_site/apps/api/views.py @@ -131,7 +131,7 @@ class RulesView(APIView): ), ( "We will not help you with anything that might break a law or the " - "terms of service of any other community, pydis_site, service, or " + "terms of service of any other community, pysite, service, or " "otherwise - No piracy, brute-forcing, captcha circumvention, " "sneaker bots, or anything else of that nature." ), diff --git a/pydis_site/apps/api/viewsets.py b/pydis_site/apps/api/viewsets.py index 0471f79d..17024fe8 100644 --- a/pydis_site/apps/api/viewsets.py +++ b/pydis_site/apps/api/viewsets.py @@ -54,7 +54,7 @@ class DeletedMessageViewSet(CreateModelMixin, GenericViewSet): #### Body schema >>> { ... # The member ID of the original actor, if applicable. - ... # If a member ID is given, it must be present on the pydis_site. + ... # If a member ID is given, it must be present on the site. ... 'actor': Optional[int] ... 'creation': datetime, ... 'messages': [ @@ -192,7 +192,7 @@ class InfractionViewSet(CreateModelMixin, RetrieveModelMixin, ListModelMixin, Ge ### POST /bot/infractions Create a new infraction and return the created infraction. Only `actor`, `type`, and `user` are required. - The `actor` and `user` must be users known by the pydis_site. + The `actor` and `user` must be users known by the site. #### Request body >>> { @@ -427,7 +427,7 @@ class ReminderViewSet(CreateModelMixin, ListModelMixin, DestroyModelMixin, Gener class RoleViewSet(ModelViewSet): """ View providing CRUD access to the roles on our server, used - by the bot to keep a mirror of our server's roles on the pydis_site. + by the bot to keep a mirror of our server's roles on the site. ## Routes ### GET /bot/roles @@ -802,7 +802,7 @@ class UserViewSet(BulkCreateModelMixin, ModelViewSet): ### POST /bot/users Adds a single or multiple new users. - The roles attached to the user(s) must be roles known by the pydis_site. + The roles attached to the user(s) must be roles known by the site. #### Request body >>> { -- cgit v1.2.3