示例#1
0
    Generate the unique CART ID 
    """
    logger.debug("Generating cart ID")
    return Response({"cart_id": uuid.uuid4()})


@swagger_auto_schema(method='POST',
                     request_body=openapi.Schema(
                         type=openapi.TYPE_OBJECT,
                         properties={
                             'cart_id':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='Cart ID.',
                                            required=['true']),
                             'product_id':
                             openapi.Schema(type=openapi.TYPE_INTEGER,
                                            description='Product ID.',
                                            required=['true']),
                             'attributes':
                             openapi.Schema(
                                 type=openapi.TYPE_STRING,
                                 description='Attributes of Product.',
                                 required=['true']),
                         }))
@api_view(['POST'])
def add_products(request):
    """
    Add a Product in the cart
    """
    # TODO: place the code here
示例#2
0
class ResetPasswordAPIView(APIView):
    """
        Reset Password API View : LoginSerializer, reset password
    """
    @swagger_auto_schema(request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'username':
            openapi.Schema(type=openapi.TYPE_STRING, description="username"),
            'password':
            openapi.Schema(type=openapi.TYPE_STRING,
                           description="new password")
        }))
    def put(self, request):
        """
            This method is used to reset password for a user instance.
            :param request: It's accept username and password as parameter.
            :return: It's return response that password is updated or not.
        """
        try:
            # Login serializer
            serializer = LoginSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            # Get user instance according to username
            user = get_object_by_username(serializer.data.get('username'))
            # Reset password
            user.set_password(serializer.data.get('password'))
            user.save()
            # Password reseted successfully
            return Response(
                {
                    'success': True,
                    'message': 'Reset password successfully!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_200_OK)
        except User.DoesNotExist as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message': 'User does not exist!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_400_BAD_REQUEST)
        except ValidationError as e:
            logger.exception(e)
            return Response({
                'success': False,
                'message': serializer.errors
            },
                            status=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message':
                    'Oops! Something went wrong! Please try again...'
                },
                status=status.HTTP_400_BAD_REQUEST)
示例#3
0
class ForgotPasswordAPIView(APIView):
    """
        ForgotPasswordAPIView: 
    """
    @swagger_auto_schema(request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'username':
            openapi.Schema(type=openapi.TYPE_STRING, description="username")
        }))
    def post(self, request):
        try:
            # Username serializer
            serializer = UsernameSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            # Get user instance according to username
            user = get_object_by_username(serializer.data.get('username'))
            # Extract email
            user_email = user.email
            # Reset password link
            reset_password_link = 'http://127.0.0.1:4200/reset-password'
            # Sending activation mail
            email = EmailMessage(
                'Reset your account password',  # Subject
                'Please click this link to reset your account password: '******'success': True,
                    'message': 'Email sended successfully for reset password!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_200_OK)
        except User.DoesNotExist as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message': 'User does not exist!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_400_BAD_REQUEST)
        except ValidationError as e:
            logger.exception(e)
            return Response({
                'success': False,
                'message': serializer.errors
            },
                            status=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message':
                    'Oops! Something went wrong! Please try again...'
                },
                status=status.HTTP_400_BAD_REQUEST)
示例#4
0
MOVIE_DOCUMENT_SCHEMA = openapi.Schema(
    type=openapi.TYPE_OBJECT,
    properties={
        "id": openapi.Schema(
            type=openapi.TYPE_STRING,
            description="A unique identifier for the movie.",
            example="123",
        ),
        "title": openapi.Schema(
            type=openapi.TYPE_STRING,
            description="Title of the movie.",
            example="Interstellar",
        ),
        "image_url": openapi.Schema(
            type=openapi.TYPE_STRING,
            description="Link to the movie poster image.",
            example="https://image.tmdb.org/t/p/w500/nBNZadXqJSdt05SHLqgT0HuC5Gm.jpg",
        ),
        "description": openapi.Schema(
            type=openapi.TYPE_STRING,
            description="Synopsis of the movie plot.",
            example="Interstellar chronicles the adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.",
        ),
        "release_year": openapi.Schema(
            type=openapi.TYPE_STRING,
            description="Year the movie was released in theaters.",
            example="2014",
        ),
        "genres": openapi.Schema(
            type=openapi.TYPE_ARRAY,
            description="List of genres associated with the movie.",
            items=openapi.Schema(type=openapi.TYPE_STRING, example="Science Fiction"),
        ),
    },
)
示例#5
0
class FlowViewSet(ModelViewSet):
    """Flow Viewset"""

    queryset = Flow.objects.all()
    serializer_class = FlowSerializer
    lookup_field = "slug"
    search_fields = ["name", "slug", "designation", "title"]
    filterset_fields = ["flow_uuid", "name", "slug", "designation"]

    @permission_required(None, ["authentik_flows.view_flow_cache"])
    @swagger_auto_schema(responses={200: CacheSerializer(many=False)})
    @action(detail=False, pagination_class=None, filter_backends=[])
    def cache_info(self, request: Request) -> Response:
        """Info about cached flows"""
        return Response(data={"count": len(cache.keys("flow_*"))})

    @permission_required(None, ["authentik_flows.clear_flow_cache"])
    @swagger_auto_schema(
        request_body=no_body,
        responses={
            204: "Successfully cleared cache",
            400: "Bad request"
        },
    )
    @action(detail=False, methods=["POST"])
    def cache_clear(self, request: Request) -> Response:
        """Clear flow cache"""
        keys = cache.keys("flow_*")
        cache.delete_many(keys)
        LOGGER.debug("Cleared flow cache", keys=len(keys))
        return Response(status=204)

    @permission_required(
        None,
        [
            "authentik_flows.add_flow",
            "authentik_flows.change_flow",
            "authentik_flows.add_flowstagebinding",
            "authentik_flows.change_flowstagebinding",
            "authentik_flows.add_stage",
            "authentik_flows.change_stage",
            "authentik_policies.add_policy",
            "authentik_policies.change_policy",
            "authentik_policies.add_policybinding",
            "authentik_policies.change_policybinding",
            "authentik_stages_prompt.add_prompt",
            "authentik_stages_prompt.change_prompt",
        ],
    )
    @swagger_auto_schema(
        request_body=no_body,
        manual_parameters=[
            openapi.Parameter(
                name="file",
                in_=openapi.IN_FORM,
                type=openapi.TYPE_FILE,
                required=True,
            )
        ],
        responses={
            204: "Successfully imported flow",
            400: "Bad request"
        },
    )
    @action(detail=False, methods=["POST"], parser_classes=(MultiPartParser, ))
    def import_flow(self, request: Request) -> Response:
        """Import flow from .akflow file"""
        file = request.FILES.get("file", None)
        if not file:
            return HttpResponseBadRequest()
        importer = FlowImporter(file.read().decode())
        valid = importer.validate()
        if not valid:
            return HttpResponseBadRequest()
        successful = importer.apply()
        if not successful:
            return Response(status=204)
        return HttpResponseBadRequest()

    @permission_required(
        "authentik_flows.export_flow",
        [
            "authentik_flows.view_flow",
            "authentik_flows.view_flowstagebinding",
            "authentik_flows.view_stage",
            "authentik_policies.view_policy",
            "authentik_policies.view_policybinding",
            "authentik_stages_prompt.view_prompt",
        ],
    )
    @swagger_auto_schema(
        responses={
            "200":
            openapi.Response("File Attachment",
                             schema=openapi.Schema(type=openapi.TYPE_FILE)),
        }, )
    @action(detail=True, pagination_class=None, filter_backends=[])
    # pylint: disable=unused-argument
    def export(self, request: Request, slug: str) -> Response:
        """Export flow to .akflow file"""
        flow = self.get_object()
        exporter = FlowExporter(flow)
        response = JsonResponse(exporter.export(),
                                encoder=DataclassEncoder,
                                safe=False)
        response[
            "Content-Disposition"] = f'attachment; filename="{flow.slug}.akflow"'
        return response

    @swagger_auto_schema(responses={200: FlowDiagramSerializer()})
    @action(detail=True,
            pagination_class=None,
            filter_backends=[],
            methods=["get"])
    # pylint: disable=unused-argument
    def diagram(self, request: Request, slug: str) -> Response:
        """Return diagram for flow with slug `slug`, in the format used by flowchart.js"""
        flow = self.get_object()
        header = [
            DiagramElement("st", "start", "Start"),
        ]
        body: list[DiagramElement] = []
        footer = []
        # First, collect all elements we need
        for s_index, stage_binding in enumerate(
                get_objects_for_user(
                    request.user,
                    "authentik_flows.view_flowstagebinding").filter(
                        target=flow).order_by("order")):
            for p_index, policy_binding in enumerate(
                    get_objects_for_user(
                        request.user,
                        "authentik_policies.view_policybinding").filter(
                            target=stage_binding).exclude(
                                policy__isnull=True).order_by("order")):
                body.append(
                    DiagramElement(
                        f"stage_{s_index}_policy_{p_index}",
                        "condition",
                        f"Policy\n{policy_binding.policy.name}",
                    ))
            body.append(
                DiagramElement(
                    f"stage_{s_index}",
                    "operation",
                    f"Stage\n{stage_binding.stage.name}",
                ))
        # If the 2nd last element is a policy, we need to have an item to point to
        # for a negative case
        body.append(DiagramElement("e", "end", "End|future"), )
        if len(body) == 1:
            footer.append("st(right)->e")
        else:
            # Actual diagram flow
            footer.append(f"st(right)->{body[0].identifier}")
            for index in range(len(body) - 1):
                element: DiagramElement = body[index]
                if element.type == "condition":
                    # Policy passes, link policy yes to next stage
                    footer.append(
                        f"{element.identifier}(yes, right)->{body[index + 1].identifier}"
                    )
                    # Policy doesn't pass, go to stage after next stage
                    no_element = body[index + 1]
                    if no_element.type != "end":
                        no_element = body[index + 2]
                    footer.append(
                        f"{element.identifier}(no, bottom)->{no_element.identifier}"
                    )
                elif element.type == "operation":
                    footer.append(
                        f"{element.identifier}(bottom)->{body[index + 1].identifier}"
                    )
        diagram = "\n".join([str(x) for x in header + body + footer])
        return Response({"diagram": diagram})

    @permission_required("authentik_flows.change_flow")
    @swagger_auto_schema(
        request_body=no_body,
        manual_parameters=[
            openapi.Parameter(
                name="file",
                in_=openapi.IN_FORM,
                type=openapi.TYPE_FILE,
                required=True,
            )
        ],
        responses={
            200: "Success",
            400: "Bad request"
        },
    )
    @action(
        detail=True,
        pagination_class=None,
        filter_backends=[],
        methods=["POST"],
        parser_classes=(MultiPartParser, ),
    )
    # pylint: disable=unused-argument
    def set_background(self, request: Request, slug: str):
        """Set Flow background"""
        app: Flow = self.get_object()
        icon = request.FILES.get("file", None)
        if not icon:
            return HttpResponseBadRequest()
        app.background = icon
        app.save()
        return Response({})

    @swagger_auto_schema(
        responses={
            200: LinkSerializer(many=False),
            400: "Flow not applicable"
        }, )
    @action(detail=True, pagination_class=None, filter_backends=[])
    # pylint: disable=unused-argument
    def execute(self, request: Request, slug: str):
        """Execute flow for current user"""
        flow: Flow = self.get_object()
        planner = FlowPlanner(flow)
        planner.use_cache = False
        try:
            plan = planner.plan(self.request,
                                {PLAN_CONTEXT_PENDING_USER: request.user})
            self.request.session[SESSION_KEY_PLAN] = plan
        except FlowNonApplicableException as exc:
            return bad_request_message(
                request,
                _("Flow not applicable to current user/request: %(messages)s" %
                  {"messages": str(exc)}),
            )
        return Response({
            "link":
            request._request.build_absolute_uri(
                reverse("authentik_core:if-flow",
                        kwargs={"flow_slug": flow.slug}))
        })
    SWAGGER_SECURITY_REQUIREMENTS_OAUTH,
)
from crashreports.response_descriptions import default_desc

_RESPONSE_STATUS_200_DESCRIPTION = "OK"


_DEVICE_UPDATE_HISTORY_SCHEMA = openapi.Schema(
    type=openapi.TYPE_ARRAY,
    items=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        title="DeviceUpdateHistoryEntry",
        properties=OrderedDict(
            [
                ("build_fingerprint", openapi.Schema(type=openapi.TYPE_STRING)),
                ("heartbeats", openapi.Schema(type=openapi.TYPE_INTEGER)),
                ("max", openapi.Schema(type=openapi.TYPE_INTEGER)),
                ("other", openapi.Schema(type=openapi.TYPE_INTEGER)),
                ("prob_crashes", openapi.Schema(type=openapi.TYPE_INTEGER)),
                ("smpl", openapi.Schema(type=openapi.TYPE_INTEGER)),
                ("update_date", openapi.Schema(type=openapi.TYPE_STRING)),
            ]
        ),
    ),
)


class DeviceUpdateHistory(APIView):
    """View the update history of a specific device."""

    permission_classes = (HasStatsAccess,)
示例#7
0
from drf_yasg.utils import swagger_auto_schema
from rest_framework.response import Response
from rest_framework.decorators import api_view
from wish_swap.payments.models import Payment
from wish_swap.transfers.models import Transfer
'''
from wish_swap.transfers.serializers import TransferSerializer
from wish_swap.transfers.models import Transfer
from rest_framework.views import APIView
'''

payment_not_found_response = openapi.Response(
    description='response if no such payment exists in db',
    schema=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'detail': openapi.Schema(type=openapi.TYPE_STRING),
        },
    ))

swap_status_response = openapi.Response(
    description=
    'Swap status: `SUCCESS`, `IN PROCESSS`, `FAIL` and transfer hash if `SUCCESS`',
    schema=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'status': openapi.Schema(type=openapi.TYPE_STRING),
            'transfer_hash': openapi.Schema(type=openapi.TYPE_STRING),
        },
    ))

示例#8
0
decorated_login_view = \
    swagger_auto_schema(
        method="post",
        tags=["Token authentication"],
        operation_id="login_token",
        operation_description="obtain a token for login",
        request_body=AuthTokenSerializer,
        responses={
            status.HTTP_200_OK: openapi.Response(
                "successful login",
                schema=openapi.Schema(
                    type=openapi.TYPE_OBJECT,
                    properties={
                        "token": openapi.Schema(
                            type=openapi.TYPE_STRING,
                            description="authentication token"
                        )
                    }
                )
            ),
            status.HTTP_400_BAD_REQUEST: openapi.Response(
                "login failed"
            )
        }
    )(authtoken_views.obtain_auth_token)

decorated_logout_view = \
    swagger_auto_schema(
        method="post",
        tags=["Token authentication"],
示例#9
0
 class Meta:
     swagger_schema_fields = {
         'type': openapi.TYPE_OBJECT,
         'properties': {
             'time_series': openapi.Schema(
                 title='time_series',
                 type=openapi.TYPE_INTEGER,
             ),
             'training_dataset': openapi.Schema(
                 title='training_dataset',
                 type=openapi.TYPE_INTEGER,
             ),
             'window_size': openapi.Schema(
                 title='window_size',
                 type=openapi.TYPE_INTEGER,
             ),
             'normalize': openapi.Schema(
                 title='normalize',
                 type=openapi.TYPE_BOOLEAN,
             ),
             'dtw_distance_function': openapi.Schema(
                 title='dtw_distance_function',
                 type=openapi.TYPE_STRING,
             ),
             'delta': openapi.Schema(
                 title='delta',
                 type=openapi.TYPE_NUMBER,
             ),
             'n_components': openapi.Schema(
                 title='n_components',
                 type=openapi.TYPE_INTEGER,
             ),
             'train_size': openapi.Schema(
                 title='train_size',
                 type=openapi.TYPE_NUMBER,
             ),
             'n_init': openapi.Schema(
                 title='n_init',
                 type=openapi.TYPE_INTEGER,
             ),
             'kernel': openapi.Schema(
                 title='kernel',
                 type=openapi.TYPE_STRING,
             ),
             'nu': openapi.Schema(
                 title='nu',
                 type=openapi.TYPE_NUMBER,
             ),
             'bootstrap': openapi.Schema(
                 title='bootstrap',
                 type=openapi.TYPE_BOOLEAN,
             ),
             'n_estimators': openapi.Schema(
                 title='n_estimators',
                 type=openapi.TYPE_INTEGER,
             ),
             'time_range': openapi.Schema(
                 title='time_range',
                 type=openapi.TYPE_STRING,
             ),
             'maximize_score': openapi.Schema(
                 title='maximize_score',
                 type=openapi.TYPE_STRING,
             ),
             'range_start': openapi.Schema(
                 title='range_start',
                 type=openapi.TYPE_INTEGER,
             ),
             'range_end': openapi.Schema(
                 title='range_end',
                 type=openapi.TYPE_INTEGER,
             ),
         },
         'required': ['maximize_score', 'time_range', 'range_start', 'range_end']
     }
示例#10
0
 openapi.Schema(
     type=openapi.TYPE_OBJECT,
     properties={
         "<縣市名稱>":
         openapi.Schema(
             type=openapi.TYPE_OBJECT,
             properties={
                 "factories":
                 openapi.Schema(type=openapi.TYPE_STRING,
                                description="工廠數量"),
                 "documents":
                 openapi.Schema(type=openapi.TYPE_STRING,
                                description="公文數量"),
                 "report_records":
                 openapi.Schema(type=openapi.TYPE_STRING,
                                description="總回報數量"),
                 "towns":
                 openapi.Schema(
                     type=openapi.TYPE_OBJECT,
                     description="鄉鎮市的資料",
                     properties={
                         "<鄉鎮市名>":
                         openapi.Schema(
                             type=openapi.TYPE_OBJECT,
                             properties={
                                 "factories":
                                 openapi.Schema(
                                     type=openapi.TYPE_STRING,
                                     description="工廠數量"),
                                 "documents":
                                 openapi.Schema(
                                     type=openapi.TYPE_STRING,
                                     description="公文數量"),
                                 "report_records":
                                 openapi.Schema(
                                     type=openapi.TYPE_STRING,
                                     description="回報數量"),
                             },
                         )
                     },
                 ),
             },
         ),
     },
 ),
    product_list_example_create

from posts.models.product_model import Product
from posts.serializers.product_serializer import ProductSearchSerializer, ProductSerializer


@swagger_auto_schema(method='get',
                     tags=['product'],
                     manual_parameters=product_list_parameter,
                     responses={200: '상품 조회 성공'})
@swagger_auto_schema(
    method='post',
    tags=['product'],
    request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties=product_list_schema_create,
        example=product_list_example_create,
        required=['id_member', 'addr', 'name', 'tel', 'info', 'code']),
    responses={200: '상품 등록 성공'})
@api_view(['GET', 'POST'])
def product_list(request):
    """
    매물 리스트 조회, 등록 API

    ---
    상품을 모두 보여주거나 새 상품리스트를 만듭니다.
    # form/data OR json/data
        - id_product : seq key
        - id_member : 상품을 올린 member 외래키
        - name : 상품 제목
        - price : 상품 가격
示例#12
0
文件: views.py 项目: heodndgn/perfume
                                               type=openapi.TYPE_STRING,
                                               required=True)
                         ])
    def delete(self, request):
        user = is_logged_in(request)
        user.delete()
        return Response(status=200)


@swagger_auto_schema(
    operation_summary='로그인',
    method='post',
    request_body=openapi.Schema(type=openapi.TYPE_OBJECT,
                                properties={
                                    "email":
                                    openapi.Schema(type=openapi.TYPE_STRING),
                                    "password":
                                    openapi.Schema(type=openapi.TYPE_STRING)
                                },
                                required=["email", "password"]))
@api_view(['POST'])
def login(request):
    user = authenticate(request=request,
                        username=request.data.get('email'),
                        password=request.data.get('password'))
    if user is None:
        return Response(status=401)
    payload = PayloadSerializers(user)
    encoded = jwt.encode(payload.data, settings.SECRET_KEY, algorithm='HS256')
    return Response({'token': encoded})

示例#13
0
from .serializers import RegisterSerializer, LoginSerializer
from .models import User
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
# Create your views here.


@swagger_auto_schema(method='post',
                     operation_description='This endpoint does some magic',
                     request_body=openapi.Schema(
                         type=openapi.TYPE_OBJECT,
                         properties={
                             'username':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                             'email':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                             'password':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                         }))
