def shorten(cls, long_url, short_path=None, prefix=None): """Public API to create a short link""" if prefix is None: prefix = '' else: ForbiddenKeyword.raise_if_banned(prefix) PathIsNotUrlSafe.raise_if_unsafe(prefix) if short_path is None or not len(short_path): link = cls.find_for_prefix_and_long_url(prefix, long_url).first() if link is None: link = cls.create_with_random_short_path(long_url, prefix) else: PathIsNotUrlSafe.raise_if_unsafe(short_path) ForbiddenKeyword.raise_if_banned(short_path) link = cls.__get_or_create(prefix, short_path, long_url) if link.long_url != long_url: # We retrieved an existing link that uses a different url raise ShortPathConflict(link) link.save() return link
def shorten(cls, long_url, short_path=None, prefix=None): """Public API to create a short link""" ForbiddenKeyword.raise_if_banned(short_path) ForbiddenKeyword.raise_if_banned(prefix) if prefix is None: prefix = '' if short_path is None or not len(short_path): link = cls.find_for_prefix_and_long_url(prefix, long_url).first() if link is None: link = cls.create_with_random_short_path(long_url, prefix) else: link, created = cls.__get_or_create(prefix, short_path, long_url) if not created and link.long_url != long_url: raise ShortPathConflict(link) link.save() return link