diff options
| author | Vladimir Gorej | 2012-05-27 20:14:17 +0200 |
|---|---|---|
| committer | Vladimir Gorej | 2012-05-27 20:14:17 +0200 |
| commit | 4bd7b72aa0ca3a09ab99e1a3b41753df81de6af9 (patch) | |
| tree | 6328ed9894666eefc1f0d6b6c7b28a87b1fb4d31 /brevisurl/models.py | |
| download | django-brevisurl-4bd7b72aa0ca3a09ab99e1a3b41753df81de6af9.tar.bz2 | |
Initial commit
Diffstat (limited to 'brevisurl/models.py')
| -rw-r--r-- | brevisurl/models.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/brevisurl/models.py b/brevisurl/models.py new file mode 100644 index 0000000..a9264ab --- /dev/null +++ b/brevisurl/models.py @@ -0,0 +1,58 @@ +import hashlib +import logging +from django.core.exceptions import ValidationError + +from django.db import models +from django.core.validators import URLValidator + +from brevisurl import get_connection + + +log = logging.getLogger(__name__) + + +class ShortUrl(models.Model): + """Model that represents shortened url.""" + original_url = models.URLField(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) + created = models.DateTimeField(auto_now_add=True, db_index=True, null=False, blank=False) + + def __unicode__(self): + return self.shortened_url + + def get_connection(self, fail_silently=False): + if not hasattr(self, 'brevis_connection'): + if self.pk is not None: + self.brevis_connection = get_connection(backend=self.backend, fail_silently=fail_silently) + else: + self.brevis_connection = get_connection(fail_silently=fail_silently) + return self.brevis_connection + + 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: + log.exception('ShortUrl.shortened_url is not valid URL') + raise + return super(ShortUrl, self).clean() + + def save(self, force_insert=False, force_update=False, using=None): + if self.pk is None: + self.original_url_hash = hashlib.sha256(self.original_url).hexdigest() + self.full_clean() + return super(ShortUrl, self).save(force_insert, force_update, using) + + class Meta: + unique_together = (('original_url_hash', 'backend'),) + verbose_name = 'Short url' + verbose_name_plural = 'Short urls' + ordering = ['-created'] + get_latest_by = 'created'
\ No newline at end of file |
