[PATCH v2 02/10] trivial: Cleanup of 'models.py'

Stephen Finucane stephen.finucane at intel.com
Fri Oct 2 00:52:26 AEST 2015


From: Stephen Finucane <stephenfinucane at hotmail.com>

Resolve some issues with the aforementioned file. These are mostly
stylistic changes.

Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
---
 patchwork/models.py | 228 ++++++++++++++++++++++++++++------------------------
 1 file changed, 123 insertions(+), 105 deletions(-)

diff --git a/patchwork/models.py b/patchwork/models.py
index 0c8022c..eb9a700 100644
--- a/patchwork/models.py
+++ b/patchwork/models.py
@@ -17,24 +17,26 @@
 # along with Patchwork; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-from django.db import models
+from collections import Counter, OrderedDict
+import datetime
+import random
+import re
+
 from django.contrib.auth.models import User
-from django.core.urlresolvers import reverse
-from django.contrib.sites.models import Site
 from django.conf import settings
+from django.contrib.sites.models import Site
+from django.core.urlresolvers import reverse
+from django.db import models
 from django.utils.functional import cached_property
-from patchwork.parser import hash_patch, extract_tags
 
-import re
-import datetime, time
-import random
-from collections import Counter, OrderedDict
+from patchwork.parser import extract_tags, hash_patch
+
 
 class Person(models.Model):
-    email = models.CharField(max_length=255, unique = True)
-    name = models.CharField(max_length=255, null = True, blank = True)
-    user = models.ForeignKey(User, null = True, blank = True,
-            on_delete = models.SET_NULL)
+    email = models.CharField(max_length=255, unique=True)
+    name = models.CharField(max_length=255, null=True, blank=True)
+    user = models.ForeignKey(User, null=True, blank=True,
+                             on_delete=models.SET_NULL)
 
     def __unicode__(self):
         if self.name:
@@ -49,6 +51,7 @@ class Person(models.Model):
     class Meta:
         verbose_name_plural = 'People'
 
+
 class Project(models.Model):
     linkname = models.CharField(max_length=255, unique=True)
     name = models.CharField(max_length=255, unique=True)
@@ -79,16 +82,17 @@ class Project(models.Model):
 
 
 class UserProfile(models.Model):
-    user = models.OneToOneField(User, unique = True, related_name='profile')
-    primary_project = models.ForeignKey(Project, null = True, blank = True)
-    maintainer_projects = models.ManyToManyField(Project,
-            related_name = 'maintainer_project')
-    send_email = models.BooleanField(default = False,
-            help_text = 'Selecting this option allows patchwork to send ' +
-                'email on your behalf')
-    patches_per_page = models.PositiveIntegerField(default = 100,
-            null = False, blank = False,
-            help_text = 'Number of patches to display per page')
+    user = models.OneToOneField(User, unique=True, related_name='profile')
+    primary_project = models.ForeignKey(Project, null=True, blank=True)
+    maintainer_projects = models.ManyToManyField(
+        Project, related_name='maintainer_project')
+    send_email = models.BooleanField(
+        default=False,
+        help_text='Selecting this option allows patchwork to send email on'
+        ' your behalf')
+    patches_per_page = models.PositiveIntegerField(
+        default=100, null=False, blank=False,
+        help_text='Number of patches to display per page')
 
     def name(self):
         if self.user.first_name or self.user.last_name:
@@ -97,11 +101,9 @@ class UserProfile(models.Model):
         return self.user.username
 
     def contributor_projects(self):
-        submitters = Person.objects.filter(user = self.user)
-        return Project.objects.filter(id__in =
-                                        Patch.objects.filter(
-                                            submitter__in = submitters)
-                                        .values('project_id').query)
+        submitters = Person.objects.filter(user=self.user)
+        return Project.objects.filter(id__in=Patch.objects.filter(
+            submitter__in=submitters).values('project_id').query)
 
     def sync_person(self):
         pass
@@ -109,37 +111,37 @@ class UserProfile(models.Model):
     def n_todo_patches(self):
         return self.todo_patches().count()
 
-    def todo_patches(self, project = None):
+    def todo_patches(self, project=None):
 
         # filter on project, if necessary
         if project:
-            qs = Patch.objects.filter(project = project)
+            qs = Patch.objects.filter(project=project)
         else:
             qs = Patch.objects
 
-        qs = qs.filter(archived = False) \
-             .filter(delegate = self.user) \
-             .filter(state__in =
-                     State.objects.filter(action_required = True)
-                         .values('pk').query)
+        qs = qs.filter(archived=False).filter(
+            delegate=self.user).filter(state__in=State.objects.filter(
+                action_required=True).values('pk').query)
         return qs
 
     def __unicode__(self):
         return self.name()
 
