class PostCommentSerializer(ContextSerializer): id = serpy.IntField() author = serpy.MethodField('get_author') post_id = serpy.IntField() content = serpy.StrField() points = serpy.IntField() liked = serpy.MethodField('get_liked') disliked = serpy.MethodField('get_disliked') replies = serpy.MethodField('get_replies') def get_author(self, obj): return SimpleProfileSerializer(obj.profile).data def get_liked(self, obj): request = self.context.get('request') if not isinstance(request.user, AnonymousUser): return obj.interactions.filter(profile=request.user.profile, interaction=LIKE).count() > 0 return False def get_disliked(self, obj): request = self.context.get('request') if not isinstance(request.user, AnonymousUser): return obj.interactions.filter(profile=request.user.profile, interaction=DISLIKE).count() > 0 return False def get_replies(self, obj): query = PostComment.objects.filter(comment=obj).order_by('created') return PostCommentSerializer(query, many=True, context=self.context).data
class SimplePostSerializer(ContextSerializer): id = serpy.IntField() author = serpy.MethodField('get_author') title = serpy.StrField() content = serpy.StrField() points = serpy.IntField() liked = serpy.MethodField('get_liked') disliked = serpy.MethodField('get_disliked') def get_author(self, obj): return SimpleProfileSerializer(obj.profile).data def get_liked(self, obj): request = self.context.get('request') if not isinstance(request.user, AnonymousUser): return obj.interactions.filter(profile=request.user.profile, interaction=LIKE).count() > 0 return False def get_disliked(self, obj): request = self.context.get('request') if not isinstance(request.user, AnonymousUser): return obj.interactions.filter(profile=request.user.profile, interaction=DISLIKE).count() > 0 return False
class Image(ContextDictSerializer): iid = serpy.MethodField(label="@id") rtype = StaticField(label="@type", value="dctypes:Image") format = StaticField(value="image/jpeg") width = serpy.IntField(attr="width_i") height = serpy.IntField(attr="height_i") service = serpy.MethodField() def get_iid(self, obj: SolrResult) -> str: cfg = self.context.get('config') req = self.context.get('request') image_tmpl = cfg['templates']['image_id_tmpl'] # Images have the suffix "_image" in Solr. identifier = re.sub(IMAGE_ID_SUB, "", obj.get("id")) return get_identifier(req, identifier, image_tmpl) # type: ignore def get_service(self, obj: SolrResult) -> Dict: req = self.context.get('request') cfg = self.context.get('config') image_tmpl = cfg['templates']['image_id_tmpl'] identifier = re.sub(IMAGE_ID_SUB, "", obj.get("id")) image_id = get_identifier(req, identifier, image_tmpl) # type: ignore return { "@context": "http://iiif.io/api/image/2/context.json", "profile": "http://iiif.io/api/image/2/level1.json", "@id": image_id }
class MetricSerializer_Mapping(MetricSerializer): num_pos = serpy.IntField(required=False) num_maps = serpy.IntField(required=False) num_unmaps = serpy.IntField(required=False) median_cov = serpy.FloatField(required=False) mean_cov = serpy.FloatField(required=False) pc_pos_cov_gte10 = serpy.FloatField(required=False) pc_pos_cov_gte20 = serpy.FloatField(required=False)
class SettingsSerializer(serpy.Serializer): id = serpy.IntField() break_type = serpy.StrField() break_duration = serpy.IntField() round_time = serpy.IntField() calculate_overtime = serpy.BoolField() overtime_hours = serpy.IntField() overtime_minutes = serpy.IntField()
class ProgramSerializer(serpy.Serializer): id = serpy.IntField() program_name = serpy.Field() program_product = ProductSerializer() program_client = ClientSerializer() program_start_date = serpy.Field() program_end_date = serpy.Field() program_total_amount = serpy.IntField()
class ClientSerializer(serpy.Serializer): id = serpy.IntField() client_name = serpy.Field() client_first_name = serpy.Field() client_last_name = serpy.Field() client_address = serpy.Field() client_email = serpy.Field() client_phone_number = serpy.IntField()
class SubS(serpy.Serializer): w = serpy.IntField() x = serpy.MethodField() y = serpy.StrField() z = serpy.IntField() def get_x(self, obj): return obj.x + 10
class SerpyProductSerializer(serpy.Serializer): seller = serpy.StrField() category = serpy.StrField() title = serpy.StrField() price = serpy.FloatField() image = serpy.StrField() description = serpy.StrField() quantity = serpy.IntField() views = serpy.IntField()
class ContainmentSerializer(ModelSerializer): """Serializer for source containments.""" phrase = serpy.Field() page_number = serpy.IntField() end_page_number = serpy.IntField() container = SourceSerializer() def get_model(self, instance) -> str: # noqa """Return the model name of the instance.""" return 'sources.sourcecontainment'
class FlatCommentSerializer(serpy.DictSerializer): id = serpy.IntField() parent_id = serpy.IntField(required=False) content_type_id = serpy.IntField() object_id = serpy.IntField() created_at_str = serpy.StrField() content = serpy.StrField() level = serpy.IntField() author = serpy.MethodField() def get_author(self, obj): return FlatCommentAuthorSerializer(obj).data
class ImageSerializer(SearchableModelSerializer): """Serializer for images.""" src_url = serpy.StrField() width = serpy.IntField() height = serpy.IntField() caption_html = serpy.Field() provider_string = serpy.Field() bg_img_position = serpy.Field() def get_model(self, instance) -> str: # noqa """Return the model name of the instance.""" return 'images.image'
class SubAdministrativeRegionField(serpy.DictSerializer): id = jsonschema.Field(schema_type=str) insee = jsonschema.Field(schema_type=str) name = jsonschema.Field(schema_type=str, attr="label") label = jsonschema.Field(schema_type=str) level = serpy.IntField() coord = jsonschema.MethodField() zip_code = jsonschema.MethodField() def get_coord(self, obj): lat = value_by_path(obj, 'coord.lat') lon = value_by_path(obj, 'coord.lon') res = {'lat': None, 'lon': None} if lon and lat: res.update({'lat': str(lat), 'lon': str(lon)}) return res def get_zip_code(self, obj): zip_codes = obj.get('zip_codes', []) if all(zip_code == "" for zip_code in zip_codes): return None elif len(zip_codes) == 1: return zip_codes[0] else: return '{}-{}'.format(min(zip_codes), max(zip_codes))
class BiosampleArtifactSerializer(ArtifactSerializer): central_sample_id = serpy.StrField() sample_type_collected = serpy.StrField() sample_type_received = serpy.StrField(attr="sample_type_current") swab_site = serpy.StrField(attr="sample_site") # metadata # Collection stuff def serialize_collection_collection_date(self, biosample): if biosample.created and biosample.created.collection_date: return biosample.created.collection_date.isoformat() def serialize_collection_received_date(self, biosample): if biosample.created and biosample.created.received_date: return biosample.created.received_date.isoformat() def translate_adm1(self, biosample): value = biosample.created.collection_location_adm1 countries = { "UK-ENG": "England", "UK-WLS": "Wales", "UK-SCT": "Scotland", "UK-NIR": "Northern_Ireland", } if value in countries: return countries[value] return value collection_date = serpy.MethodField('serialize_collection_collection_date') received_date = serpy.MethodField('serialize_collection_received_date') submission_user = serpy.StrField(attr='created.submission_user.username') submission_org = serpy.StrField(attr='created.submission_org.name') submission_org_code = serpy.StrField(attr='created.submission_org.code') submission_org_lab_or_name = serpy.MethodField('serialize_org_lab_or_name') source_sex = serpy.StrField(attr="created.source_sex", required=False) source_age = serpy.IntField(attr="created.source_age", required=False) collected_by = None adm0 = serpy.StrField(attr="created.collection_location_country") adm1 = serpy.StrField(attr="created.collection_location_adm1") adm1_trans = serpy.MethodField('translate_adm1') adm2 = serpy.StrField(attr="created.collection_location_adm2") adm2_private = None supplement_coguk = serpy.MethodField('serialize_coguk_supp') def serialize_org_lab_or_name(self, collection): if collection.created.submission_org.gisaid_lab_name: return collection.created.submission_org.gisaid_lab_name else: return collection.created.submission_org.name def serialize_coguk_supp(self, biosample): if hasattr(biosample.created, "coguk_supp"): return COGUK_BiosourceSamplingProcessSupplementSerializer( biosample.created.coguk_supp).data
class AlbumDateListWithPhotoHashSerializer(serpy.Serializer): # photos = PhotoSuperSimpleSerializer(many=True, call=True, attr='ordered_photos') photos = PhotoSuperSimpleSerializer( many=True, call=True, attr='photos.all') location = serpy.Field() id = serpy.IntField() date = DateTimeField()
class VehicleSalesSerializer(serpy.Serializer): seller_id = serpy.IntField() seller_type = serpy.Field() buyer_id = serpy.IntField() buyer_type = serpy.Field() car_class = serpy.Field() vin = serpy.Field() price = serpy.FloatField() created_at = serpy.Field() id = serpy.IntField() car_class = serpy.MethodField() def get_car_class(self, obj): serialized = CarClassSerializer(obj.car_class) return serialized.data
class SimpleProfileSerializer(serpy.Serializer): id = serpy.IntField() avatar = serpy.MethodField('get_avatar') display = serpy.StrField() def get_avatar(self, obj): return obj.avatar.url if obj.avatar else None
class Serializer(db.Model.Serializer): uuid = serpy.StrField() title = serpy.StrField() short_description = serpy.StrField() duration_in_weeks = serpy.IntField() goals = Goal.Serializer(many=True)
class BaseModelSerializer(serpy.Serializer): id = serpy.IntField(label='id') created_by = UserSerializer(label='createdBy') created_on = serpy_fields.DateTimeField(label='createdOn') last_modified_by = UserSerializer(label='lastModifiedBy') last_modified_on = serpy_fields.DateTimeField(label='lastModifiedOn') deleted_by = UserSerializer(label='deletedBy', required=False) deleted_on = serpy_fields.DateTimeField(label='deletedOn', required=False) is_deleted = serpy.BoolField(label='isDeleted') created_by_id = serpy.MethodField('get_created_by_id', label='createdById') last_modified_by_id = serpy.MethodField('get_last_modified_by_id', label='lastModifiedById') deleted_by_id = serpy.MethodField('get_deleted_by_id', label='deletedById', required=False) def get_created_by_id(self, instance): return getattr(instance, 'created_by_id') def get_last_modified_by_id(self, instance): return getattr(instance, 'last_modified_by_id') def get_deleted_by_id(self, instance): return getattr(instance, 'deleted_by_id')
class CardSerializerNoPending(serpy.Serializer): id = serpy.IntField() user = NestedUserDetail() card_template = NestedTemplate() value = serpy.Field() position = serpy.Field() created = serpy.Field() updated = serpy.Field()
class TimeCardsSerializer(serpy.Serializer): id = serpy.IntField() entry_date = CustomDateField() time_in = CustomTimeField() time_out = CustomTimeField() break_time = CustomTimeField() total_time = CustomTimeField() pay = serpy.FloatField()
class CardTemplateSerializer(serpy.Serializer): id = serpy.IntField() name = serpy.Field() title = serpy.Field() description = serpy.Field() card_type = serpy.Field() entity_type = serpy.Field() image = serpy.Field()
class BatchSerializer(serpy.Serializer): id = serpy.Field() location = LocationSerializer() start_datetime = serpy.Field() completed_datetime = serpy.Field() start_timestamp = serpy.IntField() completed_timestamp = serpy.IntField() time_taken = serpy.IntField() total_bots = serpy.IntField() external_ip = serpy.StrField() status = serpy.StrField() video_list_size = serpy.IntField() server_hostname = serpy.StrField() server_container = serpy.StrField() synced = serpy.BoolField() processed = serpy.BoolField()
class NestedPendingAction(serpy.Serializer): id = serpy.IntField() is_complete = serpy.Field() entity_type = serpy.Field() message = serpy.Field() alert_type = serpy.Field() created = serpy.Field() updated = serpy.Field()
class AddressSerializer(serpy.Serializer): """The serializer schema definition.""" # Use a Field subclass like IntField if you need more validation. id = serpy.IntField() country = serpy.Field() continent = serpy.Field() region = serpy.Field() district = serpy.Field() ward = serpy.Field() village = serpy.Field() population = serpy.Field()
class AnimalCaseSerializer(serpy.Serializer): case_count = serpy.IntField() disease = serpy.MethodField() district = serpy.StrField() village = serpy.StrField() morbidity_rate = serpy.FloatField() mortality_rate = serpy.FloatField() fatality_rate = serpy.FloatField() def get_disease(self, obj): return {'name': obj.disease.name, 'urgent': obj.disease.urgent}
class AuthTokenSerializer(serpy.Serializer): id = serpy.IntField(attr='id', required=True) token = serpy.StrField(attr='token', required=True) user = UserSerializer() created_at = serpy.StrField(attr='created_at', required=False) expiration_date = serpy.StrField(attr='expiration_date', required=False)
def get_serpy_type(model_field_type): model_serpy_map = { models.AutoField: serpy.IntField(required=False), models.BigIntegerField: serpy.IntField(required=False), models.BooleanField: serpy.BoolField(required=False), models.CharField: serpy.StrField(required=False), models.CommaSeparatedIntegerField: serpy.StrField(required=False), models.DateField: serpy.StrField(required=False), models.DateTimeField: serpy.StrField(required=False), models.DecimalField: serpy.FloatField(required=False), models.EmailField: serpy.StrField(required=False), models.Field: serpy.StrField(required=False), models.FileField: serpy.StrField(required=False), models.FloatField: serpy.FloatField(required=False), models.ImageField: serpy.StrField(required=False), models.IntegerField: serpy.IntField(required=False), models.NullBooleanField: serpy.StrField(required=False), models.PositiveIntegerField: serpy.IntField(required=False), models.PositiveSmallIntegerField: serpy.IntField(required=False), models.SlugField: serpy.StrField(required=False), models.SmallIntegerField: serpy.IntField(required=False), models.TextField: serpy.StrField(required=False), models.TimeField: serpy.StrField(required=False), models.URLField: serpy.StrField(required=False), models.GenericIPAddressField: serpy.StrField(required=False), models.FilePathField: serpy.StrField(required=False), models.ForeignKey: ForeignKeyField(), models.fields.reverse_related.ManyToOneRel: ForeignKeyField(), models.OneToOneField: ForeignKeyField(), models.fields.related.ManyToManyField: ForeignKeyField(), JSONField: serpy.StrField(required=False), } return model_serpy_map[model_field_type]
class APISerializer(BaseSerializer): name = serpy.StrField() is_default = serpy.BoolField() uri = serpy.StrField() description = serpy.StrField(required=False) token_lifetime = serpy.IntField(required=False) token_lifetime_web = serpy.IntField(required=False) signing_secret = serpy.MethodField() #tenant_id = serpy.StrField() class Meta: read_protected_fields = ('signing_secret',) write_protected_fields = ('id','created_at','updated_at',) def get_signing_secret(self,obj): if obj.get("is_default") is False: key = jwk.JWK.generate(kty = 'oct',size = 256) return json.loads(key.export()).get("k") else: #this api will use application's secret key return None
class CardSerializerPending(serpy.Serializer): id = serpy.IntField() card_template = NestedTemplate() user = NestedUserDetail() value = serpy.Field() pending_actions = serpy.MethodField() position = serpy.Field() created = serpy.Field() updated = serpy.Field() def get_pending_actions(self, obj): return [{ "is_complete": jj.is_complete, "message": jj.message, "alert_type": jj.alert_type.name, "created": jj.created.strftime("%Y-%m-%dT%H:%M:%S"), "updated": jj.updated.strftime("%Y-%m-%dT%H:%M:%S") } for jj in obj.pending_actions.all()]