Back to index

plone3  3.1.7
Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Static Private Attributes
CMFFormController.FormController.FormController Class Reference
Inheritance diagram for CMFFormController.FormController.FormController:
Inheritance graph
[legend]
Collaboration diagram for CMFFormController.FormController.FormController:
Collaboration graph
[legend]

List of all members.

Public Member Functions

def __init__
def docs
def view
def __call__
def listActionTypes
def validActionTypes
def listContextTypes
def listFormValidators
def listFormActions
def manage_editFormValidators
def addFormValidators
def manage_addFormValidators
def manage_delFormValidators
def manage_editFormActions
def addFormAction
def manage_addFormAction
def manage_delFormActions
def getValidators
def getAction
def getState
def validate
def writableDefaults
def manage_purge

Public Attributes

 actions
 validators

Static Public Attributes

tuple security = ClassSecurityInfo()
string id = 'portal_form_controller'
string title = 'Manages form validation and post-validation actions'
string meta_type = 'Form Controller Tool'
tuple manage_options
tuple manage_overview = PageTemplateFile(os.path.join('www','manage_overview'), globals())
tuple manage_docs = PageTemplateFile(os.path.join('www','manage_docs'), globals())
tuple manage_formActionsForm = PageTemplateFile(os.path.join('www','manage_formActionsForm'), globals())
tuple manage_formValidatorsForm = PageTemplateFile(os.path.join('www','manage_formValidatorsForm'), globals())
tuple manage_purgeForm = PageTemplateFile(os.path.join('www','manage_purgeForm'), globals())
 manage_main = manage_overview
 index_html = None
tuple wwwpath = os.path.join(Globals.package_home(fc_globals), 'www')
tuple f = open(os.path.join(wwwpath, 'docs.stx'), 'r')

Private Member Functions

def _checkId
def _editFormValidators
def _addFormValidators
def _delFormValidators
def _editFormActions
def _addFormAction
def _delFormActions
def _getTypeName
def _purge

Static Private Attributes

tuple _docs = f.read()

Detailed Description

Definition at line 31 of file FormController.py.


Constructor & Destructor Documentation

Definition at line 84 of file FormController.py.

00084 
00085     def __init__(self):
00086         self.actions = FormActionContainer()
00087         self.validators = FormValidatorContainer()
00088 


Member Function Documentation

def CMFFormController.FormController.FormController.__call__ (   self,
  REQUEST,
  RESPONSE 
)
Invokes the default view.

Definition at line 100 of file FormController.py.

00100 
00101     def __call__(self, REQUEST, RESPONSE):
00102         """Invokes the default view."""
00103         if RESPONSE is not None:
00104             RESPONSE.redirect('%s/manage_main' % self.absolute_url())
00105 

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFFormController.FormController.FormController._addFormAction (   self,
  container,
  REQUEST 
) [private]

Definition at line 263 of file FormController.py.

00263 
00264     def _addFormAction(self, container, REQUEST):
00265         object_id = REQUEST.form.get('new_object_id')
00266         status = REQUEST.form.get('new_status').strip()
00267         context_type = REQUEST.form.get('new_context_type').strip()
00268         button = REQUEST.form.get('new_button').strip()
00269         action_type = REQUEST.form.get('new_action_type').strip()
00270         action_arg = REQUEST.form.get('new_action_arg').strip()
00271         container.set(FormAction(object_id, status, context_type, button, action_type, action_arg, self))
00272 

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFFormController.FormController.FormController._addFormValidators (   self,
  container,
  REQUEST 
) [private]

Definition at line 197 of file FormController.py.

00197 
00198     def _addFormValidators(self, container, REQUEST):
00199         object_id = REQUEST.form.get('new_object_id')
00200         context_type = REQUEST.form.get('new_context_type')
00201         button = REQUEST.form.get('new_button')
00202         validators = REQUEST.form.get('new_validators')
00203         container.set(FormValidator(object_id, context_type, button, validators, self))
00204 

Here is the caller graph for this function:

See if an id is valid CMF/Plone id

Definition at line 106 of file FormController.py.

