def uriSplitZopeDebug(filename, filepath): # zopedebug://[host[:port]]/[path]/[meta type] # magically maps zopedebug urls to Boa zope uris segs = filepath.split('/') if len(segs) < 3: raise ExplorerNodes.TransportCategoryError('Zope debug path invalid', filepath) host, filepaths, meta = segs[0], segs[1:-1], segs[-1] try: host, port = host.split(':') except ValueError: port = 80 else: port = int(port) # try to find category that can open this url for cat in ExplorerNodes.all_transports.entries: if cat.itemProtocol == 'zope': itms = cat.openList() for itm in itms: props = itm.properties # @@@ Gogo. if socket.gethostbyname(props['host']) == socket.gethostbyname(host) and \ props['httpport'] == port: # @@@ original code follows: # if props['host'].lower() == host.lower() and \ # props['httpport'] == port: path = '/'.join(filepaths) name = itm.name or itm.treename return 'zope', '%s|%s' %(name, meta), path, \ 'zope://%s/<%s>/%s'%(name, meta, path) raise ExplorerNodes.TransportCategoryError(\ 'Could not map Zope debug path to defined Zope Category item', filepath)
class ZSQLNode(ZopeNode): Model = ZopeEditorModels.ZopeSQLMethodModel defaultViews = (ZopeViews.ZopeHTMLSourceView, ) additionalViews = (ZopeViews.ZopeSecurityView, ZopeViews.ZopeUndoView) def getParams(self, data): return data.split('<params>')[1].split('</params>')[0] def getBody(self, data): return data.split('</params>')[1].lstrip() def save(self, filename, data, mode='wb'): """ Saves contents of data to Zope """ props = self.getResource().zoa.props.SQLMethod() try: title = props['title'] connection_id = props['connection_id'] arguments = self.getParams(data) template = self.getBody(data) self.getResource().manage_edit(title, connection_id, arguments, template) except xmlrpclib.ProtocolError, error: # Getting a zero content warning is not an error if error.errcode != 204: raise ExplorerNodes.TransportSaveError(error, filename) except Exception, error: raise ExplorerNodes.TransportSaveError(error, filename)
def uriSplitZope(filename, filepath): # zope://[category]/<[meta type]>/[path] format segs = filepath.split('/') if len(segs) < 2: raise ExplorerNodes.TransportCategoryError('Category not found', filepath) category = segs[0] + '|' + segs[1][1:-1] return 'zope', category, '/'.join(segs[2:]), filename
def findZopeExplorerNode(catandmeta, respath, transports): category, metatype = catandmeta.split('|') for cat in transports.entries: if hasattr(cat, 'itemProtocol') and cat.itemProtocol == 'zope': itms = cat.openList() for itm in itms: if itm.name == category or itm.treename == category: return itm.getNodeFromPath('/' + respath, metatype) raise ExplorerNodes.TransportError( 'Zope transport could not be found: %s || %s' % (category, respath))
def buildExplorerNodes(self): transports = ExplorerNodes.RootNode('Transport', EditorHelper.imgFolder) transports.parent = transports transports.protocol = 'root' conf = Utils.createAndReadConfig('Explorer') transportsByProtocol = {} catnode = ExplorerNodes.BookmarksCatNode(None, conf, transports, transports) transports.entries.insert(0, catnode) transportsByProtocol['config.bookmark'] = catnode for protocol in ExplorerNodes.fileOpenDlgProtReg: if ExplorerNodes.isTransportAvailable(conf, 'explorer', protocol): Cat = ExplorerNodes.explorerNodeReg[\ ExplorerNodes.nodeRegByProt[protocol]]['category'] if Cat: catnode = Cat(None, conf, transports, None) transports.entries.append(catnode) transportsByProtocol[protocol] = catnode if ExplorerNodes.nodeRegByProt.has_key('sys.path'): syspathnode = ExplorerNodes.nodeRegByProt['sys.path'](None, transports, None) transports.entries.append(syspathnode) transportsByProtocol[syspathnode.protocol] = syspathnode oscwdnode = ExplorerNodes.nodeRegByProt['os.cwd'](None, transports, None) transports.entries.append(oscwdnode) transportsByProtocol[oscwdnode.protocol] = oscwdnode mrucatnode = ExplorerNodes.MRUCatNode(None, conf, transports, transports, None) transports.entries.insert(0, mrucatnode) transportsByProtocol[mrucatnode.protocol] = mrucatnode return transports, transportsByProtocol
def save(self, overwriteNewer=False): """ This is perhaps not the best style, but here all exceptions on saving are caught and transformed to TransportSaveErrors. To much maintenance for every Node type to add exceptions """ from ExternalLib.xmlrpclib import Fault try: EditorModels.BasePersistentModel.save(self, overwriteNewer) except Fault, err: from Explorers import ExplorerNodes raise ExplorerNodes.TransportSaveError( Utils.html2txt(err.faultString), self.transport.resourcepath)
def save(self, filename, data, mode='wb'): """ Saves contents of data to Zope """ props = self.getResource().zoa.props.SQLMethod() try: title = props['title'] connection_id = props['connection_id'] arguments = self.getParams(data) template = self.getBody(data) self.getResource().manage_edit(title, connection_id, arguments, template) except xmlrpclib.ProtocolError, error: # Getting a zero content warning is not an error if error.errcode != 204: raise ExplorerNodes.TransportSaveError(error, filename)
def buildExplorerNodes(self): transports = ExplorerNodes.RootNode('Transport', EditorHelper.imgFolder) transports.parent = transports transports.protocol = 'root' conf = Utils.createAndReadConfig('Explorer') transportsByProtocol = {} catnode = ExplorerNodes.BookmarksCatNode(None, conf, transports, transports) transports.entries.insert(0, catnode) transportsByProtocol['config.bookmark'] = catnode for protocol in ExplorerNodes.fileOpenDlgProtReg: if ExplorerNodes.isTransportAvailable(conf, 'explorer', protocol): Cat = ExplorerNodes.explorerNodeReg[\ ExplorerNodes.nodeRegByProt[protocol]]['category'] if Cat: catnode = Cat(None, conf, transports, None) transports.entries.append(catnode) transportsByProtocol[protocol] = catnode if ExplorerNodes.nodeRegByProt.has_key('sys.path'): syspathnode = ExplorerNodes.nodeRegByProt['sys.path']( None, transports, None) transports.entries.append(syspathnode) transportsByProtocol[syspathnode.protocol] = syspathnode oscwdnode = ExplorerNodes.nodeRegByProt['os.cwd'](None, transports, None) transports.entries.append(oscwdnode) transportsByProtocol[oscwdnode.protocol] = oscwdnode mrucatnode = ExplorerNodes.MRUCatNode(None, conf, transports, transports, None) transports.entries.insert(0, mrucatnode) transportsByProtocol[mrucatnode.protocol] = mrucatnode return transports, transportsByProtocol
def createCatCompanion(self, catNode): comp = ExplorerNodes.CategoryDictCompanion(catNode.treename, self) return comp
## ## for missing in missingEntries: ## lst.append(missing) ## ## self.entries = lst return self.entries def open(self, editor): return editor.openOrGotoModule(self.resourcepath) def openParent(self, editor): tree = editor.explorer.tree svnParentItemParent = tree.GetItemParent(tree.GetItemParent(tree.GetSelection())) svnChd = tree.getChildNamed(svnParentItemParent, '.svn') if svnChd.IsOk(): tree.SelectItem(svnChd) return True else: return False #--------------------------------------------------------------------------- # Register svn dirs as a subtype of file explorers from Explorers import FileExplorer FileExplorer.FileSysNode.subExplorerReg['folder'].append( (FSSVNFolderNode, isSVN, EditorHelper.imgCVSFolder) ) ExplorerNodes.register(FSSVNFolderNode, clipboard=None, confdef=('', ''), controller=SVNController)
EditorHelper.imgPathFolder, self, self.bookmarks) def refresh(self): self.entries = [] pythonDir = os.path.dirname(sys.executable) for pth in sys.path: pth = os.path.abspath(pth) shortPath = pth if pth: if pth[0:len(pythonDir)] == pythonDir: shortPath = pth[len(pythonDir):] if not shortPath: shortPath = '<Python root>' if (shortPath, pth) not in self.entries and os.path.isdir(pth): self.entries.append( (shortPath, pth) ) def openList(self): self.refresh() res = [] for short, entry in self.entries: res.append(self.createChildNode(short, entry)) return res if not hasattr(sys, 'frozen'): ExplorerNodes.register(SysPathNode, clipboard='file', controller='file', root=True) # Hook debugger attaching to Tools menu Plugins.registerTool( _('Attach to debugger'), ToolsOnAttachToDebugger, 'Images/Shared/Debugger.png')
def buildItems(self, items, propList): #print propList for name, value in propList: if not value: value = '' elif types.StringType is type(value[0]): value = value[0] items.append( (string.split(name, ':')[1], value) ) return items class RegCompanion(RegPropReaderMixin, ExplorerNodes.ExplorerCompanion): def __init__(self, name, regNode): ExplorerNodes.ExplorerCompanion.__init__(self, name) self.regNode = regNode def getPropertyItems(self): res = [] self.regNode.initHkey() for name, val, tpe in self.regNode.enumReg(_winreg.EnumValue, self.regNode.hkey): res.append( (name, val) ) return res def SetProp(self, name, value): raise 'Property editing not supported yet' #------------------------------------------------------------------------------- ExplorerNodes.register(RegItemNode, clipboard=RegExpClipboard, confdef=('explorer', 'reg'), controller=RegController, category=RegCatNode)
## ## self.entries = lst return self.entries def open(self, editor): return editor.openOrGotoModule(self.resourcepath) def openParent(self, editor): tree = editor.explorer.tree svnParentItemParent = tree.GetItemParent( tree.GetItemParent(tree.GetSelection())) svnChd = tree.getChildNamed(svnParentItemParent, '.svn') if svnChd.IsOk(): tree.SelectItem(svnChd) return True else: return False #--------------------------------------------------------------------------- # Register svn dirs as a subtype of file explorers from Explorers import FileExplorer FileExplorer.FileSysNode.subExplorerReg['folder'].append( (FSSVNFolderNode, isSVN, EditorHelper.imgCVSFolder)) ExplorerNodes.register(FSSVNFolderNode, clipboard=None, confdef=('', ''), controller=SVNController)
return itm.getNodeFromPath('/'+respath, metatype) raise ExplorerNodes.TransportError( 'Zope transport could not be found: %s || %s'%(category, respath)) #------------------------------------------------------------------------------- # maps meta types to ExplorerNodes zopeClassMap = { 'Folder': DirNode, 'Product Help': DirNode, 'Z Class': ZClassNode, 'User Folder': UserFolderNode, 'Control Panel': ControlNode, 'Z SQL Method': ZSQLNode, 'DTML Document': DTMLDocNode, 'DTML Method': DTMLMethodNode, 'Python Method': PythonNode, 'External Method': ExtPythonNode, 'Script (Python)': PythonScriptNode, 'Image': ZopeImageNode, 'File': ZopeNode, 'User': ZopeUserNode, 'Site Error Log': SiteErrorLogNode, 'Help Topic': HelpTopicNode, } ExplorerNodes.register(ZopeCatNode, controller=ZopeCatController) ExplorerNodes.register(ZopeItemNode, clipboard='global', confdef=('explorer', 'zope'), controller=ZopeController, category=ZopeCatNode) ExplorerNodes.uriSplitReg[('zope', 2)] = uriSplitZope ExplorerNodes.uriSplitReg[('zopedebug', 2)] = uriSplitZopeDebug ExplorerNodes.transportFindReg['zope'] = findZopeExplorerNode
self.treeList = getWxPyDemoTree() def isFolderish(self): return true def createChildNode(self, section, items): return wxPythonDemoSectionNode(section, items, self.clipboard, self.bookmarks) def openList(self): return [self.createChildNode(name, items) for name, items in self.treeList] #------------------------------------------------------------------------------- ExplorerNodes.register(wxPythonDemoDirNode, root=True) #------------------------------------------------------------------------------- import PaletteStore from Models import PythonEditorModels, PythonControllers class wxPythonDemoModuleModel(PythonEditorModels.ModuleModel): modelIdentifier = 'wxPythonDemoModule' defaultName = 'wxpythondemomodule' def getDefaultData(self): return '''import wx #-------------------------------------------------------------------------------
if newText != self.oldLabelVal:# and isinstance(self.list.node, ZopeItemNode): self.node.renameItem(self.oldLabelVal, newText) self.refreshCurrent() self.selectItemNamed(newText) self.EnsureVisible(self.selected) # return FileDlgFolderList if __name__ == '__main__': # simple testing harness app = wx.PySimpleApp() import PaletteMapping from Explorers import FTPExplorer, ZipExplorer conf = Utils.createAndReadConfig('Explorer') transports = ExplorerNodes.ContainerNode('Transport', EditorHelper.imgFolder) ExplorerNodes.all_transports = transports transports.entries.append(FileExplorer.FileSysCatNode(None, conf, None, None)) if conf.has_option('explorer', 'ftp'): transports.entries.append(FTPExplorer.FTPCatNode(None, conf, None, None)) wxBoaFileDialog.modImages = wx.ImageList(16, 16) dlg = wxBoaFileDialog(None, defaultDir='.', wildcard='BoaFiles') try: if dlg.ShowModal() == wx.ID_OK: wx.MessageBox(dlg.GetPath()) finally: dlg.Destroy() #Preferences.cleanup()
elif types.StringType is type(value[0]): value = value[0] items.append((string.split(name, ':')[1], value)) return items class RegCompanion(RegPropReaderMixin, ExplorerNodes.ExplorerCompanion): def __init__(self, name, regNode): ExplorerNodes.ExplorerCompanion.__init__(self, name) self.regNode = regNode def getPropertyItems(self): res = [] self.regNode.initHkey() for name, val, tpe in self.regNode.enumReg(_winreg.EnumValue, self.regNode.hkey): res.append((name, val)) return res def SetProp(self, name, value): raise 'Property editing not supported yet' #------------------------------------------------------------------------------- ExplorerNodes.register(RegItemNode, clipboard=RegExpClipboard, confdef=('explorer', 'reg'), controller=RegController, category=RegCatNode)
#------------------------------------------------------------------------------- # maps meta types to ExplorerNodes zopeClassMap = { 'Folder': DirNode, 'Product Help': DirNode, 'Z Class': ZClassNode, 'User Folder': UserFolderNode, 'Control Panel': ControlNode, 'Z SQL Method': ZSQLNode, 'DTML Document': DTMLDocNode, 'DTML Method': DTMLMethodNode, 'Python Method': PythonNode, 'External Method': ExtPythonNode, 'Script (Python)': PythonScriptNode, 'Image': ZopeImageNode, 'File': ZopeNode, 'User': ZopeUserNode, 'Site Error Log': SiteErrorLogNode, 'Help Topic': HelpTopicNode, } ExplorerNodes.register(ZopeCatNode, controller=ZopeCatController) ExplorerNodes.register(ZopeItemNode, clipboard='global', confdef=('explorer', 'zope'), controller=ZopeController, category=ZopeCatNode) ExplorerNodes.uriSplitReg[('zope', 2)] = uriSplitZope ExplorerNodes.uriSplitReg[('zopedebug', 2)] = uriSplitZopeDebug ExplorerNodes.transportFindReg['zope'] = findZopeExplorerNode
def isFolderish(self): return true def createChildNode(self, section, items): return wxPythonDemoSectionNode(section, items, self.clipboard, self.bookmarks) def openList(self): return [ self.createChildNode(name, items) for name, items in self.treeList ] #------------------------------------------------------------------------------- ExplorerNodes.register(wxPythonDemoDirNode, root=True) #------------------------------------------------------------------------------- import PaletteStore from Models import PythonEditorModels, PythonControllers class wxPythonDemoModuleModel(PythonEditorModels.ModuleModel): modelIdentifier = 'wxPythonDemoModule' defaultName = 'wxpythondemomodule' def getDefaultData(self): return '''import wx #-------------------------------------------------------------------------------