示例#1
0
    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
示例#2
0
 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
示例#3
0
    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
示例#4
0
 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
示例#5
0
 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
示例#6
0
    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
示例#7
0
    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
示例#8
0
 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
示例#9
0
    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