00106 
00107     def _checkId(self, id):
00108         """See if an id is valid CMF/Plone id"""
00109         portal = getToolByName(self, 'portal_url').getPortalObject()
00110         if not id:
00111             return 'Empty id'
00112         s = bad_id(id)
00113         if s:
00114             return '\'%s\' is not a valid id' % (id)
00115         # extra checks for Plone sites
00116         if portal.__class__.__name__ == 'PloneSite':
00117             if hasattr(portal, 'portal_properties') and \
00118                 hasattr(portal.portal_properties, 'site_properties') and \
00119                 hasattr(portal.portal_properties.site_properties, 'invalid_ids'):
00120                 if id in portal.portal_properties.site_properties.invalid_ids:
00121                     return '\'%s\' is a reserved id' % (id)
00122 

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFFormController.FormController.FormController._delFormActions (   self,
  container,
  REQUEST 
) [private]

Definition at line 281 of file FormController.py.

00281 
00282     def _delFormActions(self, container, REQUEST):
00283         for k in REQUEST.form.keys():
00284             if k.startswith('del_id_'):
00285                 n = k[len('del_id_'):]
00286                 old_object_id = REQUEST.form.get('old_object_id_'+n)
00287                 old_status = REQUEST.form.get('old_status_'+n)
00288                 old_context_type = REQUEST.form.get('old_context_type_'+n)
00289                 old_button = REQUEST.form.get('old_button_'+n)
00290                 container.delete(FormActionKey(old_object_id, old_status, old_context_type, old_button, self))
00291 

Here is the caller graph for this function:

def CMFFormController.FormController.FormController._delFormValidators (   self,
  container,
  REQUEST 
) [private]

Definition at line 213 of file FormController.py.

00213 
00214     def _delFormValidators(self, container, REQUEST):
00215         for k in REQUEST.form.keys():
00216             if k.startswith('del_id_'):
00217                 n = k[len('del_id_'):]
00218                 old_object_id = REQUEST.form.get('old_object_id_'+n)
00219                 old_context_type = REQUEST.form.get('old_context_type_'+n)
00220                 old_button = REQUEST.form.get('old_button_'+n)
00221                 container.delete(FormValidatorKey(old_object_id, old_context_type, old_button, self))
00222 

Here is the caller graph for this function:

def CMFFormController.FormController.FormController._editFormActions (   self,
  container,
  REQUEST 
) [private]

Definition at line 231 of file FormController.py.

00231 
00232     def _editFormActions(self, container, REQUEST):
00233         for k in REQUEST.form.keys():
00234             if k.startswith('old_object_id_'):
00235                 n = k[len('old_object_id_'):]
00236                 old_object_id = REQUEST.form.get('old_object_id_'+n)
00237                 old_status = REQUEST.form.get('old_status_'+n)
00238                 old_context_type = REQUEST.form.get('old_context_type_'+n)
00239                 old_button = REQUEST.form.get('old_button_'+n)
00240                 container.delete(FormActionKey(old_object_id, old_status, old_context_type, old_button, self))
00241                 object_id = REQUEST.form.get('object_id_'+n)
00242                 status = REQUEST.form.get('status_'+n)
00243                 context_type = REQUEST.form.get('context_type_'+n)
00244                 button = REQUEST.form.get('button_'+n)
00245                 action_type = REQUEST.form.get('action_type_'+n)
00246                 action_arg = REQUEST.form.get('action_arg_'+n)
00247                 container.set(FormAction(object_id, status, context_type, button, action_type, action_arg, self))
00248 

Here is the caller graph for this function:

def CMFFormController.FormController.FormController._editFormValidators (   self,
  container,
  REQUEST 
) [private]

Definition at line 168 of file FormController.py.

00168 
00169     def _editFormValidators(self, container, REQUEST):
00170         for k in REQUEST.form.keys():
00171             if k.startswith('old_object_id_'):
00172                 n = k[len('old_object_id_'):]
00173                 old_object_id = REQUEST.form.get('old_object_id_'+n)
00174                 old_context_type = REQUEST.form.get('old_context_type_'+n)
00175                 old_button = REQUEST.form.get('old_button_'+n)
00176                 container.delete(FormValidatorKey(old_object_id, old_context_type, old_button, self))
00177                 object_id = REQUEST.form.get('object_id_'+n)
00178                 context_type = REQUEST.form.get('context_type_'+n)
00179                 button = REQUEST.form.get('button_'+n)
00180                 validators = REQUEST.form.get('validators_'+n)
00181                 container.set(FormValidator(object_id, context_type, button, validators, self))
00182 