@api_view(['POST'])
@permission_classes([AllowAny])
def register_user(request, *args, **kwargs):
    user = request.data
    serializer = RegisterSerializer(data=user)
    serializer.is_valid(raise_exception=True)
    serializer.save()

    user_data = serializer.data
示例#14
0
class UserViewSet(mixins.RetrieveModelMixin, mixins.UpdateModelMixin,
                  viewsets.GenericViewSet):

    queryset = User.objects.filter(is_active=True)
    serializer_class = UserModelSerializer

    lookup_field = 'username'

    def get_permissions(self):
        if self.action in ['signup', 'verify', 'login']:
            permissions = [AllowAny]
        elif self.action in [
                'retrieve', 'update', 'partial_update', 'profile'
        ]:
            permissions = [IsAuthenticated, IsAccountOwner]
        else:
            # Method not allowed
            return []
        return [p() for p in permissions]

    @swagger_auto_schema(
        security=[],
        request_body=UserSignUpSerializer,
        responses={status.HTTP_201_CREATED: UserModelSerializer})
    @action(detail=False, methods=['post'])
    def signup(self, request):
        """User sign up view, after successful registration, an email is sent
           to the user with a verification token that expires on 3 days."""
        serializer = UserSignUpSerializer(data=request.data,
                                          context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        data = UserModelSerializer(user).data
        return Response(data, status.HTTP_201_CREATED)

    # Next time I'll manually write the api documentation because
    # this is absurd
    @swagger_auto_schema(
        security=[],
        manual_parameters=[
            openapi.Parameter('token',
                              openapi.IN_QUERY,
                              description="Verification token sent to user",
                              type=openapi.TYPE_STRING)
        ],
        request_body=no_body,
        responses={
            status.HTTP_200_OK:
            openapi.Schema(
                type=openapi.TYPE_OBJECT,
                properties={
                    'message':
                    openapi.Schema(type=openapi.TYPE_STRING,
                                   description='Success message')
                },
            )
        })
    @action(detail=False, methods=['get'])
    def verify(self, request):
        """User verification by jwt token view."""
        token = self.request.query_params.get('token', None)

        if token is None:
            return Response({'token': 'Missing query parameter: token'},
                            status.HTTP_400_BAD_REQUEST)

        serializer = UserVerificationSerializer(data={'token': token})
        serializer.is_valid(raise_exception=True)
        serializer.save()
        data = {'message': 'You have been sucessfully verified'}
        return Response(data, status.HTTP_200_OK)

    @swagger_auto_schema(
        security=[],
        request_body=UserLoginSerializer,
        responses={status.HTTP_200_OK: UserModelTokenSerializer})
    @action(detail=False, methods=['post'])
    def login(self, request):
        """Login endpoint, returns user's info and authorization token"""
        serializer = UserLoginSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user, token = serializer.save()
        user.token = token
        data = UserModelTokenSerializer(user).data
        return Response(data, status.HTTP_200_OK)

    @swagger_auto_schema(method='get',
                         responses={status.HTTP_200_OK: UserModelSerializer})
    @swagger_auto_schema(
        methods=['put', 'patch'],
        request_body=ProfileModelSerializer,
        responses={status.HTTP_200_OK: ProfileModelSerializer})
    @action(detail=False, methods=['get', 'put', 'patch'])
    def profile(self, request, *args, **kwargs):
        """Performs actions only on profile fields"""
        print(request.method)
        if request.method == 'GET':
            data = UserModelSerializer(self.request.user).data

            return Response(data, status.HTTP_200_OK)
        elif request.method == 'PATCH' or request.method == 'PUT':
            profile = Profile.objects.get(user=self.request.user)
            serializer = ProfileModelSerializer(
                profile, data=request.data, partial=request.method == 'PUT')
            serializer.is_valid(raise_exception=True)
            serializer.save()
            return Response(serializer.data, status.HTTP_200_OK)
# Manual Parameter
page_field = openapi.Parameter('page',
                               openapi.IN_QUERY,
                               description='this is a page number',
                               type=openapi.TYPE_STRING)
page_size_field = openapi.Parameter('page_size',
                                    openapi.IN_QUERY,
                                    description='this is a page size',
                                    type=openapi.TYPE_INTEGER)

company_list_parameter = [page_field, page_size_field]

# Schema
company_list_schema_create = {
    'id_member': openapi.Schema(type=openapi.TYPE_INTEGER, \
                                description='멤버 고유 ID'),
    'name': openapi.Schema(type=openapi.TYPE_STRING, \
                           description='업체 이름'),
    'addr': openapi.Schema(type=openapi.TYPE_STRING, \
                           description='업체 설정 주소 (주소는 1개가지 설정 가능)'),
    'tel': openapi.Schema(type=openapi.TYPE_STRING, \
                          description='업체 전화번호'),
    'info': openapi.Schema(type=openapi.TYPE_STRING, \
                           description='업체 설명'),
    'code': openapi.Schema(type=openapi.TYPE_STRING, \
                           description='업체 카테고리 코드 ([유효성 검사] 허용된 코드 : LOCAL_SHOP)'),

}

# Example
company_list_example_create = {
示例#16
0
        required=True,
        type=openapi.TYPE_STRING
    )],
    operation_description="Retrieve list of contents of a fridge",
    responses={
        200: openapi.Response(
            "Retrieved contents",
            openapi.Schema(
                type=openapi.TYPE_ARRAY,
                items=openapi.Schema(
                    type=openapi.TYPE_OBJECT,
                    properties={
                        "item_id": openapi.Schema(
                            type=openapi.TYPE_STRING,
                            description="UUID"
                        ),
                        "expiration_date": openapi.Schema(
                            type=openapi.TYPE_STRING, pattern="YYYY-mm-dd"
                        ),
                        "amount": openapi.Schema(type=openapi.TYPE_INTEGER),
                        "unit": openapi.Schema(type=openapi.TYPE_STRING),
                        "item_name": openapi.Schema(type=openapi.TYPE_STRING),
                    }
                )
            )),
    },
    security=[{'FridgifyAPI_Token_Auth': []}]
)
@swagger_auto_schema(
    method="post",
    manual_parameters=[openapi.Parameter(
        "Authorization",
示例#17
0
achievement_update_params = openapi.Schema(
    title='achievement',
    description='更新achievement',
    type=openapi.TYPE_OBJECT,
    properties={
        'organizations':
        openapi.Schema(description='完成单位',
                       type=openapi.TYPE_ARRAY,
                       items=openapi.Schema(type=openapi.TYPE_STRING)),
        'creators':
        openapi.Schema(description='完成人',
                       type=openapi.TYPE_ARRAY,
                       items=openapi.Schema(type=openapi.TYPE_STRING)),
        'published_year':
        openapi.Schema(description='公布年份', type=openapi.TYPE_STRING),
        'keywords':
        openapi.Schema(description='关键词',
                       type=openapi.TYPE_ARRAY,
                       items=openapi.Schema(type=openapi.TYPE_STRING)),
        'abstract':
        openapi.Schema(description='简介', type=openapi.TYPE_STRING),
        'province':
        openapi.Schema(description='省市', type=openapi.TYPE_STRING),
        'trade_name':
        openapi.Schema(description='应用行业名称',
                       type=openapi.TYPE_ARRAY,
                       items=openapi.Schema(type=openapi.TYPE_STRING)),
        'level':
        openapi.Schema(description='成果水平', type=openapi.TYPE_STRING),
        'contact_unit':
        openapi.Schema(description='联系单位', type=openapi.TYPE_STRING),
        'contact_address':
        openapi.Schema(description='联系单位地址', type=openapi.TYPE_STRING),
        'experts':
        openapi.Schema(description='关联专家id',
                       type=openapi.TYPE_ARRAY,
                       items=openapi.Schema(type=openapi.TYPE_INTEGER)),
    })
示例#18
0
class GraphViewSet(APIView):
    permission_classes = [permissions.IsAuthenticated]

    @swagger_auto_schema(operation_description="get all graphs information",
                         responses={
                             200:
                             openapi.Response('list of all graphs information',
                                              GraphSerializer)
                         })
    def get(self, request):
        graphs = Graph.objects.all()
        serializer = GraphSerializer(graphs, many=True)
        return Response(serializer.data)

    @swagger_auto_schema(
        operation_description="plot graph",
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            properties={
                'graphType':
                openapi.Schema(type=openapi.TYPE_STRING,
                               description="Type of ploting graph"),
                'mode':
                openapi.Schema(type=openapi.TYPE_STRING,
                               description="Mode of ploting graph"),
                'facilitys':
                openapi.Schema(
                    type=openapi.TYPE_OBJECT,
                    properties={
                        '{FacilityName}':
                        openapi.Schema(
                            type=openapi.TYPE_ARRAY,
                            items=openapi.TYPE_INTEGER,
                            description='resultids (example: [99, 101])'),
                    }),
            }))
    def post(self, request):
        graphType = json.loads(request.body.decode('utf-8')).get('graphType')
        if graphType == "NDS_3DCRT":
            return graphService.plot_NDS_3DCRT(self, request)
        elif graphType == "NDS_IMRT":
            return graphService.plot_NDS_IMRT(self, request)

    @swagger_auto_schema(
        operation_description="delete graph according ids ",
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            properties={
                'graphs_list':
                openapi.Schema(type=openapi.TYPE_ARRAY,
                               items=openapi.TYPE_INTEGER,
                               description='resultids (example: [99, 101])')
            }))
    def delete(self, request):
        graphs_list = json.loads(
            request.body.decode('utf-8')).get('graphs_list')

        graphs_obj = Graph.objects.filter(pk__in=graphs_list)
        for graph_obj in graphs_obj:
            url = graph_obj.url
            os.remove(url)
            graph_obj.result.clear()
            graph_obj.delete()

        return Response(status=status.HTTP_200_OK)
示例#19
0
from drf_yasg import openapi

CLASSROOM_PROP = {
    'class_name':
    openapi.Schema(type=openapi.TYPE_STRING, description='Classroom name'),
    'homeroom_teacher_id':
    openapi.Schema(type=openapi.TYPE_INTEGER,
                   description='Homeroom teacher id'),
    'location':
    openapi.Schema(type=openapi.TYPE_STRING, description='Location'),
}

CLASSROOM_REQUIRED = ['class_name', 'homeroom_teacher_id', 'location']

COURSE_PROP = {
    'course_name':
    openapi.Schema(type=openapi.TYPE_STRING, description='Course name'),
    'group_course':
    openapi.Schema(
        type=openapi.TYPE_STRING,
        description='Sc for Science, So for society and Ph for physical'),
}

TIMETABLE_PROP = {
    'classroom_id':
    openapi.Schema(type=openapi.TYPE_INTEGER, description='Classroom id'),
    'teacher_id':
    openapi.Schema(type=openapi.TYPE_INTEGER, description='Teacher id'),
    'course_id':
    openapi.Schema(type=openapi.TYPE_INTEGER, description='Course id'),
    'day_of_week':
示例#20
0
class SignupView(APIView):
    # @swagger_auto_schema(operation_description="partial_update description override", responses={404: 'slug not found'})
    # @swagger_auto_schema(method='post', manual_parameters=[test_param], responses={200: user_response})
    # @api_view(['POST'])
    @swagger_auto_schema(
    operation_description="user signup",
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            required=['password','username','gender','email','nickname'],
            properties={
                'username': openapi.Schema(type=openapi.TYPE_STRING),
                'password': { "type": "string", "format": "password"},
                'gender': openapi.Schema(type=openapi.TYPE_STRING),
                'email': { "type": "string", "format": "email"},
                'nickname': openapi.Schema(type=openapi.TYPE_STRING),
                'birthdate': { "type": "string", "format": "date"}
            },
        ),
        security=[],
        responses={200: user_response,400:user_response2}
     )
    # @swagger_auto_schema(request_body=UserSignupSerializer, tags=['Users'],responses={200: user_response,400:user_response2})
    @csrf_exempt
    def post(self, request):
        serializer = UserSignupSerializer(data=request.data)
        if serializer.is_valid():
            u = serializer.save()
            login(request, u)
            u.status = "online"
            token, created = Token.objects.get_or_create(user=u)
            info = UserInfoSerializer(u)

            return Response({
                'message': 'your account have been created successfuly',
                'data': {
                'token': token.key
                }
            })
        return Response(
            serializer.errors,
            status=status.HTTP_400_BAD_REQUEST
        )



    @swagger_auto_schema(
    operation_description="user update profile",
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            properties={
                'username': openapi.Schema(type=openapi.TYPE_STRING),
                'password': { "type": "string", "format": "password"},
                'gender': openapi.Schema(type=openapi.TYPE_STRING),
                'email': { "type": "string", "format": "email"},
                'nickname': openapi.Schema(type=openapi.TYPE_STRING),
                'birthdate': { "type": "string", "format": "date"},
                'interests':openapi.Schema(type=openapi.TYPE_STRING),
                'biography':openapi.Schema(type=openapi.TYPE_STRING),
                # 'user_avatar':
            },
        ),
        tags=['Profile'],
        security=[],
        responses={200: openapi.Response('account info has been updated')}
     )
    @permission_classes([IsAuthenticated])
    @csrf_exempt
    def put(self, request):
        instance = request.user
        serializer = UserSignupSerializer(instance, data=request.data, partial=True)
        if serializer.is_valid():
            u = serializer.save()
            instance.save()
            return Response(
                        {
                            'message': 'account info has been updated',
                        },
                        status=status.HTTP_200_OK
                    )
        else:
            return Response(
                serializer.errors,
                status=status.HTTP_400_BAD_REQUEST)
