@@ -262,8 +262,8 @@ def not_disabled_by_mozilla(self):
262262
263263 def get_base_queryset_for_queue (
264264 self ,
265+ * ,
265266 admin_reviewer = False ,
266- content_review = False ,
267267 theme_review = False ,
268268 select_related_fields_for_listed = True ,
269269 ):
@@ -392,9 +392,7 @@ def get_queryset_for_pending_queues(
392392 def get_content_review_queue (self , admin_reviewer = False ):
393393 """Return a queryset of Addon objects that need content review."""
394394 qs = (
395- self .get_base_queryset_for_queue (
396- admin_reviewer = admin_reviewer , content_review = True
397- )
395+ self .get_base_queryset_for_queue (admin_reviewer = admin_reviewer )
398396 .valid ()
399397 .filter (
400398 _current_version__reviewerflags__pending_rejection__isnull = True ,
@@ -2108,6 +2106,8 @@ def watch_status(old_attr=None, new_attr=None, instance=None, sender=None, **kwa
21082106 If a version is rejected after nomination, the developer has to upload a
21092107 new version.
21102108 """
2109+ from olympia .abuse .tasks import submit_addon_for_content_review
2110+
21112111 new_status = new_attr .get ('status' ) if new_attr else None
21122112 old_status = old_attr .get ('status' ) if old_attr else None
21132113 disabled_by_user = new_attr .get ('disabled_by_user' ) if new_attr else None
@@ -2131,7 +2131,20 @@ def watch_status(old_attr=None, new_attr=None, instance=None, sender=None, **kwa
21312131 status_disabled_reason = File .STATUS_DISABLED_REASONS .DEVELOPER ,
21322132 )
21332133 instance .update_status ()
2134- elif old_status == amo .STATUS_NOMINATED :
2134+ return
2135+
2136+ if (
2137+ new_status in amo .VALID_ADDON_STATUSES
2138+ and waffle .switch_is_active ('content-review-in-cinder' )
2139+ and not AddonApprovalsCounter .objects .filter (addon_id = instance .id )
2140+ .exclude (
2141+ content_review_status = AddonApprovalsCounter .CONTENT_REVIEW_STATUSES .UNREVIEWED
2142+ )
2143+ .exists ()
2144+ ):
2145+ submit_addon_for_content_review .delay (addon_pk = instance .pk )
2146+
2147+ if old_status == amo .STATUS_NOMINATED :
21352148 # Update latest version due date if necessary for nominated add-ons.
21362149 inherit_due_date_if_nominated (None , latest_version )
21372150 else :
@@ -2427,11 +2440,10 @@ class CONTENT_REVIEW_STATUSES(EnumChoices):
24272440 PASS = 2 , 'Pass'
24282441 FAIL = 3 , 'Fail'
24292442 REQUESTED = 4 , 'Pending, New review requested'
2443+ # This status is set when the review is sent to Cinder
2444+ PENDING = 5 , 'Pending first review after submission'
24302445
24312446 CONTENT_REVIEW_STATUSES .add_subset ('REJECTED' , ('FAIL' , 'REQUESTED' ))
2432- CONTENT_REVIEW_STATUSES .add_subset (
2433- 'PENDING' , ('UNREVIEWED' , 'CHANGED' , 'REQUESTED' )
2434- )
24352447 CONTENT_REVIEW_STATUSES .add_subset ('COMPLETE' , ('PASS' , 'FAIL' ))
24362448
24372449 addon = models .OneToOneField (Addon , primary_key = True , on_delete = models .CASCADE )
@@ -2516,19 +2528,30 @@ def reject_content_for_addon(cls, addon):
25162528 return obj
25172529
25182530 @classmethod
2519- def reset_content_for_addon (cls , addon ):
2531+ def reset_content_for_addon (
2532+ cls , addon , * , not_reviewed_status = CONTENT_REVIEW_STATUSES .UNREVIEWED
2533+ ):
25202534 """
25212535 Reset the last_content_review date for this addon so it triggers
25222536 another review.
25232537 """
2538+ defaults = {'last_content_review' : None }
25242539 obj , created = cls .objects .update_or_create (
2525- addon = addon , defaults = {'last_content_review' : None }
2540+ addon = addon ,
2541+ defaults = defaults ,
2542+ create_defaults = {** defaults , 'content_review_status' : not_reviewed_status },
25262543 )
2527- if (
2528- not created
2529- and obj .content_review_status == cls .CONTENT_REVIEW_STATUSES .PASS
2530- ):
2531- obj .update (content_review_status = cls .CONTENT_REVIEW_STATUSES .CHANGED )
2544+ if not created :
2545+ new_status = (
2546+ cls .CONTENT_REVIEW_STATUSES .CHANGED
2547+ if obj .content_review_status == cls .CONTENT_REVIEW_STATUSES .PASS
2548+ else not_reviewed_status
2549+ if obj .content_review_status == cls .CONTENT_REVIEW_STATUSES .UNREVIEWED
2550+ else None
2551+ )
2552+ # i.e. not None or cls.CONTENT_REVIEW_STATUSES.UNREVIEWED, which is 0
2553+ if new_status :
2554+ obj .update (content_review_status = new_status )
25322555 assert obj .last_content_review is None
25332556 return obj
25342557
0 commit comments