More on media assets

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1021 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-01-20 16:45:48 +00:00
parent 55c3137c4f
commit f30caa3c14
2 changed files with 23 additions and 9 deletions

View file

@ -155,14 +155,23 @@
<!-- document --> <!-- document -->
<!--<zope:view
type="zope.publisher.interfaces.browser.IBrowserRequest"
for="zope.schema.interfaces.IBytes"
provides="zope.app.form.interfaces.IInputWidget"
factory=".resource.DataWidget"
permission="zope.Public"
name="loops.resource.DataWidget"
/>-->
<addform <addform
label="Add Document" label="Add Document"
name="AddLoopsDocument.html" name="AddLoopsDocument.html"
schema="loops.interfaces.IDocument" schema="loops.interfaces.IDocument"
fields="title data contentType" fields="title data contentType"
content_factory="loops.resource.Document" content_factory="loops.resource.Document"
permission="zope.ManageContent" permission="zope.ManageContent" />
/>
<addMenuItem <addMenuItem
class="loops.resource.Document" class="loops.resource.Document"
@ -179,8 +188,7 @@
fields="title data contentType" fields="title data contentType"
for="loops.interfaces.IDocument" for="loops.interfaces.IDocument"
permission="zope.ManageContent" permission="zope.ManageContent"
menu="zmi_views" title="Edit" menu="zmi_views" title="Edit" />
/>
<!-- media asset --> <!-- media asset -->

View file

@ -28,6 +28,7 @@ from zope.app.container.contained import Contained
from zope.app.file.image import Image as BaseMediaAsset from zope.app.file.image import Image as BaseMediaAsset
from zope.interface import implements from zope.interface import implements
from persistent import Persistent from persistent import Persistent
from cStringIO import StringIO
from cybertools.relation.registry import getRelations from cybertools.relation.registry import getRelations
from interfaces import IResource, IDocument, IMediaAsset from interfaces import IResource, IDocument, IMediaAsset
@ -45,7 +46,9 @@ class Resource(Contained, Persistent):
title = property(getTitle, setTitle) title = property(getTitle, setTitle)
_contentType = '' _contentType = ''
def setContentType(self, contentType): self._contentType = contentType def setContentType(self, contentType):
if contentType:
self._contentType = contentType
def getContentType(self): return self._contentType def getContentType(self): return self._contentType
contentType = property(getContentType, setContentType) contentType = property(getContentType, setContentType)
@ -56,7 +59,7 @@ class Resource(Contained, Persistent):
def __init__(self, title=u''): def __init__(self, title=u''):
self.title = title self.title = title
_size = 0 _size = _width = _height = 0
class Document(Resource): class Document(Resource):
@ -78,13 +81,16 @@ class MediaAsset(Resource, BaseMediaAsset):
self.title = title self.title = title
def _setData(self, data): def _setData(self, data):
super(MediaAsset, self)._setData(data) dataFile = StringIO(data) # let File tear it into pieces
super(MediaAsset, self)._setData(dataFile)
if not self.contentType: if not self.contentType:
self.guessContentType(data) self.guessContentType(data)
data = property(BaseMediaAsset._getData, _setData) data = property(BaseMediaAsset._getData, _setData)
def guessContentType(self, data): def guessContentType(self, data):
if not isinstance(data, str): # seems to be a file object
data = data.read(20)
if data.startswith('%PDF'): if data.startswith('%PDF'):
self.contentType = 'application/pdf' self.contentType = 'application/pdf'