Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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