Skip to content

Commit 97fe21c

Browse files
authored
Allow adding, viewing information about and deleting soft-blocks in the admin (#22765)
* Allow adding, viewing information about and deleting soft-blocks in the admin Like other blocklist operations, it goes through a BlocklistSubmission, which gains a new "block_type" field to determine what kind of block to apply for this particular submission. Note: If a version is already soft-blocked or hard-blocked, that version won't be selectable when creating a new BlocklistSubmission, even of another type. Future actions will be added to soften or harden blocks.
1 parent 4401310 commit 97fe21c

File tree

14 files changed

+355
-70
lines changed

14 files changed

+355
-70
lines changed

src/olympia/amo/tests/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -989,13 +989,13 @@ def version_factory(file_kw=None, **kw):
989989
return ver
990990

991991

992-
def block_factory(*, version_ids=None, **kwargs):
992+
def block_factory(*, version_ids=None, soft=False, **kwargs):
993993
block = Block.objects.create(**kwargs)
994994
if version_ids is None and block.addon:
995995
version_ids = list(block.addon.versions.values_list('id', flat=True))
996996
if version_ids is not None:
997997
BlockVersion.objects.bulk_create(
998-
BlockVersion(block=block, version_id=version_id)
998+
BlockVersion(block=block, version_id=version_id, soft=soft)
999999
for version_id in version_ids
10001000
)
10011001
return block

src/olympia/blocklist/admin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ class BlocklistSubmissionAdmin(AMOModelAdmin):
148148
'blocks_count',
149149
'action',
150150
'state',
151+
'block_type',
151152
'delayed_until',
152153
'updated_by',
153154
'modified',
@@ -276,6 +277,7 @@ def get_fieldsets(self, request, obj):
276277
{
277278
'fields': (
278279
changed_version_ids_field,
280+
'block_type',
279281
'disable_addon',
280282
'update_url_value',
281283
'url',
@@ -334,7 +336,7 @@ def get_readonly_fields(self, request, obj=None):
334336
self.get_fieldsets(request, obj)
335337
)
336338
if obj or not self.is_add_change_submission(request, obj):
337-
ro_fields.append('delay_days')
339+
ro_fields += ['block_type', 'delay_days']
338340

339341
return ro_fields
340342

@@ -407,7 +409,6 @@ def add_view(self, request, **kwargs):
407409
'errors': admin.helpers.AdminErrorList(form, []),
408410
'preserved_filters': self.get_preserved_filters(request),
409411
# extra context we use in our custom template
410-
'is_delete': is_delete,
411412
'block_history': self.block_history(self.model(input_guids=guids_data)),
412413
'submission_published': False,
413414
}

src/olympia/blocklist/forms.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ def get_context(self, name, value, attrs):
8888
},
8989
'blocks': self.blocks,
9090
'total_adu': sum(block.current_adu for block in self.blocks),
91+
'is_add_change': self.is_add_change,
9192
}
9293

9394

@@ -192,6 +193,7 @@ def setup_changed_version_ids_field(self, field, data):
192193
self.changed_version_ids_choices = self.instance.changed_version_ids
193194
field.widget.choices = self.changed_version_ids_choices
194195
field.widget.blocks = self.blocks
196+
field.widget.is_add_change = self.is_add_change
195197

196198
def get_value(self, field_name, default):
197199
return (
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 4.2.16 on 2024-10-29 17:21
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('blocklist', '0035_alter_blockversion_soft'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='blocklistsubmission',
15+
name='block_type',
16+
field=models.IntegerField(choices=[(0, '🛑 Hard-Block'), (1, '⚠️ Soft-Block')], default=0),
17+
),
18+
migrations.AlterField(
19+
model_name='blockversion',
20+
name='soft',
21+
field=models.BooleanField(choices=[(0, '🛑 Hard-Blocked'), (1, '⚠️ Soft-Blocked')], default=False),
22+
),
23+
]

src/olympia/blocklist/models.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ def get_blocks_from_guids(cls, guids):
159159

