Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.19 KB | None | 0 0
  1. class LogoutView(APIView):
  2.     def get(self, request, *args, **kwargs):
  3.         logout(request)
  4.         return Response({"status": "success"})
  5.  
  6.  
  7. class LoginView(APIView):
  8.     serializer_class = LoginUserSerializer
  9.     queryset = User.objects.all()
  10.     permission_classes = (AllowAny,)
  11.  
  12.     def post(self, request, *args, **kwargs):
  13.         ser = self.serializer_class(data=request.data)
  14.         ser.is_valid(raise_exception=True)
  15.         user = authenticate(email=ser.validated_data['email'], password=ser.validated_data['password'])
  16.         if user and user.is_active:
  17.             login(request, user)
  18.             return Response({"status": "success", "user": UserSerializer(user).data})
  19.         else:
  20.             raise PermissionDenied("Wrong credentials!")
  21.  
  22.  
  23. class ChangeUserPasswordView(APIView):
  24.     """
  25.    Change password for user
  26.    """
  27.     queryset = User.objects.all()
  28.     serializer_class = ChangePasswordSerializer
  29.  
  30.     def put(self, request, *args, **kwargs):
  31.         ser = self.serializer_class(self.request.user, data=request.data)
  32.         ser.is_valid(raise_exception=True)
  33.         ser.save()
  34.  
  35.         return Response({"update": "status"})
  36.  
  37.  
  38. class DialogEntryView(mixins.UpdateModelMixin, mixins.RetrieveModelMixin, GenericAPIView):
  39.     queryset = DialogEntry.objects.all()
  40.     serializer_class = DialogEntrySerializer
  41.     lookup_url_kwarg = 'id'
  42.  
  43.     def put(self, request, *args, **kwargs):
  44.         return self.update(request, *args, **kwargs)
  45.  
  46.     def get(self, request, *args, **kwargs):
  47.         return self.retrieve(request, *args, **kwargs)
  48.  
  49.  
  50. class DialogView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, GenericAPIView):
  51.     """
  52.    <p>
  53.    available languages in dialogs: es_ES,en_GB,en_US
  54.    </p>
  55.    """
  56.     queryset = Dialog.objects.all()
  57.     serializer_class = ExtendedDialogSerializer
  58.     lookup_url_kwarg = 'id'
  59.  
  60.     def get(self, request, *args, **kwargs):
  61.         return self.retrieve(request, *args, **kwargs)
  62.  
  63.     def put(self, request, *args, **kwargs):
  64.         return self.update(request, *args, **kwargs)
  65.  
  66.  
  67. class DialogEntryCreateView(mixins.CreateModelMixin, GenericAPIView):
  68.     """
  69.    Create Entry of Dialog
  70.    """
  71.     queryset = DialogEntry.objects.all()
  72.     serializer_class = DialogEntryCreateSerializer
  73.  
  74.     def post(self, request, id, *args, **kwargs):
  75.         return self.create(request, *args, **kwargs)
  76.  
  77.     def perform_create(self, serializer):
  78.         serializer.save()
  79.         data = DialogEntrySerializer(serializer.instance).data
  80.         django_fanout.publish('dialog_%s' % self.kwargs['id'], json.dumps(data))
  81.  
  82.  
  83. class DialogEntryListView(mixins.ListModelMixin, GenericAPIView):
  84.     """
  85.    Create Entry of Dialog
  86.    """
  87.     queryset = DialogEntry.objects.all()
  88.     serializer_class = DialogEntryListSerializer
  89.     filter_backends = (DialogEntrySearchFilter,)
  90.     mongo_fields = ('markedAsIncorrect',)
  91.  
  92.     def get(self, request, *args, **kwargs):
  93.         return self.list(request, *args, **kwargs)
  94.  
  95.  
  96. class DialogsListCreateView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
  97.     """
  98.    <p>
  99.    Available languages in dialogs: es_ES,en_GB,en_US
  100.    </p>
  101.    """
  102.  
  103.     queryset = Dialog.objects.all()
  104.     serializer_class = DialogSerializer
  105.  
  106.     filter_backends = (DialogSearchFilter,)
  107.     mongo_fields = ('search', 'agent_name', 'channel', 'locale', 'agent_id', 'dateTo', 'dateFrom',)
  108.  
  109.     def get_queryset(self):
  110.         agents = Agent.objects.get_user_agents(self.request.user, 'read')
  111.         self.queryset = self.queryset.filter(botSetup__in=agents)
  112.         return super(DialogsListCreateView, self).get_queryset()
  113.  
  114.     def get(self, request, *args, **kwargs):
  115.         return self.list(request, *args, **kwargs)
  116.  
  117.  
  118. class PermissionRetrieveView(mixins.RetrieveModelMixin, mixins.DestroyModelMixin, mixins.UpdateModelMixin,
  119.                              GenericAPIView):
  120.     """
  121.  
  122.    email
  123.    """
  124.     queryset = Permission.objects.all()
  125.     serializer_class = UpdatePermissionSerializer
  126.  
  127.     @staticmethod
  128.     def check_agent_permissions(permission_id):
  129.         permission = Permission.objects.get(id=permission_id)
  130.         permissions = Permission.objects.filter(params=permission.params)
  131.         can_edit = any(
  132.             map(lambda x: 'edit' in settings.AGENT_PERMISSIONS.get(x.type, {}).get('permissions'), permissions))
  133.         if not can_edit:
  134.             raise ValidationError("Not enough permissions!")
  135.  
  136.     def get(self, request, *args, **kwargs):
  137.         return self.retrieve(request, *args, **kwargs)
  138.  
  139.     def get_queryset(self):
  140.         return super(PermissionRetrieveView, self).get_queryset()
  141.  
  142.     def get_object(self):
  143.         return super(PermissionRetrieveView, self).get_object()
  144.  
  145.     def put(self, request, *args, **kwargs):
  146.         self.check_agent_permissions(kwargs['id'])
  147.         return self.update(request, *args, **kwargs)
  148.  
  149.     def delete(self, request, *args, **kwargs):
  150.         self.check_agent_permissions(kwargs['id'])
  151.         return self.destroy(request, *args, **kwargs)
  152.  
  153.  
  154. class PermissionsListView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
  155.     """
  156.    All user permissions
  157.  
  158.    <p>
  159.        You can search by:
  160.        'type', 'user_email', 'agent_name'
  161.    </p>
  162.    """
  163.     queryset = Permission.objects.all()
  164.     serializer_class = UpdatePermissionSerializer
  165.  
  166.     filter_backends = (PermissionSearchFilter,)
  167.     mongo_fields = ('type', 'user_email', 'agent_name',)
  168.  
  169.     def get_queryset(self):
  170.         allowed_agents = Agent.objects.get_user_agents(self.request.user, 'edit')
  171.         self.queryset = self.queryset.filter(Q(params__in=allowed_agents) | Q(user_id=self.request.user))
  172.         return super(PermissionsListView, self).get_queryset()
  173.  
  174.     def get(self, request, *args, **kwargs):
  175.         return self.list(request, *args, **kwargs)
  176.  
  177.     def post(self, request, *args, **kwargs):
  178.         return self.create(request, *args, **kwargs)
  179.  
  180.     def perform_create(self, serializer):
  181.         try:
  182.             if 'params' in serializer.validated_data:
  183.                 agent = Agent.objects.get(id=serializer.validated_data['params'].id)
  184.             else:
  185.                 agent = Agent.objects.get(name=serializer.validated_data['agent_name'])
  186.  
  187.             permissions = Permission.objects.filter(user_id=self.request.user, params=agent)
  188.             can_edit = False
  189.             for perm in permissions:
  190.                 can_edit = 'edit' in settings.AGENT_PERMISSIONS.get(perm.type, {}).get('permissions')
  191.                 if can_edit:
  192.                     break
  193.             if not can_edit:
  194.                 raise ValidationError("You have no permissions to edit this agent, bro!")
  195.         except Agent.DoesNotExist:
  196.             raise ValidationError("There is no agent with this id or you haven't enough permissions, bro!")
  197.  
  198.         serializer.save()
  199.  
  200.  
  201. class AgentPermissionsListView(mixins.ListModelMixin, GenericAPIView):
  202.     """
  203.    Agent permissions
  204.  
  205.    <p>
  206.        You can search by:
  207.        'type', 'user_email', 'agent_name'
  208.    </p>
  209.    """
  210.  
  211.     queryset = Permission.objects.all()
  212.     serializer_class = UpdatePermissionSerializer
  213.  
  214.     filter_backends = (PermissionSearchFilter,)
  215.     mongo_fields = ('type', 'user_email', 'agent_name',)
  216.  
  217.     def get_queryset(self):
  218.         try:
  219.             agents = Agent.objects.get_user_agents(self.request.user, 'read')
  220.             if self.kwargs.get('agent_id') not in map(lambda x: str(x.id), agents):
  221.                 raise Exception
  222.             self.queryset = self.queryset.filter(params=self.kwargs.get('agent_id'))
  223.             return super(AgentPermissionsListView, self).get_queryset()
  224.         except Exception:
  225.             raise ValidationError("No such agent sorry!")
  226.  
  227.     def get(self, request, *args, **kwargs):
  228.         return self.list(request, *args, **kwargs)
  229.  
  230.  
  231. class AgentsListView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
  232.     """
  233.    For search use <b>search</b> GET param.
  234.  
  235.    You can also search for:
  236.    'billing', 'permission', 'email', 'id', 'name'
  237.  
  238.    <p>
  239.    Available Permisions:
  240.    AGENT_OWNER = 'agentOwner'
  241.    AGENT_SUPERVISOR = 'agentSupervisorIM'
  242.    AGENT_SUPERVISOR_WEB = 'agentSupervisorWeb'
  243.    AGENT_ADMINISTRATION = 'agentAdministration'
  244.    AGENT_SUPERVISOR_PARSING = 'agentSupervisorParsing'
  245.    </p>
  246.    """
  247.  
  248.     queryset = Agent.objects.all()
  249.     serializer_class = AgentSerializer
  250.  
  251.     filter_backends = (MongoSearchFilter, AgentsFieldsFilter)
  252.     search_fields = ('name', 'description')
  253.     mongo_fields = ('billing', 'permission', 'email', 'id', 'name')
  254.  
  255.     def get_queryset(self):
  256.         self.queryset = Agent.objects.get_user_agents(self.request.user, 'read')
  257.         return super(AgentsListView, self).get_queryset()
  258.  
  259.     def get(self, request, *args, **kwargs):
  260.         return self.list(request, *args, **kwargs)
  261.  
  262.     def post(self, request, *args, **kwargs):
  263.         return self.create(request, *args, **kwargs)
  264.  
  265.     def perform_create(self, serializer):
  266.         try:
  267.             Agent.objects.get(name=serializer.validated_data['name'])
  268.             raise ValidationError("Can't create user with same name")
  269.         except Agent.DoesNotExist:
  270.             agent = serializer.save()
  271.             Permission.objects.create(user_id=self.request.user, params=agent, type=AGENT_OWNER)
  272.  
  273.     def paginate_queryset(self, queryset):
  274.         return super(AgentsListView, self).paginate_queryset(queryset)
  275.  
  276.  
  277. class AgentView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, GenericAPIView):
  278.     """
  279.    Get or update or delete agent.
  280.    <p>Depends on the method you use, there will be different actions.</p>
  281.    """
  282.     queryset = Agent.objects.all()
  283.     serializer_class = AgentSerializer
  284.  
  285.     def get(self, request, *args, **kwargs):
  286.         return self.retrieve(request, *args, **kwargs)
  287.  
  288.     def put(self, request, *args, **kwargs):
  289.         return self.update(request, *args, **kwargs)
  290.  
  291.     def delete(self, request, *args, **kwargs):
  292.         return self.destroy(request, *args, **kwargs)
  293.  
  294.     def perform_destroy(self, instance):
  295.         instance.removed = True
  296.  
  297.  
  298. class UpdateUserView(mixins.UpdateModelMixin, GenericAPIView):
  299.     """
  300.    Update user model.
  301.  
  302.    """
  303.     queryset = User.objects.all()
  304.     serializer_class = UserSerializer
  305.  
  306.     def put(self, request, *args, **kwargs):
  307.         return self.update(request, *args, **kwargs)
  308.  
  309.     def get_object(self):
  310.         queryset = self.filter_queryset(self.get_queryset())
  311.         if not self.request.user.is_active:
  312.             raise ValidationError("Can't delete")
  313.         try:
  314.             obj = queryset.get(**{'id': self.request.user.id})
  315.         except (queryset._document.DoesNotExist, ValidationError):
  316.             from django.http import Http404
  317.             raise Http404('No %s matches the given query.' % queryset._document._class_name)
  318.         self.check_object_permissions(self.request, obj)
  319.         return obj
  320.  
  321.  
  322. class DestroyView(mixins.DestroyModelMixin, GenericAPIView):
  323.     queryset = User.objects.all()
  324.  
  325.     def delete(self, request, *args, **kwargs):
  326.         return self.destroy(request, *args, **kwargs)
  327.  
  328.     def get_object(self):
  329.         queryset = self.filter_queryset(self.get_queryset())
  330.         if not self.request.user.is_active:
  331.             raise ValidationError("Can't delete")
  332.         try:
  333.             obj = queryset.get(**{'id': self.request.user.id})
  334.         except (queryset._document.DoesNotExist, ValidationError):
  335.             from django.http import Http404
  336.             raise Http404('No %s matches the given query.' % queryset._document._class_name)
  337.         self.check_object_permissions(self.request, obj)
  338.         return obj
  339.  
  340.  
  341. class BotUserView(ListAPIView):
  342.     queryset = BotUser.objects.all()
  343.     serializer_class = BotUserSerializer
  344.  
  345.  
  346. class UserDetailView(GenericAPIView):
  347.     queryset = User.objects.all()
  348.     serializer_class = UserDetailSerializer
  349.  
  350.     def retrieve(self, request, *args, **kwargs):
  351.         instance = User.objects.get(id=request.user.id)
  352.         serializer = self.get_serializer(instance)
  353.         return Response(serializer.data)
  354.  
  355.     def get(self, request, *args, **kwargs):
  356.         return self.retrieve(request, *args, **kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement