def get(self):
        """
        Gestiona las peticiones de tipo get (DAME-QUIERO) al recurso Alumnos


        /alumnos Devuelve una lista con todos los alumnos de la base de datos.
        /alumnos?dni=<dni del alumno> Devuelve todos los datos de un alumno en concreto.

        /alumnos/asignaturas?dni=<dniAlumno> Devuelve todas las asignaturas en la que está matriculado el estudiante.

        /alumnos/profesores?dni=<dniAlumno> Devuelve una lista con todos los profesores que imparten clase a ese alumno



        """
        #Si no se pasa como parámetro nada, se está pidiendo una lista simplificada de todos los alumnos de la base de datos.
        '''
        http://localhost:8080/alumnos
        '''
        if(self.request.get('dni')==''):

            print ("GET ALL ALUMNOS #######################")
            #Se está pidiendo que se devuelvan todos los alumnos
            listaAlumnos = GestorAlumnos.getAlumnos()


            #Una vez que tenemos la lista de aĺumnos convertimos los datos a JSON para enviarlos
            salida=""
            for alumno in listaAlumnos:
                salida+= str(json.dumps(alumno.__dict__))

            #print "Imprimiendo lista de alumnos"
            obj = jsonpickle.encode(listaAlumnos)
            #print str(obj)

            #Los enviamos
            self.response.write(obj)

        #En otro caso, se está pasando el dni del que se quiere toda su información al completo.
        else:
            print ("GET UN ALUMNO #######################")
            #Recuperamos el alumno pedido.
            alumno = GestorAlumnos.getAlumno(self.request.get('dni'))

            if(alumno!='Elemento no encontrado'):
                print "FECHA NACIMIENTO"
                #Tenemos que hacer esto para que no haya problemas al codificar con JSON el tipo de dato fecha nacimiento
                alumno.fecha_nac=str(alumno.fecha_nac)
                print alumno.fecha_nac

            #Si se trata de un error entonces se envía el error que nos devuelve el GestorAlumnos directamente

            #Enviamos el resultado en formato JSON
            self.response.write(jsonpickle.encode(alumno))
예제 #2
0
def modAlumnoCompleto(id_alumno):
    '''
    Función que modifica los atributos de un alumno dado su identificación, usando la función
    modAlumnoCompleto de la APIDB
    curl -d "nombre=Pedro&apellidos=Torrssr&dni=234242&direccion=Calle Duqesa&locia=Granada&fecha_nacimiento=1988-12-4&telefono=23287282" -i -X POST localhost:8002/alumnos/1
    '''
    if v:
        print 'Calling GestorAlumnos.modAlumnoCompleto()'
        print "Petición: "
        print request.form

    print 'aqui'
    imagen = request.form.get('imagen')

    print imagen

    salida= "";

    if imagen != None:
        print 'Calling with image'
        salida = GestorAlumnos.modAlumnoCompleto(
                                  id_alumno,
                                  request.form['nombre'].encode('latin-1'),
                                  request.form['apellidos'].encode('latin-1'),
                                  request.form['dni'].encode('latin-1'),
                                  request.form['direccion'].encode('latin-1'),
                                  request.form['localidad'].encode('latin-1'),
                                  request.form['provincia'].encode('latin-1'),
                                  request.form['fecha_nacimiento'].encode('latin-1'),
                                  request.form['telefono'].encode('latin-1'),
                                  request.form['imagen'])
    else:
        print 'Calling without image'
        salida = GestorAlumnos.modAlumnoCompleto(
                                  id_alumno,
                                  request.form['nombre'].encode('latin-1'),
                                  request.form['apellidos'].encode('latin-1'),
                                  request.form['dni'].encode('latin-1'),
                                  request.form['direccion'].encode('latin-1'),
                                  request.form['localidad'].encode('latin-1'),
                                  request.form['provincia'].encode('latin-1'),
                                  request.form['fecha_nacimiento'].encode('latin-1'),
                                  request.form['telefono'].encode('latin-1'))

    if v:
        print "SALIDA: "+str(salida)

    if salida == 'OK':
        return 'OK'
    else:
        return salida