示例#21
0
class DeliveryOptionView(GenericViewSet, ResponseViewMixin):
    permission_classes = [IsAuthenticated]
    serializer_class = DeliveryDetailSerializer

    def get_queryset(self):
        pass

    @swagger_auto_schema(
        tags=['user'],
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            properties={
                'shop':
                openapi.Schema(type=openapi.TYPE_INTEGER),
                'delivery_type':
                openapi.Schema(type=openapi.TYPE_ARRAY,
                               items=openapi.Items(type=openapi.TYPE_STRING)),
                'delivery_radius':
                openapi.Schema(type=openapi.TYPE_STRING),
                'delivery_charge':
                openapi.Schema(type=openapi.TYPE_NUMBER),
                'delivery_vehicle':
                openapi.Schema(type=openapi.TYPE_ARRAY,
                               items=openapi.Items(type=openapi.TYPE_STRING)),
                'vehicle_and_capacity':
                openapi.Schema(type=openapi.TYPE_STRING),
                'within_km':
                openapi.Schema(type=openapi.TYPE_STRING),
                'min_charge':
                openapi.Schema(type=openapi.TYPE_STRING),
                'extra_charge_per_km':
                openapi.Schema(type=openapi.TYPE_STRING),
                'free_delivery':
                openapi.Schema(type=openapi.TYPE_BOOLEAN),
                'free_delivery_for':
                openapi.Schema(type=openapi.TYPE_NUMBER),
            }))
    def create(self, request):
        try:
            try:
                delivery = DeliveryOption.objects.get(
                    shop=request.data.get('shop'))
                serializer = DeliveryDetailSerializer(instance=delivery,
                                                      data=request.data)
            except DeliveryOption.DoesNotExist:
                serializer = DeliveryDetailSerializer(data=request.data)
            if serializer.is_valid():
                delivery = serializer.save()
                delivery.save()
                delivery_vehicle = request.data.get('delivery_vehicle')
                for value in delivery_vehicle:
                    value['delivery_option'] = delivery.id
                print(delivery_vehicle)
                vehicle_details = VehicleDetailSerializer(
                    data=delivery_vehicle, many=True)
                if vehicle_details.is_valid():
                    vehicle_details.save()
                else:
                    return self.error_response(
                        code='HTTP_500_INTERNAL_SERVER_ERROR',
                        message=str(vehicle_details.errors))
            else:
                return self.error_response(
                    code='HTTP_500_INTERNAL_SERVER_ERROR',
                    message=str(serializer.errors))
            return self.success_response(code='HTTP_200_OK',
                                         data={'delivery_id': delivery.id},
                                         message=DATA_SAVED_SUCCESSFULLY)
        except Exception as e:
            db_logger.exception(e)
            return self.error_response(code='HTTP_500_INTERNAL_SERVER_ERROR',
                                       message=GENERAL_ERROR)

    def retrieve(self, request, pk=None):
        try:
            delivery = DeliveryOption.objects.get(shop_id=pk)
            serializer = DeliveryRetrieveSerializer(delivery)
            return self.success_response(code='HTTP_200_OK',
                                         data=serializer.data,
                                         message=SUCCESS)
        except Shop.DoesNotExist:
            return self.error_response(code='HTTP_500_INTERNAL_SERVER_ERROR',
                                       message=GENERAL_ERROR)
