[Zope3-dev] Important IFile bug!
Roger Ineichen
dev at projekt01.ch
Mon Jan 17 09:46:22 EST 2005
Ok I see...
> -----Original Message-----
> From: Jim Fulton [mailto:jim at zope.com]
> Sent: Monday, January 17, 2005 12:58 PM
> To: dev at projekt01.ch
> Cc: zope3-dev at zope.org
> Subject: Re: [Zope3-dev] Important IFile bug!
>
> Roger Ineichen wrote:
> > Hi jim
> >
> >>-----Original Message-----
> >>From: Jim Fulton [mailto:jim at zope.com]
> >>Sent: Friday, January 14, 2005 5:30 PM
> >>To: dev at projekt01.ch
> >>Cc: zope3-dev at zope.org
> >>Subject: Re: [Zope3-dev] Important IFile bug!
> >>
> >>Roger Ineichen wrote:
> >>
> >>...
> >>
> >>
> >>>Ok, what can I do?
> >>>
> >>>Should I implement a IData field and enhance this field?
> >>
> >>I think you should define an IMime schema that defines methods
> >>to get and set the data. I suggest that this should be a
> >>file-like interface, with, at least, read and write.
> >>It should have a mime-type attribute and an encoding
> >>attribute, for use with text.
> >>
> >>Then you should define a mine field (IMImeField/MimeField)
> >>for data with this interface.
> >
> >
> > This whould mean we change the IFile implementation?
>
> IFile should be changes to use a mime field.
>
> > Or can we Implement IMime with the attribute
> > contentType?
>
> We should define a mime data type and provide a field
> and widget to support it.
>
> > like:
> >
> > class IMime(Interface):
> >
> > contentType = BytesLine(
> > title = _(u'Content Type'),
> > description=_(u'[...].'),
> > default='',
> > required=False,
> > missing_value=''
> > )
> >
> > class IFile(IIMime):
> >
> > data = FileData(*) (
> > title=_(u'Data'),
> > description=_(u'[...]'),
> > default='',
> > missing_value='',
> > required=False,
> > )
> >
> > (*)The field FileData will replace the
> > Bytes field and validate Bytes and FileChunk.
>
> No
>
> class IMime(Interface):
>
> data = ...
>
> contentType = ...
>
> encoding = ...
>
> class IFile(Interface):
>
> def open(mode='r'):
> # return a file-like object for reading or updating the
> # file value
>
> # For backward compatibility, a deprecated data attr
> data = ... # as is now
And the class File looks like:
Class File(Persistent):
implements(IFile, IMime)
def __init__(self, data='', contentType='', encoding=''):
self.data = data
self.contentType = contentType
self.encoding = encoding
or:
Class Mime(Persistent):
implements(IMime)
def __init__(self, data='', contentType='', encoding=''):
self.data = File(data)
self.contentType = contentType
self.encoding = encoding
Can you give me some hints about what stores what?
> > This is directly backward compatible.
> > Where should we store the encoding? In a attribute
> > encoding of the File class?
>
> The encoding should be stored as part of the mime value.
> It might be better to make the cntent type itself
> a structured value ans store the encoding as part of that.
> But I think it would be fine to just put this on the mime
> value. Of course, the encoding only applied to text types.
>
> > Or via a attribute annotation, for backward compatiility
> > reason?
>
> There is no backward compatibility consideration for encoding.
>
>
> > Or what do you mean with the interface IMime?
>
> I mean we define a data type for dealing with mime bodies.
> This data type stores the data and the type information (mime
> type and encoding).
>
> > Then we can add a widget which works with session
> > and reads the contentType from the filename via the session
> > of the file data upload.
>
> The mime type only comes from a file name after other
> avenues have been exhausted. The clients *can* provide the mime
> type as part of the uploaded data.
>
> So:
>
> 1. Get the content type from file-upload meta data, if provided by
> the client. (The same applied to PUT.)
>
> 2. Use zope.app.content_types
>
> 3. Use whatever the user provides. In any case, don't attenpt
> to change the type on a rename.
>
> > Sure, just if the contentType is not explicit set in the form.
>
> Right
>
> > The widget part:
> >
> > We implement the mechansim for guess the contentType
> > in a ContentTypeWidget. The missing filename for guessing the
> > contentType could be red from the session.
>
> Any data provided with the upload, including file name, should
> be stored in the session. Or, the guessing could be done when
> the file is first uploaded, and *that* could be stored in the session.
> After the initial upload, if the form is redisplayed, we
> could show the
> giessed value and let the user override it.
>
> > And if we don't wana show the content type field in the form,
>
> Why wouldn't we want to show it?
>
> > but also guess it,
> > we can use a hidden input widget for read the content type
> > via the filename form the session and store it to the file object.
> >
> >
> >
> >>Finally, you need a widget.
> >>
> >>The widget should support:
> >>
> >>- file-upload
> >
> >
> > That's the part of the File data widget.
>
> It should be part of the mime widget
>
> >
> >>- text area if content type is text/* *and* if an encoding
> >> is specified.
> >
> >
> > That's the part of the File data widget.
>
> It should be pat of the mime widget
>
> >
> >>- entry of content type and, for text types, the encoding
> >
> >
> > That's the part of the ContentType widget.
>
> It shoud be part of the mime widget
>
> Jim
Regards
Roger Ineichen
Projekt01 GmbH
www.projekt01.ch
_____________________________
END OF MESSAGE
More information about the Zope3-dev
mailing list