def __unicode__(self):
return self.name
+ def is_editable(self, user):
+ if not user.is_authenticated():
+ return False
+ return self in user.get_profile().maintainer_projects.all()
+
class UserProfile(models.Model):
user = models.ForeignKey(User, unique = True)
primary_project = models.ForeignKey(Project, null = True, blank = True)
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)
+ return Project.objects.filter(id__in =
+ Patch.objects.filter(
+ submitter__in = submitters)
+ .values('project_id').query)
def sync_person(self):
qs = qs.filter(archived = False) \
.filter(delegate = self.user) \
- .filter(state__in = \
- State.objects.filter(action_required = True) \
+ .filter(state__in =
+ State.objects.filter(action_required = True)
.values('pk').query)
return qs
def __unicode__(self):
return self.name()
+def _user_created_callback(sender, created, instance, **kwargs):
+ if not created:
+ return
+ profile = UserProfile(user = instance)
+ profile.save()
+
+models.signals.post_save.connect(_user_created_callback, sender = User)
+
class State(models.Model):
name = models.CharField(max_length = 100)
ordering = models.IntegerField(unique = True)
if self.submitter.user == user or self.delegate == user:
return True
- profile = user.get_profile()
- return self.project in user.get_profile().maintainer_projects.all()
-
- def form(self):
- f = PatchForm(instance = self, prefix = self.id)
- return f
+ return self.project.is_editable(user)
def filename(self):
fname_re = re.compile('[^-_A-Za-z0-9\.]+')
else:
postscript = ''
- responses = False
for comment in Comment.objects.filter(patch = self) \
.exclude(msgid = self.msgid):
body += comment.patch_responses()
re.M | re.I)
def patch_responses(self):
- return ''.join([ match.group(0) + '\n' for match in \
+ return ''.join([ match.group(0) + '\n' for match in
self.response_re.finditer(self.content)])
class Meta:
}))
def mbox(self):
- return '\n'.join([p.mbox().as_string(True) \
+ return '\n'.join([p.mbox().as_string(True)
for p in self.ordered_patches()])
class BundlePatch(models.Model):