コード例 #1
0
 def crearPersona(payload):
     nuevo = Asistente()
     nuevo.primiparo = fechaAhora
     enriquecerEntidad(payload, Asistente)
     if not payload.has_key('monitor'):
         payload['monitor'] = 0  #significa que esta por asignar
     rta = comun.llenarYpersistir(Asistente, nuevo, payload, None)
     return rta
コード例 #2
0
 def post():
     logging.info('post ' + str(ident) + ' with ')
     completo = simplejson.loads(request.raw_post_data)
     todo = completo['payload']
     leng = completo['leng']
     nuevo = class_(id=ident)
     otro = comun.llenarYpersistir(class_, nuevo, todo, leng)
     ans = {}
     ans['error'] = 0
     ans['payload'] = otro
     response.write(simplejson.dumps(ans))
コード例 #3
0
 def actualizarPersona(payload, viejo):
     llave = ndb.Key(Asistente, payload['id'])
     viejo2 = llave.get()
     if (viejo2):
         enriquecerEntidad(payload, Asistente)
         logging.info(payload)
         #existe el que voy a actualizar
         if (viejo is None or viejo.key.id() == viejo2.key.id()):
             rta = comun.llenarYpersistir(Asistente, viejo2, payload, None)
             return {'error': 0, 'rta': rta}
         else:
             return {
                 'error': 4,
                 'msg': 'La cédula ' + str(payload['cedula']) + ' ya existe'
             }
コード例 #4
0
def RESTfulHandler(request, ident):
    response = HttpResponse("", content_type='application/json')

    tokens = re.findall('(/?)(\w+)/(.*)$', ident)
    if len(tokens) > 0:
        nombre = tokens[0][1]
        ident = tokens[0][2]
    else:
        nombre = 'Documento'

    if ident.isnumeric():
        ident = long(ident)

    if not users.is_current_user_admin() and request.method in [
            'POST', 'PUT', 'DELETE'
    ]:
        return HttpResponse(status=401)

    module = __import__('models')
    class_ = getattr(module, nombre)

    def post():
        logging.info('post ' + str(ident) + ' with ')
        completo = simplejson.loads(request.raw_post_data)
        todo = completo['payload']
        leng = completo['leng']
        nuevo = class_(id=ident)
        otro = comun.llenarYpersistir(class_, nuevo, todo, leng)
        ans = {}
        ans['error'] = 0
        ans['payload'] = otro
        response.write(simplejson.dumps(ans))

    if request.method == 'GET':
        logging.info('get')
        if ident:
            llave = ndb.Key(nombre, ident)
            greetings = llave.get()
        else:
            greetings = buscarTodos(nombre)
        todos = simplejson.dumps(comun.to_dict(greetings))
        response.write(todos)

    if request.method == 'POST':
        post()

    if request.method == 'PUT':
        logging.info('put ' + str(ident) +
                     ' with ')  #tiene problemas con el unicode

        completo = simplejson.loads(request.raw_post_data)
        tmp = completo['payload']
        leng = completo['leng']
        viejo = None
        if ident:
            llave = ndb.Key(nombre, ident)
        else:
            if (tmp.has_key('id')):
                llave = ndb.Key(nombre, tmp['id'])
            else:
                llave = None
        if (llave):
            viejo = llave.get()
        if viejo:
            otro = comun.llenarYpersistir(class_, viejo, tmp, leng)
            ans = {}
            ans['error'] = 0
            ans['payload'] = otro
            response.write(simplejson.dumps(ans))
        else:
            post()

    if request.method == 'DELETE':
        logging.info('delete ' + str(ident))
        if ident:
            llave = ndb.Key(nombre, ident)
            llave.delete()
            response.write('{"error":0, "msg": "' + nombre + ' (' +
                           str(ident) + ') borrado"}')
        else:
            return HttpResponse(status=403)
    return response
コード例 #5
0
def CitasHandler(request, ident):

    to = comun.fechaAhora.__format__("%Y-%m-%d")
    cursor = None

    response = HttpResponse("", content_type='application/json')

    try:
        if request.method == 'PUT':
            #{"title": "edelgado", "start": 1460691726, "end": 1460691726, "maxper": 2}

            tmp = {}
            if (request.raw_post_data):
                tmp = simplejson.loads(request.raw_post_data)
            rta = {}
            if (tmp.has_key('id')):
                llave = ndb.Key(Cita, tmp['id'])
                viejo = llave.get()
                if viejo:
                    rta = comun.llenarYpersistir(Cita, viejo, tmp, None)
            else:
                nuevo = Cita()
                rta = comun.llenarYpersistir(Cita, nuevo, tmp, None)
            response.write(simplejson.dumps({'error': 0, 'rta': rta}))

        def buscar(request):
            ti = request.GET.get('start', to)
            tf = request.GET.get('end', to)
            persona = request.GET.get('persona', None)
            varn = request.GET.get('n', 100)
            varnext = request.GET.get('next', '')

            varti = datetime.datetime.strptime(ti, "%Y-%m-%d")
            vartf = datetime.datetime.strptime(tf, "%Y-%m-%d")

            varttitext = varti.strftime("%Y, %m, %d, %H, %M, %S")
            varttftext = vartf.strftime("%Y, %m, %d, %H, %M, %S")

            #Recordar que GQL no tiene OR! Ademas no puedo usar dos variables para start <= X and end <=
            busqueda = "SELECT * FROM Cita "
            busqueda += "WHERE "
            busqueda += "start >= DATETIME(" + varttitext + ") AND start <= DATETIME(" + varttftext + ") "
            if persona != None:
                busqueda += "and persona=" + persona + " "
            busqueda += "ORDER BY start ASC"

            objeto = comun.buscarGQL({
                "q": busqueda,
                "n": long(varn),
                "next": varnext
            })
            return objeto

        if request.method == 'GET':
            objeto = buscar(request)

            entidades = comun.to_dict(objeto['datos'], 'to_dict2')
            #if (objeto.has_key('next')):
            #    cursor = objeto['next']
            #response.write(simplejson.dumps({'error':0, 'entidades': entidades, 'next': cursor}))
            response.write(simplejson.dumps(entidades))

        if request.method == 'DELETE':
            miid = request.GET.get('id', None)

            llave = ndb.Key(Cita, long(miid))
            llave.delete()

            response.write(simplejson.dumps({'error': 0, 'borradas': 1}))

    except Exception, e:
        logging.error(str(e))
        response.write(
            simplejson.dumps({
                'error': 1,
                'msg': 'Error de servidor: ' + str(e)
            }))
