From 09a62c743ba386475addc580dc215ff1f363a333 Mon Sep 17 00:00:00 2001 From: Unai Zalakain Date: Fri, 8 Jun 2012 14:49:23 +0200 Subject: raise TokensExhausted when maximum ShortUrl objects are reached --- brevisurl/backends/local.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/brevisurl/backends/local.py b/brevisurl/backends/local.py index 1b72e64..8622f5a 100644 --- a/brevisurl/backends/local.py +++ b/brevisurl/backends/local.py @@ -12,6 +12,8 @@ from brevisurl.models import ShortUrl log = logging.getLogger(__name__) +class TokensExhausted(Exception): + pass class BrevisUrlBackend(BaseBrevisUrlBackend): @@ -53,9 +55,11 @@ class BrevisUrlBackend(BaseBrevisUrlBackend): def __generate_token(self, size=5): chars = list(string.ascii_letters + string.digits) + if ShortUrl.objects.count >= chars ** size: + raise TokensExhausted('Consider incrementing the token length or chars list') random.shuffle(chars) while True: token = ''.join([random.choice(chars) for x in range(size)]) if not ShortUrl.objects.filter(backend=self.class_path, shortened_url__endswith=token).count(): break - return token \ No newline at end of file + return token -- cgit v1.2.3 From 860ca248ada55295236182e306aaaec0a169bdfc Mon Sep 17 00:00:00 2001 From: Unai Zalakain Date: Sun, 10 Jun 2012 01:56:42 +0200 Subject: silly bugs fixed --- brevisurl/backends/local.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brevisurl/backends/local.py b/brevisurl/backends/local.py index 8622f5a..69944e8 100644 --- a/brevisurl/backends/local.py +++ b/brevisurl/backends/local.py @@ -55,7 +55,7 @@ class BrevisUrlBackend(BaseBrevisUrlBackend): def __generate_token(self, size=5): chars = list(string.ascii_letters + string.digits) - if ShortUrl.objects.count >= chars ** size: + if ShortUrl.objects.count() >= len(chars) ** size: raise TokensExhausted('Consider incrementing the token length or chars list') random.shuffle(chars) while True: -- cgit v1.2.3 From e56895d6bf400dcacbdbf66abeef50e81b5d6d71 Mon Sep 17 00:00:00 2001 From: Unai Zalakain Date: Sun, 10 Jun 2012 01:57:04 +0200 Subject: no validation in original URL, that's supposed to be done elsewhere, so URLs like "/without/domain" could be added --- brevisurl/models.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/brevisurl/models.py b/brevisurl/models.py index a9264ab..0a583ad 100644 --- a/brevisurl/models.py +++ b/brevisurl/models.py @@ -13,7 +13,7 @@ log = logging.getLogger(__name__) class ShortUrl(models.Model): """Model that represents shortened url.""" - original_url = models.URLField(null=False, blank=False) + original_url = models.CharField(max_length=200, null=False, blank=False) original_url_hash = models.CharField(max_length=64, null=False, blank=False) shortened_url = models.URLField(max_length=200, null=False, blank=False, unique=True) backend = models.CharField(max_length=200, null=False, blank=False) @@ -32,11 +32,6 @@ class ShortUrl(models.Model): def clean(self): url_validator = URLValidator() - try: - url_validator(self.original_url) - except ValidationError: - log.exception('ShortUrl.original_url is not valid URL') - raise try: url_validator(self.shortened_url) except ValidationError: @@ -55,4 +50,4 @@ class ShortUrl(models.Model): verbose_name = 'Short url' verbose_name_plural = 'Short urls' ordering = ['-created'] - get_latest_by = 'created' \ No newline at end of file + get_latest_by = 'created' -- cgit v1.2.3