示例#1
0
class ChangeSerializer(ShareModelSerializer):
    self = serializers.HyperlinkedIdentityField(view_name='api:change-detail')
    target_type = serializers.StringRelatedField()

    class Meta:
        model = models.Change
        fields = ('self', 'id', 'change', 'node_id', 'type', 'target_type', 'target_id')
示例#2
0
class DemographicDataSerializer(UuidHyperlinkedModelSerializer):
    resource_name = "demographics"
    country = serializers.CharField(default="")
    date_created = serializers.DateTimeField(read_only=True,
                                             source="created_at")

    url = serializers.HyperlinkedIdentityField(
        view_name="api:demographicdata-detail", lookup_field="uuid")

    class Meta:
        model = DemographicData
        fields = (
            "url",
            "number_of_children",
            "child_birthdays",
            "languages_spoken_at_home",
            "number_of_guardians",
            "number_of_guardians_explanation",
            "race_identification",
            "age",
            "gender",
            "education_level",
            "spouse_education_level",
            "annual_income",
            "former_lookit_annual_income",
            "lookit_referrer",
            "number_of_books",
            "additional_comments",
            "country",
            "state",
            "density",
            "extra",
            "date_created",
            "pk",
        )
示例#3
0
class StudySerializer(UuidHyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name="api:study-detail",
                                               lookup_field="uuid")
    responses = PatchedHyperlinkedRelatedField(
        queryset=Response.objects,
        many=True,
        related_link_view_name="api:study-responses-list",
        related_link_url_kwarg="study_uuid",
        related_link_lookup_field="uuid",
    )

    class Meta:
        model = Study
        fields = (
            "url",
            "name",
            # "date_modified",
            "short_description",
            "long_description",
            "criteria",
            "duration",
            "contact_info",
            "image",
            "structure",
            "generator",
            "use_generator",
            "display_full_screen",
            "exit_url",
            "state",
            "public",
            # "organization",
            # "creator",
            "responses",
            "pk",
        )
示例#4
0
class ProjectSerializer(BaseModelSerializer):
    events = serializers.HyperlinkedIdentityField(many=True,
                                                  view_name='event-detail')

    class Meta:
        model = Project
        fields = '__all__'
示例#5
0
class ChildSerializer(UuidHyperlinkedModelSerializer):
    lookup_field = "uuid"
    url = serializers.HyperlinkedIdentityField(view_name="api:child-detail",
                                               lookup_field="uuid")

    user = PatchedHyperlinkedRelatedField(
        queryset=User.objects,
        related_link_view_name="api:user-detail",
        related_link_lookup_field="user.uuid",
        related_link_url_kwarg="uuid",
    )

    class Meta:
        model = Child
        fields = (
            "url",
            "user",
            "given_name",
            "birthday",
            "gender",
            "age_at_birth",
            "additional_information",
            "deleted",
            "former_lookit_profile_id",
            "pk",
        )
示例#6
0
class PageHeaderSerializer(serializers.ModelSerializer):
    class Meta:
        model = PageHeader
        exclude = ('id', )

    image = serializers.HyperlinkedIdentityField(read_only=True,
                                                 view_name='image-detail')
示例#7
0
class ResponseSerializer(UuidHyperlinkedModelSerializer):
    """Gets hyperlink related fields.

    XXX: It's important to keep read_only set to true here - otherwise, a queryset is necessitated, which implicates
    get_attribute from ResourceRelatedField
    """

    created_on = serializers.DateTimeField(read_only=True,
                                           source="date_created")
    url = serializers.HyperlinkedIdentityField(view_name="api:response-detail",
                                               lookup_field="uuid")

    study = PatchedHyperlinkedRelatedField(
        read_only=True,
        related_link_view_name="api:study-detail",
        related_link_lookup_field="study.uuid",
        related_link_url_kwarg="uuid",
    )
    user = PatchedHyperlinkedRelatedField(
        read_only=True,
        source="child",
        related_link_view_name="api:user-detail",
        related_link_lookup_field="child.user.uuid",
        related_link_url_kwarg="uuid",
        required=False,
    )
    child = PatchedHyperlinkedRelatedField(
        read_only=True,
        related_link_view_name="api:child-detail",
        related_link_lookup_field="child.uuid",
        related_link_url_kwarg="uuid",
    )
    demographic_snapshot = PatchedHyperlinkedRelatedField(
        read_only=True,
        related_link_view_name="api:demographicdata-detail",
        related_link_lookup_field="demographic_snapshot.uuid",
        related_link_url_kwarg="uuid",
        required=False,
    )

    class Meta:
        model = Response
        fields = (
            "url",
            "conditions",
            "global_event_timings",
            "exp_data",
            "sequence",
            "completed",
            "child",
            "user",
            "study",
            "completed_consent_frame",
            "demographic_snapshot",
            "created_on",
            "is_preview",
            "pk",
            "withdrawn",
        )