Here is the caller graph for this function:

Definition at line 412 of file FormController.py.

00412 
00413     def _getTypeName(self, obj):
00414         type_name = getattr(obj, '__class__', None)
00415         if type_name:
00416             type_name = getattr(type_name, '__name__', None)
00417         return type_name
00418 

Remove actions and validators for ids that no longer correspond to
objects in the portal

Definition at line 428 of file FormController.py.

00428 
00429     def _purge(self):
00430         """Remove actions and validators for ids that no longer correspond to
00431         objects in the portal"""
00432         actions = self.actions.getFiltered()
00433         action_dict = {}
00434         for a in actions:
00435             action_dict[a.getObjectId()] = 1
00436         validators = self.validators.getFiltered()
00437         validator_dict = {}
00438         for v in validators:
00439             validator_dict[v.getObjectId()] = 1
00440 
00441         def fn(obj, dict):
00442             dict[obj.getId()] = 0
00443         meta_types = ['Controller Page Template', 'Controller Page Template (File)', 'Filesystem Controller Page Template', 'Controller Python Script', 'Filesystem Controller Python Script']
00444         portal = getToolByName(self, 'portal_url').getPortalObject()
00445         catalog = getToolByName(self, 'portal_catalog')
00446         result = catalog.ZopeFindAndApply(portal, obj_metatypes=meta_types, search_sub=1, result=[])
00447         for (path, r) in result:
00448             if action_dict.has_key(r.getId()):
00449                 del action_dict[r.getId()]
00450             if validator_dict.has_key(r.getId()):
00451                 del validator_dict[r.getId()]
00452 
00453         n_actions = 0
00454         for k in action_dict.keys():
00455             to_be_deleted = self.actions.getFiltered(object_id=k)
00456             n_actions += len(to_be_deleted)
00457             for a in to_be_deleted:
00458                 self.actions.delete(a.getKey())
00459         catalog.ZopeFindAndApply(portal, meta_types, search_sub=1, apply_func=lambda o: fn(o, validator_dict))
00460         n_validators = 0
00461         for k in validator_dict.keys():
00462             to_be_deleted = self.validators.getFiltered(object_id=k)
00463             n_validators += len(to_be_deleted)
00464             for v in to_be_deleted:
00465                 self.validators.delete(v.getKey())
00466         return '%d action overrides deleted, %d validator overrides deleted' % (n_actions, n_validators)
00467 
00468 Globals.InitializeClass(FormController)

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFFormController.FormController.FormController.addFormAction (   self,
  object_id,
  status,
  context_type,
  button,
  action_type,
  action_arg 
)

Definition at line 251 of file FormController.py.

00251 
00252     def addFormAction(self, object_id, status, context_type, button, action_type, action_arg):
00253         self.actions.set(FormAction(object_id, status, context_type, button, action_type, action_arg, self))
00254 

def CMFFormController.FormController.FormController.addFormValidators (   self,
  object_id,
  context_type,
  button,
  validators 
)

Definition at line 185 of file FormController.py.

00185 
00186     def addFormValidators(self, object_id, context_type, button, validators):
00187         self.validators.set(FormValidator(object_id, context_type, button, validators, self))
00188 

Returns FormController docs formatted as HTML

Definition at line 90 of file FormController.py.

00090 
00091     def docs(self):
00092         """Returns FormController docs formatted as HTML"""
00093         return self._docs
00094 

def CMFFormController.FormController.FormController.getAction (   self,
  id,
  status,
  context_type,
  button 
)

Definition at line 296 of file FormController.py.

00296 
00297     def getAction(self, id, status, context_type, button):
00298         return self.actions.match(id, status, context_type, button)
00299 

def CMFFormController.FormController.FormController.getState (   self,
  obj,
  is_validator 
)

Definition at line 300 of file FormController.py.

00300 
00301     def getState(self, obj, is_validator):
00302         id = obj.id
00303         controller_state = self.REQUEST.get('controller_state', None)
00304         # The variable 'env' is a dictionary that is passed
00305         # along using record variables on forms so that you can keep
00306         # some state between different forms.
00307         env = self.REQUEST.get('form_env', {})
00308         # Make sure controller_state is something generated by us, not something submitted via POST or GET
00309         if controller_state and getattr(controller_state, '__class__', None) != ControllerState:
00310             controller_state = None
00311 
00312         if not is_validator:
00313             # Construct a new controller state object or clear out the existing
00314             # one unless we are in a validator script.
00315             if controller_state is None:
00316                 # XXX - errors={} shouldn't need to be set here, but without it
00317                 # I encountered what looks like a weird Zope caching bug.
00318                 # To reproduce, install CMFFormControllerDemo, go to portal_skins
00319                 # then to CMFFormControllerDemo, then click on test_form and
00320                 # click the Test tab.  Submit the form with an empty text box.
00321                 # Now back up to the ZMI and click the Test tab again.  If
00322                 # errors={} is left out in the line below, ControllerState.__init__()
00323                 # gets called with errors set to a non-empty value (more
00324                 # precisely, it is set to the value that was in REQUEST.controller_state.
00325                 # Yikes!
00326                 controller_state = ControllerState(errors={})
00327             else:
00328                 # clear out values we don't want to carry over from previous states.
00329                 controller_state.setStatus('success')
00330                 controller_state.setNextAction(None)
00331                 #controller_state.setButton(None)
00332             controller_state.set(id=id, context=obj.getParentNode())
00333         else:
00334             if controller_state is None:
00335                 raise ValueError, 'No controller state available.  ' + \
00336                     'This commonly occurs when a ControllerValidator (.vpy) ' + \
00337                     'script is invoked via the validation mechanism in the ' + \
00338                     'portal_form tool.  If you are using a package designed to ' + \
00339                     'be used with portal_form, you are probably inadvertently ' + \
00340                     'invoking a validator designed for use with CMFFormController (e.g. validate_id).  ' + \
00341                     'If you are using a package designed to be used with CMFFormController, you probably ' + \
00342                     'have a "portal_form" in your URL that needs to be removed.'
00343         controller_state._setValidating(is_validator)
00344         # Pass environment along, with care so we don't override
00345         # existing variables.
00346         for k, v in env.items():
00347             controller_state.kwargs.setdefault(k, v)
00348         self.REQUEST.set('controller_state', controller_state)
00349         return controller_state
00350 

Here is the caller graph for this function:

def CMFFormController.FormController.FormController.getValidators (   self,
  id,
  context_type,
  button 
)

Definition at line 292 of file FormController.py.

00292 
00293     def getValidators(self, id, context_type, button):
00294         return self.validators.match(id, context_type, button)
00295 

Here is the caller graph for this function:

Return a list of available action types.

Definition at line 125 of file FormController.py.

00125 
00126     def listActionTypes(self):
00127         """Return a list of available action types."""
00128         keys = form_action_types.keys()
00129         keys.sort()
00130         action_types = []
00131         for k in keys:
00132             action_types.append(form_action_types.get(k))
00133         return action_types
00134 

Return list of possible types for template context objects

Definition at line 140 of file FormController.py.

00140 
00141     def listContextTypes(self):
00142         """Return list of possible types for template context objects"""
00143         types_tool = getToolByName(self, 'portal_types')
00144         return types_tool.listContentTypes()
00145 

Here is the call graph for this function:

def CMFFormController.FormController.FormController.listFormActions (   self,
  override = None,
  kwargs 
)
Return a list of existing actions.  Actions can be filtered by
   specifying required attributes via kwargs

Definition at line 154 of file FormController.py.

00154 
00155     def listFormActions(self, override=None, **kwargs):
00156         """Return a list of existing actions.  Actions can be filtered by
00157            specifying required attributes via kwargs"""
00158         return self.actions.getFiltered(**kwargs)
00159 

def CMFFormController.FormController.FormController.listFormValidators (   self,
  override = None,
  kwargs 
)
Return a list of existing validators.  Validators can be filtered by
   specifying required attributes via kwargs

Definition at line 147 of file FormController.py.

00147 
00148     def listFormValidators(self, override=None, **kwargs):
00149         """Return a list of existing validators.  Validators can be filtered by
00150            specifying required attributes via kwargs"""
00151         return self.validators.getFiltered(**kwargs)
00152 