예제 #3
0
def modAlumnoCompleto(id_alumno):
    '''
    Función que modifica los atributos de un alumno dado su identificación, usando la función
    modAlumnoCompleto de la APIDB
    curl -d "nombre=Pedro&apellidos=Torrssr&dni=234242&direccion=Calle Duqesa&locia=Granada&fecha_nacimiento=1988-12-4&telefono=23287282" -i -X POST localhost:8002/alumnos/1
    '''
    if v:
        print 'Calling GestorAlumnos.modAlumnoCompleto()'
        print "Petición: "
        print request.form

    print 'aqui'
    imagen = request.form.get('imagen')

    print imagen

    salida = ""

    if imagen != None:
        print 'Calling with image'
        salida = GestorAlumnos.modAlumnoCompleto(
            id_alumno, request.form['nombre'].encode('latin-1'),
            request.form['apellidos'].encode('latin-1'),
            request.form['dni'].encode('latin-1'),
            request.form['direccion'].encode('latin-1'),
            request.form['localidad'].encode('latin-1'),
            request.form['provincia'].encode('latin-1'),
            request.form['fecha_nacimiento'].encode('latin-1'),
            request.form['telefono'].encode('latin-1'), request.form['imagen'])
    else:
        print 'Calling without image'
        salida = GestorAlumnos.modAlumnoCompleto(
            id_alumno, request.form['nombre'].encode('latin-1'),
            request.form['apellidos'].encode('latin-1'),
            request.form['dni'].encode('latin-1'),
            request.form['direccion'].encode('latin-1'),
            request.form['localidad'].encode('latin-1'),
            request.form['provincia'].encode('latin-1'),
            request.form['fecha_nacimiento'].encode('latin-1'),
            request.form['telefono'].encode('latin-1'))

    if v:
        print "SALIDA: " + str(salida)

    if salida == 'OK':
        return 'OK'
    else:
        return salida
 def delete(self):
     """
     Función para eliminar un alumno
     Puede llamarse, pasándole parámetros desde terminal así:
     #curl -d "dni=456320" -X DELETE -G http://localhost:8002/alumnos
     """
     print "LLAMADA EN MAIN"+self.request.get('dni')+"yeah"
     #self.response.write("eliminando\n")
     #self.response.write("dni: "+self.request.get('dni')+"\n")
     self.response.write(GestorAlumnos.delAlumno(self.request.get('dni')))
예제 #5
0
def getAlumno(id_alumno):
    '''
    Devuelve todos los datos de un alumno buscado por su id
    en caso de existir en la base de datos.
    curl -i -X GET localhost:8002/alumnos/11223344A

    '''
    #Si no tiene el número correcto de caracteres el identificador.
    if len(id_alumno) != 9:
        abort(400)

    salida=GestorAlumnos.getAlumno(id_alumno)
    if salida=="Elemento no encontrado":
        #Enviamos el error de NotFound
        abort(404)
    else:
        print "Aquí: "
        print str(salida.fecha_nac)
        return jsonpickle.encode(GestorAlumnos.getAlumno(id_alumno))
예제 #6
0
def postAlumno():
    '''
    Método que inserta un nuevo alumno en el sistema.
    curl -d "nombre=Juan&dni=45601218Z&direccion=Calle arabl&localidad=Jerez de la frontera&provincia=Granada&fecha_nac=1988-2-6&telefono=677164459" -i -X POST localhost:8002/alumnos
    '''
    if 'dni' in request.form:
        #Presente el DNI al menos podemos grabar el alumno en el sistema.
        #Se devuelve la salida de control de
        salida = GestorAlumnos.nuevoAlumno(request.form['nombre'],
                                  request.form['dni'],
                                  request.form['direccion'],
                                  request.form['localidad'],
                                  request.form['provincia'],
                                  request.form['fecha_nac'],
                                  request.form['telefono'])
        if salida == 'OK':
            return 'OK'
        else:
            abort(404)
    else:
        abort(404)
예제 #7
0
def getAlumno(id_alumno):
    '''
    Devuelve todos los datos de un alumno buscado por su id
    en caso de existir en la base de datos.
    curl -i -X GET localhost:8002/alumnos/11223344A
    '''

    if v:
        print 'Calling GestorAlumnos.getAlumno(' + id_alumno + ')'

    #Si no tiene el número correcto de caracteres el identificador.
    #if len(id_alumno) != 9:
    #    abort(400)

    salida = GestorAlumnos.getAlumno(id_alumno)
    if salida == "Elemento no encontrado":
        #Enviamos el error de NotFound
        abort(404)
    else:
        #return jsonpickle.encode(GestorAlumnos.getAlumno(id_alumno), unpicklable=False)
        return jsonpickle.encode(salida, unpicklable=False)
예제 #8
0
def getAlumno(id_alumno):
    '''
    Devuelve todos los datos de un alumno buscado por su id
    en caso de existir en la base de datos.
    curl -i -X GET localhost:8002/alumnos/11223344A
    '''

    if v:
        print 'Calling GestorAlumnos.getAlumno('+id_alumno+')'

    #Si no tiene el número correcto de caracteres el identificador.
    #if len(id_alumno) != 9:
    #    abort(400)

    salida=GestorAlumnos.getAlumno(id_alumno)
    if salida=="Elemento no encontrado":
        #Enviamos el error de NotFound
        abort(404)
    else:
        #return jsonpickle.encode(GestorAlumnos.getAlumno(id_alumno), unpicklable=False)
        return jsonpickle.encode(salida, unpicklable=False)
예제 #9
0
def delAlumno(id_alumno):
    '''
    curl -i -X DELETE localhost:8080/alumnos/11223344A
    Si el alumno no se encuentra se devuelve: "Elemento no encontrado".

    Si la solicitud se realiza con un identificador de alumno que
    no cumple con ciertos requisitos como la longitud = 9, se devuelve
    el error 400 - Bad request, que significa que la solicitud contiene
    sintaxis errónea y no debería repetirse.

    Si la solicitud tiene la sintaxis correcta pero no existe el recurso
    el error es el 404 - Not found, significa recurso no encontrado,
    identificia que el servidor no ha encontrado el recurso solicitado.

    '''
    #if len(id_alumno) != 9:
    #    abort(400)

    salida = GestorAlumnos.delAlumno(id_alumno)
    if salida=="Elemento no encontrado":
        abort(404)
    else:
        return 'Elemento eliminado'
    def post(self):
        """
        Función para añadir un nuevo alumno a la base de datos.
        """

        print ("post in alumnos")
        print self.request.get('nombre')
        print self.request.get('dni')

        #Grabamos los datos en la base de datos:

        salida=GestorAlumnos.nuevoAlumno(self.request.get('nombre'), self.request.get('dni'))


        #Recogemos los atributos de la petición y los imprimimos
        #self.response.write("nombre: "+self.request.get('nombre')+"\n")
        #self.response.write("dni: "+self.request.get('dni')+"\n")
        '''
        Salida:
        nombre: JuanAntonio
        dni: 456320
        '''
        self.response.write(salida)
예제 #11
0
def delAlumno(id_alumno):
    '''
    curl -i -X DELETE localhost:8080/alumnos/11223344A
    Si el alumno no se encuentra se devuelve: "Elemento no encontrado".

    Si la solicitud se realiza con un identificador de alumno que
    no cumple con ciertos requisitos como la longitud = 9, se devuelve
    el error 400 - Bad request, que significa que la solicitud contiene
    sintaxis errónea y no debería repetirse.

    Si la solicitud tiene la sintaxis correcta pero no existe el recurso
    el error es el 404 - Not found, significa recurso no encontrado,
    identificia que el servidor no ha encontrado el recurso solicitado.

    '''
    #if len(id_alumno) != 9:
    #    abort(400)

    salida = GestorAlumnos.delAlumno(id_alumno)
    if salida == "Elemento no encontrado":
        abort(404)
    else:
        return 'Elemento eliminado'
