Hello,

I try to add to the ouput dict  of the  json expose method the result
of flash (so that my web integrator can have my business logic
warning/error/info automagically)

I wanted to know how to hook on @expose (in case json rendere is
called) in such a way I can alter the dict returned by the controller.

I have 90% of the results with the following code.


any hint ?

for instance imagine in the controller :

    @expose('adcop.templates.lost_password')
    @validate(validators= { 'email' : validators.Email } )
    @expose('json')
    @add_flash_to_outdict()
    def lost(self, *a, **kw):
        log = logging.getLogger("general")
        email = kw.get('email')
        if email is None:
            flash("No email","error")
            return dict(page = 'lost', fragment = fragment )
        #....

here is the actual result :

{"fragment": false, "page": "lost", "_flash": {"status": "error",
"message": "No email"}}


in my a far away file I defined :

from tg import flash, decorators, expose, request
import logging
import json

log = logging.getLogger("general")


class add_flash_to_outdict(object):

    def __init__(self, error_handler = None, **option ):
        self.error_handler = error_handler
        self.option = option or dict()


    def __call__(self, func):
        #@beaker_cache(expire=30,type = 'file')
        import logging
        log = logging.getLogger('general')
        self.log = log


        def dict_wrap(*args, **kw):
            res = func(*args, **kw)
            if flash and flash.message:
                res["_flash"] = {
                    "status" : flash.status or "",
                    "message" : flash.message or ""
                }
            return json.dumps(res)

        brutal = expose(content_type="application/json;charset='%s'" %
( request.charset or 'utf-8'))
        return brutal(dict_wrap)

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en.

Reply via email to