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:
parent
55c3137c4f
commit
f30caa3c14
2 changed files with 23 additions and 9 deletions
|
@ -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 -->
|
||||||
|
|
||||||
|
|
12
resource.py
12
resource.py
|
@ -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'
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue