[Zope] FTP automangling file extension: semi-working proof-of-concept
Joel Burton
jburton@scw.org
Fri, 27 Jul 2001 23:11:54 -0400 (EDT)
Yesterday, I suggested that it might be helpful for FTP & WebDAV to return
a pseudo-extension for the type of file being read so that non-Zope-saavy
programs could more effectively work with Zope files. (Some programs,
notably Dreamweaver and GoLive, refuse to work w/files w/o extensions.)
When the file is later uploaded via FTP/WebDAV, the extension would be
removed.
I've tinkered ~30min with the source code and made two very trivial
changes to produce a proof-of-concept. This does the following:
1) in FTP, all files are shown with ".foo" extension
2) when a file is rec'd, the ".foo" is stripped back off
It's __far__ from a real implementation: the extensions would be sensitive
to the type of file being edited; the ".foo" stripping code should check
to see if this is a WebDAV/FTP transfer (right now it *always* strips the
.foo off!), etc. However, even with this trivial patch, it works well
enough to:
1) teach Dreamweaver that .foo files should be edited w/dreamweaver
2) through Zope, create a "test" DTML Document
3) in Dreamweaver+FTP, this test doc shows up as test.foo
4) this can be edited in Dreamweaver and saved
5) the changes appear as "test" in Zope.
What I'd Like:
Is this a fair idea? I doubt the fine folks at ZopeCorp will rush my
three-line patch into the core ;-), but I'd would like to get the sense if
I'm heading in a sane direction.
Obviously, you should apply this patch to a production server:
(patched to the Zope 2.4 source)
[joel@eos joel]$ diff -Naur old new
diff -Naur old/lib/python/OFS/ObjectManager.py
new/lib/python/OFS/ObjectManager.py
--- old/lib/python/OFS/ObjectManager.py Thu Jul 5 15:09:08 2001
+++ new/lib/python/OFS/ObjectManager.py Sat Jul 28 02:38:43 2001
@@ -660,7 +660,7 @@
try: stat=marshal.loads(v.manage_FTPstat(REQUEST))
except: stat=None
if stat is not None:
- out=out+((k,stat),)
+ out=out+((k+'.foo',stat),) # WJB
return marshal.dumps(out)
def manage_FTPstat(self,REQUEST):
@@ -689,6 +689,10 @@
def __getitem__(self, key):
+
+ if key[-4:]=='.foo': # WJB
+ key=key[:-4]
+
v=self._getOb(key, None)
if v is not None: return v
if hasattr(self, 'REQUEST'):
--
Joel Burton <jburton@scw.org>
Director of Information Systems, Support Center of Washington