def delete(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad", id_utr: str = "id utr"): """ Elimina una lista de tags basado en las ids de Nodo, Entidad, UTR Id nodo: id único del nodo Id entidad: id único de la entidad Id UTR: id o código único de la UTR <b>404</b> Si el nodo, entidad o UTR no existe """ request_data = dict(request.json) nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 for ix, _utr in enumerate(nodo.entidades[idx].utrs): if _utr.id_utr == id_utr or _utr.utr_code == id_utr: tag_names = request_data["tags"] success, ( n_remove, msg) = nodo.entidades[idx].utrs[ix].remove_tags(tag_names) if not success: return dict(success=success, msg=msg), 409 nodo.save() tags = [t.to_dict() for t in nodo.entidades[idx].utrs[ix].tags] return dict(success=success, msg=f"TAGS: -eliminadas: {n_remove} " f"-no encontradas: {len(tag_names) - n_remove}", tags=tags), 200 return dict(success=False, msg="No se encuentra la UTR"), 404
def post(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad"): """ Ingresa una nueva RTU en una entidad si esta no existe, caso contrario la edita Id nodo: id único del nodo Id entidad: id único de la entidad <b>404</b> Si el nodo o la entidad no existe """ request_data = dict(request.json) nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 rtu = SRUTR(**request_data) success, msg = nodo.entidades[idx].add_or_rename_utrs([rtu]) utrs = nodo.entidades[idx].utrs if success: # rtu.create_consignments_container() nodo.save() return dict(success=success, utrs=[u.to_dict() for u in utrs], msg=msg), 200 else: return dict(success=success, utrs=[u.to_dict() for u in utrs], msg=msg), 409
def post(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad", id_utr: str = "id utr"): """ Ingresa una lista de TAGS en una UTR si estas no existen, caso contrario las edita Id nodo: id único del nodo Id entidad: id único de la entidad Id UTR: id o código único de la UTR <b>404</b> Si el nodo o la entidad no existe """ request_data = dict(request.json) nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 for ix, _utr in enumerate(nodo.entidades[idx].utrs): if _utr.id_utr == id_utr or _utr.utr_code == id_utr: SRTags, n_valid = list(), 0 for tag in request_data["tags"]: if len(str(tag["tag_name"]).strip()) <= 4 or len( str(tag["filter_expression"]).strip()) == 0: continue SRTags.append( SRTag(tag_name=str(tag["tag_name"]).strip(), filter_expression=str( tag["filter_expression"]).strip(), activado=tag["activado"])) n_valid += 1 n_tags = len(nodo.entidades[idx].utrs[ix].tags) success, msg = nodo.entidades[idx].utrs[ ix].add_or_replace_tags(SRTags) if success and n_valid > 0: nodo.save() tags = [ t.to_dict() for t in nodo.entidades[idx].utrs[ix].tags ] n_inserted = len(tags) - n_tags n_edited = n_valid - n_inserted msg = f"TAGS: -insertadas {n_inserted} -editadas {n_edited} " return dict(success=success, msg=msg, tags=tags), 200 if n_valid == 0: return dict(success=False, msg="No hay Tags válidas a ingresar"), 409 return dict(success=success, msg=msg), 409 return dict(success=False, msg="No se encuentra la UTR"), 404
def put(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad", id_utr: str = "id utr"): """ Edita una lista de TAGS en una UTR basado en tag_name_original de un archivo Excel Id nodo: id único del nodo Id entidad: id único de la entidad Id UTR: id o código único de la UTR <b>404</b> Si el nodo, entidad o UTR no existe """ nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 # reading file for reading tag changes: args = dict(parsers.file_upload.parse_args()) success, df_edited_tags, msg = get_df_from_excel_streamed_file( args['file'], init.TEMP_REPO) if not success: return dict(success=False, msg=msg), 409 columns = [ 'tag_name', 'filter_expression', 'activado', 'edited', 'tag_name_original' ] success, no_ok = check_if_all_are_there(columns, to_check=list( df_edited_tags.columns)) if not success: return dict( success=False, msg= f"Las siguientes columnas [{no_ok}] no existen en el archivo") df_edited_tags = df_edited_tags[df_edited_tags["edited"] == True] df_edited_tags["activado"].fillna(False, inplace=True) tags_req = df_edited_tags[columns].to_dict(orient="records") # working with list of tags success, tags, msg = replace_edit_tags_in_node(nodo, idx, id_utr, tags_req) return dict(success=success, tags=tags, msg=msg), 200 if success else 409
def put(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad", id_utr: str = "id utr"): """ Edita una lista de TAGS en una UTR basado en tag_name_original Id nodo: id único del nodo Id entidad: id único de la entidad Id UTR: id o código único de la UTR <b>404</b> Si el nodo, entidad o UTR no existe """ request_data = dict(request.json) nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 tags_req = request_data["tags"] success, tags, msg = replace_edit_tags_in_node(nodo, idx, id_utr, tags_req) return dict(success=success, tags=tags, msg=msg), 200 if success else 409
def get(id_nodo: str = "id nodo", id_entidad: str = "id entidad", id_utr: str = "id utr"): """ Regresa la lista de TAGS de una UTR Id nodo: id único del nodo Id entidad: id único de la entidad Id utr: id único de la UTR <b>404</b> Si el nodo, entidad. no existe """ nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 for ix, _utr in enumerate(nodo.entidades[idx].utrs): if _utr.id_utr == id_utr or _utr.utr_code == id_utr: return dict(success=True, tags=[t.to_dict() for t in _utr.tags], msg="Tags encontradas"), 200 return dict(success=False, msg="No se encuentra la UTR"), 404
def get(id_nodo: str = "id nodo", id_entidad: str = "id entidad", id_utr: str = "id UTR"): """ Regresa la cofiguración de la RTU Id nodo: id único del nodo Id entidad: id único de la entidad Id utr: id único de la entidad <b>404</b> Si el nodo, la entidad o UTR no existe """ nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 for ix, _utr in enumerate(nodo.entidades[idx].utrs): if _utr.id_utr == id_utr or _utr.utr_code == id_utr: return dict(success=True, msg="RTU encontrada", utr=_utr.to_dict()), 200 return dict(success=False, msg="RTU no encontrada"), 404
def delete(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad"): """ Elimina una RTU en una entidad Id nodo: id único del nodo Id entidad: id único de la entidad <b>404</b> Si el nodo o la entidad no existe """ request_data = dict(request.json) nodo = SRNode.objects(id_node=id_nodo).first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 success, msg = nodo.entidades[idx].remove_utrs( [request_data["id_utr"]]) if success: nodo.save() return dict(success=success, msg=msg, utrs=[r.to_dict() for r in nodo.entidades[idx].utrs]), 200 else: return dict(success=success, msg=msg), 409
def get(self, id_nodo: str = "id nodo", id_entidad: str = "id entidad"): """ Regresa la lista de RTU de una entidad Id nodo: id único del nodo Id entidad: id único de la entidad <b>404</b> Si el nodo o la entidad no existe """ nodo = SRNode.objects(id_node=id_nodo).as_pymongo().first() if nodo is None: return dict(success=False, msg="No se encuentra el nodo"), 404 success, idx = find_entity_in_node(nodo, id_entidad) if not success: return dict(success=False, msg="No se encuentra la entidad"), 404 utrs_list = nodo["entidades"][idx]["utrs"] for utr in utrs_list: utr.pop('consignaciones', None) utr.pop("tags", None) utr['longitude'] = utr['longitude'] \ if 'longitude' in utr.keys() and not math.isnan(utr['longitude']) else 0 utr['latitude'] = utr['latitude'] \ if 'latitude' in utr.keys() and not math.isnan(utr['latitude']) else 0 utrs_list = sorted(utrs_list, key=lambda i: i['utr_nombre']) return dict(success=True, utrs=utrs_list), 200