diff --git a/src/olympia/amo/tests/__init__.py b/src/olympia/amo/tests/__init__.py index 9fdc1fe61905..9532e614858b 100644 --- a/src/olympia/amo/tests/__init__.py +++ b/src/olympia/amo/tests/__init__.py @@ -989,13 +989,13 @@ def version_factory(file_kw=None, **kw): return ver -def block_factory(*, version_ids=None, **kwargs): +def block_factory(*, version_ids=None, soft=False, **kwargs): block = Block.objects.create(**kwargs) if version_ids is None and block.addon: version_ids = list(block.addon.versions.values_list('id', flat=True)) if version_ids is not None: BlockVersion.objects.bulk_create( - BlockVersion(block=block, version_id=version_id) + BlockVersion(block=block, version_id=version_id, soft=soft) for version_id in version_ids ) return block diff --git a/src/olympia/blocklist/admin.py b/src/olympia/blocklist/admin.py index 2abfeda4502c..60bf8bef0db1 100644 --- a/src/olympia/blocklist/admin.py +++ b/src/olympia/blocklist/admin.py @@ -148,6 +148,7 @@ class BlocklistSubmissionAdmin(AMOModelAdmin): 'blocks_count', 'action', 'state', + 'block_type', 'delayed_until', 'updated_by', 'modified', @@ -276,6 +277,7 @@ def get_fieldsets(self, request, obj): { 'fields': ( changed_version_ids_field, + 'block_type', 'disable_addon', 'update_url_value', 'url', @@ -334,7 +336,7 @@ def get_readonly_fields(self, request, obj=None): self.get_fieldsets(request, obj) ) if obj or not self.is_add_change_submission(request, obj): - ro_fields.append('delay_days') + ro_fields += ['block_type', 'delay_days'] return ro_fields @@ -407,7 +409,6 @@ def add_view(self, request, **kwargs): 'errors': admin.helpers.AdminErrorList(form, []), 'preserved_filters': self.get_preserved_filters(request), # extra context we use in our custom template - 'is_delete': is_delete, 'block_history': self.block_history(self.model(input_guids=guids_data)), 'submission_published': False, } diff --git a/src/olympia/blocklist/forms.py b/src/olympia/blocklist/forms.py index 3e1072638f41..4bd1e1fd18bb 100644 --- a/src/olympia/blocklist/forms.py +++ b/src/olympia/blocklist/forms.py @@ -88,6 +88,7 @@ def get_context(self, name, value, attrs): }, 'blocks': self.blocks, 'total_adu': sum(block.current_adu for block in self.blocks), + 'is_add_change': self.is_add_change, } @@ -192,6 +193,7 @@ def setup_changed_version_ids_field(self, field, data): self.changed_version_ids_choices = self.instance.changed_version_ids field.widget.choices = self.changed_version_ids_choices field.widget.blocks = self.blocks + field.widget.is_add_change = self.is_add_change def get_value(self, field_name, default): return ( diff --git a/src/olympia/blocklist/migrations/0036_blocklistsubmission_block_type_and_more.py b/src/olympia/blocklist/migrations/0036_blocklistsubmission_block_type_and_more.py new file mode 100644 index 000000000000..ac9b76557876 --- /dev/null +++ b/src/olympia/blocklist/migrations/0036_blocklistsubmission_block_type_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.16 on 2024-10-29 17:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blocklist', '0035_alter_blockversion_soft'), + ] + + operations = [ + migrations.AddField( + model_name='blocklistsubmission', + name='block_type', + field=models.IntegerField(choices=[(0, '🛑 Hard-Block'), (1, '⚠️ Soft-Block')], default=0), + ), + migrations.AlterField( + model_name='blockversion', + name='soft', + field=models.BooleanField(choices=[(0, '🛑 Hard-Blocked'), (1, '⚠️ Soft-Blocked')], default=False), + ), + ] diff --git a/src/olympia/blocklist/models.py b/src/olympia/blocklist/models.py index 28f5e34e1517..e41a6be89735 100644 --- a/src/olympia/blocklist/models.py +++ b/src/olympia/blocklist/models.py @@ -159,8 +159,8 @@ def get_blocks_from_guids(cls, guids): class BlockVersion(ModelBase): BLOCK_TYPE_CHOICES = Choices( - ('BLOCKED', 0, 'Blocked'), - ('SOFT_BLOCKED', 1, 'Soft-Blocked'), + ('BLOCKED', 0, '🛑 Hard-Blocked'), + ('SOFT_BLOCKED', 1, '⚠️ Soft-Blocked'), ) version = models.OneToOneField(Version, on_delete=models.CASCADE) block = models.ForeignKey(Block, on_delete=models.CASCADE) @@ -216,6 +216,18 @@ class BlocklistSubmission(ModelBase): ACTION_ADDCHANGE: 'Add/Change', ACTION_DELETE: 'Delete', } + BLOCK_TYPE_CHOICES = Choices( + ( + BlockVersion.BLOCK_TYPE_CHOICES.BLOCKED.constant, + BlockVersion.BLOCK_TYPE_CHOICES.BLOCKED.value, + '🛑 Hard-Block', + ), + ( + BlockVersion.BLOCK_TYPE_CHOICES.SOFT_BLOCKED.constant, + BlockVersion.BLOCK_TYPE_CHOICES.SOFT_BLOCKED.value, + '⚠️ Soft-Block', + ), + ) FakeBlockAddonVersion = namedtuple( 'FakeBlockAddonVersion', ( @@ -236,7 +248,6 @@ class BlocklistSubmission(ModelBase): ) action = models.SmallIntegerField(choices=ACTIONS.items(), default=ACTION_ADDCHANGE) - input_guids = models.TextField() changed_version_ids = models.JSONField(default=list) to_block = models.JSONField(default=list) @@ -265,6 +276,10 @@ class BlocklistSubmission(ModelBase): help_text='The submission will not be published into blocks before this time.', ) disable_addon = models.BooleanField(default=True) + block_type = models.IntegerField( + default=BLOCK_TYPE_CHOICES.BLOCKED, + choices=BLOCK_TYPE_CHOICES, + ) objects = BlocklistSubmissionManager() diff --git a/src/olympia/blocklist/templates/admin/blocklist/blocklistsubmission_add_form.html b/src/olympia/blocklist/templates/admin/blocklist/blocklistsubmission_add_form.html index 5180e6bf77b4..b60b5b9f9209 100644 --- a/src/olympia/blocklist/templates/admin/blocklist/blocklistsubmission_add_form.html +++ b/src/olympia/blocklist/templates/admin/blocklist/blocklistsubmission_add_form.html @@ -71,6 +71,12 @@

{{ fieldsets.2.0 }}

{{ adminform.form.non_field_errors }} {% endif %} +
+ {{ adminform.form.block_type.errors }} + {{ adminform.form.block_type.label_tag }} + {{ adminform.form.block_type }} +

{{ adminform.form.block_type.help_text }}

+
{{ adminform.form.disable_addon.errors }} {{ adminform.form.disable_addon.label_tag }} diff --git a/src/olympia/blocklist/templates/admin/blocklist/includes/logs.html b/src/olympia/blocklist/templates/admin/blocklist/includes/logs.html index f2f7a5c6dac3..2e7b3fbdadd6 100644 --- a/src/olympia/blocklist/templates/admin/blocklist/includes/logs.html +++ b/src/olympia/blocklist/templates/admin/blocklist/includes/logs.html @@ -10,9 +10,9 @@ {% if log.details %}{{ log.details.guid }}{% else %}{{ log.arguments.1 }}{% endif %}{% if 'min_version' in log.details %} , versions {{ log.details.min_version }} - {{ log.details.max_version }}. {% elif 'added_versions' in log.details %} - , versions added [{{ log.details.added_versions|join:', ' }}]. + , versions {% if log.details.soft %}soft-{% else %}hard-{% endif %}blocked [{{ log.details.added_versions|join:', ' }}]. {% elif 'removed_versions' in log.details %} - , versions removed [{{ log.details.removed_versions|join:', ' }}]. + , versions unblocked [{{ log.details.removed_versions|join:', ' }}]. {% else %}. {% endif %}