Exemple #1
0
    def post(self, request, *args, **kwargs):
        data = request.data
        try:
            event_id = kwargs.get('event_id') or data.get('event_id')
            data['event_id'] = event_id
            flood = Flood.objects.get(event_id=event_id)
            report = FloodReport.objects.filter(flood=flood,
                                                language=data['language'])
        except Flood.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)

        if report:
            # cannot post report if it is already exists
            serializer = FloodReportSerializer(report[0])
            return Response(serializer.data,
                            status=status.HTTP_400_BAD_REQUEST)

        serializer = FloodReportSerializer(data=data, partial=True)

        if serializer.is_valid():
            serializer.validated_data['flood'] = flood
            try:
                serializer.save()
                return Response(serializer.data,
                                status=status.HTTP_201_CREATED)
            except (ValidationError, IntegrityError) as e:
                # This happens when simultaneuously two conn trying to save
                # the same unique_together fields (earthquake, language)
                # Should warn this to sentry
                LOGGER.warning(e.message)
                return Response(serializer.errors,
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemple #2
0
    def post(self, request, *args, **kwargs):
        data = request.data
        try:
            event_id = kwargs.get('event_id') or data.get('event_id')
            data['event_id'] = event_id
            flood = Flood.objects.get(event_id=event_id)
            report = FloodReport.objects.filter(
                flood=flood, language=data['language'])
        except Flood.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)

        if report:
            # cannot post report if it is already exists
            serializer = FloodReportSerializer(report[0])
            return Response(
                serializer.data, status=status.HTTP_400_BAD_REQUEST)

        serializer = FloodReportSerializer(data=data, partial=True)

        if serializer.is_valid():
            serializer.validated_data['flood'] = flood
            try:
                serializer.save()
                return Response(
                    serializer.data, status=status.HTTP_201_CREATED)
            except (ValidationError, IntegrityError) as e:
                # This happens when simultaneuously two conn trying to save
                # the same unique_together fields (earthquake, language)
                # Should warn this to sentry
                LOGGER.warning(e.message)
                return Response(
                    serializer.errors,
                    status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemple #3
0
    def test_flood_report_serializer(self):
        """Test for Report Serializer"""
        report_dict = {
            'event_id': u'2015112518-3-rw',
            'language': u'id',
            'impact_report': File(open(self.data_path('impact-table-id.pdf'))),
            'impact_map': File(open(self.data_path('impact-map-id.pdf')))
        }
        serializer = FloodReportSerializer(data=report_dict)
        # Test that Serializer from dict to model works
        self.assertTrue(serializer.is_valid())
        flood = Flood.objects.get(event_id=u'2015112518-3-rw')
        serializer.validated_data['flood'] = flood
        serializer.save()

        try:
            report = FloodReport.objects.get(
                flood__event_id=u'2015112518-3-rw', language=u'id')
        except FloodReport.DoesNotExist:
            pass
        # Test that report exists
        self.assertTrue(report)

        flood = Flood.objects.get(event_id=u'2015112518-3-rw')
        # Test that flood report is in the Floods model reports member
        # property
        self.assertIn(report, flood.reports.all())

        serializer = FloodReportSerializer(report)
        # Test member of the serialized model equals dict value
        self.assertEqualDictionaryWithFiles(serializer.data, report_dict)
Exemple #4
0
 def put(self, request, event_id=None, language=None):
     data = request.data
     try:
         if event_id:
             data['event_id'] = event_id
             report = FloodReport.objects.get(flood__event_id=event_id,
                                              language=language)
         else:
             return Response(status=status.HTTP_400_BAD_REQUEST)
     except FloodReport.DoesNotExist:
         return Response(status=status.HTTP_404_NOT_FOUND)
     # delete previous files
     report.impact_map.delete()
     report.impact_report.delete()
     serializer = FloodReportSerializer(report, data=data, partial=True)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemple #5
0
 def put(self, request, event_id=None, language=None):
     data = request.data
     try:
         if event_id:
             data['event_id'] = event_id
             report = FloodReport.objects.get(
                 flood__event_id=event_id, language=language)
         else:
             return Response(status=status.HTTP_400_BAD_REQUEST)
     except FloodReport.DoesNotExist:
         return Response(status=status.HTTP_404_NOT_FOUND)
     # delete previous files
     report.impact_map.delete()
     report.impact_report.delete()
     serializer = FloodReportSerializer(report, data=data, partial=True)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    def test_flood_report_serializer(self):
        """Test for Report Serializer"""
        report_dict = {
            'event_id': u'2015112518-3-rw',
            'language': u'id',
            'impact_report': File(
                open(self.data_path('impact-table-id.pdf'))
            ),
            'impact_map': File(
                open(self.data_path('impact-map-id.pdf'))
            )
        }
        serializer = FloodReportSerializer(data=report_dict)
        # Test that Serializer from dict to model works
        self.assertTrue(serializer.is_valid())
        flood = Flood.objects.get(event_id=u'2015112518-3-rw')
        serializer.validated_data['flood'] = flood
        serializer.save()

        try:
            report = FloodReport.objects.get(
                flood__event_id=u'2015112518-3-rw',
                language=u'id'
            )
        except FloodReport.DoesNotExist:
            pass
        # Test that report exists
        self.assertTrue(report)

        flood = Flood.objects.get(event_id=u'2015112518-3-rw')
        # Test that flood report is in the Floods model reports member
        # property
        self.assertIn(report, flood.reports.all())

        serializer = FloodReportSerializer(report)
        # Test member of the serialized model equals dict value
        self.assertEqualDictionaryWithFiles(serializer.data, report_dict)