예제 #1
0
    def update(request, pk=None):
        try:

            updateComponente = request.data
            # 1. Check schema
            SchemaValidator.validate_obj_structure(
                updateComponente, 'componentes/updateComponente.json')

            myComponente = Componente.objects.get(pk=pk)

            if updateComponente['familia']:
                familia = FamiliaComponentes.objects.get(
                    pk=updateComponente['familia'])
                myComponente.familia = familia

            myComponente.nome = updateComponente[
                'nome'] if 'nome' in updateComponente else myComponente.nome
            myComponente.descricao = updateComponente[
                'descricao'] if 'descricao' in updateComponente else myComponente.descricao
            myComponente.quantidade = updateComponente[
                'quantidade'] if 'quantidade' in updateComponente else myComponente.quantidade

            myComponente.save()

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Some error occurred. {}. {}.'.format(
                    type(e).__name__, str(e)))

        return HTTP.response(200, 'Update Success')
예제 #2
0
    def create(request):
        try:
            data = request.data
            # 1.2. Check schema
            SchemaValidator.validate_obj_structure(request.data,
                                                   'createUser.json')
            user = User(
                email=data['email'].lower() if 'email' in data else None,
                username=data['username'].lower()
                if 'username' in data else None,
                level=UserLevel.objects.filter(pk=request.data['level']).get()
                if 'level' in data else UserLevel.objects.viewer_level().get(),
                password=str(
                    bcrypt.hashpw(request.data['password'].encode('utf8'),
                                  bcrypt.gensalt()), 'utf8'),
            )
            user.save()

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Ocorreu um erro inesperado',
                'Unexpected Error. {}. {}.'.format(type(e).__name__, str(e)))

        return HTTP.response(200, 'Utilizador criado com sucesso.')
예제 #3
0
    def list(self):
        try:
            queryset = Componente.objects.all()
            data = FullComponentesSerializer(
                queryset, many=True).to_representation(queryset)

            # data = []
            #
            # for component in components:
            #     queryset = ListaDeComponentes.objects.filter(componente=component['id']).all()
            #     pertence = ListaDeComponentesSerializer(queryset, many=True).to_representation(queryset)
            #
            #     data.append({
            #         'id': component['id'],
            #         'nome': component['nome'],
            #         'descricao': component['descricao'],
            #         'quantidade': component['quantidade'],
            #         'genCodigo': component['genCodigo'],
            #         'familia': component['familia'],
            #         'pertence': pertence
            #     })

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Some error occurred. {}. {}.'.format(
                    type(e).__name__, str(e)))

        return HTTP.response(200, 'Familia de Componentes', data)
예제 #4
0
    def list(self):
        try:
            queryset = Cliente.objects.all()
            data = ClienteSerializer(queryset, many=True).to_representation(queryset)
        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(400, 'Some error occurred. {}. {}.'.format(type(e).__name__, str(e)))

        return HTTP.response(200, 'Lista de Clientes' ,data)
예제 #5
0
    def list(self, request):
        try:
            queryset = ConfigTenda.objects.all()
            data = ConfigTendaSerializer(queryset, many=True).to_representation(queryset)

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(400, 'Some error occurred. {}. {}.'.format(type(e).__name__, str(e)))

        return HTTP.response(200, 'Configurações de Tendas' ,data)
예제 #6
0
    def list(self):
        try:
            queryset = TipoTenda.objects.all()
            data = TipoTendaSerializer(queryset,
                                       many=True).to_representation(queryset)

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Ocorreu um erro inesperado',
                'Unexpected Error. {}. {}.'.format(type(e).__name__, str(e)))

        return HTTP.response(200, 'Tipo de Tendas', data)
예제 #7
0
    def create(request):
        try:
            data = request.data
            # 1. Check schema
            SchemaValidator.validate_obj_structure(data, 'CRM/obras.json')

            # Check if Cliente exists
            cliente = Cliente.objects.match_cliente(nome=data['cliente'])

            dataObra = data['data']

            #Check Valid date
            try:
                datetime.strptime(dataObra, '%Y-%m-%d')
            except Exception:
                return HTTP.response(405, "Incorrect data format, should be YYYY-MM-DD")

            if cliente:
                novaObra = Obras(
                    date=dataObra,
                    cliente=cliente,
                    local=data['local']
                )
                novaObra.save()
                message = "Nova obra adicionado"
            else:
                print("create new client")
                novoCliente = Cliente(
                    nome=data['cliente'],
                    descricao="Sem descricao"
                )
                novoCliente.save()

                novaObra = Obras(
                    date=datetime.strptime(data['data'], '%Y-%m-%d'),
                    cliente=novoCliente,
                    local=data['local']
                )
                novaObra.save()
                message = "Nova obra e cliente adicionado"

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(400, 'Some error occurred. {}. {}.'.format(type(e).__name__, str(e)))

        return HTTP.response(200, message)
 def test_details_in_responses(self):
     res = HTTP.response(200, 'This is a test for details')
     body = json.loads(res.content)
     self.assertEqual(res.status_code, 200)
     self.assertEqual(body['code'], 200)
     self.assertEqual(body['message'], 'Success')
     self.assertEqual(body['details'], 'This is a test for details')
     self.assertEqual(body['data'], {})
 def test_data_in_responses(self):
     res = HTTP.response(200, 'This is a test for details', {'foo': 'bar', 'test': 'success'})
     body = json.loads(res.content)
     self.assertEqual(res.status_code, 200)
     self.assertEqual(body['code'], 200)
     self.assertEqual(body['message'], 'Success')
     self.assertEqual(body['details'], 'This is a test for details')
     self.assertEqual(body['data']['foo'], 'bar')
     self.assertEqual(body['data']['test'], 'success')
예제 #10
0
    def create(request):
        try:
            data = request.data
            # 1. Check schema
            SchemaValidator.validate_obj_structure(
                data, 'componentes/componentes.json')

            # 2. Validate
            if (FamiliaComponentes.objects.familia_exist(
                    data['familia']) == False):
                return HTTP.response(
                    400, 'Validation Error. Parameter Familia is wrong')

            familia = FamiliaComponentes.objects.get(pk=data['familia'])
            genCodigo = Componente.objects.count_familia(data['familia']) + 1

            genCodigo = str(familia.id) + '.' + str(genCodigo)

            novoComponente = Componente(
                nome=data['nome'] if 'nome' in data else None,
                descricao=data['descricao'] if 'descricao' in data else None,
                tag=data['tag'] if 'tag' in data else None,
                quantidade=data['quantidade']
                if 'quantidade' in data else None,
                familia=familia,
                genCodigo=genCodigo)
            novoComponente.save()

            lista_de_components_to_save = list()
            for tenda_id in data['tenda']:
                tipoTenda = ConfigTenda.objects.get(pk=tenda_id)
                lista_de_components_to_save.append(
                    ListaDeComponentes(componente=novoComponente,
                                       tenda=tipoTenda))
            ListaDeComponentes.objects.bulk_create(lista_de_components_to_save)

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Some error occurred. {}. {}.'.format(
                    type(e).__name__, str(e)))

        return HTTP.response(200, 'Novo Componente Registado')
예제 #11
0
    def verify(request):
        try:
            #Check for Schema
            SchemaValidator.validate_obj_structure(request.data, 'login.json')
            # 1. Check if pair username-password is correct
            user = User.objects.filter(
                username=request.data['username'].lower()).get()
            if not bcrypt.checkpw(request.data['password'].encode('utf8'),
                                  user.password.encode('utf8')):
                raise HTTP.response(200, details=False)

            return HTTP.response(200, details=True)

        except User.DoesNotExist as e:
            return HTTP.response(200, details=False)
        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Ocorreu um erro inesperado',
                'Unexpected Error. {}. {}.'.format(type(e).__name__, str(e)))
예제 #12
0
    def update(request, pk=None):
        try:
            data = request.data
            # 1.2. Check schema
            SchemaValidator.validate_obj_structure(request.data,
                                                   'updateUser.json')

            if not Permission.verify(request, ['Admin', 'admin']):
                raise HttpException(400, 'No permissions')

            if int(request.USER_ID) != int(pk):
                raise HttpException(400, 'No permissions')

            myUser = User.objects.get(pk=pk)

            if 'password' in data:
                myUser.password = str(
                    bcrypt.hashpw(data['password'].encode('utf8'),
                                  bcrypt.gensalt()), 'utf8')
            if 'username' in data:
                myUser.username = data['username']
            if 'email' in data:
                myUser.email = data['email']
            if 'level' in data:
                myUser.level = UserLevel.objects.filter(
                    pk=request.data['level']).get()

            myUser.save()

        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except IntegrityError as e:
            return HTTP.response(400, 'No Repeated Usernames')
        except Exception as e:
            return HTTP.response(
                400, 'Ocorreu um erro inesperado',
                'Unexpected Error. {}. {}.'.format(type(e).__name__, str(e)))

        return HTTP.response(200, 'Utilizador actualizado')
예제 #13
0
    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        if request.path not in ('/api/login/', '/api/login'):
            if 'HTTP_JWT' not in request.META:
                return HTTP.response(401, 'Falta o token nos headers.',
                                     'Token not present')

            try:
                jwt_encoded = request.META['HTTP_JWT']
                jwt_decoded = jwt.decode(jwt_encoded,
                                         settings.JWT_SECRET,
                                         algorithm=settings.JWT_ALGORITHM)
            except jwt.ExpiredSignatureError:
                return HTTP.response(401, 'Token Expired', 'Token not valid.')
            except DecodeError:
                return HTTP.response(401, 'Token não é válido.',
                                     'Token not valid.')

            request.USER_ID = jwt_decoded['user_id']
            request.LEVEL_ID = jwt_decoded['level_id']

        return self.get_response(request)
예제 #14
0
    def login(request):
        try:
            #Check for Schema
            SchemaValidator.validate_obj_structure(request.data, 'login.json')
            # 1. Check if pair username-password is correct
            user = User.objects.filter(
                username=request.data['username'].lower()).get()
            if not bcrypt.checkpw(request.data['password'].encode('utf8'),
                                  user.password.encode('utf8')):
                raise HttpException(401, 'Credenciais não válidas.')
            # 4. Generate JWT
            jwt_data = {
                'user_id': user.id,
                'level_id': user.level.id,
            }
            jwt_encoded = jwt.encode(
                jwt_data,
                settings.JWT_SECRET,
                algorithm=settings.JWT_ALGORITHM).decode('utf-8')
            # Send Response
            data = {
                'jwt': jwt_encoded,
                'username': user.username,
                'level_id': user.level.id,
            }

            return HTTP.response(200, data=data)

        except User.DoesNotExist as e:
            return HTTP.response(401, 'Utilizador não existe.',
                                 'User not valid.')
        except HttpException as e:
            return HTTP.response(e.http_code, e.http_detail)
        except Exception as e:
            return HTTP.response(
                400, 'Ocorreu um erro inesperado',
                'Unexpected Error. {}. {}.'.format(type(e).__name__, str(e)))
예제 #15
0
 def destroy(request, pk=None):
     return HTTP.response(405, '')
예제 #16
0
 def update(request, pk=None):
     return HTTP.response(405, '')
예제 #17
0
 def create(request):
     return HTTP.response(405, '')
예제 #18
0
 def delete(request, pk=None):
     return HTTP.response(405, details='No Access')
예제 #19
0
 def create(request):
     return HTTP.response(405, details='No Access')
예제 #20
0
 def list(self):
     return HTTP.response(405, '')
    def test_code_message_responses(self):
        res = HTTP.response(200)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(body['code'], 200)
        self.assertEqual(body['message'], 'Success')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(201)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 201)
        self.assertEqual(body['code'], 201)
        self.assertEqual(body['message'], 'Created')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(202)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 202)
        self.assertEqual(body['code'], 202)
        self.assertEqual(body['message'], 'Accepted')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(204)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 204)
        self.assertEqual(body['code'], 204)
        self.assertEqual(body['message'], 'No content')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(400)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 400)
        self.assertEqual(body['code'], 400)
        self.assertEqual(body['message'], 'Bad request')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(401)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 401)
        self.assertEqual(body['code'], 401)
        self.assertEqual(body['message'], 'Unauthorized')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(403)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 403)
        self.assertEqual(body['code'], 403)
        self.assertEqual(body['message'], 'Forbidden')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(404)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 404)
        self.assertEqual(body['code'], 404)
        self.assertEqual(body['message'], 'Not found')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(405)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 405)
        self.assertEqual(body['code'], 405)
        self.assertEqual(body['message'], 'Method not allowed')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(500)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 500)
        self.assertEqual(body['code'], 500)
        self.assertEqual(body['message'], 'Internal error')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})

        res = HTTP.response(501)
        body = json.loads(res.content)
        self.assertEqual(res.status_code, 501)
        self.assertEqual(body['code'], 501)
        self.assertEqual(body['message'], 'Not Implemented')
        self.assertEqual(body['details'], '')
        self.assertEqual(body['data'], {})