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)
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)
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)
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))