def update(self): now = datetime.datetime.now() if 'X-First-Seen' not in self.data: self.data['X-First-Seen'] = util.iso8601_datetime_format(now.timetuple()) envelope = ( #('X-Meta-Checksum', lambda x: self.get_meta_hash()), ('X-Last-Modified', util.last_modified_header), ('X-Last-Update', lambda x: util.iso8601_datetime_format(now.timetuple())), ('X-Last-Seen', lambda x: util.iso8601_datetime_format(now.timetuple())), ) for handlers in self.handlers, envelope: for header, handler in handlers: value = None try: value = handler(self.path) except Exception, e: traceback.print_exc() log.err("%s: %s", header, e) continue #print header, value if header in self.allow_multiple: if header not in self.data: self.data[header] = [] elif not isinstance(self.data[header], list): self.data[header] = [ self.data[header] ] self.data[header].append(value) else: self.data[header] = value
def write(self): fl = open(self.__class__.get_metafile(self.path, self.basedir), 'w+') now = datetime.datetime.now() # XXX: ctime? envelope = { 'X-Meta-Checksum': self.get_meta_hash(), 'X-Last-Update': util.iso8601_datetime_format(now.timetuple()), 'Location': self.path, } for key in envelope.keys(): if key in self.data: del self.data[key] for data in self.data, envelope: for header in data: value = data[header] if isinstance(value, list): value = ", ".join(value) fl.write("%s: %s\r\n" % (header, value)) fl.close() mtime = calendar.timegm( now.timetuple() )#[:6] ) os.utime(self.__class_.get_metafile(self.path, self.basedir), (mtime, mtime))