Ejemplo n.º 1
0
 def retrieve(self, ninja_id):
     # TODO: Obtener los datos del ninja que nos llega como parametro consultando en model.Ninja
     # asignandolo a un objeto llamado ninja que será el que luego se use en la sentencia if
     if ninja is None:
         send(self, 404)
     else:
         send(self, 200, ninja)
Ejemplo n.º 2
0
 def retrieve(self, mooc_id):
     # En este metodo recuperamos un determinado mooc a partir de su mooc_id
     mooc = model.Mooc.get_by_id(int(mooc_id))
     if mooc is None:
         send(self, 404)
     else:
         send(self, 200, mooc)
Ejemplo n.º 3
0
    def ranking(self):
        # Obtengo todos los moocs pero ordenados por el ID del ninja
        moocs = model.Mooc.query().order(model.Mooc.ninja_id).fetch()

        # Solution 1
        ranking = sorted([
            {'ninja_id': ninja_id, 'points': self.sum_moocs(ninja_moocs)}
            for ninja_id, ninja_moocs in groupby(moocs, key=lambda x: x.ninja_id)
        ], key=lambda n: - n['points'])

        # Solution 2
        #points = {}
        #for mooc in moocs:
        #    if mooc.ninja_id in points:
        #        points[mooc.ninja_id] += mooc.points
        #    else:
        #        points[mooc.ninja_id] = mooc.points
        #ranking = []
        #for ninja in points:
        #    ranking.append({'ninja_id': ninja, 'points': points[ninja]})
        #ranking = sorted(ranking, key=lambda n: - n['points'])

        # Recuperar información de cada usuario
        ninjas = ndb.get_multi([ndb.Key(model.Ninja, id) for id in map(lambda x: x['ninja_id'], ranking)])
        for i in range(len(ranking)):
            self.ninja_info(ranking[i], ninjas[i])

        send(self, 200, ranking)
Ejemplo n.º 4
0
 def delete(self, ninja_id):
     # Obtenemos el ninja a eliminar a partir de su ID
     ninja = model.Ninja.get_by_id(int(ninja_id))
     if ninja is None:
         send(self, 404)
     else:
         ninja.key.delete()
         send(self, 204)
Ejemplo n.º 5
0
 def delete(self, mooc_id):
     # Elimina un determinado mooc
     mooc = model.Mooc.get_by_id(int(mooc_id))
     if mooc is None:
         send(self, 404)
     else:
         mooc.key.delete()
         send(self, 204)
Ejemplo n.º 6
0
 def list(self):
     # TODO: Incluir traza de log indicando que has accedido al metodo
     department = self.request.get('department', default_value=None)
     # TODO: Modificar para incluir el poder filtrar por departamento
     if department is None:
         ninjas = model.Ninja.query().order(model.Ninja.name).fetch()
     else:
         ninjas = model.Ninja.query().order(model.Ninja.name).fetch()
     send(self, 200, ninjas)
Ejemplo n.º 7
0
 def list(self):
     department = self.request.get('department', default_value=None)
     if department is None:
         ninjas = model.Ninja.query().order(model.Ninja.name).fetch()
     else:
         ninjas = model.Ninja.query(
             model.Ninja.department == department).order(
                 model.Ninja.name).fetch()
     send(self, 200, ninjas)
Ejemplo n.º 8
0
 def list(self):
     # A partir del ninja_id obtenemos todos sus moocs
     ninja_id = self.request.get('ninja_id', default_value=None)
     if ninja_id is None:
         moocs = model.Mooc.query().order(model.Mooc.date).fetch()
     else:
         moocs = model.Mooc.query(
             model.Mooc.ninja_id == int(ninja_id)).order(
                 model.Mooc.date).fetch()
     send(self, 200, moocs)
Ejemplo n.º 9
0
 def create(self):
     # Se ejecuta al guardar los datos de un mooc en su mantenimiento
     mooc_data = read_body(self)
     if mooc_data is None:
         send(self, 400)  # Bad Request
     else:
         ninja = model.Ninja.get_by_id(mooc_data['ninja_id'])
         if ninja is None:
             send(self, 404)
         else:
             mooc = model.Mooc()
             try:
                 Moocs.save_mooc(mooc, mooc_data)
             except KeyError as e:
                 send(self, 400, "No se encuentra la propiedad: %s" % e.message)  # Bad Request
                 logging.info("WNP: No se encuentra la propiedad: %s", e.message)
                 return
             except BadValueError as e:
                 send(self, 400, "Valor incorrecto: %s" % e.message)
                 logging.info("WNP: Valor incorrecto: %s", e.message)
                 return
             send(self, 201, mooc)
Ejemplo n.º 10
0
 def update(self, ninja_id):
     # TODO: Obtenemos el ninja a modificar a partir de su ID que nos llega como parametro
     if ninja is None:
         send(self, 404)
     else:
         # Recogemos los campos introducidos por el usuario
         ninja_data = read_body(self)
         if ninja_data is None:
             send(self, 400)  # Bad Request
         else:
             try:
                 Ninjas.save_ninja(ninja, ninja_data)
             except KeyError as e:
                 send(self, 400, "No se encuentra la propiedad: %s" % e.message)  # Bad Request
                 logging.info("WNP: No se encuentra la propiedad: %s", e.message)
                 return
             send(self, 200, ninja)
Ejemplo n.º 11
0
 def create(self):
     # Recogemos los campos introducidos por el usuario
     ninja_data = read_body(self)
     # TODO: Mostrar en logs el contenido de la variable ninja_data
     if ninja_data is None:
         send(self, 400) # Bad Request
     else:
         # Creamos un objeto ninja a partir de la clase Ninja(model.py), en él guardaremos los campos del formulario
         ninja = model.Ninja()
         # Asignamos y reservamos un id
         first, last = model.Ninja.allocate_ids(1)
         # Generamos una clave única a partir del id
         ninja.key = ndb.Key(model.Ninja, first)
         try:
             Ninjas.save_ninja(ninja, ninja_data)
         except KeyError as e:
             send(self, 400, "No se encuentra la propiedad: %s" % e.message)  # Bad Request
             logging.info("WNP: No se encuentra la propiedad: %s", e.message)
             return
         send(self, 201, ninja)
Ejemplo n.º 12
0
 def retrieve(self, ninja_id):
     ninja = model.Ninja.get_by_id(int(ninja_id))
     if ninja is None:
         send(self, 404)
     else:
         send(self, 200, ninja)
Ejemplo n.º 13
0
 def delete(self, ninja_id):
     # TODO: Obtenemos el ninja a eliminar a partir de su ID y procedemos a su borrado
     if ninja is None:
         send(self, 404)
     else:
         send(self, 204)
Ejemplo n.º 14
0
 def points(self, ninja_id):
     moocs = model.Mooc.query(model.Mooc.ninja_id == int(ninja_id)).fetch()
     points = {'ninja_id': int(ninja_id), 'points': self.sum_moocs(moocs)}
     self.ninja_info(points, model.Ninja.get_by_id(int(ninja_id)))
     send(self, 200, points)
Ejemplo n.º 15
0
 def delete(self, mooc_id):
     # TODO: Completa el método para elimina un determinado mooc
     if mooc is None:
         send(self, 404)
     else:
         send(self, 204)
Ejemplo n.º 16
0
 def list(self):
     # TODO: Obtener los moocs de un determinado ninja que podemos obtener de variable 'ninja_id' de la request
     # Mostrar los moocs ordenados por model.Mooc.date
     send(self, 200, moocs)
Ejemplo n.º 17
0
 def retrieve(self, mooc_id):
     # TODO: En este metodo recuperamos un determinado mooc a partir de su mooc_id
     if mooc is None:
         send(self, 404)
     else:
         send(self, 200, mooc)