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')
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", )
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", )
class ProjectSerializer(BaseModelSerializer): events = serializers.HyperlinkedIdentityField(many=True, view_name='event-detail') class Meta: model = Project fields = '__all__'
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", )
class PageHeaderSerializer(serializers.ModelSerializer): class Meta: model = PageHeader exclude = ('id', ) image = serializers.HyperlinkedIdentityField(read_only=True, view_name='image-detail')
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", )
class OrganizationSerializer(UuidHyperlinkedModelSerializer): resource_name = "organizations" url = serializers.HyperlinkedIdentityField(view_name="organization-detail", lookup_field="uuid") class Meta: model = Organization fields = ("name", "url", "pk")
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__'
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__'
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__'
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__'
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__'
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__'
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__'
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", )
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__'
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__'
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__'
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')
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', )
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", )
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', )
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", )
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')
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', )
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", )
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
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
class ProjectSerializer(serializers.ModelSerializer): obj_url = serializers.HyperlinkedIdentityField(view_name='any') class Meta: model = test_models.Project fields = ('id', 'obj_url')