+
 def _user_saved_callback(sender, created, instance, **kwargs):
     try:
         profile = instance.profile
     except UserProfile.DoesNotExist:
-        profile = UserProfile(user = instance)
+        profile = UserProfile(user=instance)
     profile.save()
 
-models.signals.post_save.connect(_user_saved_callback, sender = User)
+models.signals.post_save.connect(_user_saved_callback, sender=User)
+
 
 class State(models.Model):
-    name = models.CharField(max_length = 100)
-    ordering = models.IntegerField(unique = True)
-    action_required = models.BooleanField(default = True)
+    name = models.CharField(max_length=100)
+    ordering = models.IntegerField(unique=True)
+    action_required = models.BooleanField(default=True)
 
     def __unicode__(self):
         return self.name
@@ -147,19 +149,21 @@ class State(models.Model):
     class Meta:
         ordering = ['ordering']
 
+
 class HashField(models.CharField):
     __metaclass__ = models.SubfieldBase
 
-    def __init__(self, algorithm = 'sha1', *args, **kwargs):
+    def __init__(self, algorithm='sha1', *args, **kwargs):
         self.algorithm = algorithm
         try:
             import hashlib
-            def _construct(string = ''):
+
+            def _construct(string=''):
                 return hashlib.new(self.algorithm, string)
             self.construct = _construct
             self.n_bytes = len(hashlib.new(self.algorithm).hexdigest())
         except ImportError:
-            modules = { 'sha1': 'sha', 'md5': 'md5'}
+            modules = {'sha1': 'sha', 'md5': 'md5'}
 
             if algorithm not in modules.keys():
                 raise NameError("Unknown algorithm '%s'" % algorithm)
@@ -174,15 +178,16 @@ class HashField(models.CharField):
     def db_type(self, connection=None):
         return 'char(%d)' % self.n_bytes
 
+
 class Tag(models.Model):
     name = models.CharField(max_length=20)
-    pattern = models.CharField(max_length=50,
-                help_text='A simple regex to match the tag in the content of '
-                    'a message. Will be used with MULTILINE and IGNORECASE '
-                    'flags. eg. ^Acked-by:')
-    abbrev = models.CharField(max_length=2, unique=True,
-                help_text='Short (one-or-two letter) abbreviation for the tag, '
-                    'used in table column headers')
+    pattern = models.CharField(
+        max_length=50, help_text='A simple regex to match the tag in the'
+        ' content of a message. Will be used with MULTILINE and IGNORECASE'
+        ' flags. eg. ^Acked-by:')
+    abbrev = models.CharField(
+        max_length=2, unique=True, help_text='Short (one-or-two letter)'
+        ' abbreviation for the tag, used in table column headers')
 
     def __unicode__(self):
         return self.name
@@ -194,6 +199,7 @@ class Tag(models.Model):
     class Meta:
         ordering = ['abbrev']
 
+
 class PatchTag(models.Model):
     patch = models.ForeignKey('Patch')
     tag = models.ForeignKey('Tag')
@@ -202,9 +208,11 @@ class PatchTag(models.Model):
     class Meta:
         unique_together = [('patch', 'tag')]
 
+
 def get_default_initial_patch_state():
     return State.objects.get(ordering=0)
 
+
 class PatchQuerySet(models.query.QuerySet):
 
     def with_tag_counts(self, project):
@@ -219,14 +227,16 @@ class PatchQuerySet(models.query.QuerySet):
         select = OrderedDict()
         select_params = []
         for tag in project.tags:
-            select[tag.attr_name] = ("coalesce("
-                "(SELECT count FROM patchwork_patchtag "
-                "WHERE patchwork_patchtag.patch_id=patchwork_patch.id "
-                    "AND patchwork_patchtag.tag_id=%s), 0)")
+            select[tag.attr_name] = (
+                "coalesce("
+                "(SELECT count FROM patchwork_patchtag"
+                " WHERE patchwork_patchtag.patch_id=patchwork_patch.id"
+                " AND patchwork_patchtag.tag_id=%s), 0)")
             select_params.append(tag.id)
 
         return qs.extra(select=select, select_params=select_params)
 
+
 class PatchManager(models.Manager):
     use_for_related_fields = True
 
@@ -236,20 +246,21 @@ class PatchManager(models.Manager):
     def with_tag_counts(self, project):
         return self.get_queryset().with_tag_counts(project)
 
+
 class Patch(models.Model):
     project = models.ForeignKey(Project)
     msgid = models.CharField(max_length=255)
     name = models.CharField(max_length=255)
     date = models.DateTimeField(default=datetime.datetime.now)
     submitter = models.ForeignKey(Person)
