class TolerantSlugifyCroppingMapping(SlugifyCroppingMapping):
    """
    Ignore changes to original slug in order to be able to make it
    unique.
    """

    slug_surlex = Surlex('<slug:s>-<counter:#>')

    def check(self, from_instance, to_instance, from_field):
        if not super(TolerantSlugifyCroppingMapping, self).check(
            from_instance, to_instance, from_field
        ):
            old_value = getattr(from_instance, from_field)
            mapped_value = self.map_value(old_value)

            new_value = getattr(to_instance, self.get_to_field(from_field))

            # From Margreet: Don't display this warning for duplicate organizations.
            if not hasattr(self, 'organization'):
                logger.warning(u"Field '%s' has been made unique with value '%s' for '%s'",
                    from_field, new_value, to_instance.__unicode__()
                )

            result = self.slug_surlex.match(new_value)

            if not result or result.get('slug', None) != mapped_value:
                logger.error(u"Original slug '%s' does not match new one '%s' for '%s'",
                    old_value, new_value, to_instance.__unicode__()
                )
                return False

        return True
Example #2
0
def main():
    parser = OptionParser()
    parser.set_usage('surlex2regex.py <surlex>')
    if len(sys.argv) == 1:
        argv = ['-h']
    else:
        argv = sys.argv[1:]
    options, args = parser.parse_args(argv)
    print (Surlex(args[0]).translate())
Example #3
0
    def test_reverse_match(self):
        surlex = '/articles/<year>/<slug>/'
        
        args = {}
        self.assertFalse(reverse_match(surlex, args))
        args = {'year':2020}
        self.assertFalse(reverse_match(surlex, args))
        args = {'slug':'sdf'}
        self.assertFalse(reverse_match(surlex, args))

        args = {'year':2020,'slug':'thefuture'}
        self.assertEqual(reverse_match(surlex,args),'/articles/2020/thefuture/')

        o_surlex = Surlex(surlex)
        self.assertEqual(o_surlex.reverse_match(args),'/articles/2020/thefuture/')

        args = list()
        self.assertFalse(reverse_match(surlex,args))
        args.append(2020)
        self.assertFalse(reverse_match(surlex,args))

        args.append('thefuture')
        self.assertEqual(reverse_match(surlex,args),'/articles/2020/thefuture/')
Example #4
0
def surl(surlex, *args, **kwargs):
    return url(Surlex(surlex).translate(), *args, **kwargs)
Example #5
0
 def test_custom_macro2(self):
     registry = MacroRegistry({'int': r'[0-9]'})
     surlex = Surlex('/<foo:int>/', registry)
     self.assertEqual(surlex.translate(), '/(?P<foo>[0-9])/')
Example #6
0
 def test_custom_macro2(self):
     registry = MacroRegistry({'int': r'[0-9]'})
     surlex = Surlex('/<foo:int>/', registry)
     self.assertEqual(surlex.translate(), '/(?P<foo>[0-9])/')