[Zope3-dev] Important IFile bug!

Janko Hauser jhauser at zscout.de
Mon Jan 17 10:58:58 EST 2005


Jim Fulton schrieb:
> Roger Ineichen wrote:
> 
>>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
> 
> 
> Waaaaaaa, I got that wrong! Waaaaa waaaa waaaaa.
> (I edited the wrong interface.)
> 
> Sorry, This should have been:
> 
> class IMime(Interface):
> 
>       def open(mode='r'):
>          # return a file-like object for reading or updating the
>          # file value
> 
>       contentType = ...
> 
>       encoding = ...
> 
> class IFile(Interface):
> 
>      contents = Mime(...)
> 
>      # 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
> 
> 
> 
> No:
> 
>      implements(IFile)
> 
>      def __init__(self, contents):
>          self.contents = contents
> 
>      def _getData(self):
> 	return self.contents.open().read()
> 
>      def _setData(self, v):
> 	self.contents.open('w').write(v)
> 
> 
>>
>>or:
>>
>>Class Mime(Persistent):
>>
>>  implements(IMime)
>>
>>  def __init__(self, data='', contentType='', encoding=''):
>>      self.data = File(data)
>>      self.contentType = contentType
>>      self.encoding = encoding
> 
> 
> Right, you need this, with the above.  You also need to
> provide an open method and a MimeFile object that has read
> and write methods for updating the mome object.  The mime
> object does the chunking that we do now.
> 
> 
>>
>>Can you give me some hints about what stores what?
> 
> 
> Mime objects store mime bodies, content types and encoding.
> Note that the mime bodies should use the sort of chunking
> tricks we have now.  File objects should hold mime objects.
> We also need mime fields and widgets.
> 
> Sorry for my confused previous message. My interfaces had
> attributes and I realized we needed a file-like API
> for the mime data to handle large files.  I was in a
> bit of a hurry and edited the wrong interface.
> 

>From the stuff that's in the brunch in the moment it is the same
structure. I will further work on this, with a renaming to the above
interfaces.  If this starts to work, I will exchange the current File
implementation with the mime field. What I currently not oversee is how
this effects the fsync stuff.

With regards,

__Janko





More information about the Zope3-dev mailing list