Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: third_party/twisted_8_1/twisted/web/woven/view.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/web/woven/view.py
diff --git a/third_party/twisted_8_1/twisted/web/woven/view.py b/third_party/twisted_8_1/twisted/web/woven/view.py
deleted file mode 100644
index d792fc7d8f2687c25cb8e75f8630789a53a1a8ef..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/web/woven/view.py
+++ /dev/null
@@ -1,687 +0,0 @@
-# -*- test-case-name: twisted.web.test.test_woven -*-
-#
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-
-from __future__ import nested_scopes
-
-__version__ = "$Revision: 1.91 $"[11:-2]
-
-# Sibling imports
-import interfaces
-import utils
-import controller
-from utils import doSendPage
-import model
-
-# Twisted imports
-from twisted.internet import defer
-from twisted.python import components
-from twisted.python import log
-from twisted.web import resource, microdom, html, error
-from twisted.web.server import NOT_DONE_YET
-from zope.interface import implements
-
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-import os
-import sys
-import stat
-import warnings
-import types
-
-
-def peek(stack):
- if stack is None:
- return None
- it = None
- while it is None and stack is not None:
- it, stack = stack
- return it
-
-
-def poke(stack, new):
- it, stack = stack
- return (new, stack)
-
-
-def filterStack(stack):
- returnVal = []
- while stack is not None:
- it, stack = stack
- if it is not None:
- returnVal.append(it)
- return returnVal
-
-
-def viewFactory(viewClass):
- return lambda request, node, model: viewClass(model)
-
-def viewMethod(viewClass):
- return lambda self, request, node, model: viewClass(model)
-
-
-templateCache = {}
-
-
-class View:
- implements(resource.IResource, interfaces.IView)
- # wvfactory_xxx method signature: request, node, model; returns Widget
- # wvupdate_xxx method signature: request, widget, data; mutates widget
- # based on data (not necessarily an IModel;
- # has been unwrapped at this point)
-
- wantsAllNotifications = 0
- templateFile = ''
- templateDirectory = ''
- template = ''
-
- isLeaf = 1
-
- def getChild(self, path, request):
- return error.NoResource("No such child resource.")
-
- def getChildWithDefault(self, path, request):
- return self.getChild(path, request)
-
- viewLibraries = []
- setupStacks = 1
- livePage = 0
- doneCallback = None
- templateNode = None
- def __init__(self, m, templateFile=None, templateDirectory=None, template=None, controller=None, doneCallback=None, modelStack=None, viewStack=None, controllerStack=None):
- """
- A view must be told what its model is, and may be told what its
- controller is, but can also look up its controller if none specified.
- """
- if not interfaces.IModel.providedBy(m):
- m = model.adaptToIModel(m, None, None)
- self.model = self.mainModel = m
- # It's the responsibility of the calling code to make sure
- # setController is called on this view before it's rendered.
- self.controller = None
- self.subviews = {}
- if self.setupStacks:
- self.modelStack = None
- self.viewStack = None
- self.controllerStack = None
- if doneCallback is None and self.doneCallback is None:
- self.doneCallback = doSendPage
- else:
- print "DoneCallback", doneCallback
- self.doneCallback = doneCallback
- if template is not None:
- self.template = template
- if templateFile is not None:
- self.templateFile = templateFile
- if templateDirectory is not None:
- self.templateDirectory = templateDirectory
-
- self.outstandingCallbacks = 0
- self.outstandingNodes = []
- self.failed = 0
- self.setupMethods = []
-
- def setupAllStacks(self):
- self.modelStack = (self.model, None)
- self.controllerStack = (self.controller, (input, None))
- self.setupViewStack()
-
- def setUp(self, request, d):
- pass
-
- def setupViewStack(self):
- self.viewStack = None
- if widgets not in self.viewLibraries:
- self.viewLibraries.append(widgets)
- for library in self.viewLibraries:
- if not hasattr(library, 'getSubview'):
- library.getSubview = utils.createGetFunction(library)
- self.viewStack = (library, self.viewStack)
- self.viewStack = (self, self.viewStack)
-
- def importViewLibrary(self, namespace):
- self.viewLibraries.append(namespace)
- return self
-
- def render(self, request, doneCallback=None):
- if not getattr(request, 'currentId', 0):
- request.currentId = 0
- request.currentPage = self
- if self.controller is None:
- self.controller = controller.Controller(self.model)
- if doneCallback is not None:
- self.doneCallback = doneCallback
- else:
- self.doneCallback = doSendPage
- self.setupAllStacks()
- template = self.getTemplate(request)
- if template:
- self.d = microdom.parseString(template, caseInsensitive=0, preserveCase=0)
- else:
- if not self.templateFile:
- raise AttributeError, "%s does not define self.templateFile to operate on" % self.__class__
- self.d = self.lookupTemplate(request)
- request.d = self.d
- self.handleDocument(request, self.d)
- return NOT_DONE_YET
-
- def getTemplate(self, request):
- """
- Override this if you want to have your subclass look up its template
- using a different method.
- """
- return self.template
-
- def lookupTemplate(self, request):
- """
- Use acquisition to look up the template named by self.templateFile,
- located anywhere above this object in the heirarchy, and use it
- as the template. The first time the template is used it is cached
- for speed.
- """
- if self.template:
- return microdom.parseString(self.template, caseInsensitive=0, preserveCase=0)
- if not self.templateDirectory:
- mod = sys.modules[self.__module__]
- if hasattr(mod, '__file__'):
- self.templateDirectory = os.path.split(mod.__file__)[0]
- # First see if templateDirectory + templateFile is a file
- templatePath = os.path.join(self.templateDirectory, self.templateFile)
- if not os.path.exists(templatePath):
- raise RuntimeError, "The template %r was not found." % templatePath
- # Check to see if there is an already parsed copy of it
- mtime = os.path.getmtime(templatePath)
- cachedTemplate = templateCache.get(templatePath, None)
- compiledTemplate = None
-
- if cachedTemplate is not None:
- if cachedTemplate[0] == mtime:
- compiledTemplate = templateCache[templatePath][1].cloneNode(deep=1)
-
- if compiledTemplate is None:
- compiledTemplate = microdom.parse(templatePath, caseInsensitive=0, preserveCase=0)
- templateCache[templatePath] = (mtime, compiledTemplate.cloneNode(deep=1))
- return compiledTemplate
-
- def handleDocument(self, request, document):
- """Handle the root node, and send the page if there are no
- outstanding callbacks when it returns.
- """
- try:
- request.d = document
- self.setUp(request, document)
- # Don't let outstandingCallbacks get to 0 until the
- # entire tree has been recursed
- # If you don't do this, and any callback has already
- # completed by the time the dispatchResultCallback
- # is added in dispachResult, then sendPage will be
- # called prematurely within dispatchResultCallback
- # resulting in much gnashing of teeth.
- self.outstandingNodes = document.childNodes[:] + [1]
- self.outstandingNodes.reverse()
-
- self.outstandingCallbacks += 1
- self.handleOutstanding(request)
- self.outstandingCallbacks -= 1
- if not self.outstandingCallbacks:
- return self.sendPage(request)
- except:
- self.renderFailure(None, request)
-
- def handleOutstanding(self, request):
- while self.outstandingNodes:
- node = self.outstandingNodes.pop()
- if node is 1:
- self.modelStack = self.modelStack[1]
- self.viewStack = self.viewStack[1]
- if self.controllerStack is not None:
- controller, self.controllerStack = self.controllerStack
- if controller is not None:
- controller.exit(request)
- attrs = getattr(node, 'attributes', None)
- if (attrs is not None and
- (attrs.get('model') or attrs.get('view') or attrs.get('controller'))):
- self.outstandingNodes.append(1)
- self.handleNode(request, node)
- else:
- if attrs is not None and (attrs.get('view') or attrs.get('controller')):
- self.outstandingNodes.append(node)
- if hasattr(node, 'childNodes') and node.childNodes:
- self.recurseChildren(request, node)
-
- def recurseChildren(self, request, node):
- """If this node has children, handle them.
- """
- new = node.childNodes[:]
- new.reverse()
- self.outstandingNodes.extend(new)
-
- def dispatchResult(self, request, node, result):
- """Check a given result from handling a node and look up a NodeMutator
- adapter which will convert the result into a node and insert it
- into the DOM tree. Return the new node.
- """
- if not isinstance(result, defer.Deferred):
- if node.parentNode is not None:
- node.parentNode.replaceChild(result, node)
- else:
- raise RuntimeError, "We're dying here, please report this immediately"
- else:
- self.outstandingCallbacks += 1
- result.addCallback(self.dispatchResultCallback, request, node)
- result.addErrback(self.renderFailure, request)
- # Got to wait until the callback comes in
- return result
-
- def modelChanged(self, changed):
- """Rerender this view, because our model has changed.
- """
- # arg. this needs to go away.
- request = changed.get('request', None)
- oldNode = self.node
- #import pdb; pdb.set_trace()
- newNode = self.generate(request, oldNode)
- returnNode = self.dispatchResult(request, oldNode, newNode)
- self.handleNewNode(request, returnNode)
- self.handleOutstanding(request)
- self.controller.domChanged(request, self, returnNode)
-
- def generate(self, request, node):
- """Allow a view to be used like a widget. Will look up the template
- file and return it in place of the incoming node.
- """
- newNode = self.lookupTemplate(request).childNodes[0]
- newNode.setAttribute('id', 'woven_id_%s' % id(self))
- self.node = newNode
- return newNode
-
- def setController(self, controller):
- self.controller = controller
- self.controllerStack = (controller, self.controllerStack)
-
- def setNode(self, node):
- if self.templateNode == None:
- self.templateNode = node
- self.node = node
-
- def setSubmodel(self, name):
- self.submodel = name
-
- def getNodeModel(self, request, node, submodel):
- """
- Get the model object associated with this node. If this node has a
- model= attribute, call getSubmodel on the current model object.
- If not, return the top of the model stack.
- """
- parent = None
- if submodel:
- if submodel == '.':
- m = peek(self.modelStack)
- else:
- modelStack = self.modelStack
- while modelStack is not None:
- parent, modelStack = modelStack
- if parent is None:
- continue
- m = parent.lookupSubmodel(request, submodel)
- if m is not None:
- #print "model", m
- break
- else:
- raise Exception("Node had a model=%s "
- "attribute, but the submodel was not "
- "found in %s." % (submodel,
- filterStack(self.modelStack)))
- else:
- m = None
- self.modelStack = (m, self.modelStack)
- if m is not None:
-# print "M NAME", m.name
-# if parent is not m:
-# m.parent = parent
-# if not getattr(m, 'name', None):
-# m.name = submodel
- return m
- #print `submodel`, self.getTopOfModelStack()
- if submodel:
- return peek(self.modelStack)
- return None
-
- def getNodeController(self, request, node, submodel, model):
- """
- Get a controller object to handle this node. If the node has no
- controller= attribute, first check to see if there is an IController
- adapter for our model.
- """
- controllerName = node.attributes.get('controller')
- controller = None
-
- if model is None:
- model = peek(self.modelStack)
-
- # Look up a controller factory.
- if controllerName:
- #if not node.hasAttribute('name'):
- # warnings.warn("POTENTIAL ERROR: %s had a controller, but not a "
- # "'name' attribute." % node)
- controllerStack = self.controllerStack
- while controllerStack is not None:
- namespace, controllerStack = controllerStack
- if namespace is None:
- continue
- controller = namespace.getSubcontroller(request, node, model, controllerName)
- if controller is not None:
- break
- else:
- raise NotImplementedError("You specified controller name %s on "
- "a node, but no wcfactory_%s method "
- "was found in %s." % (controllerName,
- controllerName,
- filterStack(self.controllerStack)
- ))
- elif node.attributes.get("model"):
- # If no "controller" attribute was specified on the node, see if
- # there is a IController adapter registerred for the model.
- controller = interfaces.IController(
- model,
- None)
-
- return controller
-
-
- def getSubview(self, request, node, model, viewName):
- """Get a sub-view from me.
-
- @returns: L{widgets.Widget}
- """
- view = None
- vm = getattr(self, 'wvfactory_' + viewName, None)
- if vm is None:
- vm = getattr(self, 'factory_' + viewName, None)
- if vm is not None:
- warnings.warn("factory_ methods are deprecated; please use "
- "wvfactory_ instead", DeprecationWarning)
- if vm:
- if vm.func_code.co_argcount == 3 and not type(vm) == types.LambdaType:
- warnings.warn("wvfactory_ methods take (request, node, "
- "model) instead of (request, node) now. \n"
- "Please instantiate your widgets with a "
- "reference to model instead of self.model",
- DeprecationWarning)
- self.model = model
- view = vm(request, node)
- self.model = self.mainModel
- else:
- view = vm(request, node, model)
-
- setupMethod = getattr(self, 'wvupdate_' + viewName, None)
- if setupMethod:
- if view is None:
- view = widgets.Widget(model)
- view.setupMethods.append(setupMethod)
- return view
-
-
- def getNodeView(self, request, node, submodel, model):
- view = None
- viewName = node.attributes.get('view')
-
- if model is None:
- model = peek(self.modelStack)
-
- # Look up a view factory.
- if viewName:
- viewStack = self.viewStack
- while viewStack is not None:
- namespace, viewStack = viewStack
- if namespace is None:
- continue
- try:
- view = namespace.getSubview(request, node, model, viewName)
- except AttributeError:
- # Was that from something in the viewStack that didn't
- # have a getSubview?
- if not hasattr(namespace, "getSubview"):
- log.msg("Warning: There is no getSubview on %r" %
- (namespace,))
- continue
- else:
- # No, something else is really broken.
- raise
- if view is not None:
- break
- else:
- raise NotImplementedError(
- "You specified view name %s on a node %s, but no "
- "wvfactory_%s method was found in %s. (Or maybe they were "
- "found but they returned None.)" % (
- viewName, node, viewName,
- filterStack(self.viewStack)))
- elif node.attributes.get("model"):
- # If no "view" attribute was specified on the node, see if there
- # is a IView adapter registerred for the model.
- # First, see if the model is Componentized.
- if isinstance(model, components.Componentized):
- view = model.getAdapter(interfaces.IView)
- if not view and hasattr(model, '__class__'):
- view = interfaces.IView(model, None)
-
- return view
-
- def handleNode(self, request, node):
- submodelName = node.attributes.get('model')
- if submodelName is None:
- submodelName = ""
- model = self.getNodeModel(request, node, submodelName)
- view = self.getNodeView(request, node, submodelName, model)
- controller = self.getNodeController(request, node, submodelName, model)
- if view or controller:
- if model is None:
- model = peek(self.modelStack)
- if not view or not isinstance(view, View):
- view = widgets.DefaultWidget(model)
-
- if not controller:
- controller = input.DefaultHandler(model)
-
- prevView, stack = self.viewStack
- while isinstance(prevView, widgets.DefaultWidget) and stack is not None:
- prevView, stack = stack
- if prevView is None:
- prevMod = None
- else:
- prevMod = prevView.model
- if model is not prevMod and not isinstance(view, widgets.DefaultWidget):
- model.addView(view)
- submodelList = [x.name for x in filterStack(self.modelStack) if x.name]
- submodelList.reverse()
- submodelName = '/'.join(submodelList)
- if not getattr(view, 'submodel', None):
- view.submodel = submodelName
-
- theId = node.attributes.get("id")
- if self.livePage and not theId:
- theId = "woven_id_%d" % id(view)
- view.setupMethods.append(utils.createSetIdFunction(theId))
- view.outgoingId = theId
- #print "SET AN ID", theId
- self.subviews[theId] = view
- view.parent = peek(self.viewStack)
- view.parent.subviews[theId] = view
- # If a Widget was constructed directly with a model that so far
- # is not in modelspace, we should put it on the stack so other
- # Widgets below this one can find it.
- if view.model is not peek(self.modelStack):
- self.modelStack = poke(self.modelStack, view.model)
-
- cParent = peek(self.controllerStack)
- if controller._parent is None or cParent != controller:
- controller._parent = cParent
-
- self.controllerStack = (controller, self.controllerStack)
- self.viewStack = (view, self.viewStack)
-
- view.viewStack = self.viewStack
- view.controllerStack = self.controllerStack
- view.modelStack = self.modelStack
-
- view.setController(controller)
- view.setNode(node)
-
- if not getattr(controller, 'submodel', None):
- controller.setSubmodel(submodelName)
-
- controller.setView(view)
- controller.setNode(node)
-
- controllerResult = controller.handle(request)
- if controllerResult is not None:
- ## It's a deferred
- controller
- self.outstandingCallbacks += 1
- controllerResult.addCallback(
- self.handleControllerResults,
- request,
- node,
- controller,
- view)
- controllerResult.addErrback(self.renderFailure, request)
- else:
- viewResult = view.generate(request, node)
- returnNode = self.dispatchResult(request, node, viewResult)
- self.handleNewNode(request, returnNode)
- else:
- self.controllerStack = (controller, self.controllerStack)
- self.viewStack = (view, self.viewStack)
-
- def handleControllerResults(self,
- controllerResult, request, node, controller, view):
- """Handle a deferred from a controller.
- """
- self.outstandingCallbacks -= 1
- if isinstance(controllerResult, defer.Deferred):
- self.outstandingCallbacks += 1
- controllerResult.addCallback(
- self.handleControllerResults,
- request,
- node,
- controller,
- view)
- controllerResult.addErrback(self.renderFailure, request)
- else:
- viewResult = view.generate(request, node)
- returnNode = self.dispatchResult(request, node, viewResult)
- self.handleNewNode(request, returnNode)
- return controllerResult
-
- def handleNewNode(self, request, returnNode):
- if not isinstance(returnNode, defer.Deferred):
- self.recurseChildren(request, returnNode)
- else:
- # TODO: Need to handle deferreds here?
- pass
-
- def sendPage(self, request):
- """
- Check to see if handlers recorded any errors before sending the page
- """
- self.doneCallback(self, self.d, request)
-
- def setSubviewFactory(self, name, factory, setup=None, *args, **kwargs):
- setattr(self, "wvfactory_" + name, lambda request, node, m:
- factory(m, *args, **kwargs))
- if setup:
- setattr(self, "wvupdate_" + name, setup)
-
- def __setitem__(self, key, value):
- pass
-
- def unlinkViews(self):
- #print "unlinking views"
- self.model.removeView(self)
- for key, value in self.subviews.items():
- value.unlinkViews()
-# value.model.removeView(value)
-
- def dispatchResultCallback(self, result, request, node):
- """Deal with a callback from a deferred, checking to see if it is
- ok to send the page yet or not.
- """
- self.outstandingCallbacks -= 1
- #node = self.dispatchResult(request, node, result)
- #self.recurseChildren(request, node)
- if not self.outstandingCallbacks:
- self.sendPage(request)
- return result
-
- def renderFailure(self, failure, request):
- try:
- xml = request.d.toprettyxml()
- except:
- xml = ""
-# if not hasattr(request, 'channel'):
-# log.msg("The request got away from me before I could render an error page.")
-# log.err(failure)
-# return failure
- if not self.failed:
- self.failed = 1
- if failure:
- request.write("<html><head><title>%s: %s</title></head><body>\n" % (html.escape(str(failure.type)), html.escape(str(failure.value))))
- else:
- request.write("<html><head><title>Failure!</title></head><body>\n")
- utils.renderFailure(failure, request)
- request.write("<h3>Here is the partially processed DOM:</h3>")
- request.write("\n<pre>\n")
- request.write(html.escape(xml))
- request.write("\n</pre>\n")
- request.write("</body></html>")
- request.finish()
- return failure
-
-class LiveView(View):
- livePage = 1
- def wvfactory_webConduitGlue(self, request, node, m):
- if request.getHeader("user-agent").count("MSIE"):
- return View(m, templateFile="FlashConduitGlue.html")
- else:
- return View(m, templateFile="WebConduitGlue.html")
-
- def wvupdate_woven_flashConduitSessionView(self, request, wid, mod):
- #print "updating flash thingie"
- uid = request.getSession().uid
- n = wid.templateNode
- if n.attributes.has_key('src'):
- n.attributes['src'] = n.attributes.get('src') + '?twisted_session=' + str(uid)
- else:
- n.attributes['value'] = n.attributes.get('value') + '?twisted_session=' + str(uid)
- #print wid.templateNode.toxml()
-
-
-#backwards compatibility
-WView = View
-
-
-def registerViewForModel(view, model):
- """
- Registers `view' as an adapter of `model' for L{interfaces.IView}.
- """
- components.registerAdapter(view, model, interfaces.IView)
-# adapter = resource.IResource(model, None)
-# if adapter is None and resource.IResource.providedBy(view):
-# components.registerAdapter(view, model, resource.IResource)
-
-
-
-#sibling imports::
-
-# If no widget/handler was found in the container controller or view, these
-# modules will be searched.
-
-import input
-import widgets
-
« no previous file with comments | « third_party/twisted_8_1/twisted/web/woven/utils.py ('k') | third_party/twisted_8_1/twisted/web/woven/widgets.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698