[Checkins] SVN: z3c.blobfile/trunk/src/z3c/blobfile/ Added a browser package that enables file streaming. This feature still needs testing.

Uwe Oestermeier u.oestermeier at iwm-kmrc.de
Wed Nov 14 08:48:16 EST 2007


Log message for revision 81833:
  Added a browser package that enables file streaming. This feature still needs testing.

Changed:
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/__init__.py
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/configure.zcml
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/file.py
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/file_add.pt
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/file_icon.gif
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/file_upload.pt
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/image_edit.pt
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/image_icon.gif
  A   z3c.blobfile/trunk/src/z3c/blobfile/browser/preview.pt
  U   z3c.blobfile/trunk/src/z3c/blobfile/configure.zcml
  U   z3c.blobfile/trunk/src/z3c/blobfile/generations/__init__.py
  U   z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py
  U   z3c.blobfile/trunk/src/z3c/blobfile/overrides.zcml

-=-
Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/__init__.py
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/__init__.py	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/__init__.py	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,19 @@
+##############################################################################
+#
+# Copyright (c) 2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""File and Image content components
+
+$Id: __init__.py 26745 2004-07-24 04:02:18Z pruggera $
+"""
+__docformat__ = 'restructuredtext'
+

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/configure.zcml
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/configure.zcml	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/configure.zcml	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,123 @@
+<configure
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain='zope'
+    >
+
+  <!-- directives for File -->
+  
+  <form
+      name="edit.html"
+      for="z3c.blobfile.interfaces.IBlobFile"
+      schema="zope.app.file.browser.file.IFileEditForm"
+      label="Change a file"
+      permission="zope.ManageContent"
+      class="zope.app.file.browser.file.FileEdit"
+      >
+  </form>
+
+  <menuItem
+      menu="zmi_views" title="Edit"
+      for="z3c.blobfile.interfaces.IBlobFile"
+      action="edit.html"
+      filter="python:context.contentType.startswith('text/')"
+      permission="zope.ManageContent" />
+
+  <page
+      name="upload.html"
+      menu="zmi_views" title="Upload"
+      for="z3c.blobfile.interfaces.IBlobFile"
+      template="file_upload.pt"
+      class="zope.app.file.browser.file.FileUpload"
+      permission="zope.ManageContent"
+      />
+
+  <page
+      for="z3c.blobfile.interfaces.IBlobFile"
+      name="index.html"
+      permission="zope.View"
+      class="z3c.blobfile.browser.file.FileView"
+      attribute="show" />
+
+
+  <addMenuItem
+      class="z3c.blobfile.file.File"
+      title="File"
+      description="A File"
+      permission="zope.ManageContent"
+      view="zope.app.file.File"
+      />
+
+  <page
+      name="zope.app.file.File"
+      for="zope.app.container.interfaces.IAdding"
+      template="file_add.pt"
+      class="zope.app.file.browser.file.FileAdd"
+      permission="zope.ManageContent"
+      />
+
+  <icon
+      name="zmi_icon"
+      for="z3c.blobfile.interfaces.IBlobFile"
+      file="file_icon.gif"
+      />
+
+  <!-- Directives for Image -->
+
+  <editform
+      schema="z3c.blobfile.interfaces.IBlobImage"
+      name="upload.html"
+      menu="zmi_views" title="Upload"
+      label="Upload an image"
+      permission="zope.ManageContent"
+      class="zope.app.file.browser.image.ImageUpload"
+      template="image_edit.pt"
+      />
+
+  <page
+      name="index.html"
+      for="z3c.blobfile.interfaces.IBlobImage"
+      permission="zope.View"
+      allowed_attributes="__call__ tag"
+      class="zope.app.file.browser.image.ImageData"
+      />
+
+  <icon
+      name="zmi_icon"
+      for="z3c.blobfile.interfaces.IBlobImage"
+      file="image_icon.gif"
+      />
+
+  <addMenuItem
+      class="zope.app.file.image.Image"
+      title="Image"
+      description="An Image"
+      permission="zope.ManageContent"
+      view="zope.app.file.Image"
+      />
+
+  <addform
+      schema="z3c.blobfile.interfaces.IBlobImage"
+      label="Add an Image"
+      content_factory="z3c.blobfile.image.Image"
+      class="zope.app.file.browser.image.ImageAdd"
+      name="z3c.blobfile.image.Image"
+      permission="zope.ManageContent"
+      />
+
+    <page
+        for="z3c.blobfile.interfaces.IBlobFile"
+        name="preview.html"
+        template="preview.pt"
+        permission="zope.ManageContent"
+        menu="zmi_views" title="Preview"
+        />
+
+    <page
+        for="z3c.blobfile.interfaces.IBlobImage"
+        name="preview.html"
+        template="preview.pt"
+        permission="zope.ManageContent"
+        menu="zmi_views" title="Preview"
+        />
+
+</configure>

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/file.py
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/file.py	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/file.py	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,68 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""File views.
+
+$Id: file.py 81031 2007-10-24 14:08:53Z srichter $
+"""
+import zope.event
+from zope import lifecycleevent
+from zope.contenttype import guess_content_type
+from zope.publisher import contenttype
+from zope.schema import Text
+from zope.exceptions.interfaces import UserError
+
+from zope.app.file.file import File
+from zope.app.file.interfaces import IFile
+from zope.app.file.i18n import ZopeMessageFactory as _
+from zope.dublincore.interfaces import IZopeDublinCore
+import zope.datetime
+
+import time
+from datetime import datetime
+
+__docformat__ = 'restructuredtext'
+
+class FileView(object):
+
+    def show(self):
+        """Returns file handle for efficient streaming."""
+        
+        if self.request is not None:
+            self.request.response.setHeader('Content-Type',
+                                            self.context.contentType)
+            self.request.response.setHeader('Content-Length',
+                                            self.context.getSize())
+        try:
+            modified = IZopeDublinCore(self.context).modified
+        except TypeError:
+            modified=None
+        if modified is None or not isinstance(modified,datetime):
+            return self.context.open()
+
+        header= self.request.getHeader('If-Modified-Since', None)
+        lmt = zope.datetime.time(modified.isoformat())
+        if header is not None:
+            header = header.split(';')[0]
+            try:    mod_since=long(zope.datetime.time(header))
+            except: mod_since=None
+            if mod_since is not None:
+                if lmt <= mod_since:
+                    self.request.response.setStatus(304)
+                    return ''
+        self.request.response.setHeader('Last-Modified',
+                                        zope.datetime.rfc1123_date(lmt))
+
+        return self.context.open()
+
+

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/file_add.pt
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/file_add.pt	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/file_add.pt	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,62 @@
+<html metal:use-macro="context/@@standard_macros/page"
+    i18n:domain="zope">
+<body>
+<div metal:fill-slot="body">
+
+  <form action="." tal:attributes="action request/URL"
+        method="post" enctype="multipart/form-data">
+
+    <h3 i18n:translate="">Add a File (Blob)</h3>
+
+    <div tal:define="errors view/errors" tal:content="errors"
+        i18n:translate=""/>
+
+    <div class="row">
+      <div class="label">
+        <label for="field.contentType"
+               title="The content type identifies the type of data."
+               i18n:attributes="title" i18n:translate="">Content Type</label>
+      </div>
+      <div class="field">
+        <input class="textType"
+               id="field.contentType"
+               name="field.contentType"
+               size="20"
+               type="text"
+               value="" /></div>
+    </div>
+
+    <div class="row">
+      <div class="label">
+        <label for="field.data"
+               title="The actual content of the object."
+               i18n:attributes="title" i18n:translate="">Data</label>
+      </div>
+      <div class="field">
+        <input class="fileType"
+               id="field.data"
+               name="field.data"
+               size="20"
+               type="file" /></div>
+    </div>
+
+    <div class="row">
+      <div class="controls"><hr />
+
+        <input type="submit" i18n:attributes="value refresh-button"
+            value="Refresh" />
+        <input type="submit" i18n:attributes="value add-button"
+            value="Add" name="UPDATE_SUBMIT" />
+
+        &nbsp;&nbsp;<b i18n:translate="">Object Name</b>&nbsp;&nbsp;
+        <input type="text" name="add_input_name" value="" />
+
+      </div>
+    </div>
+
+  </form>
+
+</div>
+</body>
+
+</html>

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/file_icon.gif
===================================================================
(Binary files differ)


Property changes on: z3c.blobfile/trunk/src/z3c/blobfile/browser/file_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/file_upload.pt
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/file_upload.pt	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/file_upload.pt	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,61 @@
+<html metal:use-macro="context/@@standard_macros/view"
+    i18n:domain="zope">
+<body>
+<div metal:fill-slot="body">
+
+  <form action="." tal:attributes="action request/URL"
+        method="post" enctype="multipart/form-data">
+
+    <h3 i18n:translate="">Upload a file (blob)</h3>
+    
+    <div tal:define="errors view/errors" tal:content="errors"
+        i18n:translate=""/>
+
+    <div class="row">
+      <div class="label">
+        <label for="field.contentType"
+               title="The content type identifies the type of data."
+               i18n:attributes="title" i18n:translate="">Content Type</label>
+      </div>
+      <div class="field">
+        <input class="textType"
+               id="field.contentType"
+               name="field.contentType"
+               size="20"
+               type="text"
+               value="" 
+	       tal:attributes="value context/contentType"/>
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label">
+        <label for="field.data"
+               title="The actual content of the object."
+               i18n:attributes="title" i18n:translate="">Data</label>
+      </div>
+      <div class="field">
+        <input class="fileType"
+               id="field.data"
+               name="field.data"
+               size="20"
+               type="file"/></div>
+    </div>
+
+    <div class="row">
+      <div class="controls"><hr />
+
+        <input type="submit" i18n:attributes="value refresh-button"
+            value="Refresh" />
+        <input type="submit" i18n:attributes="value update-button"
+            value="Update" name="UPDATE_SUBMIT" />
+
+      </div>
+    </div>
+
+  </form>
+
+</div>
+</body>
+
+</html>

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/image_edit.pt
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/image_edit.pt	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/image_edit.pt	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,24 @@
+<html metal:use-macro="context/@@standard_macros/view"
+    i18n:domain="zope">
+<body>
+<div metal:fill-slot="body">
+
+  <div metal:use-macro="view/generated_form/macros/body">
+
+  <form action=".">
+
+    <table metal:fill-slot="extra_top">
+      <tr>
+        <td i18n:translate="">Size</td>
+        <td tal:content="view/size"
+            i18n:translate="">103 x 45 pixels, 43KB</td>
+      </tr>
+    </table>
+
+  </form>
+
+  </div>
+</div>
+</body>
+
+</html>

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/image_icon.gif
===================================================================
(Binary files differ)


Property changes on: z3c.blobfile/trunk/src/z3c/blobfile/browser/image_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.blobfile/trunk/src/z3c/blobfile/browser/preview.pt
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/browser/preview.pt	                        (rev 0)
+++ z3c.blobfile/trunk/src/z3c/blobfile/browser/preview.pt	2007-11-14 13:48:15 UTC (rev 81833)
@@ -0,0 +1,9 @@
+<html metal:use-macro="context/@@standard_macros/view">
+<body>
+<div metal:fill-slot="body">
+
+  <iframe src="." height="500" width="100%"></iframe>
+
+</div>
+</body>
+</html>

Modified: z3c.blobfile/trunk/src/z3c/blobfile/configure.zcml
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/configure.zcml	2007-11-14 13:20:36 UTC (rev 81832)
+++ z3c.blobfile/trunk/src/z3c/blobfile/configure.zcml	2007-11-14 13:48:15 UTC (rev 81833)
@@ -43,7 +43,13 @@
         interface="zope.annotation.interfaces.IAttributeAnnotatable"
         />
   </class>
+  
+  <utility
+      component=".generations.BlobFileSchemaManager"
+      name="z3c.blobfile"
+      />
 
+
   <!-- `IStorage` utilities should be named with the dotted name
        referencing the implementation. 
   -->
@@ -102,8 +108,4 @@
       />
   -->
 
-  <!-- include browser package -->
-
-  <include package="zope.app.file.browser" />
-
 </configure>

Modified: z3c.blobfile/trunk/src/z3c/blobfile/generations/__init__.py
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/generations/__init__.py	2007-11-14 13:20:36 UTC (rev 81832)
+++ z3c.blobfile/trunk/src/z3c/blobfile/generations/__init__.py	2007-11-14 13:48:15 UTC (rev 81833)
@@ -4,7 +4,7 @@
 
 package_name = 'z3c.blobfile.generations'
 
-BebopPersonSchemaManager = SchemaManager(
+BlobFileSchemaManager = SchemaManager(
      minimum_generation=1,
      generation=2,
      package_name=package_name)

Modified: z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py	2007-11-14 13:20:36 UTC (rev 81832)
+++ z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py	2007-11-14 13:48:15 UTC (rev 81833)
@@ -39,5 +39,4 @@
 
     root = getRootFolder(context)
 
-    evolveCatalog(root)
-    evolvePerson(root)
+    evolveZopeAppFile(root)

Modified: z3c.blobfile/trunk/src/z3c/blobfile/overrides.zcml
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/overrides.zcml	2007-11-14 13:20:36 UTC (rev 81832)
+++ z3c.blobfile/trunk/src/z3c/blobfile/overrides.zcml	2007-11-14 13:48:15 UTC (rev 81833)
@@ -25,4 +25,9 @@
 
   </class>
 
+  <!-- include browser package -->
+
+  <include package="z3c.blobfile.browser" />
+
+
 </configure>



More information about the Checkins mailing list