[Zope3-dev] Important IFile bug!
Jim Fulton
jim at zope.com
Mon Jan 17 10:00:01 EST 2005
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.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Zope3-dev
mailing list