python-hserver/hserver/types/FormApplyable.py

50 lines
1.1 KiB
Python

from simplelog import log
from hserver.api.WebCallable import WebCallable
class FADescription:
def __init__(self, name, formName = None):
if formName is None:
formName = name
self.__name = name
self.__formName = formName
class FormApplyable:
FA_Names = {}
def formApply(self,request,o):
fa_names = self.__collectNames()
for name in fa_names:
fa_attr = fa_names[ name ]
if fa_attr in request.form():
oval = getattr( self, name, None)
log("formApply(): {3} {0} = {1} : {2}".format( name, oval, request.form()[ fa_attr ].value(), o ))
if callable( oval ):
log("call-intf")
oval( request.form()[ fa_attr ].value() )
else:
setattr( self, name, request.form()[ fa_attr ].value() )
def __collectNames(self):
fa_names = {}
bases = (self.__class__,) + self.__class__.__bases__
for base in bases:
if hasattr(base, "FA_Names"):
fa_names.update( base.FA_Names )
log("FormApplyable: collectNames(): {0}".format( fa_names ))
return fa_names
def __apply(self,request, o = None):
self.formApply(request,o)
_hm_apply = WebCallable( method = __apply )