[extensions-web] Add a "trusted" permission
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [extensions-web] Add a "trusted" permission
- Date: Mon, 20 May 2013 20:34:30 +0000 (UTC)
commit e3aadc8d7e2647e97802bb15f5b049c8b59ca19f
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Mon May 20 13:50:44 2013 -0400
Add a "trusted" permission
And auto-approve extensions by users who are on the trusted whitelist
sweettooth/review/models.py | 1 +
.../review/templates/review/auto_approved_mail.txt | 10 ------
sweettooth/review/tests.py | 20 ++++++------
sweettooth/review/views.py | 35 ++++++++++++--------
4 files changed, 32 insertions(+), 34 deletions(-)
---
diff --git a/sweettooth/review/models.py b/sweettooth/review/models.py
index 605b36c..c2615d8 100644
--- a/sweettooth/review/models.py
+++ b/sweettooth/review/models.py
@@ -24,4 +24,5 @@ class CodeReview(models.Model):
class Meta:
permissions = (
("can-review-extensions", "Can review extensions"),
+ ("trusted", "Has his extensions auto-approved"),
)
diff --git a/sweettooth/review/templates/review/auto_approved_mail.txt
b/sweettooth/review/templates/review/auto_approved_mail.txt
index 9d3c7a7..c035351 100644
--- a/sweettooth/review/templates/review/auto_approved_mail.txt
+++ b/sweettooth/review/templates/review/auto_approved_mail.txt
@@ -1,15 +1,5 @@
A new extension version, "{{ extension.name }}", version {{ version.version }}, was auto-approved.
-The diff between this version and the last approved version looks like this:
-{% for file in changeset.changed %}
- M {{ file }}
-{% endfor %}
-{% for file in changeset.added %}
- + {{ file }}
-{% endfor %}
-
-(where M means "modified" and "+" means "added")
-
The full review details can be found at {{ review_url }}, and the extension's version page
can be found at {{ version_url }}.
diff --git a/sweettooth/review/tests.py b/sweettooth/review/tests.py
index 01f2cb5..0d450ac 100644
--- a/sweettooth/review/tests.py
+++ b/sweettooth/review/tests.py
@@ -3,7 +3,7 @@ from django.test import TestCase
from django.core.files.base import File, ContentFile, StringIO
from extensions import models
-from review.views import get_old_version, should_auto_approve
+from review.views import get_old_version, should_auto_approve_changeset
from testutils import BasicUserTestCase
@@ -39,12 +39,12 @@ class TestAutoApproveLogic(TestCase):
unchanged=unchanged or [])
def test_auto_approve_logic(self):
- self.assertTrue(should_auto_approve(self.build_changeset()))
- self.assertTrue(should_auto_approve(self.build_changeset(changed=['metadata.json'])))
- self.assertTrue(should_auto_approve(self.build_changeset(changed=['metadata.json', 'po/en_GB.po',
'images/new_fedora.png', 'stylesheet.css'])))
- self.assertTrue(should_auto_approve(self.build_changeset(changed=['stylesheet.css'],
added=['po/zn_CH.po'])))
-
- self.assertFalse(should_auto_approve(self.build_changeset(changed=['extension.js'])))
- self.assertFalse(should_auto_approve(self.build_changeset(changed=['secret_keys.json'])))
- self.assertFalse(should_auto_approve(self.build_changeset(changed=['libbignumber/BigInteger.js'])))
- self.assertFalse(should_auto_approve(self.build_changeset(added=['libbignumber/BigInteger.js'])))
+ self.assertTrue(should_auto_approve_changeset(self.build_changeset()))
+ self.assertTrue(should_auto_approve_changeset(self.build_changeset(changed=['metadata.json'])))
+ self.assertTrue(should_auto_approve_changeset(self.build_changeset(changed=['metadata.json',
'po/en_GB.po', 'images/new_fedora.png', 'stylesheet.css'])))
+ self.assertTrue(should_auto_approve_changeset(self.build_changeset(changed=['stylesheet.css'],
added=['po/zn_CH.po'])))
+
+ self.assertFalse(should_auto_approve_changeset(self.build_changeset(changed=['extension.js'])))
+ self.assertFalse(should_auto_approve_changeset(self.build_changeset(changed=['secret_keys.json'])))
+
self.assertFalse(should_auto_approve_changeset(self.build_changeset(changed=['libbignumber/BigInteger.js'])))
+
self.assertFalse(should_auto_approve_changeset(self.build_changeset(added=['libbignumber/BigInteger.js'])))
diff --git a/sweettooth/review/views.py b/sweettooth/review/views.py
index f1a25cb..9795bf0 100644
--- a/sweettooth/review/views.py
+++ b/sweettooth/review/views.py
@@ -315,7 +315,7 @@ def send_email_submitted(request, version):
message.send()
-def send_email_auto_approved(request, version, changeset):
+def send_email_auto_approved(request, version):
extension = version.extension
review_url = request.build_absolute_uri(reverse('review-version',
@@ -326,8 +326,7 @@ def send_email_auto_approved(request, version, changeset):
recipient_list.append(extension.creator.email)
data = dict(version_url=version_url,
- review_url=review_url,
- changeset=changeset)
+ review_url=review_url)
message = render_mail(version, 'auto_approved', data)
message.to = recipient_list
@@ -335,11 +334,7 @@ def send_email_auto_approved(request, version, changeset):
'X-SweetTooth-ExtensionCreator': extension.creator.username})
message.send()
-def should_auto_approve(changes, extension=None):
- # If a user can approve extensions, don't bother making him do so.
- if extension is not None and can_approve_extension(extension.creator, extension):
- return True
-
+def should_auto_approve_changeset(changes):
for filename in itertools.chain(changes['changed'], changes['added']):
# metadata.json updates are safe.
if filename == 'metadata.json':
@@ -363,12 +358,25 @@ def should_auto_approve(changes, extension=None):
return True
-def extension_submitted(sender, request, version, **kwargs):
+def should_auto_approve(version):
+ extension = version.extension
+ user = extension.creator
+ can_review = can_approve_extension(user, extension)
+ trusted = user.has_perm("review.trusted")
+
+ if can_review or trusted:
+ return True
+
old_version = version.extension.latest_version
+ if old_version is None:
+ return False
+
old_zipfile, new_zipfile = get_zipfiles(old_version, version)
changeset = get_file_changeset(old_zipfile, new_zipfile)
+ return should_auto_approve_changeset(changeset)
- if old_zipfile is not None and should_auto_approve(changeset, version.extension):
+def extension_submitted(sender, request, version, **kwargs):
+ if should_auto_approve(version):
CodeReview.objects.create(version=version,
reviewer=request.user,
comments="",
@@ -376,10 +384,9 @@ def extension_submitted(sender, request, version, **kwargs):
auto=True)
version.status = models.STATUS_ACTIVE
version.save()
- send_email_auto_approved(request, version, changeset)
- return
-
- send_email_submitted(request, version)
+ send_email_auto_approved(request, version)
+ else:
+ send_email_submitted(request, version)
models.submitted_for_review.connect(extension_submitted)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]