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 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])/')