コード例 #1
0
def field_to_schema(field):
    title = force_text(field.label) if field.label else ''
    description = force_text(field.help_text) if field.help_text else ''

    if isinstance(field, serializers.ListSerializer):
        child_schema = field_to_schema(field.child)
        return coreschema.Array(
            items=child_schema,
            title=title,
            description=description
        )
    elif isinstance(field, serializers.Serializer):
        return coreschema.Object(
            properties=OrderedDict([
                (key, field_to_schema(value))
                for key, value
                in field.fields.items()
            ]),
            title=title,
            description=description
        )
    elif isinstance(field, serializers.ManyRelatedField):
        return coreschema.Array(
            items=coreschema.String(),
            title=title,
            description=description
        )
    elif isinstance(field, serializers.RelatedField):
        return coreschema.String(title=title, description=description)
    elif isinstance(field, serializers.MultipleChoiceField):
        return coreschema.Array(
            items=coreschema.Enum(enum=list(field.choices.keys())),
            title=title,
            description=description
        )
    elif isinstance(field, serializers.ChoiceField):
        return coreschema.Enum(
            enum=list(field.choices.keys()),
            title=title,
            description=description
        )
    elif isinstance(field, serializers.BooleanField):
        return coreschema.Boolean(title=title, description=description)
    elif isinstance(field, (serializers.DecimalField, serializers.FloatField)):
        return coreschema.Number(title=title, description=description)
    elif isinstance(field, serializers.IntegerField):
        return coreschema.Integer(title=title, description=description)

    if field.style.get('base_template') == 'textarea.html':
        return coreschema.String(
            title=title,
            description=description,
            format='textarea'
        )
    return coreschema.String(title=title, description=description)
コード例 #2
0
    def test_field_to_schema(self):
        label = 'Test label'
        help_text = 'This is a helpful test text'

        cases = [
            # tuples are ([field], [expected schema])
            # TODO: Add remaining cases
            (
                serializers.BooleanField(label=label, help_text=help_text),
                coreschema.Boolean(title=label, description=help_text)
            ),
            (
                serializers.DecimalField(1000, 1000, label=label, help_text=help_text),
                coreschema.Number(title=label, description=help_text)
            ),
            (
                serializers.FloatField(label=label, help_text=help_text),
                coreschema.Number(title=label, description=help_text)
            ),
            (
                serializers.IntegerField(label=label, help_text=help_text),
                coreschema.Integer(title=label, description=help_text)
            ),
            (
                serializers.DateField(label=label, help_text=help_text),
                coreschema.String(title=label, description=help_text, format='date')
            ),
            (
                serializers.DateTimeField(label=label, help_text=help_text),
                coreschema.String(title=label, description=help_text, format='date-time')
            ),
            (
                serializers.JSONField(label=label, help_text=help_text),
                coreschema.Object(title=label, description=help_text)
            ),
        ]

        for case in cases:
            self.assertEqual(field_to_schema(case[0]), case[1])
コード例 #3
0
ファイル: inspectors.py プロジェクト: Daloda/Proyecto-AII
def field_to_schema(field):
    title = force_text(field.label) if field.label else ''
    description = force_text(field.help_text) if field.help_text else ''

    if isinstance(field, (serializers.ListSerializer, serializers.ListField)):
        child_schema = field_to_schema(field.child)
        return coreschema.Array(items=child_schema,
                                title=title,
                                description=description)
    elif isinstance(field, serializers.DictField):
        return coreschema.Object(title=title, description=description)
    elif isinstance(field, serializers.Serializer):
        return coreschema.Object(properties=OrderedDict([
            (key, field_to_schema(value))
            for key, value in field.fields.items()
        ]),
                                 title=title,
                                 description=description)
    elif isinstance(field, serializers.ManyRelatedField):
        return coreschema.Array(items=coreschema.String(),
                                title=title,
                                description=description)
    elif isinstance(field, serializers.PrimaryKeyRelatedField):
        schema_cls = coreschema.String
        model = getattr(field.queryset, 'model', None)
        if model is not None:
            model_field = model._meta.pk
            if isinstance(model_field, models.AutoField):
                schema_cls = coreschema.Integer
        return schema_cls(title=title, description=description)
    elif isinstance(field, serializers.RelatedField):
        return coreschema.String(title=title, description=description)
    elif isinstance(field, serializers.MultipleChoiceField):
        return coreschema.Array(
            items=coreschema.Enum(enum=list(field.choices)),
            title=title,
            description=description)
    elif isinstance(field, serializers.ChoiceField):
        return coreschema.Enum(enum=list(field.choices),
                               title=title,
                               description=description)
    elif isinstance(field, serializers.BooleanField):
        return coreschema.Boolean(title=title, description=description)
    elif isinstance(field, (serializers.DecimalField, serializers.FloatField)):
        return coreschema.Number(title=title, description=description)
    elif isinstance(field, serializers.IntegerField):
        return coreschema.Integer(title=title, description=description)
    elif isinstance(field, serializers.DateField):
        return coreschema.String(title=title,
                                 description=description,
                                 format='date')
    elif isinstance(field, serializers.DateTimeField):
        return coreschema.String(title=title,
                                 description=description,
                                 format='date-time')
    elif isinstance(field, serializers.JSONField):
        return coreschema.Object(title=title, description=description)

    if field.style.get('base_template') == 'textarea.html':
        return coreschema.String(title=title,
                                 description=description,
                                 format='textarea')

    return coreschema.String(title=title, description=description)
コード例 #4
0
ファイル: rest_api.py プロジェクト: uriencedric/bws
    def get_fields(cls, model):
        ''' Generate schema fields used to generate API docs. '''
        fields = [
            coreapi.Field(
                name="pedigree_data",
                required=True,
                location='form',
                schema=coreschema.String(
                    title="Pedigree",
                    description="CanRisk File Format",
                    format='textarea',
                ),
            ),
            coreapi.Field(
                name="user_id",
                required=True,
                location='form',
                schema=coreschema.String(
                    title="User ID",
                    description="Unique end user ID",
                ),
            ),
            coreapi.Field(
                name="cancer_rates",
                required=True,
                location='form',
                schema=coreschema.Enum(
                    list(settings.BC_MODEL['CANCER_RATES'].keys()),
                    title="Cancer rates",
                    description="Cancer incidence rates",
                    default="UK",
                ),
            ),
            coreapi.Field(
                name="mut_freq",
                required=True,
                location='form',
                schema=coreschema.Enum(
                    list(settings.BC_MODEL['MUTATION_FREQUENCIES'].keys()),
                    title="Mutation frequency",
                    description="Mutation frequency",
                    default="UK",
                ),
            ),
            coreapi.Field(
                name="prs",
                required=False,
                location='form',
                schema=coreschema.Object(
                    title="Polygenic risk score",
                    description='PRS, e.g. {"alpha":0.45,"zscore":2.652}',
                    properties={
                        'alpha': coreschema.Number,
                        'zscore': coreschema.Number
                    },
                ),
            ),
            # coreapi.Field(
            #    name="risk_factor_code",
            #    required=False,
            #    location='form',
            #    schema=coreschema.Integer(
            #        minimum=0,
            #        description="Risk factor code",
            #    ),
            # ),
        ]

        fields += [
            coreapi.Field(
                name=g.lower() + "_mut_frequency",
                required=False,
                location='form',
                schema=coreschema.Number(title=g + " mutation frequency",
                                         description=g + ' mutation frequency',
                                         minimum=settings.MIN_MUTATION_FREQ,
                                         maximum=settings.MAX_MUTATION_FREQ),
            ) for g in model['GENES']
        ]
        fields += [
            coreapi.Field(
                name=g.lower() + "_mut_sensitivity",
                required=False,
                location='form',
                schema=coreschema.Number(
                    title=g + " mutation sensitivity",
                    description=g + ' mutation sensitivity',
                    maximum=1,
                ),
            ) for g in model['GENES']
        ]
        return fields
コード例 #5
0
class Zscore2PercentView(APIView):
    renderer_classes = (
        JSONRenderer,
        BrowsableAPIRenderer,
    )
    serializer_class = ZscoreInputSerializer
    authentication_classes = (
        SessionAuthentication,
        BasicAuthentication,
        TokenAuthentication,
    )
    permission_classes = (IsAuthenticated, )
    throttle_classes = (BurstRateThrottle, SustainedRateThrottle,
                        EndUserIDRateThrottle)
    if coreapi is not None and coreschema is not None:
        schema = ManualSchema(fields=[
            coreapi.Field(
                name="sample_name",
                required=True,
                location='form',
                schema=coreschema.Number(
                    title="z-score",
                    description="Standard normal PRS",
                ),
            ),
        ],
                              encoding="application/json",
                              description="""
Returns PRS represented as a percentage of those with a lower PRS.
""")

    def post(self, request):
        """
        Returns PRS represented as a percentage of those with a lower PRS.
        ---
        response_serializer: Vcf2PrsOutputSerializer
        parameters:
           - name: z-score
             description: Standard normal PRS
             type: number
             required: true

        responseMessages:
           - code: 401
             message: Not authenticated

        consumes:
           - application/json
           - application/xml
        produces: ['application/json', 'application/xml']
        """
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid(raise_exception=True):
            zscore = serializer.validated_data.get("zscore")
            return Response(
                ZscoreOutputSerializer({
                    "percent":
                    Zscore2PercentView.get_percentage(zscore)
                }).data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    @classmethod
    def get_percentage(cls, load):
        """
        Use error function to compute cumulative standard normal distribution,
        https://docs.python.org/3/library/math.html#math.erf
        (alternative to scipy.stats.norm.cdf(load, mu, sigma) * 100.0) to get
        percentage representation.
        @param: standard normal PRS which is normally distributed in the general population with mean
        of 0 and standard deviation of 1
        @return: PRS represented as a percentage of those with a lower PRS
        """
        return ((1.0 + erf(load / sqrt(2.0))) / 2.0) * 100.0
コード例 #6
0
ファイル: views.py プロジェクト: StepanTita/goli
class CreateQuizAPIView(generics.CreateAPIView):
    if coreapi_schema.is_enabled():
        schema = ManualSchema(
            fields=[
                coreapi.Field(
                    name="title",
                    required=True,
                    location='form',
                    schema=coreschema.String(
                        title="Title",
                        description="name of a quiz",
                    ),
                ),
                coreapi.Field(
                    name="quiz_type",
                    required=True,
                    location='form',
                    schema=coreschema.String(
                        title="Type of a quiz",
                        description="Type of a quiz",
                    ),
                ),
                coreapi.Field(
                    name="timestamp",
                    required=True,
                    location='form',
                    schema=coreschema.Integer(
                        title="Timestamp",
                        description="timestamp",
                    ),
                ),
                coreapi.Field(
                    name="goal",
                    required=True,
                    location='form',
                    schema=coreschema.Integer(
                        title="Goal",
                        description="goal for the users",
                    ),
                ),
                coreapi.Field(
                    name="indicator_value",
                    required=True,
                    location='form',
                    schema=coreschema.Number(
                        title="Indicator value",
                        description="indicator value",
                    ),
                ),
                coreapi.Field(
                    name="author",
                    required=True,
                    location='form',
                    schema=coreschema.String(
                        title="Author username",
                        description="author username",
                    ),
                ),
                coreapi.Field(
                    name="description",
                    required=True,
                    location='form',
                    schema=coreschema.String(
                        title="question description",
                        description="description",
                    ),
                ),
                coreapi.Field(
                    name="vote_detail",
                    required=True,
                    location='form',
                    schema=coreschema.Object(
                        title="Vote detail",
                        description="vote details in json format",
                    ),
                ),
            ],
            encoding="application/json",
        )
    permission_classes = (permissions.AllowAny, )
    serializer_class = serializers.QuizSerializer
    queryset = models.Vote.objects.all()