20
20
#Para el descubrimiento de los módulos
21
21
import urllib2
22
22
from google .appengine .api import modules
23
+ #Para la decodificaciónd e los datos recibidos en JSON desde las APIs
24
+ import jsonpickle
23
25
24
26
25
- import jsonpickle
26
27
#Variable habilitadora del modo verbose
27
28
v = True
28
29
@@ -72,7 +73,41 @@ class DNI(messages.Message):
72
73
class ListaAlumnos (messages .Message ):
73
74
alumnos = messages .MessageField (Alumno , 1 , repeated = True )
74
75
76
+ class Profesor (message .Message ):
77
+ nombre = messages .StringField (1 )
78
+ dni = messages .StringField (2 )
79
+
80
+ class ProfesorCompleto (messages .Message ):
81
+ nombre = messages .StringField (1 )
82
+ dni = messages .StringField (2 )
83
+ direccion = messages .StringField (3 )
84
+ localidad = messages .StringField (4 )
85
+ provincia = messages .StringField (5 )
86
+ fecha_nac = messages .StringField (6 )
87
+ telefonoA = messages .StringField (7 )
88
+ telefonoB = messages .StringField (8 )
89
+
90
+ class ListaProfesores (messages .Message ):
91
+ profesores = messages .MessageField (Profesor , 1 , repeated = True )
92
+
93
+ class Asignatura (messages .Message ):
94
+ id = messages .StringField (1 )
95
+ nombre = messages .StringField (2 )
96
+
97
+ class ListaAsignaturas (messages .Message ):
98
+ asignaturas = messages .MessageField (Asignatura , 1 , repeated = True )
75
99
100
+ class Curso (messages .Message ):
101
+ id = messages .StringField (1 )
102
+ curso = messages .StringField (2 )
103
+ grupo = messages .StringField (3 )
104
+ nivel = messages .StringField (4 )
105
+
106
+ class ListaCursos (messages .Message ):
107
+ cursos = messages .MessageField (Curso , 1 , repeated = True )
108
+
109
+
110
+ #Decorador que establace nombre y versión de la api
76
111
@endpoints .api (name = 'helloworld' , version = 'v1' )
77
112
78
113
class HelloWorldApi (remote .Service ):
@@ -105,11 +140,8 @@ def getAlumnos(self, unused_request):
105
140
106
141
#Conexión a un microservicio específico:
107
142
108
- from google .appengine .api import modules
109
143
module = modules .get_current_module_name ()
110
144
instance = modules .get_current_instance_id ()
111
- import urllib2
112
- from google .appengine .api import modules
113
145
114
146
#Le decimos a que microservicio queremos conectarnos (solo usando el nombre del mismo), GAE descubre su URL solo.
115
147
url = "http://%s/" % modules .get_hostname (module = "microservicio1" )
@@ -119,9 +151,6 @@ def getAlumnos(self, unused_request):
119
151
#result = urllib2.urlopen(url)
120
152
#print result
121
153
122
- #Envío de su resultado
123
- from google .appengine .api import urlfetch
124
-
125
154
#Llamamos al microservicio y recibimos los resultados con URLFetch
126
155
#Al no especificar nada se llama al método GET de la URL.
127
156
result = urlfetch .fetch (url )
@@ -338,6 +367,159 @@ def eliminar_alumno(self, request):
338
367
return MensajeRespuesta (message = result .content )
339
368
340
369
370
+ '''
371
+ Devuelve una lista con los datos completos de los profesores que dan clase al alumno de dni pasado
372
+ curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumnos/getProfesoresAlumno?dni=1
373
+ '''
374
+ @endpoints .method (DNI , ListaProfesores , path = 'alumnos/getProfesoresAlumno' , http_method = 'GET' , name = 'alumnos.getProfesoresAlumno' )
375
+ def getProfesoreAlumno (self , request ):
376
+ #Transformación de la llamada al endpoints a la llamada a la api rest del servicio.
377
+ if v :
378
+ print ("Ejecución de getProfesoresAlumno en apigateway" )
379
+
380
+ #Conexión a un microservicio específico:
381
+
382
+ module = modules .get_current_module_name ()
383
+ instance = modules .get_current_instance_id ()
384
+ #Le decimos a que microservicio queremos conectarnos (solo usando el nombre del mismo), GAE descubre su URL solo.
385
+ url = "http://%s/" % modules .get_hostname (module = "microservicio1" )
386
+
387
+ #Añadimos a la url la coleccion (alumnos), el recurso (alumno dado por su dni) y el recurso anidado de este (profesores)
388
+ url += 'alumnos/' + request .dni + "/profesores"
389
+
390
+ #Realizamos la petición
391
+ result = urlfetch .fetch (url )
392
+
393
+ #Vamos a intentar consumir los datos en JSON y convertirlos a un mensje enviable :)
394
+
395
+ print "IMPRESION DE LOS DATOS RECIBIDOS"
396
+ print result .content
397
+ listaProfesores = jsonpickle .decode (result .content )
398
+
399
+ #Creamos un vector
400
+ profesoresItems = []
401
+ #Que rellenamos con todo los alumnos de la listaAlumnos
402
+ for profesor in listaProfesores :
403
+ profesoresItems .append (ProfesorCompleto ( nombre = str (profesor .get ('nombre' )),
404
+ dni = str (profesor .get ('dni' )),
405
+ direccion = str (profesor .get ('direccion' )),
406
+ localidad = str (profesor .get ('localidad' )),
407
+ provincia = str (profesor .get ('provincia' )),
408
+ fecha_nac = str (profesor .get ('fecha_nac' )),
409
+ telefonoA = str (profesor .get ('telefonoA' )),
410
+ telefonoB = str (profesor .get ('telefonoB' ))
411
+ )
412
+ )
413
+
414
+ #Los adaptamos al tipo de mensaje y enviamos
415
+ #return Greeting(message=str(result.content))
416
+ return ListaProfesores (profesores = profesoresItems )
417
+
418
+
419
+ '''
420
+ Devuelve una lista con los datos completos de las asignatuas en las que está matriculado el alumno con dni pasado.
421
+ Ejemplo de llamada:
422
+ > curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumos/getAsignaturasAlumno?dni=1
423
+ '''
424
+ @endpoints .method (DNI , ListaAsignaturas , path = 'alumnos/getAsignaturasAlumno' , http_method = 'GET' , name = 'alumnos.getAsignaturasAlumno' )
425
+ def getAsignaturasAlumno (self , request ):
426
+ if v :
427
+ print ("Ejecución de getAsignaturasAlumno en apigateway" )
428
+ module = modules .get_current_module_name ()
429
+ instance = modules .get_current_instance_id ()
430
+ url = "http://%s/" % modules .get_hostname (module = "microservicio1" )
431
+ url += 'alumnos/' + request .dni + "/asignaturas"
432
+ result = urlfetch .fetch (url )
433
+ if v :
434
+ print result .content
435
+ listaAsignaturas = jsonpickle .decode (result .content )
436
+ print listaAsignaturas
437
+ asignaturasItems = []
438
+ for asignatura in listaAsignaturas :
439
+ asignaturasItems .append ( Asignatura ( id = str (asignatura .get ('id' )), nombre = str (asignatura .get ('nombre' )) ) )
440
+ return ListaAsignaturas (asignaturas = asignaturasItems )
441
+
442
+
443
+ '''
444
+ Devuelve una lista con los datos completos de las cursos en las que está matriculado el alumno con dni pasado.
445
+ Ejemplo de llamada:
446
+ > curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumos/getCursosAlumno?dni=1
447
+ '''
448
+ @endpoints .method (DNI , ListaCursos , path = 'alumnos/getCursosAlumno' , http_method = 'GET' , name = 'alumnos.getCursosAlumno' )
449
+ def getCursosAlumno (self , request ):
450
+ if v :
451
+ print ("Ejecución de getCursosAlumno en apigateway" )
452
+ module = modules .get_current_module_name ()
453
+ instance = modules .get_current_instance_id ()
454
+ url = "http://%s/" % modules .get_hostname (module = "microservicio1" )
455
+ url += 'alumnos/' + request .dni + "/cursos"
456
+ result = urlfetch .fetch (url )
457
+ if v :
458
+ print result .content
459
+ listaCursos = jsonpickle .decode (result .content )
460
+ print listaCursos
461
+ cursosItems = []
462
+ for curso in listaCursos :
463
+ cursosItems .append (Curso (id = str (curso .get ('id' )),curso = str (curso .get ('nombre' )),grupo = str (curso .get ('grupo' )),nivel = str (curso .get ('nivel' ))))
464
+ return ListaCursos (cursos = cursosItems )
465
+
466
+
467
+
468
+ ##############################################
469
+ # FUNCIONES PARA ENTIDADES PROFESORES #
470
+ ##############################################
471
+
472
+
473
+ @endpoints .method (message_types .VoidMessage , ListaProfesores ,
474
+ path = 'profesores/getProfesores' , http_method = 'GET' ,
475
+ name = 'profesores.getProfesores' )
476
+ def getProfesores (self , unused_request ):
477
+ '''
478
+ Devuelve una lista con todos los profesores registrados en el sistema, de forma simplificada (solo nombre y DNI)
479
+
480
+ Llamada desde terminal:
481
+ curl -X GET localhost:8001/_ah/api/helloworld/v1/profesores/getProfesores
482
+ Llamada desde JavaScript:
483
+ response =service.profesores.getProfesores().execute()
484
+ '''
485
+ #Identificación del módulo en el que estamos.
486
+ module = modules .get_current_module_name ()
487
+ instance = modules .get_current_instance_id ()
488
+
489
+ #Le decimos a que microservicio queremos conectarnos (solo usando el nombre del mismo), GAE descubre su URL solo.
490
+ url = "http://%s/" % modules .get_hostname (module = "microservicio1" )
491
+ #Añadimos el recurso al que queremos conectarnos.
492
+ url += "profesores"
493
+ if v :
494
+ print str (url )
495
+ #Al no especificar nada se llama al método GET de la URL.
496
+ result = urlfetch .fetch (url )
497
+ if v :
498
+ print result .content
499
+ listaProfesores = jsonpickle .decode (result .content )
500
+
501
+ #Creamos un vector
502
+ profesoresItems = []
503
+ #Que rellenamos con todo los profesores de la listaProfesores
504
+ for profesore in listaProfesores :
505
+ profesoresItems .append (Profesor ( nombre = str (alumno .get ('nombre' )), dni = str (alumno .get ('dni' )) ))
506
+
507
+ #Los adaptamos al tipo de mensaje y enviamos
508
+ #return Greeting(message=str(result.content))
509
+ return ListaAlumnos (alumnos = alumnosItems )
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
341
523
342
524
343
525
APPLICATION = endpoints .api_server ([HelloWorldApi ])
0 commit comments