def __init__(self, corpus, loc): from email.Parser import FeedParser p = FeedParser() fp = corpus.loc_fp(loc) p.feed(fp.read(self.MAX_MESSAGE_SIZE)) fp.close() EMailMessageDocument.__init__(self, corpus, loc, p.close(), corpus.loc_mtime(loc)) return
class DefaultWriteFile(object): """IRawWriteFile file adapter for Dexterity objects. Uses RFC822 marshaler. """ implements(IRawWriteFile) adapts(IDexterityContent) def __init__(self, context): self.context = context self._mimeType = None self._encoding = 'utf-8' self._closed = False self._name = None self._written = 0 self._parser = FeedParser() self._message = None @getproperty def mimeType(self): if self._message is None: return self._mimeType elif not self._message.is_multipart(): return 'text/plain' else: return 'message/rfc822' @setproperty def mimeType(self, value): self._mimeType = value @getproperty def encoding(self): if self._message is not None: return self._message.get_charset() or self._encoding return self._encoding @setproperty def encoding(self, value): self._encoding = value @property def closed(self): return self._closed @getproperty def name(self): if self._message is not None: return self._message.get_filename(self._name) return self._name @setproperty def name(self, value): self._name = value def seek(self, offset, whence=None): raise NotImplementedError("Seeking is not supported") def tell(self): return self._written def close(self): self._message = self._parser.close() self._closed = True initializeObjectFromSchemata(self.context, iterSchemata(self.context), self._message, self._encoding) def write(self, data): if self._closed: raise ValueError("File is closed") self._written += len(data) self._parser.feed(data) def writelines(self, sequence): for item in sequence: self.write(item) def truncate(self, size=None): if (size is None and self._written != 0) and size != 0: raise NotImplementedError("The 'size' argument to truncate() must be 0 - partial truncation is not supported") if self._closed: raise ValueError("File is closed") self._parser = FeedParser() self._written = 0 def flush(self): pass
class DefaultWriteFile(object): """IRawWriteFile file adapter for Dexterity objects. Uses RFC822 marshaler. """ implements(IRawWriteFile) adapts(IDexterityContent) def __init__(self, context): self.context = context self._mimeType = None self._encoding = 'utf-8' self._closed = False self._name = None self._written = 0 self._parser = FeedParser() self._message = None @property def mimeType(self): if self._message is None: return self._mimeType elif not self._message.is_multipart(): return 'text/plain' else: return 'message/rfc822' @mimeType.setter def mimeType(self, value): self._mimeType = value @property def encoding(self): if self._message is not None: return self._message.get_charset() or self._encoding return self._encoding @encoding.setter def encoding(self, value): self._encoding = value @property def closed(self): return self._closed @property def name(self): if self._message is not None: return self._message.get_filename(self._name) return self._name @name.setter def name(self, value): self._name = value def seek(self, offset, whence=None): raise NotImplementedError("Seeking is not supported") def tell(self): return self._written def close(self): self._message = self._parser.close() self._closed = True initializeObjectFromSchemata(self.context, iterSchemata(self.context), self._message, self._encoding) def write(self, data): if self._closed: raise ValueError("File is closed") self._written += len(data) self._parser.feed(data) def writelines(self, sequence): for item in sequence: self.write(item) def truncate(self, size=None): if (size is None and self._written != 0) and size != 0: raise NotImplementedError( "The 'size' argument to truncate() must be 0 - partial truncation is not supported" ) if self._closed: raise ValueError("File is closed") self._parser = FeedParser() self._written = 0 def flush(self): pass