示例#8
0
class OrganizationSerializer(UuidHyperlinkedModelSerializer):
    resource_name = "organizations"
    url = serializers.HyperlinkedIdentityField(view_name="organization-detail",
                                               lookup_field="uuid")

    class Meta:
        model = Organization
        fields = ("name", "url", "pk")
示例#9
0
class AntiSmashGeneClusterSerializer(m_serializers.DocumentSerializer,
                                     serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:antismash-gene-clusters-detail',
        lookup_field='accession',
    )

    class Meta:
        model = m_models.AntiSmashGeneCluster
        fields = '__all__'
示例#10
0
class GenomePropertySerializer(m_serializers.DocumentSerializer,
                               serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:genome-properties-detail',
        lookup_field='accession',
    )

    class Meta:
        model = m_models.GenomeProperty
        fields = '__all__'
示例#11
0
class KeggOrthologSerializer(m_serializers.DocumentSerializer,
                             serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:kegg-orthologs-detail',
        lookup_field='accession',
    )

    class Meta:
        model = m_models.KeggOrtholog
        fields = '__all__'
示例#12
0
class PfamSerializer(m_serializers.DocumentSerializer,
                     serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:pfam-detail',
        lookup_field='accession',
    )

    class Meta:
        model = m_models.PfamEntry
        fields = '__all__'
示例#13
0
class GoTermRetriveSerializer(m_serializers.DynamicDocumentSerializer,
                              serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:goterms-detail',
        lookup_field='accession',
    )

    count = serializers.IntegerField(required=False)

    class Meta:
        model = m_models.GoTerm
        fields = '__all__'
示例#14
0
class KeggOrthologRetrieveSerializer(m_serializers.DynamicDocumentSerializer,
                                     serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:kegg-orthologs-detail',
        lookup_field='accession',
    )

    count = serializers.IntegerField(required=True)

    class Meta:
        model = m_models.KeggOrtholog
        fields = '__all__'
示例#15
0
class InterproIdentifierSerializer(m_serializers.DocumentSerializer,
                                   serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:interproidentifier-detail',
        lookup_field='accession',
    )

    def get_analysis(self, obj):
        return None

    class Meta:
        model = m_models.InterproIdentifier
        fields = '__all__'
示例#16
0
class BasicUserSerializer(UuidHyperlinkedModelSerializer):
    resource_name = "users"
    url = serializers.HyperlinkedIdentityField(view_name="user-detail",
                                               lookup_field="uuid")

    demographics = PatchedHyperlinkedRelatedField(
        queryset=DemographicData.objects,
        many=True,
        related_link_view_name="user-demographics-list",
        related_link_url_kwarg="user_uuid",
        related_link_lookup_field="uuid",
    )
    organization = PatchedHyperlinkedRelatedField(
        queryset=Organization.objects,
        related_link_view_name="organization-detail",
        related_link_lookup_field="organization.uuid",
        related_link_url_kwarg="uuid",
    )
    children = PatchedHyperlinkedRelatedField(
        queryset=Child.objects,
        many=True,
        related_link_view_name="user-children-list",
        related_link_url_kwarg="user_uuid",
        related_link_lookup_field="uuid",
    )

    class Meta:
        model = User
        fields = (
            "url",
            "given_name",
            "middle_name",
            "family_name",
            "nickname",
            "identicon",
            "is_active",
            "is_staff",
            "is_researcher",
            "demographics",
            "organization",
            "children",
            "former_lookit_id",
            "linked_former_lookit_ids",
            "email_next_session",
            "email_new_studies",
            "email_study_updates",
            "email_response_questions",
            "date_created",
            "pk",
        )
示例#17
0
class AntiSmashGeneClusterRetrieveSerializer(
        m_serializers.DynamicDocumentSerializer,
        serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:antismash-gene-clusters-detail',
        lookup_field='accession',
    )

    count = serializers.IntegerField(required=True)

    class Meta:
        model = m_models.AntiSmashGeneCluster
        fields = '__all__'
