class UserSerializer(serializers.ModelSerializer): rented_equipments = EquipmentSerializer(many=True, read_only=True) rent_applications = RentApplicationSerializer(many=True, read_only=True) renter_applications = RenterApplicationSerializer(many=True, read_only=True) release_applications = ReleaseApplicationSerializer(many=True, read_only=True) received_rent_applications = RentApplicationSerializer(many=True, read_only=True) owned_equipments = EquipmentSerializer(many=True, read_only=True) class Meta: model = User fields = '__all__'
def publish_equipment_metadata(self, equipmentholder, qos=2, retain=False): equipment_items = equipmentholder.equipmentitem_set.values('equipment') equipments = Equipment.objects.filter(id__in=equipment_items) self.publish_topic('equipment/{}/metadata'.format(equipmentholder.id), EquipmentSerializer(equipments, many=True), qos=qos, retain=retain)
def list(self, request, *args, **kwargs): if request.user: featured_list = FeaturedEquipment.objects.filter(user_id=request.user) featured_count = len(FeaturedEquipment.objects.filter( user_id=request.user).all()) featured_data = [] for x in featured_list: featured_data.append(Equipment.objects.filter(id=x.equipment_id.id).first()) featured_serializer = EquipmentSerializer( featured_data, many=True).data featured_serializer = [get_full_equipment_data(x) for x in featured_serializer] return Response({ 'data': { 'current_count': featured_count, 'featured': featured_serializer, } }, status=status.HTTP_200_OK) return Response({ 'data': { 'featured': [], }, 'errors': { 'message': 'No user token found!' } }, status=status.HTTP_401_UNAUTHORIZED)
def bulk_update(self, request, *args, **kwargs): #partial = kwargs.pop('partial', False) # restrict the update to the filtered queryset serializer = EquipmentSerializer(Equipment.objects.filter(id__in=[d['id'] for d in request.data]), data=request.data, context={'request': request, 'view': self}, many=True) if serializer.is_valid(raise_exception=True): serializer.save() return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def metadata(self, request, pk=None, **kwargs): """ Retrive equipment metadata. """ equipmentholder = self.get_object() equipment_list = equipmentholder.equipmentitem_set.values('equipment') equipment = Equipment.objects.filter(id__in=equipment_list) serializer = EquipmentSerializer(equipment, many=True) return Response(serializer.data)
def retrieve(self, request, pk=None, *args, **kwargs): if request.user and pk: featured = FeaturedEquipment.objects.filter( user_id=request.user, equipment_id=pk).first() featured_serializer = EquipmentSerializer( Equipment.objects.filter(id=featured.equipment_id.id).first(), context=self.get_serializer_context(), many=False).data return Response({ 'data': get_full_equipment_data(featured_serializer) }, status=status.HTTP_200_OK) return Response({ 'data': { 'featured': [], }, 'errors': { 'message': 'No user token found!' } }, status=status.HTTP_401_UNAUTHORIZED)
def test_equipment_metadata_viewset(self): # instantiate client client = Client() # login as admin client.login(username=settings.MQTT['USERNAME'], password=settings.MQTT['PASSWORD']) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h1.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 200) result = JSONParser().parse(BytesIO(response.content)) answer = [ EquipmentSerializer(Equipment.objects.get(id=self.e1.id)).data, EquipmentSerializer(Equipment.objects.get(id=self.e2.id)).data ] self.assertCountEqual(result, answer) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h2.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 200) result = JSONParser().parse(BytesIO(response.content)) answer = [ EquipmentSerializer(Equipment.objects.get(id=self.e1.id)).data, EquipmentSerializer(Equipment.objects.get(id=self.e3.id)).data ] self.assertCountEqual(result, answer) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h3.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 200) result = JSONParser().parse(BytesIO(response.content)) answer = [ EquipmentSerializer(Equipment.objects.get(id=self.e1.id)).data ] self.assertCountEqual(result, answer) # logout client.logout() # login as testuser1 client.login(username='******', password='******') # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h1.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 200) result = JSONParser().parse(BytesIO(response.content)) answer = [ EquipmentSerializer(Equipment.objects.get(id=self.e1.id)).data, EquipmentSerializer(Equipment.objects.get(id=self.e2.id)).data ] self.assertCountEqual(result, answer) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h2.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 200) result = JSONParser().parse(BytesIO(response.content)) answer = [ EquipmentSerializer(Equipment.objects.get(id=self.e1.id)).data, EquipmentSerializer(Equipment.objects.get(id=self.e3.id)).data ] self.assertCountEqual(result, answer) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h3.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 404) # logout client.logout() # login as testuser2 client.login(username='******', password='******') # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h1.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 404) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h2.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 404) # retrieve any hospital equipment response = client.get('/api/equipment/{}/metadata/'.format( str(self.h3.equipmentholder.id)), follow=True) self.assertEqual(response.status_code, 404) # logout client.logout()