Process form action add form

Definition at line 256 of file FormController.py.

00256 
00257     def manage_addFormAction(self, REQUEST):
00258         """Process form action add form"""
00259         self._addFormAction(self.actions, REQUEST)
00260         return REQUEST.RESPONSE.redirect(self.absolute_url()+'/manage_formActionsForm')
00261 

Here is the call graph for this function:

Process form validator add form

Definition at line 190 of file FormController.py.

00190 
00191     def manage_addFormValidators(self, REQUEST):
00192         """Process form validator add form"""
00193         self._addFormValidators(self.validators, REQUEST)
00194         return REQUEST.RESPONSE.redirect(self.absolute_url()+'/manage_formValidatorsForm')
00195 

Here is the call graph for this function:

Process form action delete form

Definition at line 274 of file FormController.py.

00274 
00275     def manage_delFormActions(self, REQUEST):
00276         """Process form action delete form"""
00277         self._delFormActions(self.actions, REQUEST)
00278         return REQUEST.RESPONSE.redirect(self.absolute_url()+'/manage_formActionsForm')
00279 

Here is the call graph for this function:

Process form validator delete form

Definition at line 206 of file FormController.py.

00206 
00207     def manage_delFormValidators(self, REQUEST):
00208         """Process form validator delete form"""
00209         self._delFormValidators(self.validators, REQUEST)
00210         return REQUEST.RESPONSE.redirect(self.absolute_url()+'/manage_formValidatorsForm')
00211 

Here is the call graph for this function:

Process form action edit form

Definition at line 224 of file FormController.py.

00224 
00225     def manage_editFormActions(self, REQUEST):
00226         """Process form action edit form"""
00227         self._editFormActions(self.actions, REQUEST)
00228         return REQUEST.RESPONSE.redirect(self.absolute_url()+'/manage_formActionsForm')
00229 

Here is the call graph for this function:

Process form validator edit form

Definition at line 161 of file FormController.py.

00161 
00162     def manage_editFormValidators(self, REQUEST):
00163         """Process form validator edit form"""
00164         self._editFormValidators(self.validators, REQUEST)
00165         return REQUEST.RESPONSE.redirect(self.absolute_url()+'/manage_formValidatorsForm')
00166 

Here is the call graph for this function:

TTW interface for purge

Definition at line 420 of file FormController.py.

00420 
00421     def manage_purge(self, REQUEST):
00422         """TTW interface for purge"""
00423         text = self._purge()
00424         # might want to do a redirect here instead
00425         return text
00426 

Here is the call graph for this function:

Definition at line 135 of file FormController.py.

00135 
00136     def validActionTypes(self):
00137         return form_action_types.keys()
00138 

def CMFFormController.FormController.FormController.validate (   self,
  controller_state,
  REQUEST,
  validators,
  argdict = None 
)

Definition at line 351 of file FormController.py.

00351 
00352     def validate(self, controller_state, REQUEST, validators, argdict=None):
00353         if argdict is None:
00354             args = REQUEST.args
00355             kwargs = REQUEST
00356         else:
00357             args = ()
00358             if REQUEST is None:
00359                 kwargs = argdict
00360             else:
00361                 kwargs = {}
00362                 for k in REQUEST.keys():
00363                     if k in ('SESSION',):
00364                         continue
00365                     kwargs[k] = REQUEST[k]
00366                 kwargs.update(argdict)
00367         context = controller_state.getContext()
00368         if validators is None:
00369             REQUEST.set('controller_state', controller_state)
00370             return controller_state
00371         for v in validators:
00372             REQUEST.set('controller_state', controller_state)
00373             if controller_state.hasValidated(v):
00374                 continue
00375             try:
00376                 # make sure validator exists
00377                 obj = context.restrictedTraverse(v, default=None)
00378                 if obj is None:
00379                     raise ValueError, 'Unable to find validator %s\n' % str(v)
00380                 if not getattr(obj, 'is_validator', 1):
00381                     raise ValueError, '%s is not a CMFFormController validator' % str(v)
00382                 REQUEST = controller_state.getContext().REQUEST
00383                 controller_state = mapply(obj, args, kwargs,
00384                                           call_object, 1, missing_name, dont_publish_class,
00385                                           REQUEST, bind=1)
00386                 if controller_state is None or getattr(controller_state, '__class__', None) != ControllerState:
00387                     raise ValueError, 'Validator %s did not return the state object' % str(v)
00388                 controller_state._addValidator(v)
00389             except ValidationError, e:
00390                 # if a validator raises a ValidatorException, execution of
00391                 # validators is halted and the controller_state is set to
00392                 # the controller_state embedded in the exception
00393                 controller_state = e.controller_state
00394                 state_class = getattr(controller_state, '__class__', None)
00395                 if state_class != ControllerState:
00396                     raise Exception, 'Bad ValidationError state (type = %s)' % str(state_class)
00397                 break
00398             state_class = getattr(controller_state, '__class__', None)
00399             if state_class != ControllerState:
00400                 raise Exception, 'Bad validator return type from validator %s (%s)' % (str(v), str(state_class))
00401             REQUEST.set('controller_state', controller_state)
00402 
00403         REQUEST.set('controller_state', controller_state)
00404         return controller_state
00405 

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFFormController.FormController.FormController.view (   self,
  REQUEST,
  RESPONSE 
)
Invokes the default view.