-    delegate = models.ForeignKey(User, blank = True, null = True)
+    delegate = models.ForeignKey(User, blank=True, null=True)
     state = models.ForeignKey(State, null=True)
-    archived = models.BooleanField(default = False)
-    headers = models.TextField(blank = True)
-    content = models.TextField(null = True, blank = True)
-    pull_url = models.CharField(max_length=255, null = True, blank = True)
-    commit_ref = models.CharField(max_length=255, null = True, blank = True)
-    hash = HashField(null = True, blank = True)
+    archived = models.BooleanField(default=False)
+    headers = models.TextField(blank=True)
+    content = models.TextField(null=True, blank=True)
+    pull_url = models.CharField(max_length=255, null=True, blank=True)
+    commit_ref = models.CharField(max_length=255, null=True, blank=True)
+    hash = HashField(null=True, blank=True)
     tags = models.ManyToManyField(Tag, through=PatchTag)
 
     objects = PatchManager()
@@ -258,7 +269,7 @@ class Patch(models.Model):
         return self.name
 
     def comments(self):
-        return Comment.objects.filter(patch = self)
+        return Comment.objects.filter(patch=self)
 
     def _set_tag(self, tag, count):
         if count == 0:
@@ -297,7 +308,7 @@ class Patch(models.Model):
         return self.project.is_editable(user)
 
     def filename(self):
-        fname_re = re.compile('[^-_A-Za-z0-9\.]+')
+        fname_re = re.compile(r'[^-_A-Za-z0-9\.]+')
         str = fname_re.sub('-', self.name)
         return str.strip('-') + '.patch'
 
@@ -310,21 +321,22 @@ class Patch(models.Model):
         ordering = ['date']
         unique_together = [('msgid', 'project')]
 
+
 class Comment(models.Model):
     patch = models.ForeignKey(Patch)
     msgid = models.CharField(max_length=255)
     submitter = models.ForeignKey(Person)
-    date = models.DateTimeField(default = datetime.datetime.now)
-    headers = models.TextField(blank = True)
+    date = models.DateTimeField(default=datetime.datetime.now)
+    headers = models.TextField(blank=True)
     content = models.TextField()
 
-    response_re = re.compile( \
-            '^(Tested|Reviewed|Acked|Signed-off|Nacked|Reported)-by: .*$',
-            re.M | re.I)
+    response_re = re.compile(
+        r'^(Tested|Reviewed|Acked|Signed-off|Nacked|Reported)-by: .*$',
+        re.M | re.I)
 
     def patch_responses(self):
-        return ''.join([ match.group(0) + '\n' for match in
-                                self.response_re.finditer(self.content)])
+        return ''.join([match.group(0) + '\n' for match in
+                        self.response_re.finditer(self.content)])
 
     def save(self, *args, **kwargs):
         super(Comment, self).save(*args, **kwargs)
@@ -338,12 +350,13 @@ class Comment(models.Model):
         ordering = ['date']
         unique_together = [('msgid', 'patch')]
 
+
 class Bundle(models.Model):
     owner = models.ForeignKey(User)
     project = models.ForeignKey(Project)
-    name = models.CharField(max_length = 50, null = False, blank = False)
-    patches = models.ManyToManyField(Patch, through = 'BundlePatch')
-    public = models.BooleanField(default = False)
+    name = models.CharField(max_length=50, null=False, blank=False)
+    patches = models.ManyToManyField(Patch, through='BundlePatch')
+    public = models.BooleanField(default=False)
 
     def n_patches(self):
         return self.patches.all().count()
@@ -353,8 +366,8 @@ class Bundle(models.Model):
 
     def append_patch(self, patch):
         # todo: use the aggregate queries in django 1.1
-        orders = BundlePatch.objects.filter(bundle = self).order_by('-order') \
-                 .values('order')
+        orders = BundlePatch.objects.filter(bundle=self).order_by('-order') \
+            .values('order')
 
         if len(orders) > 0:
             max_order = orders[0]['order']
@@ -362,11 +375,11 @@ class Bundle(models.Model):
             max_order = 0
 
         # see if the patch is already in this bundle
-        if BundlePatch.objects.filter(bundle = self, patch = patch).count():
-            raise Exception("patch is already in bundle")
+        if BundlePatch.objects.filter(bundle=self, patch=patch).count():
+            raise Exception('patch is already in bundle')
 
-        bp = BundlePatch.objects.create(bundle = self, patch = patch,
-                order = max_order + 1)
+        bp = BundlePatch.objects.create(bundle=self, patch=patch,
+                                        order=max_order + 1)
         bp.save()
 
     class Meta:
@@ -377,18 +390,19 @@ class Bundle(models.Model):
             return None
         site = Site.objects.get_current()
         return 'http://%s%s' % (site.domain,
-                reverse('patchwork.views.bundle.bundle',
-                        kwargs = {
-                                'username': self.owner.username,
-                                'bundlename': self.name
-                        }))
+                                reverse('patchwork.views.bundle.bundle',
+                                        kwargs={
+                                            'username': self.owner.username,
+                                            'bundlename': self.name
+                                        }))
 
     @models.permalink
     def get_absolute_url(self):
         return ('patchwork.views.bundle.bundle', (), {
-                                'username': self.owner.username,
-                                'bundlename': self.name,
-                            })
+            'username': self.owner.username,
+            'bundlename': self.name,
+        })
+
 
 class BundlePatch(models.Model):
     patch = models.ForeignKey(Patch)
@@ -399,18 +413,19 @@ class BundlePatch(models.Model):
         unique_together = [('bundle', 'patch')]
         ordering = ['order']
 
+
 class EmailConfirmation(models.Model):
-    validity = datetime.timedelta(days = settings.CONFIRMATION_VALIDITY_DAYS)
-    type = models.CharField(max_length = 20, choices = [
-                                ('userperson', 'User-Person association'),
-                                ('registration', 'Registration'),
-                                ('optout', 'Email opt-out'),
-                            ])
-    email = models.CharField(max_length = 200)
-    user = models.ForeignKey(User, null = True)
+    validity = datetime.timedelta(days=settings.CONFIRMATION_VALIDITY_DAYS)
+    type = models.CharField(max_length=20, choices=[
+        ('userperson', 'User-Person association'),
+        ('registration', 'Registration'),
+        ('optout', 'Email opt-out'),
+    ])
+    email = models.CharField(max_length=200)
+    user = models.ForeignKey(User, null=True)
     key = HashField()
-    date = models.DateTimeField(default = datetime.datetime.now)
-    active = models.BooleanField(default = True)
+    date = models.DateTimeField(default=datetime.datetime.now)
+    active = models.BooleanField(default=True)
 
     def deactivate(self):
         self.active = False
@@ -426,8 +441,9 @@ class EmailConfirmation(models.Model):
             self.key = self._meta.get_field('key').construct(str).hexdigest()
         super(EmailConfirmation, self).save()
 
+
 class EmailOptout(models.Model):
-    email = models.CharField(max_length = 200, primary_key = True)
+    email = models.CharField(max_length=200, primary_key=True)
 
     def __unicode__(self):
         return self.email
@@ -435,13 +451,15 @@ class EmailOptout(models.Model):
     @classmethod
     def is_optout(cls, email):
         email = email.lower().strip()
-        return cls.objects.filter(email = email).count() > 0
+        return cls.objects.filter(email=email).count() > 0
+
 
 class PatchChangeNotification(models.Model):
-    patch = models.OneToOneField(Patch, primary_key = True)
-    last_modified = models.DateTimeField(default = datetime.datetime.now)
+    patch = models.OneToOneField(Patch, primary_key=True)
+    last_modified = models.DateTimeField(default=datetime.datetime.now)
     orig_state = models.ForeignKey(State)
 
+
 def _patch_change_callback(sender, instance, **kwargs):
     # we only want notification of modified patches
     if instance.pk is None:
@@ -451,7 +469,7 @@ def _patch_change_callback(sender, instance, **kwargs):
         return
 
     try:
-        orig_patch = Patch.objects.get(pk = instance.pk)
+        orig_patch = Patch.objects.get(pk=instance.pk)
     except Patch.DoesNotExist:
         return
 
@@ -462,13 +480,13 @@ def _patch_change_callback(sender, instance, **kwargs):
 
     notification = None
     try:
-        notification = PatchChangeNotification.objects.get(patch = instance)
+        notification = PatchChangeNotification.objects.get(patch=instance)
     except PatchChangeNotification.DoesNotExist:
         pass
 
     if notification is None:
-        notification = PatchChangeNotification(patch = instance,
-                                               orig_state = orig_patch.state)
+        notification = PatchChangeNotification(patch=instance,
+                                               orig_state=orig_patch.state)
 
     elif notification.orig_state == instance.state:
         # If we're back at the original state, there is no need to notify
@@ -478,4 +496,4 @@ def _patch_change_callback(sender, instance, **kwargs):
     notification.last_modified = datetime.datetime.now()
     notification.save()
 
-models.signals.pre_save.connect(_patch_change_callback, sender = Patch)
+models.signals.pre_save.connect(_patch_change_callback, sender=Patch)
-- 
2.0.0



More information about the Patchwork mailing list