Ignore:
Timestamp:
May 23, 2010, 6:38:40 AM (15 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, fysm-4-1, space-access, stable, stage, test-hooks
Children:
0265c6d
Parents:
595915c
git-author:
Alex Dehnert <adehnert@…> (05/23/10 06:38:40)
git-committer:
Alex Dehnert <adehnert@…> (05/23/10 06:38:40)
Message:

Add basic support for page previews

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asadb/forms/models.py

    rf55ccfd rf3dcf5a  
    22
    33import datetime
     4import os, errno
    45
    56import settings
    67import groups.models
    7 from util.misc import log_and_ignore_failures
     8from util.misc import log_and_ignore_failures, mkdir_p
    89
    910class FYSM(models.Model):
     
    1819    tags = models.CharField(max_length=100, blank=True, help_text="Specify some free-form, comma-delimited tags for your group", )
    1920    categories = models.ManyToManyField('FYSMCategory', blank=True, help_text="Put your group into whichever of our categories seem applicable.", )
     21    join_preview = models.ForeignKey('PagePreview', null=True, )
     22
     23    def save(self, *args, **kwargs):
     24        if self.join_preview is None or self.join_url != self.join_preview.url:
     25            self.join_preview = PagePreview.allocate_page_preview(
     26                filename='fysm/%d/group%d'%(self.year, self.group.pk, ),
     27                url=self.join_url,
     28            )
     29        super(FYSM, self).save(*args, **kwargs) # Call the "real" save() method.
    2030
    2131    class Meta:
     
    5767        record.source_user = request.user.username
    5868        record.save()
     69
     70class PagePreview(models.Model):
     71    update_time = models.DateTimeField(default=datetime.datetime.utcfromtimestamp(0))
     72    url = models.URLField()
     73    image = models.ImageField(upload_to='page-previews', blank=True, )
     74
     75    @classmethod
     76    def allocate_page_preview(cls, filename, url, ):
     77        preview = PagePreview()
     78        preview.update_time = datetime.datetime.utcfromtimestamp(0) # Never updated
     79        preview.url = url
     80        preview.image = 'page-previews/%s.png' % (filename, )
     81        image_filename = os.path.join(settings.MEDIA_ROOT, preview.image.name)
     82        mkdir_p(os.path.dirname(image_filename))
     83        try:
     84            os.symlink('no-preview.png', image_filename)
     85        except OSError as exc:
     86            if exc.errno == errno.EEXIST:
     87                pass
     88            else: raise
     89        preview.save()
     90        return preview
     91
     92    def update_preview(self, ):
     93        pass
     94
     95    @classmethod
     96    def previews_needing_updates(cls, interval=None, ):
     97        if interval is None:
     98            interval = datetime.timedelta(days=1)
     99        before = datetime.datetime.now() - interval
     100        return cls.objects.filter(update_time__le=before)
Note: See TracChangeset for help on using the changeset viewer.