def modified_time(self, name):
     ISO8601 = '%Y-%m-%dT%H:%M:%SZ'
     ISO8601_MS = '%Y-%m-%dT%H:%M:%S.%fZ'
     name = self._normalize_name(self._clean_name(name))
     entry = self.entries.get(name)
     # only call self.bucket.get_key() if the key is not found
     # in the preloaded metadata.
     if entry is None:
         entry = self.bucket.get_key(self._encode_name(name))
     # Parse the last_modified string to a local datetime object.
     if not entry.last_modified:
         try:
             entry.last_modified = datetime.datetime.now().strftime(ISO8601)
         except ValueError:
             entry.last_modified = datetime.datetime.now().strftime(ISO8601_MS)
     return parse_ts_extended(entry.last_modified)
Exemple #2
0
    def _update_db_cache_entry(self,
                               name,
                               fle=None,
                               thumbnail=False,
                               s3key=None,
                               update=True):
        if s3key is None:
            try:
                s3key = fle.key
            except:
                s3key = self.bucket.get_key(
                    self._normalize_name(self._clean_name(name)))
        filemeta_defaults = {
            'size': s3key.size,
            'last_modified': parse_ts_extended(s3key.last_modified)
        }
        if name not in self.entries or self.entries[name].image_x is None:
            self._update_calls += 1
            if self._update_calls > 30:
                time.sleep(10)
                self._update_calls = 0
            try:
                fle = self.open(name, 'r')
                im = Image.open(fle)
                filemeta_defaults.update({
                    'image_x': im.size[0],
                    'image_y': im.size[1]
                })

                if thumbnail:
                    logging.debug("Saving thumbnail cache")
                    bytesfle = BytesIO.BytesIO()
                    im.save(strfle, 'JPEG')
                    filemeta_defaults['thumbnail'] = bytesfle.getvalue()
                fle.close()
            except IOError:
                filemeta_defaults.update({'image_x': 0, 'image_y': 0})
        if name not in self.entries or update or self.entries[
                name].image_x is None:
            filemeta, created = S3FileMeta.objects.get_or_create(
                path=name, defaults=filemeta_defaults)
            if not created:
                filemeta.__dict__.update(filemeta_defaults)
                filemeta.save()
            self._entries[filemeta.path] = filemeta
            self._update_folder_cache(filemeta)
Exemple #3
0
 def modified_time(self, name):
     """
     Fixes the None timestamp issue:
     https://groups.google.com/forum/#!msg/mezzanine-users/CQTvNmFa1f8/UYL5WI7po70J
     https://bitbucket.org/david/django-storages/issue/163/s3boto-modified_time-fails-for-new-file
     """
     name = self._normalize_name(self._clean_name(name))
     entry = self.entries.get(name)
     # only call self.bucket.get_key() if the key is not found
     # in the preloaded metadata.
     if entry is None:
         entry = self.bucket.get_key(self._encode_name(name))
         # Parse the last_modified string to a local datetime object.
     if not entry.last_modified:
         try:
             entry.last_modified = datetime.datetime.now().strftime(ISO8601)
         except ValueError:
             entry.last_modified = datetime.datetime.now().strftime(ISO8601_MS)
     return parse_ts_extended(entry.last_modified)
Exemple #4
0
 def test_normal(self):
     value = s3boto.parse_ts_extended("Wed, 13 Mar 2013 12:45:49 GMT")
     self.assertEquals(value, datetime.datetime(2013, 3, 13, 12, 45, 49))
 def test_normal(self):
     value = s3boto.parse_ts_extended("Wed, 13 Mar 2013 12:45:49 GMT")
     self.assertEquals(value, datetime.datetime(2013, 3, 13, 12, 45, 49))