Definition at line 95 of file FormController.py.

00095 
00096     def view(self, REQUEST, RESPONSE):
00097         """Invokes the default view."""
00098         return self.__call__(REQUEST, RESPONSE)
00099 

Here is the caller graph for this function:

Can default actions and validators be modified?

Definition at line 407 of file FormController.py.

00407 
00408     def writableDefaults(self):
00409         """Can default actions and validators be modified?"""
00410         return 0
00411 


Member Data Documentation

tuple CMFFormController.FormController.FormController._docs = f.read() [static, private]

Definition at line 79 of file FormController.py.

Definition at line 85 of file FormController.py.

tuple CMFFormController.FormController.FormController.f = open(os.path.join(wwwpath, 'docs.stx'), 'r') [static]

Definition at line 78 of file FormController.py.

string CMFFormController.FormController.FormController.id = 'portal_form_controller' [static]

Definition at line 36 of file FormController.py.

Definition at line 75 of file FormController.py.

tuple CMFFormController.FormController.FormController.manage_docs = PageTemplateFile(os.path.join('www','manage_docs'), globals()) [static]

Definition at line 55 of file FormController.py.

tuple CMFFormController.FormController.FormController.manage_formActionsForm = PageTemplateFile(os.path.join('www','manage_formActionsForm'), globals()) [static]

Definition at line 59 of file FormController.py.

tuple CMFFormController.FormController.FormController.manage_formValidatorsForm = PageTemplateFile(os.path.join('www','manage_formValidatorsForm'), globals()) [static]

Definition at line 63 of file FormController.py.

Definition at line 72 of file FormController.py.

Initial value:
( ({'label':'Overview', 'action':'manage_overview'},
                        {'label':'Documentation', 'action':'manage_docs'},
                        {'label': 'Validation', 'action': 'manage_formValidatorsForm'},
                        {'label': 'Actions', 'action': 'manage_formActionsForm'},
                        {'label': 'Purge', 'action': 'manage_purgeForm'},) +
                       SimpleItemWithProperties.manage_options)

Definition at line 42 of file FormController.py.

tuple CMFFormController.FormController.FormController.manage_overview = PageTemplateFile(os.path.join('www','manage_overview'), globals()) [static]

Definition at line 50 of file FormController.py.

tuple CMFFormController.FormController.FormController.manage_purgeForm = PageTemplateFile(os.path.join('www','manage_purgeForm'), globals()) [static]

Definition at line 67 of file FormController.py.

string CMFFormController.FormController.FormController.meta_type = 'Form Controller Tool' [static]

Definition at line 38 of file FormController.py.

tuple CMFFormController.FormController.FormController.security = ClassSecurityInfo() [static]

Definition at line 34 of file FormController.py.

string CMFFormController.FormController.FormController.title = 'Manages form validation and post-validation actions' [static]

Definition at line 37 of file FormController.py.

Definition at line 86 of file FormController.py.

tuple CMFFormController.FormController.FormController.wwwpath = os.path.join(Globals.package_home(fc_globals), 'www') [static]

Definition at line 77 of file FormController.py.


The documentation for this class was generated from the following file: