コード例 #1
0
ファイル: resources.py プロジェクト: Aesilva1337/CAHD
    def post(self):
        req_data = request.get_json() or None
        schema = UserSchema()

        if req_data is None:
            return resp_data_invalid('Login', [], msg=MSG_NO_DATA)

        data, errors = schema.load(req_data)

        if errors:
            return resp_data_invalid('Login', errors)

        try:
            usuarioList = UsuarioModel.objects.get(cpf=data['cpf'],
                                                   password=data['password'])
            return resp_ok('Login', MSG_SUCCESS,
                           json.loads(usuarioList.to_json()))
        except DoesNotExist:
            return resp_does_not_exist('Login', MSG_PASSWORD_OR_CPF_INVALID)
        except Exception as e:
            return resp_exception('Login', description=e.__str__())
コード例 #2
0
    def get(self, user_id):
        
        user = get_user_by_id(user_id)

        if not isinstance(user, User):
            return user

        try:
            user.ativo = False
            user.save()

        except NotUniqueError:
            return resp_already_exists('Users', 'usuário')

        except ValidationError as e:
            return resp_exception('Users', msg=MSG_INVALID_DATA, description=e.__str__())

        except Exception as e:
            return resp_exception('Users', description=e.__str__())

        return resp_ok('Users', MSG_RESOURCE_INATIVO.format('Usuário'))
コード例 #3
0
ファイル: resources.py プロジェクト: Aesilva1337/CAHD
    def post(self, *args, **kwargs):
        req_data = request.get_json() or None
        schema = TriagemSchema()

        if req_data is None:
            return resp_data_invalid('Triagem', [], msg=MSG_NO_DATA)

        data, errors = schema.load(req_data)

        if errors:
            return resp_data_invalid('Triagem', errors)

        try:
            triagem = TriagemModel(**data)
            triagem.save()
            ListaEsperaModel.objects.get(cpf=data['cpf']).delete()
            ListaEsperaModel.save()
            return resp_ok('Triagem', MSG_SUCCESS, {'valido': True})

        except Exception as e:
            return resp_exception('Triagem', description=e.__str__())
コード例 #4
0
    def get(self, user_id):
        result = None
        schema = UserSchema()
        current_user = get_user_by_email(get_jwt_identity())

        if not isinstance(current_user, User):
            return current_user

        if not (current_user.is_active()) and current_user.is_admin():
            return resp_notallowed_user('Users')

        user = get_user_by_id(user_id)

        if not isinstance(user, User):
            return user

        result = schema.dump(user)

        return resp_ok('Users',
                       MSG_RESOURCE_FETCHED.format('Usuários'),
                       data=result.data)
コード例 #5
0
    def post(self, *args, **kwargs):

        req_data = request.get_json() or None
        user = None
        login_schema = LoginSchema()
        schema = UserSchema()

        if req_data is None:
            return resp_data_invalid('Users', [], msg=MSG_NO_DATA)

        data, errors = login_schema.load(req_data)

        if errors:
            return resp_data_invalid('Users', errors)

        user = get_user_by_email(data.get('email'))

        if not isinstance(user, User):
            return user

        if not user.is_active():
            return resp_notallowed_user('Auth')

        if checkpw(
                data.get('senha').encode('utf-8'), user.senha.encode('utf-8')):

            extras = {
                'token': create_access_token(identity=user.email),
                'refresh': create_refresh_token(identity=user.email)
            }

            result = schema.dump(user)

            return resp_ok('Auth',
                           MSG_TOKEN_CREATED,
                           data=result.data,
                           **extras)

        return resp_notallowed_user('Auth')
コード例 #6
0
ファイル: resources.py プロジェクト: lucassimon/forecasts-api
    def delete(self, user_id):
        user = get_user('Users', object_id=user_id)

        if not isinstance(user, User):
            return user

        user.active = False

        try:
            user.save()
        except NotUniqueError as e:
            return resp_already_exists('Users', 'usuário')

        except ValidationError as e:
            return resp_exception(
                'Users', msg=_MSG300, description=e
            )

        except Exception as e:
            return resp_exception('Users', description=e)

        return resp_ok('Users', _MSG203.format('Usuário'))
コード例 #7
0
    def post(self, *args, **kwargs):
        # Inicializo todas as variaveis utilizadas
        req_data = request.get_json() or None
        data, errors, result = None, None, None
        # password, confirm_password = None, None
        schema = PlanetRegistrationSchema()

        # Se meus dados postados forem Nulos retorno uma respota inválida
        if req_data is None:
            return resp_data_invalid('Planets', [], msg=MSG_INVALID_DATA)

        # Desserialização os dados postados ou melhor meu payload
        data, errors = schema.load(req_data)

        # Se houver erros retorno uma resposta inválida
        if errors:
            return resp_data_invalid('Planets', errors)

        try:
            model = Planet(**data)
            model.save()

        except NotUniqueError:
            return resp_already_exists('Planets', 'local')

        except ValidationError as e:
            return resp_exception('Planets', msg=MSG_INVALID_DATA, description=e.__str__())

        except Exception as e:
            return resp_exception('Planets', description=e.__str__())

        # Realizo um dump dos dados de acordo com o modelo salvo
        schema = PlanetSchema()
        result = schema.dump(model)

        # Retorno 200 o meu endpoint
        return resp_ok(
            'Planets', MSG_RESOURCE_CREATED.format('Planet'),  data=result.data
        )
コード例 #8
0
    def get(self):
        # Initialize schema
        schema = CollaboratorSchema(many=True)
        
        try:
            # Fetch all collaborators
            collaborators = Collaborator.objects()

        except FieldDoesNotExist as e:
            return resp_exception('CollaboratorsServices', description=e.__str__())

        except Exception as e:
            return resp_exception('CollaboratorsServices', description=e.__str__())

        # Dump objects returned
        result = schema.dump(collaborators)

        return resp_ok(
            'CollaboratorsServices',
            MSG_RESOURCE_FETCHED_LISTED.format('colaboradores'),
            data=result.data
        )
コード例 #9
0
    def get(self):
        # Initialize schema
        schema = PointSchema(many=True)
        
        try:
            # Fetch all points
            points = Point.objects()

        except FieldDoesNotExist as e:
            return resp_exception('PointsServices', description=e.__str__())

        except Exception as e:
            return resp_exception('PointsServices', description=e.__str__())

        # Dump objects returned
        result = schema.dump(points)

        return resp_ok(
            'PointsServices',
            MSG_RESOURCE_FETCHED_LISTED.format('pontos'),
            data=result.data
        )
コード例 #10
0
ファイル: resources.py プロジェクト: Dheinny/user_api_test
    def put(self, username):
        schema = UserSchema()
        up_schema = UserUpdateSchema()
        req_data = request.get_json() or None

        user = get_user_by_user_name(username)
        if not isinstance(user, User):
            return user

        try:
            user_up = up_schema.load(req_data, unknown=EXCLUDE)
        except MarshmallowValidationError as e:
            return resp_data_invalid("Users", e.messages)

        if user_up.get("user_name") and user_up.get("user_name") != username:
            return resp_data_invalid("Users",
                                     {"user_name": user_up.get("user_name")},
                                     "Nao pode alterar o nome de usuário")

        try:
            for k, v in user_up.items():
                if k == "address":
                    for k_addr, v_addr in v.items():
                        user["address"][k_addr] = v_addr
                else:
                    user[k] = v

        except Exception as e:
            return resp_exception("Users-Aqui", description=e.__str__())

        save_result = save_model(user, "Users", "Usuário")
        if not isinstance(save_result, User):
            return save_result

        result = schema.dump(save_result)

        return resp_ok("Users",
                       MSG_RESOURCE_UPDATED.format("Usuário", username),
                       data=result)
コード例 #11
0
    def post(self, *args, **kwargs):
        # Initialize variables
        req_data = request.get_json(force=True) or None

        data, errors, result = None, None, None
        schema = PointRegistrationSchema()

        # When datas are null
        if req_data is None:
            return resp_data_invalid('PointsServices', [], msg=MSG_NO_DATA)
        
        collaborator = get_collaborator_by_rf(rf=req_data['rf'])

        # Desserialize data
        data, errors = schema.load(req_data)

        # Return invalid response when there is a error
        if errors:
            return resp_data_invalid('PointsServices', errors)

        # Save the model. If get Exception, return JSON response.
        try:
            model = Point(**data)
            model.save()

        except ValidationError as e:
            return resp_exception('PointsServices', msg=MSG_INVALID_DATA, description=e)

        except Exception as e:
            return resp_exception('PointsServices', description=e)

        # Dump data of model
        schema = PointSchema()
        result = schema.dump(model)

        return resp_ok(
            'PointsServices', MSG_RESOURCE_CREATED.format('Ponto'),  data=result.data,
        )
コード例 #12
0
ファイル: business.py プロジェクト: lffsantos/flask-api-auth
def register_user(payload):
    if payload is None:
        return resp_data_invalid('Users', [], msg=MSG_NO_DATA)

    schema = UserRegistrationSchema()

    try:
        data = schema.load(payload)
    except ValidationError as error:
        return resp_data_invalid('Users', error.messages)

    password = payload.get('password', None)
    data['password'] = hashpw(password.encode('utf-8'), gensalt(12))
    data['email'] = data['email'].lower()
    try:
        full_name, password, email = data['full_name'], data['password'], data[
            'email']
        user = User(full_name=full_name, password=password, email=email)
        save_changes(user)

    except IntegrityError:
        return resp_already_exists('Users', "usuário")

    except Exception as e:
        return resp_exception('Users', description=e)

    schema = UserSchema()
    result = schema.dump(user)

    extras = {
        'token': create_access_token(identity=email),
        'refresh': create_refresh_token(identity=email)
    }

    return resp_ok('Users',
                   MSG_RESOURCE_CREATED.format('Usuário'),
                   data=result,
                   **extras)
コード例 #13
0
ファイル: resources.py プロジェクト: lucassimon/forecasts-api
    def put(self, user_id):
        req_data = request.get_json() or None

        if req_data is None:
            return resp_form_invalid('Users', [], msg=_MSG312)

        schema = UpdateUserSchema()
        user = get_user('Users', object_id=user_id)

        if not isinstance(user, User):
            return user

        data, errors = schema.load(req_data)

        if errors:
            return resp_form_invalid('Users', errors)

        try:
            for i in data.keys():
                user[i] = data[i]

            user.save()

        except NotUniqueError as e:
            return resp_already_exists('Users', 'usuário')

        except ValidationError as e:
            return resp_exception('Users', msg=_MSG300, description=e)

        except Exception as e:
            return resp_exception('Users', description=e)

        schema = UserSchema()
        result = schema.dump(user)

        return resp_ok(
            'Users', _MSG202.format('Usuário'), data=result.data
        )
コード例 #14
0
ファイル: resources.py プロジェクト: Dheinny/user_api_test
    def post(self, *args, **kwargs):
        req_data = request.get_json() or None
        data, erros, result = None, None, None
        password, confirm_password = None, None
        schema = UserRegistrationSchema()

        if req_data is None:
            return resp_data_invalid("Users", [], msg=MSG_NO_DATA)

        password = req_data.get("password")
        confirm_password = req_data.pop("confirm_password")

        if not check_password_in_signup(password, confirm_password):
            errors = {"password": MSG_CHECK_PASSWORD_FAILED}
            return resp_data_invalid("Users", errors)

        try:
            data = schema.load(req_data)

        except MarshmallowValidationError as e:
            return resp_data_invalid("Users", e.messages)

        hashed = hashpw(password.encode("utf-8"), gensalt(12)).decode("utf-8")

        data["password"] = hashed
        data["email"] = data["email"].lower()
        model = User(**data)
        print(data)
        save_result = save_model(model, "Users", "Usuário")
        if not isinstance(save_result, User):
            return save_result

        schema = UserSchema()
        result = schema.dump(model)

        return resp_ok("Users",
                       MSG_RESOURCE_CREATED.format("Usuário"),
                       data=result)
コード例 #15
0
    def get(self, page_id=1):
        schema = OrderSchema(many=True)
        page_size = 10

        if 'page_size' in request.args:
            if int(request.args.get('page_size')) < 1:
                page_size = 10
            else:
                page_size = int(request.args.get('page_size'))

        try:
            order = OrderModel.objects().paginate(page_id, page_size)

        except FieldDoesNotExist as e:
            return resp_exception('Users', description=e.__str__())

        except FieldDoesNotExist as e:
            return resp_exception('Users', description=e.__str__())

        except Exception as e:
            return resp_exception('Users', description=e.__str__())

        extra = {
            'page': order.page,
            'pages': order.pages,
            'total': order.total,
            'params': {
                'page_size': page_size
            }
        }

        result = schema.dump(order.items)

        return resp_ok('Order',
                       MSG_RESOURCE_FETCHED_PAGINATED.format('compras'),
                       data=result,
                       **extra)
コード例 #16
0
    def put(self, planet_id):
        result = None

        schema = PlanetSchema()

        update_schema = PlanetUpdateSchema()

        req_data = request.get_json() or None

        planet = get_planet_by_id(planet_id)

        data, errors = update_schema.load(req_data)

        if errors:
            return resp_data_invalid('Planets', errors)

        try:
            for i in data.keys():
                planet[i] = data[i]
            planet.save()

        except NotUniqueError:
            return resp_already_exists('Planets', 'planet')

        except ValidationError as e:
            return resp_exception('Planets',
                                  msg=MSG_INVALID_DATA,
                                  description=e.__str__())

        except Exception as e:
            return resp_exception('Planets', description=e.__str__())

        result = schema.dump(planet)

        return resp_ok('Planets',
                       MSG_RESOURCE_UPDATED.format('Planet'),
                       data=result.data)
コード例 #17
0
    def get(self, page_id=1):

        schema = UserSchema(many=True)

        page_size = 10
        param_ativo = 'true' if int(request.args.get('ativo')) == 1 else ''

        if 'page_size' in request.args:
            if int(request.args.get('page_size')) < 1:
                page_size = 10
            else:
                page_size = int(request.args.get('page_size'))

        try:
            users = User.objects(ativo=bool(param_ativo)).paginate(
                page_id, page_size)
        except FieldDoesNotExist as e:
            return resp_exception('Users', description=e.__str__())

        except Exception as e:
            return resp_exception('Users', description=e.__str__())

        extra = {
            'page': users.page,
            'pages': users.pages,
            'total': users.total,
            'params': {
                'page_size': page_size
            }
        }

        result = schema.dump(users.items)

        return resp_ok('Users',
                       MSG_RESOURCE_FETCHED_PAGINATED.format('usuários'),
                       data=result.data,
                       **extra)
コード例 #18
0
    def get(self, page_id=1):
        sc = PlanetSchema(many=True)
        # paginate definid
        page_size = 10

        if 'page_size' in request.args:
            if int(request.args.get('page_size')) < 1:
                page_size = 10
            else:
                page_size = int(request.args.get('page_size'))

        try:
            # list all planets in database
            planets = Planet.objects().paginate(page_id, page_size)

        except FieldDoesNotExist as e:
            return resp_exception('Planets', description=e.__str__())

        except Exception as e:
            return resp_exception('Planets', description=e.__str__())

        extra = {
            'page': planets.page,
            'pages': planets.pages,
            'total': planets.total,
            'params': {
                'page_size': page_size
            }
        }

        result = sc.dump(planets.items)

        return resp_ok('Planets',
                       MSG_RESOURCE_FETCHED_PAGINATED.format('planets'),
                       data=result.data,
                       **extra)
コード例 #19
0
    def post(self):
        req_data = request.get_json() or None
        schema = PacientSchema()

        if req_data is None:
            return resp_data_invalid('Cadastro de Paciente', [],
                                     msg=MSG_NO_DATA)

        data, errors = schema.load(req_data)

        if errors:
            return resp_data_invalid('Cadastro de Paciente', errors)

        try:
            model = PacienteModel.objects.get(cpf=data['cpf'])
            print(model)
            # PacienteModel.update({'_id':mongo_id}, {"$set": post}, upsert=False)
            # pacient = PacienteModel(**data)
            # pacient.save()
            return resp_ok('Cadastro de Paciente', MSG_SUCCESS,
                           json.loads(model.to_json()))
        except Exception as e:
            return resp_exception('Cadastro de Paciente',
                                  description=e.__str__())
コード例 #20
0
ファイル: cefaleia.py プロジェクト: Aesilva1337/CAHD
    def get(self):
        #en = {1:"Azul", 2: "Verde", 3: "Amarelo", 4: "Laranja", 5: "Vermelho"} // Classificação de Manchester
        #region .: Variaveis de Entrada :.
        DadosVitaisAlterados = request.args.get('DadosVitais')
        Dor = request.args.get('Dor')
        Nuca = request.args.get('Nuca')
        SinaisNeurologicos = request.args.get('SinaisNeurologicos')
        PAS = request.args.get('PAS')
        PAD = request.args.get('PAD')
        #endregion

        #region .: Verificação de valores da API :.
        if DadosVitaisAlterados is None or DadosVitaisAlterados == '':
            DadosVitaisAlterados = 10
        if Dor is None or Dor == '': Dor = 10
        if Nuca is None or Nuca == '': Nuca = 10
        if SinaisNeurologicos is None or SinaisNeurologicos == '':
            SinaisNeurologicos = 10
        if PAD is None or PAD == '': PAD = 10
        if PAS is None or PAS == '': PAS = 10
        #endregion

        #region .: Definição do range de cada sintoma :.
        vl_DadosVitaisAlterados = np.arange(0, 101, 1)
        vl_Dor = np.arange(0, 101, 1)
        vl_Nuca = np.arange(0, 101, 1)
        vl_SinaisNeurologicos = np.arange(0, 101, 1)
        vl_PAS = np.arange(0, 101, 1)
        vl_PAD = np.arange(0, 101, 1)
        x_saida = np.arange(0, 61, 1)
        #endregion

        #region .: Definição do range da pertinencia de cada sintoma :.
        DadosVitaisAlterados_baixo = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                 [0, 20, 30, 40])
        DadosVitaisAlterados_normal = fuzz.trimf(vl_DadosVitaisAlterados,
                                                 [30, 60, 80])
        DadosVitaisAlterados_alto = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                [80, 85, 90, 100])

        Dor_baixo = fuzz.trapmf(vl_Dor, [0, 20, 50, 70])
        Dor_normal = fuzz.trimf(vl_Dor, [65, 80, 90])
        Dor_alto = fuzz.trapmf(vl_Dor, [75, 85, 95, 100])

        Nuca_baixo = fuzz.trapmf(vl_Nuca, [0, 20, 30, 60])
        Nuca_normal = fuzz.trimf(vl_Nuca, [50, 60, 80])
        Nuca_alto = fuzz.trapmf(vl_Nuca, [80, 85, 90, 100])

        SinaisNeurologicos_baixo = fuzz.trapmf(vl_SinaisNeurologicos,
                                               [0, 20, 50, 70])
        SinaisNeurologicos_normal = fuzz.trimf(vl_SinaisNeurologicos,
                                               [65, 80, 90])
        SinaisNeurologicos_alto = fuzz.trapmf(vl_SinaisNeurologicos,
                                              [75, 85, 95, 100])

        PAS_baixo = fuzz.trapmf(vl_PAS, [0, 20, 50, 70])
        PAS_normal = fuzz.trimf(vl_PAS, [65, 80, 90])
        PAS_alto = fuzz.trapmf(vl_PAS, [75, 85, 95, 100])

        PAD_baixo = fuzz.trapmf(vl_PAD, [0, 20, 50, 70])
        PAD_normal = fuzz.trimf(vl_PAD, [65, 80, 90])
        PAD_alto = fuzz.trapmf(vl_PAD, [75, 85, 95, 100])

        saida_verde = fuzz.trapmf(x_saida, [0, 5, 10, 20])
        saida_amarelo = fuzz.trimf(x_saida, [20, 30, 40])
        saida_vermelho = fuzz.trapmf(x_saida, [40, 45, 55, 60])
        print("chegou aqui")
        #endregion

        #region .: Função de ativação para cada nivel definido anteriormente :.
        DadosVitaisAlterados_level_baixo = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_baixo,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_medio = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_normal,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_alto = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_alto,
            DadosVitaisAlterados)

        Dor_level_baixo = fuzz.interp_membership(vl_Dor, Dor_baixo, Dor)
        Dor_level_medio = fuzz.interp_membership(vl_Dor, Dor_normal, Dor)
        Dor_level_alto = fuzz.interp_membership(vl_Dor, Dor_alto, Dor)

        Nuca_level_baixo = fuzz.interp_membership(vl_Nuca, Nuca_baixo, Nuca)
        Nuca_level_medio = fuzz.interp_membership(vl_Nuca, Nuca_normal, Nuca)
        Nuca_level_alto = fuzz.interp_membership(vl_Nuca, Nuca_alto, Nuca)

        SinaisNeurologicos_level_baixo = fuzz.interp_membership(
            vl_SinaisNeurologicos, SinaisNeurologicos_baixo,
            SinaisNeurologicos)
        SinaisNeurologicos_level_medio = fuzz.interp_membership(
            vl_SinaisNeurologicos, SinaisNeurologicos_normal,
            SinaisNeurologicos)
        SinaisNeurologicos_level_alto = fuzz.interp_membership(
            vl_SinaisNeurologicos, SinaisNeurologicos_alto, SinaisNeurologicos)

        #PAS_level_baixo = fuzz.interp_membership(vl_PAS, PAS_baixo, PAS)
        #PAS_level_medio = fuzz.interp_membership(vl_PAS, PAS_normal, PAS)
        PAS_level_alto = fuzz.interp_membership(vl_PAS, PAS_alto, PAS)

        #PAD_level_baixo = fuzz.interp_membership(vl_PAD, PAD_baixo, PAD)
        #PAD_level_medio = fuzz.interp_membership(vl_PAD, PAD_normal, PAD)
        PAD_level_alto = fuzz.interp_membership(vl_PAD, PAD_alto, PAD)
        #endregion

        try:
            #region .: Definição das regras para o valor de saida :.
            saida_vermelho_regras = np.fmin(
                np.fmax(
                    np.fmax(np.fmax(PAS_level_alto, Dor_level_alto),
                            DadosVitaisAlterados_level_alto),
                    np.fmax(
                        np.fmax(PAD_level_alto, SinaisNeurologicos_level_alto),
                        Nuca_level_alto)), saida_vermelho)

            saida_amarelo_regras = np.fmin(
                np.fmax(
                    np.fmax(
                        np.fmin(Nuca_level_medio, Nuca_level_alto),
                        np.fmin(SinaisNeurologicos_level_medio,
                                Dor_level_alto)),
                    DadosVitaisAlterados_level_medio), saida_amarelo)

            saida_verde_regras = np.fmin(
                np.fmin(
                    np.fmax(Dor_level_baixo, Dor_level_medio),
                    np.fmax(
                        np.fmax(DadosVitaisAlterados_level_baixo,
                                Nuca_level_baixo),
                        SinaisNeurologicos_level_baixo)), saida_verde)

            aggregated = np.fmax(
                saida_verde_regras,
                np.fmax(saida_amarelo_regras, saida_vermelho_regras))
            #endregion

            #region .: Defuzzificação e retorno de label para o serviço :.
            result = fuzz.defuzzify.defuzz(x_saida, aggregated, 'mom')

            defuzz = ''

            if result > 0 and result <= 20:
                defuzz = 'Verde'
            elif result > 20 and result <= 40:
                defuzz = 'Amarelo'
            else:
                defuzz = 'Vermelho'

            #endregion

            return resp_ok('Cefaléia', MSG_SUCCESS, defuzz)
        except Exception as e:
            return resp_exception('Cefaléia', description=e.__str__())
コード例 #21
0
ファイル: resources.py プロジェクト: JASaraiva/api-flask
    def post(self, *args, **kwargs):
        # Inicializo todas as variaveis utilizadas
        req_data = request.get_json() or None
        data, errors, result = None, None, None
        password, confirm_password = None, None
        schema = UserRegistrationSchema()

        # Se meus dados postados forem Nulos retorno uma respota inválida
        if req_data is None:
            return resp_data_invalid('Users', [], msg=MSG_NO_DATA)

        password = req_data.get('password', None)
        confirm_password = req_data.pop('confirm_password', None)

        # verifico através de uma função a senha e a confirmação da senha
        # Se as senhas não são iguais retorno uma respota inválida
        if not check_password_in_signup(password, confirm_password):
            errors = {'password': MSG_PASSWORD_DIDNT_MATCH}
            return resp_data_invalid('Users', errors)

        # Desserialização os dados postados ou melhor meu payload
        data, errors = schema.load(req_data)

        # Se houver erros retorno uma resposta inválida
        if errors:
            return resp_data_invalid('Users', errors)

        # Crio um hash da minha senha
        hashed = hashpw(password.encode('utf-8'), gensalt(12))

        # Salvo meu modelo de usuário com a senha criptografada e email
        # em lower case
        # Qualquer exceção ao salvar o modelo retorno uma resposta em JSON
        # ao invés de levantar uma exception no servidor
        try:
            data['password'] = hashed
            data['email'] = data['email'].lower()
            model = User(**data)
            model.save()

        except NotUniqueError:
            return resp_already_exists('Users', 'usuário')

        except ValidationError as e:
            return resp_exception('Users',
                                  msg=MSG_INVALID_DATA,
                                  description=e.__str__())

        except Exception as e:
            return resp_exception('Users', description=e.__str__())

        extras = {
            'token': create_access_token(identity=model.email),
            'refresh': create_refresh_token(identity=model.email)
        }

        # Realizo um dump dos dados de acordo com o modelo salvo
        schema = UserSchema()
        result = schema.dump(model)

        # Retorno 200 o meu endpoint
        return resp_ok('Users',
                       MSG_RESOURCE_CREATED.format('Usuário'),
                       data=result.data,
                       **extras)
コード例 #22
0
    def get(self):
        #en = {1:"Azul", 2: "Verde", 3: "Amarelo", 4: "Laranja", 5: "Vermelho"} // Classificação de Manchester
        #region .: Variaveis de Entrada :.
        DadosVitaisAlterados = request.args.get('DadosVitais')
        Glasgow = request.args.get('Glasgow')
        IntoxicacaoExogena = request.args.get('IntoxicacaoExogena')
        Convulsao = request.args.get('Convulsao')
        Epilepsia = request.args.get('Epilepsia')
        #endregion

        #region .: Verificação de valores da API :.
        if DadosVitaisAlterados is None or DadosVitaisAlterados == '':
            DadosVitaisAlterados = 10
        if Glasgow is None or Glasgow == '': Glasgow = 10
        if IntoxicacaoExogena is None or IntoxicacaoExogena == '':
            IntoxicacaoExogena = 10
        if Convulsao is None or Convulsao == '': Convulsao = 10
        if Epilepsia is None or Epilepsia == '': Epilepsia = 10
        #endregion

        #region .: Definição do range de cada sintoma :.
        vl_DadosVitaisAlterados = np.arange(0, 101, 1)
        vl_Glasgow = np.arange(3, 16, 1)
        vl_IntoxicacaoExogena = np.arange(0, 101, 1)
        vl_Convulsao = np.arange(0, 101, 1)
        vl_Epilepsia = np.arange(0, 101, 1)
        x_saida = np.arange(0, 61, 1)
        #endregion

        #region .: Definição do range da pertinencia de cada sintoma :.
        DadosVitaisAlterados_baixo = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                 [0, 20, 30, 45])
        DadosVitaisAlterados_normal = fuzz.trimf(vl_DadosVitaisAlterados,
                                                 [35, 60, 85])
        DadosVitaisAlterados_alto = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                [80, 85, 95, 100])

        Glasgow_alto = fuzz.trapmf(vl_Glasgow, [3, 5, 8, 9])
        Glasgow_normal = fuzz.trimf(vl_Glasgow, [9, 11, 13])
        Glasgow_baixo = fuzz.trapmf(vl_Glasgow, [12, 13, 14, 15])

        IntoxicacaoExogena_baixo = fuzz.trapmf(vl_IntoxicacaoExogena,
                                               [0, 20, 30, 45])
        IntoxicacaoExogena_normal = fuzz.trimf(vl_IntoxicacaoExogena,
                                               [35, 60, 85])
        IntoxicacaoExogena_alto = fuzz.trapmf(vl_IntoxicacaoExogena,
                                              [80, 85, 95, 100])

        Convulsao_baixo = fuzz.trapmf(vl_Convulsao, [0, 20, 30, 45])
        Convulsao_normal = fuzz.trimf(vl_Convulsao, [35, 60, 85])
        Convulsao_alto = fuzz.trapmf(vl_Convulsao, [80, 85, 95, 100])

        Epilepsia_baixo = fuzz.trapmf(vl_Epilepsia, [0, 20, 30, 45])
        Epilepsia_normal = fuzz.trimf(vl_Epilepsia, [35, 60, 85])
        Epilepsia_alto = fuzz.trapmf(vl_Epilepsia, [80, 85, 95, 100])

        saida_azul = fuzz.trapmf(x_saida, [0, 3, 12, 15])
        saida_verde = fuzz.trimf(x_saida, [15, 22, 29])
        saida_amarelo = fuzz.trimf(x_saida, [29, 36, 43])
        saida_vermelho = fuzz.trapmf(x_saida, [43, 47, 57, 60])
        #endregion

        #region .: Função de ativação para cada nivel definido anteriormente :.
        DadosVitaisAlterados_level_baixo = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_baixo,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_medio = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_normal,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_alto = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_alto,
            DadosVitaisAlterados)

        #Glasgow_level_baixo = fuzz.interp_membership(vl_Glasgow, Glasgow_baixo, Glasgow)
        #Glasgow_level_medio = fuzz.interp_membership(vl_Glasgow, Glasgow_normal, Glasgow)
        Glasgow_level_alto = fuzz.interp_membership(vl_Glasgow, Glasgow_alto,
                                                    Glasgow)

        #IntoxicacaoExogena_level_baixo = fuzz.interp_membership(vl_IntoxicacaoExogena, IntoxicacaoExogena_baixo, IntoxicacaoExogena)
        #IntoxicacaoExogena_level_medio = fuzz.interp_membership(vl_IntoxicacaoExogena, IntoxicacaoExogena_normal, IntoxicacaoExogena)
        IntoxicacaoExogena_level_alto = fuzz.interp_membership(
            vl_IntoxicacaoExogena, IntoxicacaoExogena_alto, IntoxicacaoExogena)

        Convulsao_level_baixo = fuzz.interp_membership(vl_Convulsao,
                                                       Convulsao_baixo,
                                                       Convulsao)
        Convulsao_level_medio = fuzz.interp_membership(vl_Convulsao,
                                                       Convulsao_normal,
                                                       Convulsao)
        Convulsao_level_alto = fuzz.interp_membership(vl_Convulsao,
                                                      Convulsao_alto,
                                                      Convulsao)

        #Epilepsia_level_baixo = fuzz.interp_membership(vl_Epilepsia, Epilepsia_baixo, Epilepsia)
        #Epilepsia_level_medio = fuzz.interp_membership(vl_Epilepsia, Epilepsia_normal, Epilepsia)
        Epilepsia_level_alto = fuzz.interp_membership(vl_Epilepsia,
                                                      Epilepsia_alto,
                                                      Epilepsia)
        #endregion

        try:
            #region .: Definição das regras para o valor de saida :.
            saida_vermelho_regras = np.fmin(
                np.fmax(
                    np.fmax(Glasgow_level_alto,
                            DadosVitaisAlterados_level_alto),
                    np.fmax(Convulsao_level_alto,
                            IntoxicacaoExogena_level_alto)), saida_vermelho)

            saida_amarelo_regras = np.fmin(
                np.fmax(
                    np.fmax(Convulsao_level_medio,
                            DadosVitaisAlterados_level_medio),
                    Epilepsia_level_alto), saida_amarelo)

            saida_verde_regras = np.fmin(
                np.fmax(
                    np.fmin(Convulsao_level_baixo,
                            DadosVitaisAlterados_level_baixo),
                    Convulsao_level_medio), saida_verde)

            saida_azul_regras = np.fmin(
                np.fmax(Convulsao_level_baixo,
                        DadosVitaisAlterados_level_baixo), saida_azul)

            aggregated = np.fmax(
                np.fmax(saida_azul_regras, saida_verde_regras),
                np.fmax(saida_amarelo_regras, saida_vermelho_regras))
            #endregion

            #region .: Defuzzificação e retorno de label para o serviço :.
            result = fuzz.defuzzify.defuzz(x_saida, aggregated, 'mom')

            defuzz = ''

            if result > 0 and result <= 15:
                defuzz = 'Azul'
            elif result > 15 and result <= 30:
                defuzz = 'Verde'
            elif result > 30 and result <= 43:
                defuzz = 'Amarelo'
            else:
                defuzz = 'Vermelho'
            #endregion

            return resp_ok('Convulsão ou Coma', MSG_SUCCESS, defuzz)
        except Exception as e:
            return resp_exception('Convulsão ou Coma', description=e.__str__())
コード例 #23
0
    def post(self, user_id, *args, **kwargs):
        '''
        Create settings forecast notification

        payload:

        {
            "address": "Londres, UK",
            "period": {
                "start": "08:00",
                "end": "19:00"
            },
            "days": {
                "sunday": true,
                "monday": true,
                "tuesday": true,
                "wednesday": true,
                "thursday": true,
                "friday": true,
                "saturday": true
            },
            "notification": "07:00"
        }
        '''
        user = get_user('Forecasts Settings', object_id=user_id)

        if not isinstance(user, User):
            return user

        req_data = request.get_json() or None
        schema = ForecastSettingsSchema()

        if req_data is None:
            return resp_form_invalid('Forecasts Settings', [], msg=_MSG312)

        req_data['user_id'] = '{}'.format(user_id)

        data, errors = schema.load(req_data)

        if errors:
            return resp_form_invalid('Forecasts Settings', errors)

        try:
            model = Forecast(**data)
            model.save()

        except NotUniqueError:
            return resp_already_exists('Forecasts Settings', 'usuário')

        except ValidationError as e:
            return resp_exception('Forecasts Settings',
                                  msg=_MSG300,
                                  description=e)

        except Exception as e:
            return resp_exception('Forecasts Settings', description=e)

        result = schema.dump(model)

        return resp_ok('Forecasts Settings',
                       _MSG200.format('Configurações do clima'),
                       data=result.data)
コード例 #24
0
    def put(self, user_id):
        result = None
        schema = UserSchema()
        update_schema = UserUpdateSchema()
        req_data = request.get_json() or None
        email = None
        current_user = get_user_by_email(get_jwt_identity())

        if not isinstance(current_user, User):
            return current_user

        if not (current_user.is_active()) and current_user.is_admin():
            return resp_notallowed_user('Users')

        # Valido se o payload está vazio
        if req_data is None:
            return resp_data_invalid('Users', [], msg=MSG_NO_DATA)

        # Busco o usuário na coleção users pelo seu id
        user = get_user_by_id(user_id)

        # se não for uma instancia do modelo User retorno uma resposta
        # da requisição http do flask
        if not isinstance(user, User):
            return user

        # carrego meus dados de acordo com o schema de atualização
        data, errors = update_schema.load(req_data)

        # em caso de erros retorno uma resposta 422 com os erros de
        # validação do schema
        if errors:
            return resp_data_invalid('Users', errors)

        email = data.get('email', None)

        # Valido se existe um email na coleção de usuários
        if email and exists_email_in_users(email, user):
            return resp_data_invalid('Users', [{
                'email': [MSG_ALREADY_EXISTS.format('usuário')]
            }])

        try:
            # para cada chave dentro do dados do update schema
            # atribuimos seu valor
            for i in data.keys():
                user[i] = data[i]

            user.save()

        except NotUniqueError:
            return resp_already_exists('Users', 'usuário')

        except ValidationError as e:
            return resp_exception('Users',
                                  msg=MSG_INVALID_DATA,
                                  description=e.__str__())

        except Exception as e:
            return resp_exception('Users', description=e.__str__())

        result = schema.dump(user)

        return resp_ok('Users',
                       MSG_RESOURCE_UPDATED.format('Usuário'),
                       data=result.data)
コード例 #25
0
    def get(self):
        #en = {1:"Azul", 2: "Verde", 3: "Amarelo", 4: "Laranja", 5: "Vermelho"} // Classificação de Manchester
        #region .: Variaveis de Entrada :.
        DadosVitaisAlterados = request.args.get('DadosVitais')
        Coriza = request.args.get('Coriza')
        RinorreiaPurulenta = request.args.get('RinorreiaPurulenta')
        DorGarganta = request.args.get('DorGarganta')
        DorOuvido = request.args.get('DorOuvido')
        Tosse = request.args.get('Tosse')
        Mialgia = request.args.get('Mialgia')
        #endregion

        #region .: Verificação de valores da API :.
        if DadosVitaisAlterados is None or DadosVitaisAlterados == '':
            DadosVitaisAlterados = 10
        if Coriza is None or Coriza == '': Coriza = 10
        if RinorreiaPurulenta is None or RinorreiaPurulenta == '':
            RinorreiaPurulenta = 10
        if DorGarganta is None or DorGarganta == '': DorGarganta = 10
        if DorOuvido is None or DorOuvido == '': DorOuvido = 10
        if Tosse is None or Tosse == '': Tosse = 10
        if Mialgia is None or Mialgia == '': Mialgia = 10
        #endregion

        #region .: Definição do range de cada sintoma :.
        vl_DadosVitaisAlterados = np.arange(0, 101, 1)
        vl_Dor = np.arange(0, 101, 1)
        vl_Idade = np.arange(0, 101, 1)
        vl_Temperatura = np.arange(25, 46, 1)
        x_saida = np.arange(0, 61, 1)
        #endregion

        #region .: Definição do range da pertinencia de cada sintoma :.
        DadosVitaisAlterados_baixo = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                 [0, 20, 40, 45])
        DadosVitaisAlterados_normal = fuzz.trimf(vl_DadosVitaisAlterados,
                                                 [35, 60, 85])
        DadosVitaisAlterados_alto = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                [80, 85, 95, 100])

        Dor_baixo = fuzz.trapmf(vl_Dor, [0, 20, 40, 50])
        Dor_moderado = fuzz.trimf(vl_Dor, [40, 50, 70])
        Dor_normal = fuzz.trimf(vl_Dor, [65, 80, 90])
        Dor_alto = fuzz.trapmf(vl_Dor, [80, 85, 95, 100])

        Idade_baixo = fuzz.trapmf(vl_Idade, [0, 20, 40, 45])
        Idade_normal = fuzz.trimf(vl_Idade, [35, 50, 65])
        Idade_alto = fuzz.trapmf(vl_Idade, [65, 70, 90, 100])

        Temperatura_baixo = fuzz.trapmf(vl_Temperatura, [25, 30, 35, 36])
        Temperatura_normal = fuzz.trimf(vl_Temperatura, [36, 37, 39])
        Temperatura_alto = fuzz.trapmf(vl_Temperatura, [39, 40, 44, 45])

        saida_azul = fuzz.trapmf(x_saida, [0, 3, 12, 15])
        saida_verde = fuzz.trimf(x_saida, [15, 22, 29])
        saida_amarelo = fuzz.trimf(x_saida, [29, 36, 43])
        saida_vermelho = fuzz.trapmf(x_saida, [43, 45, 55, 60])
        #endregion

        #region .: Função de ativação para cada nivel definido anteriormente :.
        DadosVitaisAlterados_level_baixo = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_baixo,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_medio = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_normal,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_alto = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_alto,
            DadosVitaisAlterados)

        Dor_level_baixo = fuzz.interp_membership(vl_Dor, Dor_baixo, Dor)
        Dor_level_moderado = fuzz.interp_membership(vl_Dor, Dor_moderado, Dor)
        Dor_level_medio = fuzz.interp_membership(vl_Dor, Dor_normal, Dor)
        Dor_level_alto = fuzz.interp_membership(vl_Dor, Dor_alto, Dor)

        Idade_level_baixo = fuzz.interp_membership(vl_Idade, Idade_baixo,
                                                   Idade)
        Idade_level_medio = fuzz.interp_membership(vl_Idade, Idade_normal,
                                                   Idade)
        Idade_level_alto = fuzz.interp_membership(vl_Idade, Idade_alto, Idade)

        Temperatura_level_baixo = fuzz.interp_membership(
            vl_Temperatura, Temperatura_baixo, Temperatura)
        Temperatura_level_medio = fuzz.interp_membership(
            vl_Temperatura, Temperatura_normal, Temperatura)
        Temperatura_level_alto = fuzz.interp_membership(
            vl_Temperatura, Temperatura_alto, Temperatura)
        #endregion

        try:
            #region .: Definição das regras para o valor de saida :.
            saida_vermelho_regras = np.fmin(
                np.fmax(DadosVitaisAlterados_level_alto, Dor_level_alto),
                saida_vermelho)

            saida_amarelo_regras = np.fmin(
                np.fmax(
                    np.fmax(DadosVitaisAlterados_level_medio, Dor_level_medio),
                    np.fmax(Temperatura_level_alto, Idade_level_alto)),
                saida_amarelo)

            saida_verde_regras = np.fmin(
                np.fmax(
                    np.fmax(DadosVitaisAlterados_level_baixo,
                            Dor_level_moderado), Temperatura_level_medio),
                saida_verde)

            saida_azul_regras = np.fmin(
                np.fmax(DadosVitaisAlterados_level_baixo, Dor_level_baixo),
                saida_azul)

            aggregated = np.fmax(
                np.fmax(saida_azul_regras, saida_verde_regras),
                np.fmax(saida_amarelo_regras, saida_vermelho_regras))
            #endregion

            #region .: Defuzzificação e retorno de label para o serviço :.
            result = fuzz.defuzzify.defuzz(x_saida, aggregated, 'mom')

            defuzz = ''

            if result > 0 and result <= 15:
                defuzz = 'Azul'
            elif result > 15 and result <= 30:
                defuzz = 'Verde'
            elif result > 30 and result <= 43:
                defuzz = 'Amarelo'
            else:
                defuzz = 'Vermelho'

            #endregion

            return resp_ok('Ferida', MSG_SUCCESS, defuzz)
        except Exception as e:
            return resp_exception('Ferida', description=e.__str__())
コード例 #26
0
ファイル: resources.py プロジェクト: Leoalmeida95/carsclub
    def post(self, *args, **kwargs):
        # Inicializo todas as variaveis utilizadas
        req_data = request.get_json() or None
        data, errors, result = None, None, None
        password, confirm_password = None, None
        schema = UserRegistrationSchema()

        # Se meus dados postados forem Nulos retorno uma respota inválida
        if req_data is None:
            return resp_data_invalid('Users', [], msg=MSG_NO_DATA)

        password = req_data.get('password', None)
        confirm_password = req_data.pop('confirm_password', None)

        # verifico através de uma função a senha e a confirmação da senha
        # Se as senhas não são iguais retorno uma respota inválida
        if not check_password_in_signup(password, confirm_password):
            errors = {'password': MSG_PASSWORD_WRONG}
            return resp_data_invalid('Users', errors)

        # Desserialização os dados postados ou melhor meu payload
        data, errors = schema.load(req_data)

        # Se houver erros retorno uma resposta inválida
        if errors:
            return resp_data_invalid('Users', errors)

        # Crio um hash da minha senha
        hashed = hashpw(password.encode('utf-8'), gensalt(12))

        # Salvo meu modelo de usuário com a senha criptografada e email em
        # lower case Qualquer exceção ao salvar o modelo retorno uma resposta
        # em JSON ao invés de levantar uma exception no servidor
        try:
            data['password'] = hashed
            data['email'] = data['email'].lower()
            model = User(**data)
            model.save()

        except NotUniqueError:
            return resp_already_exists('Users', 'usuário')

        except ValidationError as e:
            return resp_exception('Users', msg=MSG_INVALID_DATA, description=e)

        # Realizo um dump dos dados de acordo com o modelo salvo
        schema = UserSchema()
        result = schema.dump(model)

        if current_app.config.get('ENABLE_AMQP'):
            try:
                # exp = datetime.utcnow() + relativedelta(days=2)
                # payload = {'id': '{}'.format(model.id), 'exp':exp}
                producer = signup.ProducerSignUp(
                                                current_app.
                                                config.
                                                get('SIGNUP_QUEUE')
                                                )

                producer.publish(result.data)

            except Exception as e:
                return resp_exception('Users', description=MSG_EXCEPTION)

        # Retorno 200 o meu endpoint
        return resp_ok(
            'Users', MSG_RESOURCE_CREATED.format('Usuário'),  data=result.data,
        )
コード例 #27
0
    def get(self):
        #en = {1:"Azul", 2: "Verde", 3: "Amarelo", 4: "Laranja", 5: "Vermelho"} // Classificação de Manchester
        #region .: Variaveis de Entrada :.
        Glicemia = request.args.get('Glicemia')
        Sudorese = request.args.get('Sudorese')
        Desidratacao = request.args.get('Desidratacao')
        AlteracaoMental = request.args.get('AlteracaoMental')
        Febre = request.args.get('Febre')
        Pulso = request.args.get('Pulso')
        Vomito = request.args.get('Vomito')
        VisaoBorrada = request.args.get('VisaoBorrada')
        Dispneia = request.args.get('Dispneia')
        #endregion

        #region .: Verificação de valores da API :.
        if Glicemia is None or Glicemia == '': Glicemia = 10
        if Sudorese is None or Sudorese == '': Sudorese = 10
        if Desidratacao is None or Desidratacao == '': Desidratacao = 10
        if AlteracaoMental is None or AlteracaoMental == '':
            AlteracaoMental = 10
        if Febre is None or Febre == '': Febre = 10
        if Pulso is None or Pulso == '': Pulso = 10
        if Vomito is None or Vomito == '': Vomito = 10
        if VisaoBorrada is None or VisaoBorrada == '': VisaoBorrada = 10
        if Dispneia is None or Dispneia == '': Dispneia = 10
        #endregion

        #region .: Definição do range de cada sintoma :.
        vl_Glicemia = np.arange(0, 361, 1)
        vl_Sudorese = np.arange(0, 101, 1)
        vl_Desidratacao = np.arange(0, 101, 1)
        vl_AlteracaoMental = np.arange(0, 101, 1)
        vl_Febre = np.arange(0, 101, 1)
        vl_Pulso = np.arange(0, 101, 1)
        vl_Vomito = np.arange(0, 101, 1)
        vl_VisaoBorrada = np.arange(0, 101, 1)
        vl_Dispneia = np.arange(0, 101, 1)
        x_saida = np.arange(0, 61, 1)
        #endregion

        #region .: Definição do range da pertinencia de cada sintoma :.
        Glicemia_baixo = fuzz.trimf(vl_Glicemia, [50, 170, 250])
        Glicemia_normal = fuzz.trimf(vl_Glicemia, [250, 285, 320])
        Glicemia_alto = fuzz.trapmf(vl_Glicemia, [320, 330, 350, 360])
        Glicemia_baixo_alto = fuzz.trapmf(vl_Glicemia, [0, 20, 40, 50])

        Sudorese_baixo = fuzz.trapmf(vl_Sudorese, [0, 10, 40, 45])
        Sudorese_normal = fuzz.trimf(vl_Sudorese, [35, 60, 85])
        Sudorese_alto = fuzz.trapmf(vl_Sudorese, [80, 85, 95, 100])

        Desidratacao_baixo = fuzz.trapmf(vl_Desidratacao, [0, 20, 40, 45])
        Desidratacao_normal = fuzz.trimf(vl_Desidratacao, [35, 60, 80])
        Desidratacao_alto = fuzz.trapmf(vl_Desidratacao, [80, 85, 95, 100])

        AlteracaoMental_baixo = fuzz.trapmf(vl_AlteracaoMental,
                                            [0, 20, 40, 45])
        AlteracaoMental_normal = fuzz.trimf(vl_AlteracaoMental, [35, 60, 85])
        AlteracaoMental_alto = fuzz.trapmf(vl_AlteracaoMental,
                                           [80, 85, 95, 100])

        Febre_baixo = fuzz.trapmf(vl_Febre, [0, 20, 40, 45])
        Febre_normal = fuzz.trimf(vl_Febre, [35, 60, 85])
        Febre_alto = fuzz.trapmf(vl_Febre, [80, 85, 95, 100])

        Pulso_baixo = fuzz.trapmf(vl_Pulso, [0, 20, 40, 45])
        Pulso_normal = fuzz.trimf(vl_Pulso, [35, 60, 85])
        Pulso_alto = fuzz.trapmf(vl_Pulso, [80, 85, 95, 100])

        Vomito_baixo = fuzz.trapmf(vl_Vomito, [0, 20, 40, 45])
        Vomito_normal = fuzz.trimf(vl_Vomito, [35, 60, 85])
        Vomito_alto = fuzz.trapmf(vl_Vomito, [80, 85, 95, 100])

        VisaoBorrada_baixo = fuzz.trapmf(vl_VisaoBorrada, [0, 20, 40, 45])
        VisaoBorrada_normal = fuzz.trimf(vl_VisaoBorrada, [35, 60, 85])
        VisaoBorrada_alto = fuzz.trapmf(vl_VisaoBorrada, [80, 85, 95, 100])

        Dispneia_baixo = fuzz.trapmf(vl_Dispneia, [0, 20, 40, 45])
        Dispneia_normal = fuzz.trimf(vl_Dispneia, [35, 60, 85])
        Dispneia_alto = fuzz.trapmf(vl_Dispneia, [80, 85, 95, 100])

        saida_azul = fuzz.trapmf(x_saida, [0, 3, 12, 15])
        saida_verde = fuzz.trimf(x_saida, [15, 22, 29])
        saida_amarelo = fuzz.trimf(x_saida, [29, 36, 43])
        saida_vermelho = fuzz.trapmf(x_saida, [43, 45, 55, 60])
        #endregion

        #region .: Função de ativação para cada nivel definido anteriormente :.
        Glicemia_level_baixo = fuzz.interp_membership(vl_Glicemia,
                                                      Glicemia_baixo, Glicemia)
        Glicemia_level_medio = fuzz.interp_membership(vl_Glicemia,
                                                      Glicemia_normal,
                                                      Glicemia)
        Glicemia_level_alto = fuzz.interp_membership(vl_Glicemia,
                                                     Glicemia_alto, Glicemia)
        Glicemia_level_baixo_alto = fuzz.interp_membership(
            vl_Glicemia, Glicemia_baixo_alto, Glicemia)

        Sudorese_level_baixo = fuzz.interp_membership(vl_Sudorese,
                                                      Sudorese_baixo, Sudorese)
        Sudorese_level_medio = fuzz.interp_membership(vl_Sudorese,
                                                      Sudorese_normal,
                                                      Sudorese)
        Sudorese_level_alto = fuzz.interp_membership(vl_Sudorese,
                                                     Sudorese_alto, Sudorese)

        Desidratacao_level_baixo = fuzz.interp_membership(
            vl_Desidratacao, Desidratacao_baixo, Desidratacao)
        Desidratacao_level_medio = fuzz.interp_membership(
            vl_Desidratacao, Desidratacao_normal, Desidratacao)
        Desidratacao_level_alto = fuzz.interp_membership(
            vl_Desidratacao, Desidratacao_alto, Desidratacao)

        AlteracaoMental_level_baixo = fuzz.interp_membership(
            vl_AlteracaoMental, AlteracaoMental_baixo, Desidratacao)
        AlteracaoMental_level_medio = fuzz.interp_membership(
            vl_AlteracaoMental, AlteracaoMental_normal, Desidratacao)
        AlteracaoMental_level_alto = fuzz.interp_membership(
            vl_AlteracaoMental, AlteracaoMental_alto, Desidratacao)

        Febre_level_baixo = fuzz.interp_membership(vl_Febre, Febre_baixo,
                                                   Febre)
        Febre_level_medio = fuzz.interp_membership(vl_Febre, Febre_normal,
                                                   Febre)
        Febre_level_alto = fuzz.interp_membership(vl_Febre, Febre_alto, Febre)

        Pulso_level_baixo = fuzz.interp_membership(vl_Pulso, Pulso_baixo,
                                                   Pulso)
        Pulso_level_medio = fuzz.interp_membership(vl_Pulso, Pulso_normal,
                                                   Pulso)
        Pulso_level_alto = fuzz.interp_membership(vl_Pulso, Pulso_alto, Pulso)

        Vomito_level_baixo = fuzz.interp_membership(vl_Vomito, Vomito_baixo,
                                                    Vomito)
        Vomito_level_medio = fuzz.interp_membership(vl_Vomito, Vomito_normal,
                                                    Vomito)
        Vomito_level_alto = fuzz.interp_membership(vl_Vomito, Vomito_alto,
                                                   Vomito)

        VisaoBorrada_level_baixo = fuzz.interp_membership(
            vl_VisaoBorrada, VisaoBorrada_baixo, VisaoBorrada)
        VisaoBorrada_level_medio = fuzz.interp_membership(
            vl_VisaoBorrada, VisaoBorrada_normal, VisaoBorrada)
        VisaoBorrada_level_alto = fuzz.interp_membership(
            vl_VisaoBorrada, VisaoBorrada_alto, VisaoBorrada)

        Dispneia_level_baixo = fuzz.interp_membership(vl_Dispneia,
                                                      Dispneia_baixo, Dispneia)
        Dispneia_level_medio = fuzz.interp_membership(vl_Dispneia,
                                                      Dispneia_normal,
                                                      Dispneia)
        Dispneia_level_alto = fuzz.interp_membership(vl_Dispneia,
                                                     Dispneia_alto, Dispneia)
        #endregion

        try:
            #region .: Definição das regras para o valor de saida :.
            saida_vermelho_regras = np.fmin(
                np.fmax(
                    np.fmax(AlteracaoMental_level_alto, Sudorese_level_alto),
                    np.fmax(
                        np.fmax(
                            np.fmax(Febre_level_alto, Pulso_level_alto),
                            np.fmax(Vomito_level_alto,
                                    VisaoBorrada_level_alto)),
                        Dispneia_level_alto)), saida_vermelho)

            saida_amarelo_regras = np.fmin(
                np.fmax(
                    np.fmin(Glicemia_level_alto, Glicemia_level_baixo_alto),
                    Desidratacao_level_alto), saida_amarelo)

            saida_verde_regras = np.fmin(Glicemia_level_medio, saida_verde)

            saida_azul_regras = np.fmin(Glicemia_level_baixo, saida_azul)

            aggregated = np.fmax(
                np.fmax(saida_azul_regras, saida_verde_regras),
                np.fmax(saida_amarelo_regras, saida_vermelho_regras))
            #endregion

            #region .: Defuzzificação e retorno de label para o serviço :.
            result = fuzz.defuzzify.defuzz(x_saida, aggregated, 'mom')
            print(result)
            defuzz = ''

            if result > 0 and result <= 15:
                defuzz = 'Azul'
            elif result > 15 and result <= 30:
                defuzz = 'Verde'
            elif result > 30 and result <= 43:
                defuzz = 'Amarelo'
            else:
                defuzz = 'Vermelho'
            #endregion

            return resp_ok('Diabetes', MSG_SUCCESS, defuzz)
        except Exception as e:
            return resp_exception('Diabetes', description=e.__str__())
コード例 #28
0
    def get(self):
        #en = {1:"Azul", 2: "Verde", 3: "Amarelo", 4: "Laranja", 5: "Vermelho"} // Classificação de Manchester
        #region .: Variaveis de Entrada :.
        DadosVitaisAlterados = request.args.get('DadosVitais')
        Agitacao = request.args.get('Agitacao')
        Depressao = request.args.get('Depressao')
        EstadoMental = request.args.get('EstadoMental')
        #endregion

        #region .: Verificação de valores da API :.
        if DadosVitaisAlterados is None or DadosVitaisAlterados == '': DadosVitaisAlterados = 10
        if Agitacao is None or Agitacao == '': Agitacao = 10
        if Depressao is None or Depressao == '': Depressao = 10
        if EstadoMental is None or EstadoMental == '': EstadoMental = 10
        #endregion

        #region .: Definição do range de cada sintoma :.
        vl_DadosVitaisAlterados = np.arange(0, 101, 1)
        vl_Agitacao = np.arange(0, 101, 1)
        vl_Depressao = np.arange(0, 101, 1)
        vl_EstadoMental = np.arange(0, 101, 1)
        x_saida = np.arange(0, 61, 1) 
        #endregion

        #region .: Definição do range da pertinencia de cada sintoma :.
        DadosVitaisAlterados_baixo = fuzz.trapmf(vl_DadosVitaisAlterados, [0, 20, 40, 45])
        DadosVitaisAlterados_normal = fuzz.trimf(vl_DadosVitaisAlterados, [35, 60, 85])
        DadosVitaisAlterados_alto = fuzz.trapmf(vl_DadosVitaisAlterados, [80, 85, 95, 100])

        Agitacao_baixo = fuzz.trapmf(vl_Agitacao, [0, 20, 40, 45])
        Agitacao_normal = fuzz.trimf(vl_Agitacao, [35, 60, 85])
        Agitacao_alto = fuzz.trapmf(vl_Agitacao, [80, 85, 95, 100])
        
        Depressao_baixo = fuzz.trapmf(vl_Depressao, [0, 20, 40, 45])
        Depressao_normal = fuzz.trimf(vl_Depressao, [35, 60, 85])
        Depressao_alto = fuzz.trapmf(vl_Depressao, [80, 85, 95, 100])
        
        EstadoMental_baixo = fuzz.trapmf(vl_EstadoMental, [0, 20, 40, 45])
        EstadoMental_normal = fuzz.trimf(vl_EstadoMental, [35, 60, 85])
        EstadoMental_alto = fuzz.trapmf(vl_EstadoMental, [80, 85, 95, 100])

        saida_azul = fuzz.trapmf(x_saida, [0, 3, 12, 15])
        saida_verde = fuzz.trimf(x_saida, [15, 22, 29])
        saida_amarelo = fuzz.trimf(x_saida, [29, 36, 43])
        saida_vermelho = fuzz.trapmf(x_saida, [43, 45, 55, 60])
        #endregion

        #region .: Função de ativação para cada nivel definido anteriormente :.
        DadosVitaisAlterados_level_baixo = fuzz.interp_membership(vl_DadosVitaisAlterados, DadosVitaisAlterados_baixo, DadosVitaisAlterados)
        DadosVitaisAlterados_level_medio = fuzz.interp_membership(vl_DadosVitaisAlterados, DadosVitaisAlterados_normal, DadosVitaisAlterados)
        DadosVitaisAlterados_level_alto = fuzz.interp_membership(vl_DadosVitaisAlterados, DadosVitaisAlterados_alto, DadosVitaisAlterados)
        
        Agitacao_level_baixo = fuzz.interp_membership(vl_Agitacao, Agitacao_baixo, Agitacao)
        Agitacao_level_medio = fuzz.interp_membership(vl_Agitacao, Agitacao_normal, Agitacao)
        Agitacao_level_alto = fuzz.interp_membership(vl_Agitacao, Agitacao_alto, Agitacao)
        
        Depressao_level_baixo = fuzz.interp_membership(vl_Depressao, Depressao_baixo, Depressao)
        Depressao_level_medio = fuzz.interp_membership(vl_Depressao, Depressao_normal, Depressao)
        Depressao_level_alto = fuzz.interp_membership(vl_Depressao, Depressao_alto, Depressao)
        
        EstadoMental_level_baixo = fuzz.interp_membership(vl_EstadoMental, EstadoMental_baixo, EstadoMental)
        EstadoMental_level_medio = fuzz.interp_membership(vl_EstadoMental, EstadoMental_normal, EstadoMental)
        EstadoMental_level_alto = fuzz.interp_membership(vl_EstadoMental, EstadoMental_alto, EstadoMental)
        #endregion

        try:
            #region .: Definição das regras para o valor de saida :.
            saida_vermelho_regras = np.fmin(
                np.fmax(EstadoMental_level_alto,
                    np.fmax(Agitacao_level_alto, Depressao_level_alto)
                )
                , saida_vermelho)

            saida_amarelo_regras = np.fmin(
                np.fmax(
                    np.fmax(Depressao_level_medio, EstadoMental_level_medio),
                    np.fmax(Agitacao_level_medio, DadosVitaisAlterados_level_medio)
                )
                , saida_amarelo)
                    
            saida_verde_regras = np.fmin(
                np.fmax(DadosVitaisAlterados_level_baixo, Depressao_level_medio)
                , saida_verde)

            saida_azul_regras = np.fmin(
                np.fmax(EstadoMental_level_baixo,
                    np.fmax(DadosVitaisAlterados_level_baixo, Depressao_level_baixo)
                )
                , saida_azul)

            aggregated = np.fmax(np.fmax(saida_azul_regras, saida_verde_regras), np.fmax(saida_amarelo_regras, saida_vermelho_regras))
            #endregion

            #region .: Defuzzificação e retorno de label para o serviço :.
            result = fuzz.defuzzify.defuzz(x_saida, aggregated, 'mom')

            defuzz = ''

            if result > 0 and result <= 15:
                defuzz = 'Azul'
            elif result > 15 and result <= 30:
                defuzz = 'Verde'
            elif result > 30 and result <= 43:
                defuzz = 'Amarelo'
            else:
                defuzz = 'Vermelho'
            #endregion

            return resp_ok('Doença Psiquiatrica', MSG_SUCCESS, defuzz)
        except Exception as e:
            return resp_exception('Doença Psiquiatrica', description=e.__str__())
コード例 #29
0
ファイル: dor_toracica.py プロジェクト: Aesilva1337/CAHD
    def get(self):
        #en = {1:"Azul", 2: "Verde", 3: "Amarelo", 4: "Laranja", 5: "Vermelho"} // Classificação de Manchester
        #region .: Variaveis de Entrada :.
        DadosVitaisAlterados = request.args.get('DadosVitais')
        Dor = request.args.get('Dor')
        FrequenciaDor = request.args.get('FrequenciaDor')
        Idade = request.args.get('Idade')
        #endregion

        #region .: Verificação de valores da API :.
        if DadosVitaisAlterados is None or DadosVitaisAlterados == '' or int(
                DadosVitaisAlterados) < 10:
            DadosVitaisAlterados = 10
        if Dor is None or Dor == '' or int(Dor) < 10: Dor = 10
        if FrequenciaDor is None or FrequenciaDor == '' or int(
                FrequenciaDor) < 10:
            FrequenciaDor = 10
        if Idade is None or Idade == '' or int(Idade) < 10: Idade = 10
        #endregion

        #region .: Definição do range de cada sintoma :.
        vl_DadosVitaisAlterados = np.arange(0, 101, 1)
        vl_Dor = np.arange(0, 101, 1)
        vl_FrequenciaDor = np.arange(0, 101, 1)
        vl_Idade = np.arange(0, 101, 1)
        x_saida = np.arange(0, 61, 1)
        #endregion

        #region .: Definição do range da pertinencia de cada sintoma :.
        DadosVitaisAlterados_baixo = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                 [0, 20, 40, 45])
        DadosVitaisAlterados_normal = fuzz.trimf(vl_DadosVitaisAlterados,
                                                 [35, 60, 85])
        DadosVitaisAlterados_alto = fuzz.trapmf(vl_DadosVitaisAlterados,
                                                [80, 85, 95, 100])

        Dor_baixo = fuzz.trapmf(vl_Dor, [0, 20, 45, 50])
        Dor_moderado = fuzz.trimf(vl_Dor, [40, 50, 70])
        Dor_normal = fuzz.trimf(vl_Dor, [65, 80, 90])
        Dor_alto = fuzz.trapmf(vl_Dor, [80, 85, 95, 100])

        FrequenciaDor_baixo = fuzz.trapmf(vl_FrequenciaDor, [0, 20, 40, 45])
        FrequenciaDor_normal = fuzz.trimf(vl_FrequenciaDor, [35, 60, 85])
        FrequenciaDor_alto = fuzz.trapmf(vl_FrequenciaDor, [80, 85, 95, 100])

        Idade_baixo = fuzz.trapmf(vl_Idade, [0, 20, 40, 40])
        Idade_normal = fuzz.trimf(vl_Idade, [40, 50, 55])
        Idade_alto = fuzz.trapmf(vl_Idade, [55, 60, 95, 100])

        saida_azul = fuzz.trapmf(x_saida, [0, 3, 12, 15])
        saida_verde = fuzz.trimf(x_saida, [15, 22, 29])
        saida_amarelo = fuzz.trimf(x_saida, [29, 36, 43])
        saida_vermelho = fuzz.trapmf(x_saida, [43, 45, 55, 60])
        #endregion

        #region .: Função de ativação para cada nivel definido anteriormente :.
        DadosVitaisAlterados_level_baixo = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_baixo,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_medio = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_normal,
            DadosVitaisAlterados)
        DadosVitaisAlterados_level_alto = fuzz.interp_membership(
            vl_DadosVitaisAlterados, DadosVitaisAlterados_alto,
            DadosVitaisAlterados)

        Dor_level_baixo = fuzz.interp_membership(vl_Dor, Dor_baixo, Dor)
        Dor_level_moderado = fuzz.interp_membership(vl_Dor, Dor_moderado, Dor)
        Dor_level_medio = fuzz.interp_membership(vl_Dor, Dor_normal, Dor)
        Dor_level_alto = fuzz.interp_membership(vl_Dor, Dor_alto, Dor)

        Idade_level_baixo = fuzz.interp_membership(vl_Idade, Idade_baixo,
                                                   Idade)
        Idade_level_medio = fuzz.interp_membership(vl_Idade, Idade_normal,
                                                   Idade)
        Idade_level_alto = fuzz.interp_membership(vl_Idade, Idade_alto, Idade)

        FrequenciaDor_level_baixo = fuzz.interp_membership(
            vl_FrequenciaDor, FrequenciaDor_baixo, FrequenciaDor)
        FrequenciaDor_level_medio = fuzz.interp_membership(
            vl_FrequenciaDor, FrequenciaDor_normal, FrequenciaDor)
        FrequenciaDor_level_alto = fuzz.interp_membership(
            vl_FrequenciaDor, FrequenciaDor_alto, FrequenciaDor)
        #endregion

        try:
            #region .: Definição das regras para o valor de saida :.
            saida_vermelho_regras = np.fmin(
                np.fmax(
                    np.fmax(DadosVitaisAlterados_level_alto, Dor_level_alto),
                    FrequenciaDor_level_alto), saida_vermelho)

            saida_amarelo_regras = np.fmin(
                np.fmax(
                    np.fmax(DadosVitaisAlterados_level_medio, Dor_level_medio),
                    np.fmax(FrequenciaDor_level_medio, Idade_level_alto)),
                saida_amarelo)

            saida_verde_regras = np.fmin(
                np.fmax(
                    np.fmax(DadosVitaisAlterados_level_baixo,
                            Dor_level_moderado),
                    np.fmax(Idade_level_medio, FrequenciaDor_level_baixo)),
                saida_verde)

            saida_azul_regras = np.fmin(
                np.fmax(
                    np.fmax(DadosVitaisAlterados_level_baixo, Dor_level_baixo),
                    Idade_level_baixo), saida_azul)

            aggregated = np.fmax(
                np.fmax(saida_azul_regras, saida_verde_regras),
                np.fmax(saida_amarelo_regras, saida_vermelho_regras))
            #endregion

            #region .: Defuzzificação e retorno de label para o serviço :.
            result = fuzz.defuzzify.defuzz(x_saida, aggregated, 'mom')

            defuzz = ''

            if result > 0 and result <= 15:
                defuzz = 'Azul'
            elif result > 15 and result <= 30:
                defuzz = 'Verde'
            elif result > 30 and result <= 43:
                defuzz = 'Amarelo'
            else:
                defuzz = 'Vermelho'

            #endregion

            return resp_ok('Dor Toracica', MSG_SUCCESS, defuzz)
        except Exception as e:
            return resp_exception('Dor Toracica', description=e.__str__())
コード例 #30
0
    def post(self, *args, **kwargs):
        # Inicializo todas as variaveis utilizadas
        req_data = request.get_json() or None
        dict_data, errors, result = None, None, None
        password, confirm_password = None, None
        schema = UserRegistrationSchema()

        # Se meus dados postados forem Nulos retorno uma respota inválida
        if req_data is None:
            return resp_data_invalid('Users', [], msg=MSG_NO_DATA)

        password = req_data.get('password', None)
        confirm_password = req_data.pop('confirm_password', None)
        document = req_data.get('cpf', None)

        if not check_document(document):
            errors = {'cpf': MSG_DOCUMENT_NULL}
            return resp_data_invalid('Users', errors)

        if not exists_cpf_in_users(document):
            errors = {'cpf': MSG_DOCUMENT_ALREAD_EXIST}
            return resp_data_invalid('Users', errors)

        if not exists_email_in_users(document):
            errors = {'email': MSG_EMAIL_ALREAD_EXIST}
            return resp_data_invalid('Users', errors)

        # verifico através de uma função a senha e a confirmação da senha
        # Se as senhas não são iguais retorno uma respota inválida
        if not check_password_in_signup(password, confirm_password):
            errors = {'password': MSG_PASSWORD_WRONG}
            return resp_data_invalid('Users', errors)

        if not check_password_is_same(password, confirm_password):
            errors = {'password': MSG_PASSWORD_NOT_SAME}
            return resp_data_invalid('Users', errors)

        dict_data = {
            "full_name": req_data.get('full_name', None),
            "email": req_data.get('email', None),
            "password": req_data.get('password', None),
            "cpf": req_data.get('cpf', None),
            "active": req_data.get('active', None)
        }

        data = json.dumps(dict_data)

        # Se houver erros retorno uma resposta inválida
        if errors:
            return resp_data_invalid('Users', errors)

        # Crio um hash da minha senha
        hashed = hashpw(password.encode('utf-8'), gensalt(12))

        # Salvo meu modelo de usuário com a senha criptografada e email em lower case
        # Qualquer exceção ao salvar o modelo retorno uma resposta em JSON
        # ao invés de levantar uma exception no servidor
        try:
            dict_data['password'] = hashed
            dict_data['email'] = dict_data['email'].lower()
            model = User(**dict_data)
            model.save()

        except ValidationError as e:
            return resp_exception('Users', msg=MSG_INVALID_DATA, description=e)

        except Exception as e:
            return resp_exception('Users', description=e)

        # Realizo um dump dos dados de acordo com o modelo salvo
        schema = UserSchema()
        result = schema.dump(model)

        # Retorno 200 o meu endpoint
        return resp_ok(
            'Users',
            MSG_RESOURCE_CREATED.format('Usuário'),
            data=result,
        )