Exemplo n.º 1
0
    def create(self, request, *args, **kwargs):
        """ Create a new person. """
        person_data = request.data

        partner = request.site.partner
        person_data['partner'] = partner.id
        serializer = self.get_serializer(data=person_data)
        serializer.is_valid(raise_exception=True)

        if waffle.switch_is_active('publish_person_to_marketing_site'):
            try:
                marketing_person = MarketingSitePeople()
                response = marketing_person.publish_person(
                    partner, {
                        'given_name': serializer.validated_data['given_name'],
                        'family_name': serializer.validated_data['family_name']
                    })
                serializer.validated_data.pop('uuid')
                serializer.validated_data['uuid'] = response['uuid']

            except (PersonToMarketingException,
                    MarketingSiteAPIClientException):
                logger.exception(
                    'An error occurred while adding the person [%s]-[%s] to the marketing site.',
                    serializer.validated_data['given_name'],
                    serializer.validated_data['family_name'])
                return Response(
                    'Failed to add person data to the marketing site.',
                    status=status.HTTP_400_BAD_REQUEST)

            try:
                self.perform_create(serializer)
            except Exception:  # pylint: disable=broad-except
                logger.exception(
                    'An error occurred while adding the person [%s]-[%s]-[%s].',
                    serializer.validated_data['given_name'],
                    serializer.validated_data['family_name'], response['id'])
                marketing_person.delete_person(partner, response['id'])
                return Response('Failed to add person data.',
                                status=status.HTTP_400_BAD_REQUEST)

            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data,
                            status=status.HTTP_201_CREATED,
                            headers=headers)

        return Response('publish_program_to_marketing_site is disabled.',
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 2
0
 def test_delete_person(self):
     self.mock_api_client(200)
     self.mock_node_delete(200)
     people = MarketingSitePeople()
     people.delete_person(self.partner, self.node_id)