Armor
![]() |
Review:Very character-driven, slaps you around every page, and Steakley really has a gift for writing action scenes: what's happening is always clear, and he gives a feeling of ... rush. |
![]() |
Review:Very character-driven, slaps you around every page, and Steakley really has a gift for writing action scenes: what's happening is always clear, and he gives a feeling of ... rush. |
init({ 'middleware':[('paste.auth.basic.AuthBasicHandler', {'realm':'Admin', 'authfunc':valid_user})], })
Donde valid_user es la función obvia que toma usuario/password y devuelve True/False.
No es exactamente una cosa sofisticada con roles, pero no necesito eso para my aplicación (los controles de acceso de LDAP se encargan).
![]() |
Review:a bit too much rah rah (north) american exceptionalism. |
Así que, que miércoles, aprendamos algo mientras tanto. Las víctimas: Pyjamas y Juno.
Pyjamas es una versión Python de GWT y es una bendición: finalmente puedo escribir HTML y JS en python ;-)
Y Juno es refrescantemente simple. Ya que todo el frontend está hecho en Pyjamas, lo único que necesito es una manera de routear llamadas JSONRPC a código python y operar en el backend.
Así que acá hay dos fragmentos útiles:
# This decorator decodes JSONRPC arguments as sent by Pyjamas to # Juno, and calls the target function with the decoded version. def JSONRemote(target): def wrapper(web,*args,**kwargs): postdata=web.input().keys()[0] data = json.loads(postdata) id, method, params = data["id"],data["method"],[web,]+data["params"][1] kwargs['method']=method return target(*params,**kwargs) return wrapper
usando esto, cualquier metodo Juno funciona como método JSONRPC!
Ejemplo:
@route('/user') @JSONRemote def list(web,startwith='*',method=None): try: result=search(filter='(&(uid=*@bigclient.ar)(sn=%s*))'%startwith) resp=JSONResponse(result) except ldap.LDAPError, e: resp=JSONResponse(None,e.desc) return resp
¿Ven? Nada de decodificar JSON. Y no codificar tampoco, porque creo la respuesta usando esto:
# This class creates a correct JSON response from Juno as required by Pyjamas class JSONResponse(JunoResponse): def __init__(self,result=None,error=None,id=None,code=200): JunoResponse.__init__(self) self.headers['Content-Type']='text/javascript' self.append(json.dumps({'result':result,'error':error,'id':id,'code':code}))
Probablemente no sea una gran implementación pero me sirve por ahora.
Mañana voy a subir por lo menos una.
Si alguien quiere traducir a otros lenguajes, me encantaría incluirlos también.