Skip to content

Commit

Permalink
Add forward to legal option in reviewer tools (#22886)
Browse files Browse the repository at this point in the history
* Store override decisions as seperate ContentDecision instances

* Add forward to legal option in reviewer tools

* review follow-ups

* add integration test

* other random requested changes

* more changes

* test fix

* test fix post merge
  • Loading branch information
eviljeff authored and chrstinalin committed Jan 10, 2025
1 parent e17d375 commit a635149
Show file tree
Hide file tree
Showing 19 changed files with 712 additions and 127 deletions.
27 changes: 25 additions & 2 deletions src/olympia/abuse/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,13 +320,36 @@ class ContentActionRejectVersionDelayed(ContentActionRejectVersion):
reporter_appeal_template_path = 'abuse/emails/reporter_appeal_takedown_delayed.txt'


class ContentActionEscalateAddon(ContentAction):
class ContentActionForwardToReviewers(ContentAction):
valid_targets = (Addon,)

def process_action(self):
from olympia.abuse.tasks import handle_escalate_action

handle_escalate_action.delay(job_pk=self.decision.cinder_job.pk)
handle_escalate_action.delay(job_pk=self.decision.originating_job.pk)


class ContentActionForwardToLegal(ContentAction):
valid_targets = (Addon,)

def process_action(self):
from olympia.abuse.cinder import CinderAddonHandledByLegal
from olympia.abuse.models import CinderJob

old_job = getattr(self.decision, 'cinder_job', None)
entity_helper = CinderAddonHandledByLegal(self.decision.addon)
job_id = entity_helper.workflow_recreate(notes=self.decision.notes, job=old_job)

if old_job:
old_job.handle_job_recreated(new_job_id=job_id)
else:
CinderJob.objects.update_or_create(
job_id=job_id,
defaults={
'resolvable_in_reviewer_tools': False,
'target_addon': self.decision.addon,
},
)


class ContentActionDeleteCollection(ContentAction):
Expand Down
31 changes: 22 additions & 9 deletions src/olympia/abuse/cinder.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,12 +210,13 @@ def post_report(self, *, job):
a keyword argument."""
pass

def workflow_recreate(self, *, job):
def workflow_recreate(self, *, notes, job=None):
"""Recreate a job in a queue."""
raise NotImplementedError

def workflow_move(self, *, job):
"""Move job to a different queue."""
def post_queue_move(self, *, job):
"""Callback triggered after a job has moved to, or been created in, a different
queue."""
raise NotImplementedError


Expand Down Expand Up @@ -412,6 +413,17 @@ def get_context_generator(self):
],
}

def workflow_recreate(self, *, notes, job=None):
"""Recreate a job in a queue."""
job_id = self.report(report=None, reporter=None, message=notes)
if job:
self.post_queue_move(job=job)
return job_id

def post_queue_move(self, *, job):
# We don't need to do anything for, or after, the move, by default
pass


class CinderRating(CinderEntity):
type = 'amo_rating'
Expand Down Expand Up @@ -596,18 +608,19 @@ def appeal(self, *args, **kwargs):
self.flag_for_human_review(related_versions=related_versions, appeal=True)
return super().appeal(*args, **kwargs)

def workflow_recreate(self, *, job):
self.workflow_move(job=job)
notes = job.decision.notes if job.decision else ''
return self.report(report=None, reporter=None, message=notes)

def workflow_move(self, *, job):
def post_queue_move(self, *, job):
# When the move is to AMO reviewers we need to flag versions for review
reported_versions = set(
job.abusereport_set.values_list('addon_version', flat=True)
)
self.flag_for_human_review(related_versions=reported_versions, forwarded=True)


class CinderAddonHandledByLegal(CinderAddon):
queue = 'legal-escalations'
queue_appeal = 'legal-escalations'


class CinderReport(CinderEntity):
type = 'amo_report'

Expand Down
19 changes: 19 additions & 0 deletions src/olympia/abuse/migrations/0046_contentdecision_override_of.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 4.2.16 on 2024-12-03 12:47

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('abuse', '0045_auto_20241120_1503'),
]

operations = [
migrations.AddField(
model_name='contentdecision',
name='override_of',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='overridden_by', to='abuse.contentdecision'),
),
]
Loading

0 comments on commit a635149

Please sign in to comment.