Ejemplo n.º 1
0
    def create(self, request, *args, **kwargs):
        # vd 조회
        vd = self.vd
        if not vd: return Response(status=status.HTTP_401_UNAUTHORIZED)

        # guide 조회
        guide = convert_to_json(request.data['guide'])

        # myself 변환
        if 'vd' in guide and guide['vd'] == 'myself':
            guide['vd'] = vd.id

        # check validation 1
        if 'type' in guide and guide['type'] == 'user':
            ru = RealUser.objects.get(email=guide['email'])
            if ru == self.vd.realOwner:
                return Response(status=status.HTTP_400_BAD_REQUEST)

        # proxy 조회
        try:
            proxy = Proxy.objects.get(guide=guide)
        except Proxy.DoesNotExist:
            vd_publisher = VD()
            # TODO : type 이 images 가 아닌 경우에 대한 구현
            if guide['type'] == 'images':
                vd_publisher.is_private = True
                vd_publisher.is_public = False
                vd_publisher.parent = vd
            vd_publisher.save()
            proxy = Proxy.objects.create(vd=vd_publisher, guide=guide)

        # check validation 2
        if not proxy.vd:
            raise NotImplementedError
        if proxy.vd == vd:
            return Response(status=status.HTTP_400_BAD_REQUEST)
        if proxy.vd.is_private:
            if not proxy.vd.parent:
                raise NotImplementedError
            if proxy.vd.parent != vd:
                return Response(status=status.HTTP_403_FORBIDDEN)

        # importer 생성 및 celery task 처리
        importer, is_created = Importer.objects.get_or_create(publisher=proxy,
                                                              subscriber=vd)
        importer.start(high_priority=is_created)

        # 결과 처리
        serializer = self.get_serializer(importer)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
Ejemplo n.º 2
0
    def test_mask(self):
        vd = VD()
        vd.save()
        saved = VD.objects.first()
        self.assertEqual(saved.is_private, False)
        self.assertEqual(saved.is_public, False)
        self.assertEqual(saved.mask, 0 | 0)

        vd.is_private = True
        vd.is_public = False
        vd.save()
        saved = VD.objects.first()
        self.assertEqual(saved.is_private, True)
        self.assertEqual(saved.is_public, False)
        self.assertEqual(saved.mask, 0 | 1)

        vd.is_private = False
        vd.is_public = True
        vd.save()
        saved = VD.objects.first()
        self.assertEqual(saved.is_private, False)
        self.assertEqual(saved.is_public, True)
        self.assertEqual(saved.mask, 2 | 0)