示例#18
0
class GenomePropertyRetrieveSerializer(m_serializers.DynamicDocumentSerializer,
                                       serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:genome-properties-detail',
        lookup_field='accession',
    )

    presence = serializers.CharField(source="get_presence_display",
                                     required=True)

    class Meta:
        model = m_models.GenomeProperty
        fields = '__all__'
示例#19
0
class KeggModuleRetrieveSerializer(m_serializers.DynamicDocumentSerializer,
                                   serializers.HyperlinkedModelSerializer):

    url = serializers.HyperlinkedIdentityField(
        view_name='emgapi_v1:keggmodules-detail',
        lookup_field='accession',
    )

    completeness = serializers.FloatField(required=True)
    matching_kos = serializers.ListField()
    missing_kos = serializers.ListField()

    class Meta:
        model = m_models.KeggModule
        fields = '__all__'
示例#20
0
class ChangeSetSerializer(ShareModelSerializer):
    # changes = ChangeSerializer(many=True)
    change_count = serializers.SerializerMethodField()
    self = serializers.HyperlinkedIdentityField(view_name='api:changeset-detail')
    source = ShareUserSerializer(source='normalized_data.source')
    status = serializers.SerializerMethodField()

    def get_status(self, obj):
        return ChangeSet.STATUS[obj.status]

    def get_change_count(self, obj):
        return obj.changes.count()

    class Meta:
        model = models.ChangeSet
        fields = ('self', 'id', 'submitted_at', 'change_count', 'source', 'status')
示例#21
0
class ResponseSerializer(UUIDSerializerMixin, ModelSerializer):
    created_on = serializers.DateTimeField(read_only=True,
                                           source='date_created')
    url = serializers.HyperlinkedIdentityField(view_name='response-detail',
                                               lookup_field='uuid')

    study = UUIDResourceRelatedField(
        queryset=Study.objects,
        many=False,
        related_link_view_name='study-detail',
        related_link_lookup_field='uuid',
    )
    user = UUIDResourceRelatedField(source='child.user',
                                    queryset=User.objects,
                                    many=False,
                                    related_link_view_name='user-list',
                                    related_link_lookup_field='uuid',
                                    required=False)
    child = UUIDResourceRelatedField(
        queryset=Child.objects,
        many=False,
        related_link_view_name='child-detail',
        related_link_lookup_field='uuid',
    )
    demographic_snapshot = UUIDResourceRelatedField(
        queryset=DemographicData.objects,
        many=False,
        related_link_view_name='demographicdata-detail',
        related_link_lookup_field='uuid',
        required=False)

    class Meta:
        model = Response
        fields = (
            'url',
            'conditions',
            'global_event_timings',
            'exp_data',
            'sequence',
            'completed',
            'child',
            'user',
            'study',
            'demographic_snapshot',
            'created_on',
            'pk',
        )
示例#22
0
class LabSerializer(UuidHyperlinkedModelSerializer):
    resource_name = "labs"
    url = serializers.HyperlinkedIdentityField(view_name="api:lab-detail",
                                               lookup_field="uuid")

    class Meta:
        model = Lab
        fields = (
            "name",
            "institution",
            "principal_investigator_name",
            "lab_website",
            "description",
            "approved_to_test",
            "url",
            "pk",
        )
示例#23
0
class StudySerializer(UUIDSerializerMixin, ModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='study-detail',
                                               lookup_field='uuid')
    organization = UUIDResourceRelatedField(
        queryset=Organization.objects,
        related_link_view_name='organization-detail',
        related_link_lookup_field='uuid',
        many=False)
    creator = UUIDResourceRelatedField(queryset=User.objects,
                                       related_link_view_name='user-detail',
                                       related_link_lookup_field='uuid',
                                       many=False)
    responses = UUIDResourceRelatedField(
        queryset=Response.objects,
        many=True,
        related_link_view_name='study-responses-list',
        related_link_url_kwarg='study_uuid',
        related_link_lookup_field='uuid',
    )

    class Meta:
        model = Study
        fields = (
            'url',
            'name',
            'date_modified',
            'short_description',
            'long_description',
            'criteria',
            'duration',
            'contact_info',
            'image',
            'structure',
            'display_full_screen',
            'exit_url',
            'state',
            'public',
            'organization',
            'creator',
            'responses',
            'pk',
        )
示例#24
0
class ResponseWriteableSerializer(UuidResourceModelSerializer):
    """Serialize according to the way the frontend likes to send data - true-ID specific."""

    url = serializers.HyperlinkedIdentityField(view_name="api:response-detail",
                                               lookup_field="uuid")

    study = PatchedResourceRelatedField(
        queryset=Study.objects,
        related_link_view_name="api:study-detail",
        related_link_lookup_field="study_id",
        related_link_url_kwarg="uuid",
    )

    child = PatchedResourceRelatedField(
        queryset=Child.objects,
        related_link_view_name="api:child-detail",
        related_link_lookup_field="child_id",
        related_link_url_kwarg="uuid",
    )

    def create(self, validated_data):
        """Implicitly capture Demographic Data."""
        validated_data["demographic_snapshot_id"] = validated_data.get(
            "child").user.latest_demographics.id
        return super().create(validated_data)

    class Meta:
        model = Response
        fields = (
            "url",
            "conditions",
            "global_event_timings",
            "exp_data",
            "sequence",
            "completed",
            "child",
            "study",
            "completed_consent_frame",
            "is_preview",
            "pk",
            "withdrawn",
        )
示例#25
0
class FloipListSerializer(serializers.HyperlinkedModelSerializer):
    """
    FloipListSerializer class.
    """
    url = serializers.HyperlinkedIdentityField(view_name='flow-results-detail',
                                               lookup_field='uuid')
    id = ReadOnlyUUIDField(source='uuid')  # pylint: disable=C0103
    name = serializers.ReadOnlyField(source='id_string')
    created = serializers.ReadOnlyField(source='date_created')
    modified = serializers.ReadOnlyField(source='date_modified')

    class JSONAPIMeta:  # pylint: disable=old-style-class,no-init,R0903
        """
        JSON API metaclass.
        """
        resource_name = 'packages'

    class Meta:
        model = XForm
        fields = ('url', 'id', 'name', 'title', 'created', 'modified')
示例#26
0
class FeedbackSerializer(UUIDSerializerMixin, ModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='feedback-detail',
                                               lookup_field='uuid')
    response = UUIDResourceRelatedField(
        queryset=Response.objects,
        many=False,
        related_link_view_name='response-detail',
        related_link_lookup_field='uuid',
    )
    researcher = UUIDResourceRelatedField(
        read_only=True,
        many=False,
        related_link_view_name='user-detail',
        related_link_lookup_field='uuid',
    )

    class Meta:
        model = Feedback
        fields = ('url', 'comment', 'response', 'researcher')
        read_only_fields = ('researcher', )
示例#27
0
class FeedbackSerializer(UuidResourceModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name="api:feedback-detail",
                                               lookup_field="uuid")
    response = PatchedResourceRelatedField(
        queryset=Response.related_manager,
        related_link_view_name="api:response-detail",
        related_link_lookup_field="response.uuid",
        related_link_url_kwarg="uuid",
    )
    researcher = PatchedResourceRelatedField(
        read_only=True,
        related_link_view_name="api:user-detail",
        related_link_lookup_field="researcher.uuid",
        related_link_url_kwarg="uuid",
    )

    class Meta:
        model = Feedback
        fields = ("url", "comment", "response", "researcher")
        read_only_fields = ("researcher", )
示例#28
0
class FloipSerializer(serializers.HyperlinkedModelSerializer):
    """
    FloipSerializer class.
    """
    url = serializers.HyperlinkedIdentityField(view_name='floip-detail',
                                               lookup_field='pk')
    profile = serializers.SerializerMethodField()
    created = serializers.ReadOnlyField(source='date_created')
    modified = serializers.ReadOnlyField(source='date_modified')
    # pylint: disable=invalid-name
    flow_results_specification_version = serializers.SerializerMethodField()
    resources = serializers.SerializerMethodField()

    class JSONAPIMeta:  # pylint: disable=old-style-class,no-init,R0903
        """
        JSON API metaclass.
        """
        resource_name = 'packages'

    class Meta:
        model = XForm
        fields = ('url', 'id', 'id_string', 'title', 'profile', 'created',
                  'modified', 'flow_results_specification_version',
                  'resources')

    def get_profile(self, value):  # pylint: disable=no-self-use,W0613
        """
        Returns the data-package profile.
        """
        return 'data-package'

    # pylint: disable=no-self-use,unused-argument
    def get_flow_results_specification_version(self, value):
        """
        Returns the flow results specification version.
        """
        return '1.0.0-rc1'

    def get_resources(self, value):  # pylint: disable=no-self-use,W0613
        """
        Returns empty dict, a dummy holder for the eventually generated data
        package resources.
        """
        return {}

    def _process_request(self, request, update_instance=None):
        data = deepcopy(request.data)
        if 'profile' in data and data['profile'] == 'flow-results-package':
            data['profile'] = 'data-package'
        descriptor = BytesIO(json.dumps(data).encode('utf-8'))
        descriptor.seek(0, os.SEEK_END)
        floip_file = InMemoryUploadedFile(descriptor,
                                          'floip_file',
                                          request.data.get('name') + '.json',
                                          'application/json',
                                          descriptor.tell(),
                                          charset=None)
        kwargs = {
            'user': request.user,
            'post': None,
            'files': {
                'floip_file': floip_file
            },
            'owner': request.user,
        }
        if update_instance:
            kwargs['id_string'] = update_instance.id_string
            kwargs['project'] = update_instance.project
        instance = do_publish_xlsform(**kwargs)
        if isinstance(instance, XForm):
            return instance

        raise serializers.ValidationError(instance)

    def create(self, validated_data):
        request = self.context['request']

        return self._process_request(request)

    def update(self, instance, validated_data):
        request = self.context['request']

        return self._process_request(request, instance)

    def to_representation(self, instance):
        request = self.context['request']
        data_id = str(UUID(instance.uuid))
        data_url = request.build_absolute_uri(
            reverse('flow-results-responses', kwargs={'uuid': data_id}))
        package = survey_to_floip_package(json.loads(instance.json), data_id,
                                          instance.date_created,
                                          instance.date_modified, data_url)

        data = package.descriptor
        if data['profile'] != 'flow-results-package':
            data['profile'] = 'flow-results-package'

        return data
示例#29
0
class RoomNodeInstallationSerializer(serializers.HyperlinkedModelSerializer):
    included_serializers = {
        "node": "core.serializers.NodeSerializer",
        "room": "core.serializers.RoomSerializer",
        # "timeseries": "core.serializers.TimeseriesSerializer",
    }

    node = ResourceRelatedField(
        queryset=Node.objects.all(),
        related_link_url_kwarg="installation_pk",
        related_link_view_name="installation-related-node",
    )

    room = ResourceRelatedField(
        queryset=Room.objects.all(), related_link_view_name="installation-related"
    )

    to_timestamp_s = serializers.IntegerField(required=False)
    # Image of the installation (optional). Handle upload in a separate serializer.
    image = serializers.ImageField(required=False, read_only=True)

    # Additional fields to merge the node installation with its samples.
    timeseries = serializers.ListField(child=SimpleSampleSerializer(), read_only=True)
    query_timestamp_s = serializers.IntegerField(read_only=True)
    sample_count = serializers.IntegerField(read_only=True)
    url = serializers.HyperlinkedIdentityField(view_name="installation-detail")

    class Meta:
        model = RoomNodeInstallation
        fields = [
            "room",
            "node",
            "timeseries",
            "query_timestamp_s",
            "from_timestamp_s",
            "to_timestamp_s",
            "sample_count",
            "description",
            "image",
            "is_public",
            "url",
        ]

    def __init__(self, *args, **kwargs):
        # Don't pass the "include_timeseries" arg up to the superclass
        include_timeseries = kwargs.pop("include_timeseries", None)
        # Instantiate the superclass normally
        super().__init__(*args, **kwargs)

        if not include_timeseries:
            self.fields.pop("timeseries")

    def get_owner(self):
        """Return the owner of the resource, once data is validated."""
        room = self.validated_data["room"]
        site = room.site
        owner = site.operator
        return owner

    def validate(self, attrs):
        """
        Ensure that the node is owned by the same organization as the room.
        """
        logger.debug(
            "For a new or updated installation, validate that node and room belong to the same owner."
        )
        try:
            room = attrs["room"]
            node = attrs["node"]
        except KeyError:
            raise serializers.ValidationError(
                "Both the Room reference and the node reference must be provided."
            )
        if room.site.operator != node.owner:
            raise serializers.ValidationError(
                "In an installation, Node and room must belong to the same owner."
            )
        return attrs
示例#30
0
    class ProjectSerializer(serializers.ModelSerializer):
        obj_url = serializers.HyperlinkedIdentityField(view_name='any')

        class Meta:
            model = test_models.Project
            fields = ('id', 'obj_url')