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 -->
<!--<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
label="Add Document"
name="AddLoopsDocument.html"
schema="loops.interfaces.IDocument"
fields="title data contentType"
content_factory="loops.resource.Document"
permission="zope.ManageContent"
/>
permission="zope.ManageContent" />
<addMenuItem
class="loops.resource.Document"
@ -179,8 +188,7 @@
fields="title data contentType"
for="loops.interfaces.IDocument"
permission="zope.ManageContent"
menu="zmi_views" title="Edit"
/>
menu="zmi_views" title="Edit" />
<!-- media asset -->
@ -192,7 +200,7 @@
content_factory="loops.resource.MediaAsset"
permission="zope.ManageContent"
/>
<addMenuItem
class="loops.resource.MediaAsset"
title="Media Asset"
@ -210,7 +218,7 @@
permission="zope.ManageContent"
menu="zmi_views" title="Edit"
/>
<!-- view manager -->
<addform

View file

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