160160
class BlockVersion(ModelBase):
161161
BLOCK_TYPE_CHOICES = Choices(
162-
('BLOCKED', 0, 'Blocked'),
163-
('SOFT_BLOCKED', 1, 'Soft-Blocked'),
162+
('BLOCKED', 0, '🛑 Hard-Blocked'),
163+
('SOFT_BLOCKED', 1, '⚠️ Soft-Blocked'),
164164
)
165165
version = models.OneToOneField(Version, on_delete=models.CASCADE)
166166
block = models.ForeignKey(Block, on_delete=models.CASCADE)
@@ -216,6 +216,18 @@ class BlocklistSubmission(ModelBase):
216216
ACTION_ADDCHANGE: 'Add/Change',
217217
ACTION_DELETE: 'Delete',
218218
}
219+
BLOCK_TYPE_CHOICES = Choices(
220+
(
221+
BlockVersion.BLOCK_TYPE_CHOICES.BLOCKED.constant,
222+
BlockVersion.BLOCK_TYPE_CHOICES.BLOCKED.value,
223+
'🛑 Hard-Block',
224+
),
225+
(
226+
BlockVersion.BLOCK_TYPE_CHOICES.SOFT_BLOCKED.constant,
227+
BlockVersion.BLOCK_TYPE_CHOICES.SOFT_BLOCKED.value,
228+
'⚠️ Soft-Block',
229+
),
230+
)
219231
FakeBlockAddonVersion = namedtuple(
220232
'FakeBlockAddonVersion',
221233
(
@@ -236,7 +248,6 @@ class BlocklistSubmission(ModelBase):
236248
)
237249

238250
action = models.SmallIntegerField(choices=ACTIONS.items(), default=ACTION_ADDCHANGE)
239-
240251
input_guids = models.TextField()
241252
changed_version_ids = models.JSONField(default=list)
242253
to_block = models.JSONField(default=list)
@@ -265,6 +276,10 @@ class BlocklistSubmission(ModelBase):
265276
help_text='The submission will not be published into blocks before this time.',
266277
)
267278
disable_addon = models.BooleanField(default=True)
279+
block_type = models.IntegerField(
280+
default=BLOCK_TYPE_CHOICES.BLOCKED,
281+
choices=BLOCK_TYPE_CHOICES,
282+
)
268283

269284
objects = BlocklistSubmissionManager()
270285

src/olympia/blocklist/templates/admin/blocklist/blocklistsubmission_add_form.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ <h2>{{ fieldsets.2.0 }}</h2>
7171
{{ adminform.form.non_field_errors }}
7272
</div>
7373
{% endif %}
74+
<div class="form-row field-block_type">
75+
{{ adminform.form.block_type.errors }}
76+
{{ adminform.form.block_type.label_tag }}
77+
{{ adminform.form.block_type }}
78+
<p class="help">{{ adminform.form.block_type.help_text }}</p>
79+
</div>
7480
<div class="form-row">
7581
{{ adminform.form.disable_addon.errors }}
7682
{{ adminform.form.disable_addon.label_tag }}

src/olympia/blocklist/templates/admin/blocklist/includes/logs.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
{% if log.details %}{{ log.details.guid }}{% else %}{{ log.arguments.1 }}{% endif %}{% if 'min_version' in log.details %}
1111
, versions {{ log.details.min_version }} - {{ log.details.max_version }}.
1212
{% elif 'added_versions' in log.details %}
13-
, versions added [{{ log.details.added_versions|join:', ' }}].
13+
, versions {% if log.details.soft %}soft-{% else %}hard-{% endif %}blocked [{{ log.details.added_versions|join:', ' }}].
1414
{% elif 'removed_versions' in log.details %}
15-
, versions removed [{{ log.details.removed_versions|join:', ' }}].
15+
, versions unblocked [{{ log.details.removed_versions|join:', ' }}].
1616
{% else %}.
1717
{% endif %}
1818
<ul>

src/olympia/blocklist/templates/admin/blocklist/widgets/blocks.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,10 @@ <h3>{{ blocks|length|intcomma }} Add-on GUIDs with {{ total_adu|intcomma }} user
2929
name="changed_version_ids"
3030
value="{{ version.id }}"
3131
{% if version.id in widget.value %}checked{% endif %}
32-
> {% if is_delete %}Unblock{% else %}Block{% endif %} {{ version.version }}</label>
32+
> {% if is_add_change %}Block{% else %}Unblock{% endif %} {{ version.version }} {% if version.blockversion %}({{ version.blockversion.get_soft_display }}){% endif %}</label>
3333
{% else %}
34-
<span title="{% if version.is_blocked %}Blocked{% else %}Not blocked{% endif %}">
35-
<!-- Red Hexagonal stop sign for Blocked; Green cirle for not blocked -->
36-
{% if version.is_blocked %}&#x1F6D1;{% else %}&#x1F7E2;{% endif %}{{ version.version }}
34+
<span>
35+
{{ version.version }} ({% if version.is_blocked %}{{ version.blockversion.get_soft_display }}{% else %}&#x1F7E2; Not Blocked{% endif %})
3736
{% if version.blocklist_submission_id %}
3837
[<a href="{% url 'admin:blocklist_blocklistsubmission_change' version.blocklist_submission_id %}">Edit Submission</a>]
3938
{% endif %}

0 commit comments

Comments
 (0)