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')
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.')
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)
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)
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)
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)
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')
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')
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)))
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')
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)
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)))
def destroy(request, pk=None): return HTTP.response(405, '')
def update(request, pk=None): return HTTP.response(405, '')
def create(request): return HTTP.response(405, '')
def delete(request, pk=None): return HTTP.response(405, details='No Access')
def create(request): return HTTP.response(405, details='No Access')
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'], {})