Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Pyjamas y Juno

Así que, que miérco­le­s, apren­da­mos al­go mien­tras tan­to. Las víc­ti­ma­s: Py­ja­mas y Juno.

Py­ja­mas es una ver­sión Py­thon de GWT y es una ben­di­ció­n: fi­nal­men­te pue­do es­cri­bir HT­ML y JS en py­thon ;-)

Y Juno es re­fres­cante­men­te sim­ple. Ya que to­do el fron­tend es­tá he­cho en Py­ja­ma­s, lo úni­co que ne­ce­si­to es una ma­ne­ra de rou­tear lla­ma­das JSONRPC a có­di­go py­thon y ope­rar en el ba­cken­d.

Así que acá hay dos frag­men­tos úti­le­s:

# 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

usan­do es­to, cual­quier me­to­do Juno fun­cio­na co­mo mé­to­do JSONRP­C!

Ejem­plo:

@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? Na­da de de­co­di­fi­car JSO­N. Y no co­di­fi­car tam­po­co, por­que creo la res­pues­ta usan­do es­to:

# 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}))

Pro­ba­ble­men­te no sea una gran im­ple­men­ta­ción pe­ro me sir­ve por aho­ra.

Traducciones casi listas

Ma­ña­na voy a su­bir por lo me­nos una.

Si al­guien quie­re tra­du­cir a otros len­gua­je­s, me en­can­ta­ría in­cluir­los tam­bién.

Quiero una de estas cosas, pero necesito una excusa!

  • Se­r­­vi­­dor de Ba­­cku­­p? Dis­­co ex­­terno US­­B, me­­to to­­­do en una ca­­ja, in­s­­ta­­lo ba­­cu­­la y/o rdi­­ff-­­ba­­ckup?

  • Mis­­mo ha­r­­dwa­­re, se­r­­vi­­dor MPD ?

  • Ide­­m, SAN ho­­­ga­­re­­ño?

  • Se­r­­ver po­r­­tá­­til de de­­mo? Po­­­dría in­s­­ta­­lar al­­gu­­nas so­­­lu­­cio­­­nes en ta­r­­je­­tas SD y ha­­cer de­­mos pa­­ra clien­­tes con es­­to y mi ne­­tbook.

Se acep­tan su­ge­ren­cia­s...

Qt 4.5

Empecé mal, porque todas las fuentes estaban horribles, pero después de correr fc-­ca­che -fv como root y como mi usuario todo está bien.

De he­cho, re­suel­ve un bug que me ha ve­ni­do mo­les­tan­do por un año.

El de­sem­pe­ño pa­re­ce ser bue­no. Es un po­co sub­je­ti­vo pe­ro co­sas co­mo las ani­ma­cio­nes de krun­ner son rá­pi­das y sua­ves y an­tes sal­ta­ba y se tra­ba­ba.

Y... pue­do tra­tar de ha­cer que el flash fun­cio­ne en uR­S­Sus!

NUE­VO: an­du­vo so­lo:

urssus25

Contents © 2000-2023 Roberto Alsina