Ignore:
Timestamp:
May 23, 2010, 7:25:20 PM (16 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, fysm-4-1, space-access, stable, stage, test-hooks
Children:
1fbe127
Parents:
f3dcf5a
git-author:
Alex Dehnert <adehnert@…> (05/23/10 19:25:20)
git-committer:
Alex Dehnert <adehnert@…> (05/23/10 19:25:20)
Message:

Add code to actually update previews

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asadb/forms/models.py

    rf3dcf5a r0265c6d  
    77import groups.models
    88from util.misc import log_and_ignore_failures, mkdir_p
     9import util.previews
    910
    1011class FYSM(models.Model):
     
    7374    image = models.ImageField(upload_to='page-previews', blank=True, )
    7475
     76    never_updated = datetime.datetime.utcfromtimestamp(0) # Never updated
     77    update_interval = datetime.timedelta(hours=23)
     78
     79    def image_filename(self, ):
     80        return os.path.join(settings.MEDIA_ROOT, self.image.name)
     81
     82
    7583    @classmethod
    7684    def allocate_page_preview(cls, filename, url, ):
    7785        preview = PagePreview()
    78         preview.update_time = datetime.datetime.utcfromtimestamp(0) # Never updated
     86        preview.update_time = cls.never_updated
    7987        preview.url = url
    80         preview.image = 'page-previews/%s.png' % (filename, )
    81         image_filename = os.path.join(settings.MEDIA_ROOT, preview.image.name)
     88        preview.image = 'page-previews/%s.jpg' % (filename, )
     89        image_filename = preview.image_filename()
    8290        mkdir_p(os.path.dirname(image_filename))
    8391        try:
    84             os.symlink('no-preview.png', image_filename)
     92            os.symlink('no-preview.jpg', image_filename)
    8593        except OSError as exc:
    8694            if exc.errno == errno.EEXIST:
     
    9199
    92100    def update_preview(self, ):
    93         pass
     101        self.update_time = datetime.datetime.now()
     102        self.save()
     103        failure = util.previews.generate_webpage_preview(self.url, self.image_filename(), )
     104        if failure:
     105            self.update_time = self.never_updated
     106            self.save()
    94107
    95108    @classmethod
    96109    def previews_needing_updates(cls, interval=None, ):
    97110        if interval is None:
    98             interval = datetime.timedelta(days=1)
     111            interval = cls.update_interval
    99112        before = datetime.datetime.now() - interval
    100         return cls.objects.filter(update_time__le=before)
     113        return cls.objects.filter(update_time__lte=before)
     114
     115    @classmethod
     116    def update_outdated_previews(cls, interval=None, ):
     117        previews = cls.previews_needing_updates(interval)
     118        now = datetime.datetime.now()
     119        update_list = []
     120        previews_dict = {}
     121        for preview in previews:
     122            update_list.append((preview.url, preview.image_filename(), ))
     123            previews_dict[preview.url] = preview
     124            preview.update_time = now
     125            preview.save()
     126        failures = util.previews.generate_webpage_previews(update_list)
     127        for url, msg in failures:
     128            print "%s: %s" % (url, msg, )
     129            preview = previews_dict[url]
     130            preview.update_time = cls.never_updated
     131            preview.save()
Note: See TracChangeset for help on using the changeset viewer.