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
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())
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/')
def surl(surlex, *args, **kwargs): return url(Surlex(surlex).translate(), *args, **kwargs)
def test_custom_macro2(self): registry = MacroRegistry({'int': r'[0-9]'}) surlex = Surlex('/<foo:int>/', registry) self.assertEqual(surlex.translate(), '/(?P<foo>[0-9])/')