⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srvdir.py

📁 xen 3.2.2 源码
💻 PY
字号:
#============================================================================# This library is free software; you can redistribute it and/or# modify it under the terms of version 2.1 of the GNU Lesser General Public# License as published by the Free Software Foundation.## This library is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU# Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public# License along with this library; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#============================================================================# Copyright (C) 2004, 2005 Mike Wray <mike.wray@hp.com>#============================================================================import typesfrom xen.xend import sxpfrom xen.xend import PrettyPrintfrom xen.xend.Args import ArgErrorfrom xen.xend.XendError import XendError#from xen.xend.XendLogging import logimport resourceimport httpfrom xen.web.SrvBase import SrvBaseclass SrvConstructor:    """Delayed constructor for sub-servers.    Does not import the sub-server class or create the object until needed.    """    def __init__(self, klass):        """Create a constructor. It is assumed that the class        should be imported as 'from xen.xend.server.klass import klass'.        klass	name of its class        """        self.klass = klass        self.obj = None    def getobj(self):        """Get the sub-server object, importing its class and instantiating it if        necessary.        """        if not self.obj:            exec 'from xen.xend.server.%s import %s' % (self.klass, self.klass)            klassobj = eval(self.klass)            self.obj = klassobj()        return self.objclass SrvDir(SrvBase):    """Base class for directory servlets.    """    isLeaf = False        def __init__(self):        SrvBase.__init__(self)        self.table = {}        self.order = []    def noChild(self, msg):        return resource.ErrorPage(http.NOT_FOUND, msg=msg)    def getChild(self, x, req):        if x == '': return self        try:            val = self.get(x)        except XendError, ex:            return self.noChild(str(ex))        if val is None:            return self.noChild('Not found: ' + str(x))        else:            return val    def get(self, x):        val = self.table.get(x)        if isinstance(val, SrvConstructor):            val = val.getobj()        return val    def add(self, x, v=None):        if v is None:            v = 'SrvDir'        if isinstance(v, types.StringType):            v = SrvConstructor(v)        self.table[x] = v        self.order.append(x)        return v    def render_GET(self, req):        if self.use_sxp(req):            req.setHeader("Content-type", sxp.mime_type)            self.ls(req, 1)        else:            req.write('<html><head></head><body>')            self.print_path(req)            self.ls(req)            self.form(req)            req.write('</body></html>')        return ''                def ls(self, req, use_sxp=0):        url = req.prePathURL()        if not url.endswith('/'):            url += '/'        if use_sxp:           req.write('(ls ')           for k in self.order:               req.write(' ' + k)           req.write(')')        else:            req.write('<ul>')            for k in self.order:                v = self.get(k)                req.write('<li><a href="%s%s">%s</a></li>'                          % (url, k, k))            req.write('</ul>')    def form(self, req):        pass

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -