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