示例#22
0
                              openapi.IN_HEADER,
                              description='This is a member id number',
                              type=openapi.TYPE_STRING)

s_field = openapi.Parameter('s',
                            openapi.IN_QUERY,
                            description='This is the size of images.',
                            type=openapi.TYPE_STRING,
                            required=True)

product_detail_put_parameter = [id_member]
product_detail_get_parameter = [s_field]

# Schema
product_detail_schema = {
    'name': openapi.Schema(type=openapi.TYPE_STRING, description='상품 이름'),
    'addr': openapi.Schema(type=openapi.TYPE_STRING, description='상품 주소'),
    'price': openapi.Schema(type=openapi.TYPE_INTEGER, description='상품 가격'),
    'info': openapi.Schema(type=openapi.TYPE_STRING, description='상품 설명'),
    'code': openapi.Schema(type=openapi.TYPE_STRING, description='상품 카테고리 코드'),
}
# Example
product_detail_example = {
    'name': '잘 달리는 자전거',
    'addr': '가락본동',
    'price': 13231,
    'info': '자전거가 날라가유 ~',
    'code': 'LOCAL_SHOP',
}
# custom response schema
示例#23
0
 openapi.Schema(
     title='Task creation response',
     description='Task creation response',
     type=openapi.TYPE_OBJECT,
     properies={
         'task_count':
         openapi.Schema(title='task count',
                        description='Number of tasks added',
                        type=openapi.TYPE_INTEGER),
         'annotation_count':
         openapi.Schema(title='annotation count',
                        description='Number of annotations added',
                        type=openapi.TYPE_INTEGER),
         'predictions_count':
         openapi.Schema(title='predictions count',
                        description='Number of predictions added',
                        type=openapi.TYPE_INTEGER),
         'duration':
         openapi.Schema(title='duration',
                        description='Time in seconds to create',
                        type=openapi.TYPE_NUMBER),
         'file_upload_ids':
         openapi.Schema(title='file_upload_ids',
                        description='Database IDs of uploaded files',
                        type=openapi.TYPE_ARRAY,
                        items=openapi.Schema(title="File Upload IDs",
                                             type=openapi.TYPE_INTEGER)),
         'could_be_tasks_list':
         openapi.Schema(
             title='could_be_tasks_list',
             description=
             'Whether uploaded files can contain lists of tasks, like CSV/TSV files',
             type=openapi.TYPE_BOOLEAN)
     },
     example={
         'task_count': 50,
         'annotation_count': 200,
         'predictions_count': 100,
         'duration': 3.5,
         'file_upload_ids': [1, 2, 3]
     }),