예제 #12
0
def getClasesAlumnos(id_alumno):
    '''
    Devuelve las clases a en las que está matriculado el alumno, como 1AESO o 2CBACH.
    curl -i -X GET localhost:8002/alumnos/1/clases
    '''
    return jsonpickle.encode(GestorAlumnos.getClases(id_alumno))
예제 #13
0
def getAsignaturasAlumno(id_alumno):
    '''
    curl -i -X GET localhost:8002/alumnos/1/asignaturas
    '''
    return jsonpickle.encode(GestorAlumnos.getAsignaturas(id_alumno))
예제 #14
0
def getProfesoresAlumno(id_alumno):
    '''
    Devuelve todos los profesores que imparten clase a ese alumno.
    curl -i -X GET localhost:8002/alumnos/1/profesores
    '''
    return jsonpickle.encode(GestorAlumnos.getProfesores(id_alumno))
예제 #15
0
def getAsignaturasAlumno(id_alumno):
    '''
    curl -i -X GET localhost:8002/alumnos/1/asignaturas
    '''
    return jsonpickle.encode(GestorAlumnos.getAsignaturas(id_alumno))
예제 #16
0
def getProfesoresAlumno(id_alumno):
    '''
    Devuelve todos los profesores que imparten clase a ese alumno.
    curl -i -X GET localhost:8002/alumnos/1/profesores
    '''
    return jsonpickle.encode(GestorAlumnos.getProfesores(id_alumno))
예제 #17
0
def getClasesAlumnos(id_alumno):
    '''
    Devuelve las clases a en las que está matriculado el alumno, como 1AESO o 2CBACH.
    curl -i -X GET localhost:8002/alumnos/1/clases
    '''
    return jsonpickle.encode(GestorAlumnos.getClases(id_alumno))
예제 #18
0
def getAlumnos():
    '''
    Devuelve una lista de todos los estudiantes.
    curl -i -X GET localhost:8002/alumnos
    '''
    return jsonpickle.encode(GestorAlumnos.getAlumnos())
예제 #19
0
def getAlumnos():
    return jsonpickle.encode(GestorAlumnos.getAlumnos())
예제 #20
0
def postAlumno():
    '''
    Método que inserta un nuevo alumno en el sistema.
    curl -d "nombre=Juan&apellidos=Fernandez&dni=45601218&direccion=Calle arabl&localidad=Jerez de la frontera&provincia=Granada&fecha_nacimiento=1988-2-6&telefono=677164459" -i -X POST localhost:8002/alumnos
    '''
    if v:
        print nombreMicroservicio
        print 'Recurso: /alumnos , metodo: POST'
        print "Petición: "
        print request.form

        print 'aqui'
        imagen = request.form.get('imagen')

        #print imagen

        salida= "";

    if imagen != None:
        print 'Calling with image'
        salida = GestorAlumnos.nuevoAlumno(request.form['nombre'].encode('latin-1'),
                                  request.form['apellidos'].encode('latin-1'),
                                  request.form['dni'].encode('latin-1'),
                                  request.form['direccion'].encode('latin-1'),
                                  request.form['localidad'].encode('latin-1'),
                                  request.form['provincia'].encode('latin-1'),
                                  request.form['fecha_nacimiento'].encode('latin-1'),
                                  request.form['telefono'].encode('latin-1'),
                                  request.form['imagen'])
    else:
        print 'Calling without image'
        salida = GestorAlumnos.nuevoAlumno(request.form['nombre'].encode('latin-1'),
                                  request.form['apellidos'].encode('latin-1'),
                                  request.form['dni'].encode('latin-1'),
                                  request.form['direccion'].encode('latin-1'),
                                  request.form['localidad'].encode('latin-1'),
                                  request.form['provincia'].encode('latin-1'),
                                  request.form['fecha_nacimiento'].encode('latin-1'),
                                  request.form['telefono'].encode('latin-1'))


    if salida['status'] == 'OK':

        #Una vez insertada la asignatura en el SBD llamamos al servicio SCE para que actualice su sistema (### DISPARADOR ###)

        #Conformamos la dirección:
        module = modules.get_current_module_name()
        url = "http://%s/" % modules.get_hostname(module="sce")
        #Añadimos el servicio al que queremos conectarnos.
        url+="alumnos"

        #Creamos un diccionario con los datos.
        datos = {
          "idAlumno": salida['idAlumno'],
          "nombreAlumno": request.form['nombre']+' '+request.form['apellidos'],
        }
        form_data = urllib.urlencode(datos)
        result=urlfetch.fetch(url=url, payload=form_data, method=urlfetch.POST)
        print 'yeahhhhhhhhhhhhhhhhhhhhhhhhhh';
        print result.content
        json = jsonpickle.decode(result.content)
        if json['status']!='OK':
            salida['status']='SCE ERROR'

    if v:
        print ' Return: '+str(salida)

    return jsonpickle.encode(salida)
