import wx import Preferences, Utils, Plugins if not Plugins.transportInstalled('ZopeLib.ZopeExplorer'): raise Plugins.SkipPlugin, 'Zope support is not enabled' from ZopeLib.ZopeCompanions import ZopeCompanion, DBAdapterZC from Models import EditorHelper, Controllers, XMLSupport, HTMLSupport from ZopeLib import ZopeEditorModels class PythonMethodZC(ZopeCompanion): def create(self): mime, res = self.call(self.objPath, '/manage_addProduct/PythonMethod/manage_addPythonMethod', id=self.name, title='', params='', body='pass') ZopeEditorModels.addZOAImage('Python Method', 'Images/ZOA/pymethod.png') class ZopePythonMethodModel(ZopeEditorModels.ZopePythonSourceModel): modelIdentifier = 'ZopePythonMethod' defaultName = 'zopepythonmethod' bitmap = 'Module.png' imgIdx = ZopeEditorModels.ZOAIcons['Python Method'] Controllers.modelControllerReg[ZopePythonMethodModel] = ZopeEditorModels.ZopeController class TransparentFolderZC(ZopeCompanion): def create(self): mime, res = self.call(self.objPath, 'manage_addProduct/TransparentFolder/manage_addTransparentFolder', id=self.name, title='') class LocalFSZC(ZopeCompanion): def create(self): mime, res = self.call(self.objPath, 'manage_addProduct/LocalFS/manage_addLocalFS', id=self.name, title='', basepath='') from ZopeLib.ZopeExplorer import DirNode, ZopeConnection, zopeClassMap from Views import PySourceView, SourceViews class LFSNode(DirNode): pass ZopeEditorModels.addZOAImage('Local File System', 'Images/ZOA/fs.png') class LFNode(LFSNode): Model = ZopeEditorModels.ZopeEditorModel additionalViews = () supportedViews = {'Module': (PySourceView.PythonSourceView,), 'HTML': (HTMLSupport.HTMLSourceView,), 'XML': (XMLSupport.XMLSourceView,), } def __init__(self, name, resourcepath, clipboard, imgIdx, parent, xmlrpcsvr, root, properties, metatype): Mod = Controllers.identifyFile( os.path.basename(resourcepath), localfs=False)[0] imgIdx = Mod.imgIdx self.defaultViews = self.supportedViews.get(Mod.modelIdentifier, (SourceViews.TextView,)) LFSNode.__init__(self, name, resourcepath, clipboard, imgIdx, parent, xmlrpcsvr, root, properties, metatype) def load(self, mode='rb'): mode='rb' # XXX Can't seem to open with xml-rpc (use DAV for now) props = self.properties from ExternalLib.WebDAV.client import Resource r = Resource(('http://%(host)s:%(httpport)s/'+self.resourcepath) % props, props['username'], props['passwd']) return r.get().body #return self.getResource()() def save(self, filename, data, mode='wb'): mode='wb' props = self.properties zc = ZopeConnection() zc.connect(props['host'], props['httpport'], props['username'], props['passwd']) from StringIO import StringIO file = StringIO(data) dirname, file.name = os.path.split(filename) zc.callkw(dirname, 'manage_upload', {'file': file, 'Content-Type': 'multipart/form-data'} ) def isFolderish(self): return False class LFDirNode(LFSNode): def __init__(self, name, resourcepath, clipboard, imgIdx, parent, xmlrpcsvr, root, properties, metatype): LFSNode.__init__(self, name, resourcepath, clipboard, EditorHelper.imgFolder, parent, xmlrpcsvr, root, properties, metatype) zopeClassMap.update({ 'Local File System': LFSNode, 'LocalFS::directory': LFDirNode, 'LocalFS::file': LFNode}) class ZODBCDAZC(DBAdapterZC): def create(self): dlg = wx.TextEntryDialog(None, 'Enter the Connection String', 'Z ODBC DB Adapter', '') try: if dlg.ShowModal() == wx.ID_OK: connId = dlg.GetValue() mime, res = self.call(self.objPath, 'manage_addZODBCConnection', id=self.name, title='', connection=connId, check=1) finally: dlg.Destroy() ZopeEditorModels.addZOAImage('Z ODBC Database Connection', 'Images/ZOA/db.png') import PaletteStore PaletteStore.paletteLists['Zope'].extend(['Python Method', 'LocalFS', 'Transparent Folder', 'ZODBCDA'] ) PaletteStore.compInfo.update({'Python Method': ['PythonMethod', PythonMethodZC], 'LocalFS': ['LocalFS', LocalFSZC], 'Transparent Folder': ['TransparentFolder', TransparentFolderZC], 'ZODBCDA': ['ZODBCDA', ZODBCDAZC], })