示例#24
0
from drf_yasg import openapi

bad_request_response = openapi.Response(
    "Bad request",
    openapi.Schema(
        title="ErrorMessage",
        type=openapi.TYPE_OBJECT,
        properties={
            "non_field_errors":
            openapi.Schema(
                type=openapi.TYPE_ARRAY,
                items=openapi.Schema(type=openapi.TYPE_STRING, ),
            ),
            "field_name":
            openapi.Schema(
                type=openapi.TYPE_ARRAY,
                items=openapi.Schema(type=openapi.TYPE_STRING, ),
            ),
        },
        example={
            "non_field_errors": ["Some non filed error.", "Extra error."],
            "field_name": ["This field is required.", "Extra error."],
        },
    ))

too_many_requests_response = openapi.Response(
    "Too Many Requests",
    openapi.Schema(
        title="ErrorMessage",
        type=openapi.TYPE_OBJECT,
        properties={
示例#25
0
class LoginAPIView(APIView):
    """
        Login API View : LoginSerializer, create token, authenticate user, set cache
    """
    @swagger_auto_schema(request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'username':
            openapi.Schema(type=openapi.TYPE_STRING, description="username"),
            'password':
            openapi.Schema(type=openapi.TYPE_STRING, description="password")
        }))
    def post(self, request):
        """
            This method is used for login authentication.
            :param request: It's accept username and password as parameter.
            :return: It's return response that login is successfull or not.
        """
        try:
            # Login serializer
            serializer = LoginSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            # Create token
            token = jwt.encode({'username': serializer.data.get('username')},
                               settings.SECRET_KEY,
                               algorithm='HS256')
            # Authenticate username & password
            user = auth.authenticate(username=serializer.data.get('username'),
                                     password=serializer.data.get('password'))
            if user is not None:
                # Set cache
                # set_cache('username', serializer.data.get('username'))
                # Login successfull
                return Response(
                    {
                        'success': True,
                        'message': 'Login successfull!',
                        'data': {
                            'username': serializer.data.get('username'),
                            'token': token
                        }
                    },
                    status=status.HTTP_200_OK)
            else:
                # Login failed
                return Response(
                    {
                        'success': False,
                        'message': 'Login failed!',
                        'data': {
                            'username': serializer.data.get('username')
                        }
                    },
                    status=status.HTTP_400_BAD_REQUEST)
        except ValidationError as e:
            logger.exception(e)
            return Response({
                'success': False,
                'message': serializer.errors
            },
                            status=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message':
                    'Oops! Something went wrong! Please try again...'
                },
                status=status.HTTP_400_BAD_REQUEST)
示例#26
0
from drf_yasg import openapi

# POST auth/register/
RESPONSE_201 = openapi.Response(
    description='Created',
    schema=openapi.Schema(type=openapi.TYPE_OBJECT,
                          properties={
                              'name': openapi.Schema(type=openapi.TYPE_STRING),
                              'last_name':
                              openapi.Schema(type=openapi.TYPE_STRING),
                              'aka': openapi.Schema(type=openapi.TYPE_STRING),
                          }))
RESPONSE_400 = openapi.Response(
    description='Bad Request',
    schema=openapi.Schema(
        type=openapi.TYPE_STRING,
        enum=['Missing or invalid fields', 'This user already exist'],
    ))
RESPONSE_401 = openapi.Response(description='Unauthorized')
RESPONSE_403 = openapi.Response(description='Forbidden',
                                schema=openapi.Schema(
                                    type=openapi.TYPE_STRING,
                                    pattern='{detail: Could not log in.}'))
示例#27
0
class UserDeleteAPIView(APIView):
    """
        User Delete API View : UsernameSerializer, delete user instance
    """
    @swagger_auto_schema(request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'username':
            openapi.Schema(type=openapi.TYPE_STRING, description="username")
        }))
    def delete(self, request):
        """
            This method is used to delete user instance.
            :param request: It's accept username as parameter.
            :return: It's return that user is successfully deleted or not.
        """
        try:
            # Username serializer
            serializer = UsernameSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            # Get user instance according to username
            user = get_object_by_username(serializer.data.get('username'))
            # Delete user instance
            user.delete()
            # User deleted successfully
            return Response(
                {
                    'success': True,
                    'message': 'User deleted successfully!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_200_OK)
        except User.DoesNotExist as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message': 'User does not exist!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_400_BAD_REQUEST)
        except ValidationError as e:
            logger.exception(e)
            return Response({
                'success': False,
                'message': serializer.errors
            },
                            status=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message':
                    'Oops! Something went wrong! Please try again...'
                },
                status=status.HTTP_400_BAD_REQUEST)
