Robin Becker <[EMAIL PROTECTED]> wrote: > > M. Adam Kendall <[EMAIL PROTECTED]> writes > >In the past few days I have been working on a patch that will > >let you edit ZClasses via FTP without the need for typing in > >actual pathnames to get to the methods (mainly so I can edit > >ZClasses with HTML-Kit). Strangely enough, even with the > >modifications, I see this same thing. > > > >I've included this patch in case anyone wants to play around > >with it. It's not the greatest, and definitely needs to be > >modified (some of the security mechanisms are bound to be > >broken). But it is a start anyway. ;) > > Does this let you write the methods back? I was just able to change a DTML method in a ZClass (after patching a single indentation error). Adam, you rock! I am attaching my emended patch. Tres. -- =============================================================== Tres Seaver [EMAIL PROTECTED] Digital Creations "Zope Dealers" http://www.zope.org
Index: Method.py =================================================================== RCS file: /cvs-repository/Zope2/lib/python/ZClasses/Method.py,v retrieving revision 1.18 diff -u -r1.18 Method.py --- Method.py 2000/08/14 14:34:23 1.18 +++ Method.py 2000/12/08 03:43:29 @@ -92,6 +92,8 @@ import ZClassOwner from AccessControl.PermissionMapping import aqwrap, PermissionMapper +import marshal + _marker=[] class ZClassMethodsSheet( OFS.PropertySheets.PropertySheet, @@ -104,6 +106,13 @@ icon='p_/Methods_icon' def tpURL(self): return 'propertysheets/methods' + + def manage_FTPstat(self,REQUEST): + "Psuedo stat used for FTP listings" + mode=0040000|0770 + mtime=self.bobobase_modification_time().timeTime() + owner=group='Zope' + return marshal.dumps((mode,0,0,1,owner,group,0,mtime,mtime,mtime)) ###################################################################### # Hijinks to let us create factories and classes within classes. Index: ZClass.py =================================================================== RCS file: /cvs-repository/Zope2/lib/python/ZClasses/ZClass.py,v retrieving revision 1.50 diff -u -r1.50 ZClass.py --- ZClass.py 2000/11/01 22:59:34 1.50 +++ ZClass.py 2000/12/08 03:43:31 @@ -91,8 +91,9 @@ from ExtensionClass import Base from App.FactoryDispatcher import FactoryDispatcher from ComputedAttribute import ComputedAttribute -import OFS.PropertySheets +import marshal + if not hasattr(Products, 'meta_types'): Products.meta_types=() @@ -281,6 +282,28 @@ ('', '__call__', 'index_html', 'createInObjectManager')), ) + def manage_FTPlist(self,REQUEST): + "Directory listing for FTP" + out=() + files=self.__dict__.items() + if not (hasattr(self,'isTopLevelPrincipiaApplicationObject') and + self.isTopLevelPrincipiaApplicationObject): + files.insert(0,('..',self.aq_parent)) + for k,v in files: + try: stat=marshal.loads(v.manage_FTPstat(REQUEST)) + except: + stat=None + if stat is not None: + out=out+((k,stat),) + return marshal.dumps(out) + + def manage_FTPstat(self,REQUEST): + "Psuedo stat used for FTP listings" + mode=0040000|0770 + mtime=self.bobobase_modification_time().timeTime() + owner=group='Zope' + return marshal.dumps((mode,0,0,1,owner,group,0,mtime,mtime,mtime)) + def __init__(self, id, title, bases, zope_object=1): """Build a Zope class @@ -640,6 +663,28 @@ views = Basic.ZClassViewsSheet('views') basic = Basic.ZClassBasicSheet('basic') permissions = Basic.ZClassPermissionsSheet('permissions') + + def manage_FTPlist(self,REQUEST): + "Directory listing for FTP" + out=() + files=self.__dict__.items() + if not (hasattr(self,'isTopLevelPrincipiaApplicationObject') and + self.isTopLevelPrincipiaApplicationObject): + files.insert(0,('..',self.aq_parent)) + for k,v in files: + try: stat=marshal.loads(v.manage_FTPstat(REQUEST)) + except: + stat=None + if stat is not None: + out=out+((k,stat),) + return marshal.dumps(out) + + def manage_FTPstat(self,REQUEST): + "Psuedo stat used for FTP listings" + mode=0040000|0770 + mtime=self.bobobase_modification_time().timeTime() + owner=group='Zope' + return marshal.dumps((mode,0,0,1,owner,group,0,mtime,mtime,mtime)) def __init__(self): self.methods=Method.ZClassMethodsSheet('methods')