예제 #21
0
def getAlumnos():
    '''
    Devuelve una lista de todos los estudiantes.
    curl -i -X GET localhost:8002/alumnos
    '''
    return jsonpickle.encode(GestorAlumnos.getAlumnos())
예제 #22
0
def postAlumno():
    '''
    Método que inserta un nuevo alumno en el sistema.
    curl -d "nombre=Juan&apellidos=Fernandez&dni=45601218&direccion=Calle arabl&localidad=Jerez de la frontera&provincia=Granada&fecha_nacimiento=1988-2-6&telefono=677164459" -i -X POST localhost:8002/alumnos
    '''
    if v:
        print nombreMicroservicio
        print 'Recurso: /alumnos , metodo: POST'
        print "Petición: "
        print request.form

        print 'aqui'
        imagen = request.form.get('imagen')

        #print imagen

        salida = ""

    if imagen != None:
        print 'Calling with image'
        salida = GestorAlumnos.nuevoAlumno(
            request.form['nombre'].encode('latin-1'),
            request.form['apellidos'].encode('latin-1'),
            request.form['dni'].encode('latin-1'),
            request.form['direccion'].encode('latin-1'),
            request.form['localidad'].encode('latin-1'),
            request.form['provincia'].encode('latin-1'),
            request.form['fecha_nacimiento'].encode('latin-1'),
            request.form['telefono'].encode('latin-1'), request.form['imagen'])
    else:
        print 'Calling without image'
        salida = GestorAlumnos.nuevoAlumno(
            request.form['nombre'].encode('latin-1'),
            request.form['apellidos'].encode('latin-1'),
            request.form['dni'].encode('latin-1'),
            request.form['direccion'].encode('latin-1'),
            request.form['localidad'].encode('latin-1'),
            request.form['provincia'].encode('latin-1'),
            request.form['fecha_nacimiento'].encode('latin-1'),
            request.form['telefono'].encode('latin-1'))

    if salida['status'] == 'OK':

        #Una vez insertada la asignatura en el SBD llamamos al servicio SCE para que actualice su sistema (### DISPARADOR ###)

        #Conformamos la dirección:
        module = modules.get_current_module_name()
        url = "http://%s/" % modules.get_hostname(module="sce")
        #Añadimos el servicio al que queremos conectarnos.
        url += "alumnos"

        #Creamos un diccionario con los datos.
        datos = {
            "idAlumno":
            salida['idAlumno'],
            "nombreAlumno":
            request.form['nombre'] + ' ' + request.form['apellidos'],
        }
        form_data = urllib.urlencode(datos)
        result = urlfetch.fetch(url=url,
                                payload=form_data,
                                method=urlfetch.POST)
        print 'yeahhhhhhhhhhhhhhhhhhhhhhhhhh'
        print result.content
        json = jsonpickle.decode(result.content)
        if json['status'] != 'OK':
            salida['status'] = 'SCE ERROR'

    if v:
        print ' Return: ' + str(salida)

    return jsonpickle.encode(salida)
예제 #23
0
def getProfesoresAlumno(id_alumno):
    '''
    curl -i -X GET localhost:8080/alumnos/1/profesores
    '''
    return jsonpickle.encode(GestorAlumnos.getProfesores(id_alumno))