コード例 #6
0
def ApiRestHandler(request, ident, val2):
    response = HttpResponse("", content_type='application/json')
    ahora = datetime.datetime.now()
    cursor = None
    TOKEN_VERSION = 1;
    TOKEN_SEPARADOR = ":"
    
    def generarToken():
        return base64.b64encode(str(TOKEN_VERSION)+TOKEN_SEPARADOR+str(time.mktime(ahora.timetuple())))
    
    def decodificarToken(token):
        try:
            texto = base64.b64decode(token)
            partes = texto.split(TOKEN_SEPARADOR)
            versionToken = int(partes[0])
            ultimaModificacion = float(partes[1])
            if versionToken < TOKEN_VERSION:
                return None
            return datetime.datetime.fromtimestamp(ultimaModificacion)
        except:
            raise Exception('Token no se puede decodificar')
    
    try:
        
        def buscar(request, fechaToken):
            #Para paginacion
            varn = request.GET.get('n', 100)
            varnext = request.GET.get('next', '')
            
            argumentos = {}
            if fechaToken == None:
                argumentos = {"borrado":None}
                busqueda = "SELECT * FROM Evento WHERE borrado = :borrado"
            else:
                argumentos = {"modificado":fechaToken}
                busqueda = "SELECT * FROM Evento WHERE modificado >= :modificado"
            objeto = comun.buscarGQL2({"q":busqueda, "n":long(varn), "next": varnext, "argumentos": argumentos})
            return objeto
        
        def limpiarModelo(dato, tipo):
            #metadata interna
            if (tipo == 'PUT'):
                if dato.has_key('borrado'):
                    del dato['borrado']
                if dato.has_key('id'):
                    del dato['id']
            if (tipo == 'GET'):
                if not dato.has_key('borrado') or dato['borrado'] == None:
                    dato['borrado'] = False
            if dato.has_key('modificado'):
                del dato['modificado']
            return dato
        
        def predeterminados(dato, tipo):
            if not dato.has_key('fecha'):
                dato['fecha'] = time.mktime(ahora.timetuple())
            if not dato.has_key('titulo'):
                dato['titulo'] = 'Evento en '+ahora.strftime("%Y, %m, %d, %H, %M, %S")
            if not dato.has_key('descripcion'):
                dato['descripcion'] = 'Descripcion de evento en '+ahora.strftime("%Y, %m, %d, %H, %M, %S")
            return limpiarModelo(dato, tipo)
        
        if request.method == 'GET':
            #Para sincronizacion
            token = request.GET.get('token', None)
            fechaToken = None
            if token != None:
                fechaToken = decodificarToken(token)
                token = generarToken()
            else:
                token = generarToken()
            
            objeto = buscar(request, fechaToken)
            entidades = comun.to_dict(objeto['datos'])
            if (objeto.has_key('next')):
                cursor = objeto['next']
            entidades2 = []
            for val in entidades:
                entidades2.append(limpiarModelo(val, 'GET'))
            response.write(simplejson.dumps({'error':0, 'entidades': entidades2, 'next': cursor, 'token': token}))
        
        if request.method == 'PUT':
            #Crea o actualiza
            tmp = {}
            if (request.raw_post_data):
                tmp = simplejson.loads(request.raw_post_data)
            dato = predeterminados(tmp, 'PUT')
            rta = {}
            if (ident != None and len(ident) > 0):
                llave = ndb.Key(Evento, long(ident))
                viejo = llave.get()
                if viejo:
                    rta = comun.llenarYpersistir(Evento, viejo, dato, None)
                else:
                    raise Exception('Modelo no encontrado')
            else:
                nuevo = Evento()
                rta = comun.llenarYpersistir(Evento, nuevo, dato, None)
            response.write(simplejson.dumps({'error':0, 'rta':rta}))
            
        if request.method == 'DELETE':
            if (ident != None):
                llave = ndb.Key(Evento, long(ident))
                viejo = llave.get()
                if viejo:
                    viejo.borrado = True
                    viejo.put()
                    response.write(simplejson.dumps({'error':0}))
                else:
                    raise Exception('Modelo no encontrado')
            else:
                raise Exception('Debe proveer id')
            
        
    except Exception, e:
        response.write(simplejson.dumps({'error':1, 'mensaje': 'Error de servidor: '+str(e)}))