Hanno Schlichting wrote: > On Thu, Oct 1, 2009 at 2:13 AM, Martin Aspeli <optilude+li...@gmail.com> > wrote: >> Hanno Schlichting wrote: >> >>> Is there any reason to invent a new API and not just use Python's file API? >> I don't know. IReadFile and IWriteFile have been around for ever and are >> used by a number of things in Zope. They have read(), write() and >> size(). The first two are on file, the last one isn't. I'd like to be >> able to use this API as a base, since it's used for things like >> z3c.blobfile already, and is documented as the way to do this kind of >> thing in Philipp's book. > > Ok. I have a feeling that Zope3 at various times invented a new > Java-ish API instead of using standard Python protocols. I'd just like > to avoid going down that way even more. > >> class IReadFile(Interface): >> """Provide read access to file data >> """ >> >> def read(): >> """Return the file data as a str >> """ >> >> def size(): >> """Return the data length >> """ > > This needs a clarification on what kind of length this is. Is it the > length of the binary data? Since these interfaces also know about > encoding, it's otherwise not clear if the size for textual data might > be its Unicode length.
I assume so. Note that this interface already exists, so I'm not proposing to change it. ;-) >> class ILargeReadFile(IReadFile): >> """Provide efficient read access to file data >> """ >> >> def getContentType(): >> """Get the content/MIME type of the file as a string in the form >> 'major/minor'. Return None if this is not known or undefined. >> """ >> >> name = schema.TextLine(title=u"Filename", readonly=True) >> encoding = schema.ASCIILine(title=u"Encoding", readonly=True) > > encoding only makes sense for text/*, so maybe some small hint at that? Sure, yeah. >> def __iter__(): >> """Get an iterator""" >> >> def next(): >> """See file""" >> >> def seek(): >> """See file""" >> >> def tell(): >> """See file""" >> >> class IWriteFile(Interface): >> >> def write(data): >> """Update the file data >> """ >> >> class ILargeWriteFile(IWriteFile): >> >> def write(data): >> """Write a chunk of data >> """ >> >> name = schema.TextLine(title=u"Filename", readonly=False) >> encoding = schema.ASCIILine(title=u"Encoding", readonly=False) >> >> def tell(): >> """See file""" >> >> def close(): >> """See file"" >> >> I've still got the content type as a method (maybe make it a read-only >> property?) that may return None. That could be in a separate adapter, >> but that feels like overkill to me. :) > > There's no standard way to spell "content type", so I don't really > care. On the pure file level it's even called mime type and only > internet data handling uses "content type". So you have to look things > up anyways. Compared to the other attributes/methods "getContentType" > looks like a Java-intruder in otherwise Python naming conventions, > though. Haha. Maybe I'll have a property mimeType instead? That looks better, I guess. But we *are* in a Zope package, so Zope naming conventions probably apply. Ok, I'm going to do this shortly, unless anyone objects. Martin -- Author of `Professional Plone Development`, a book for developers who want to work with Plone. See http://martinaspeli.net/plone-book _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )