On 28 Nov 10:14, Mauro Carvalho Chehab wrote: > From: Laurent Pinchart <[email protected]> > > Paths are validated by trying to compile it as a regexp using a custom > validator. > > Signed-off-by: Laurent Pinchart <[email protected]> > Signed-off-by: Mauro Carvalho Chehab <[email protected]>
Some small nits that I can fix myself. Other than that, Acked-by: Stephen Finucane <[email protected]> > --- > patchwork/bin/parsemail.py | 19 +++++++++++++++++-- > patchwork/models.py | 9 ++++++++- > 2 files changed, 25 insertions(+), 3 deletions(-) > > diff --git a/patchwork/bin/parsemail.py b/patchwork/bin/parsemail.py > index 4f22c7f2d6a0..5d6ddf45d264 100755 > --- a/patchwork/bin/parsemail.py > +++ b/patchwork/bin/parsemail.py > @@ -339,18 +339,33 @@ def get_state(state_name): > pass > return get_default_initial_patch_state() > > +class Rule(object): > + pass > + nit: a defaultdict ({user: [path, path...]}) would be more semantic here. I can change this, unless you've any reason I shouldn't. > def auto_delegate(project, filenames): > if not filenames: > return None > > - rules = list(DelegationRule.objects.filter(project = project)) > + # Precompile the path regexps > + rules = [] > + for rule in DelegationRule.objects.filter(project = project): > + r = Rule() > + r.user = rule.user > + > + try: > + r.path = re.compile(rule.path) > + except: I'm going to make this capture 're.error' only, if that's OK. > + print '%s is not a valid regular expression' % rule.path > + continue > + > + rules.append(r) > > patch_delegate = None > > for filename in filenames: > file_delegate = None > for rule in rules: > - if fnmatch(filename, rule.path): > + if rule.path.match(filename): > file_delegate = rule.user > break; > > diff --git a/patchwork/models.py b/patchwork/models.py > index 101a9af9746f..e552217a3cbc 100644 > --- a/patchwork/models.py > +++ b/patchwork/models.py > @@ -19,6 +19,7 @@ > > from django.db import models > from django.contrib.auth.models import User > +from django.core.exceptions import ValidationError > from django.core.urlresolvers import reverse > from django.contrib.sites.models import Site > from django.conf import settings > @@ -78,9 +79,15 @@ class Project(models.Model): > ordering = ['linkname'] > > > +def validate_rule_path(value): > + try: > + re.compile(value) > + except: > + raise ValidationError(u'`%s\' is not a valid regulator expression' % > value) > + > class DelegationRule(models.Model): > user = models.ForeignKey(User) > - path = models.CharField(max_length=255) > + path = models.CharField(max_length = 255, validators = > [validate_rule_path]) > project = models.ForeignKey(Project) > priority = models.IntegerField(default = 0) > > -- > 2.5.0 > > _______________________________________________ > Patchwork mailing list > [email protected] > https://lists.ozlabs.org/listinfo/patchwork _______________________________________________ Patchwork mailing list [email protected] https://lists.ozlabs.org/listinfo/patchwork