示例#28
0
from Server.models import PricingModel
from Server.serializers import PricingSerializer


@swagger_auto_schema(method='post',
                     request_body=openapi.Schema(
                         type=openapi.TYPE_OBJECT,
                         properties={
                             'mobile_company':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                             'mobile_model':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                             'repairing_part':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                             'repairing_price':
                             openapi.Schema(type=openapi.TYPE_INTEGER,
                                            description='string'),
                             'repairing_description':
                             openapi.Schema(type=openapi.TYPE_STRING,
                                            description='string'),
                         }))
@api_view(['POST'])
def add_new_pricing(request):
    try:
        # fields = ['mobile_company', 'mobile_model', 'repairing_part', 'repairing_price', 'repairing_description']

        mobile_company = request.data["mobile_company"]
示例#29
0
class RegisterAPIView(APIView):
    """
        Register API View : RegisterSerializer, check email & username already exist or not, create new user
    """
    @swagger_auto_schema(request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'first_name':
            openapi.Schema(type=openapi.TYPE_STRING, description="first name"),
            'last_name':
            openapi.Schema(type=openapi.TYPE_STRING, description="last name"),
            'email':
            openapi.Schema(type=openapi.TYPE_STRING, description="email"),
            'username':
            openapi.Schema(type=openapi.TYPE_STRING, description="username"),
            'password':
            openapi.Schema(type=openapi.TYPE_STRING, description="password")
        }))
    def post(self, request):
        """
            This method is used to create new user instance.
            :param request: It's accept first_name, last_name, email, username and password as parameter.
            :return: It's return response that user created successfully or not.
        """
        try:
            # Register serializer
            serializer = RegisterSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            # Check given email is already registered or not
            if User.objects.filter(
                    email=serializer.data.get('email')).exists():
                return Response(
                    {
                        'success': False,
                        'message': 'Gven email is already registered.',
                        'data': {
                            'email': serializer.data.get('email')
                        }
                    },
                    status=status.HTTP_400_BAD_REQUEST)
            # Check given username is already taken or not
            if User.objects.filter(
                    username=serializer.data.get('username')).exists():
                return Response(
                    {
                        'success': False,
                        'message': 'Gven username is already taken',
                        'data': {
                            'username': serializer.data.get('username')
                        }
                    },
                    status=status.HTTP_400_BAD_REQUEST)
            # Create user instance
            user = User.objects.create_user(
                first_name=serializer.data.get('first_name'),
                last_name=serializer.data.get('last_name'),
                email=serializer.data.get('email'),
                username=serializer.data.get('username'),
                password=serializer.data.get('password'))
            # Send data to queue
            # json_data = json.dumps({'username': serializer.data.get('username'), 'user_email': serializer.data.get('email'), 'SECRET_KEY': settings.SECRET_KEY, 'EMAIL_HOST_USER': settings.EMAIL_HOST_USER})
            # send_data_to_queue(data=json_data)
            # Make user as not active
            # user.is_active = False
            user.save()
            # User registration successfull
            return Response(
                {
                    'success': True,
                    'message': 'Registration successfull!',
                    'data': {
                        'username': serializer.data.get('username')
                    }
                },
                status=status.HTTP_200_OK)
        except ValidationError as e:
            logger.exception(e)
            return Response({
                'success': False,
                'message': serializer.errors
            },
                            status=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            logger.exception(e)
            return Response(
                {
                    'success': False,
                    'message':
                    'Oops! Something went wrong! Please try again...'
                },
                status=status.HTTP_400_BAD_REQUEST)
示例#30
0
            serializer = ProjectMemberRoleSerializer(project_member.first())
            return JsonResponse(serializer.data)
        return HttpResponse(
            "Please provide a valid 'is_admin' value.",
            status=status.HTTP_400_BAD_REQUEST,
        )

    elif request.method == "DELETE":
        project_member.delete()
        return JsonResponse({}, status=status.HTTP_204_NO_CONTENT)


@swagger_auto_schema(
    methods=["post"],
    request_body=openapi.Schema(
        type="object", properties={"user_id": openapi.Schema(type="string")}
    ),
    responses={
        201: openapi.Response(
            "Returns the updated project with the new member.", ProjectSerializer
        )
    },
    tags=["Project Members"],
)
@api_view(["POST"])
@permission_classes([permissions.IsAuthenticated])
def project_members(request, project_uuid):
    project = get_object_or_404(Project, pk=project_uuid)
    check_if_admin_of_project(request.user.id, project.uuid)

    data = JSONParser().parse(request)