class ContentTypeSerializer(BaseSerializer): name = serpy.StrField() is_first_party = serpy.BoolField() client_type = serpy.StrField() auth_call_back_urls = serpy.StrField(required=False) web_origins = serpy.StrField(required=False) client_secret = serpy.MethodField() client_id = serpy.StrField(required=False) description = serpy.StrField(required=False) organization_id = serpy.StrField() #tenant_id = serpy.StrField() is_confidential = serpy.BoolField(required=False) class Meta: read_protected_fields = ('client_secret', ) write_protected_fields = ( 'client_id', 'id', 'is_confidential', 'created_at', 'updated_at', ) def get_client_secret(self, obj): client_type = obj.get("client_type") if client_type == 'spa': return None key = jwk.JWK.generate(kty='oct', size=256) return json.loads(key.export()).get("k")
class DelegateSerializer(serpy.Serializer): id = IntegerField() name = StringField() address = StringField() created = DateTimeField() updated = DateTimeField() proposal = StringField() website = StringField() approval = FloatField() rank = IntegerField() rank_changed = IntegerField() forged = IntegerField() voters = IntegerField() total_nodes_count = IntegerField() backup_nodes_count = IntegerField() contributions_count = IntegerField() voting_power = StringField() voters_zero_balance = IntegerField() voters_not_zero_balance = IntegerField() is_private = serpy.BoolField() payout_covering_fee = serpy.BoolField() payout_percent = FloatField() payout_interval = IntegerField() payout_minimum = StringField() payout_maximum = StringField() payout_minimum_vote_amount = StringField() payout_maximum_vote_amount = StringField()
class UserSerializer(BaseSerializer): organization_id = serpy.StrField( required=False ) #when given , we assume we are adding another organization member. email = serpy.StrField(required=False) phone_number = serpy.StrField(required=False) first_name = serpy.StrField(required=False) last_name = serpy.StrField(required=False) email_is_confirmed = serpy.BoolField(required=False) phone_number_is_confirmed = serpy.BoolField(required=False) is_active = serpy.BoolField(required=False) is_staff = serpy.BoolField(required=False) is_super_user = serpy.BoolField(required=False) full_name = serpy.MethodField() def get_full_name(self, obj): return "%s %s" % (obj.get("first_name"), obj.get("last_name")) class Meta: read_protected_fields = ('password', ) write_protected_fields = ('full_name', )
class PhotoSuperSimpleSerializerWithAddedOn(serpy.Serializer): image_hash = serpy.StrField() favorited = serpy.BoolField() public = serpy.BoolField() hidden = serpy.BoolField() exif_timestamp = DateTimeField() added_on = DateTimeField()
class SharedPhotoSuperSimpleSerializer(serpy.Serializer): image_hash = serpy.StrField() favorited = serpy.BoolField() public = serpy.BoolField() hidden = serpy.BoolField() exif_timestamp = DateTimeField() owner = SimpleUserSerializer() shared_to = SimpleUserSerializer( many=True, call=True, attr='shared_to.all')
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 TenantSerializer(BaseSerializer): name = serpy.StrField() is_super_tenant = serpy.BoolField() application_id = serpy.StrField() host_name = serpy.StrField() business_mode = serpy.StrField() #B2B or B2C
class QuoteSerializer(SearchableModelSerializer): """Serializer for quotes.""" text = serpy.Field(attr='text.html', required=True) bite = serpy.MethodField() html = serpy.Field() truncated_html = serpy.MethodField() attributee_string = serpy.Field() has_multiple_attributees = serpy.BoolField() attributee_html = serpy.Field() date_html = serpy.Field() serialized_images = serpy.Field() primary_image = serpy.Field() serialized_citations = serpy.Field() def get_model(self, instance) -> str: # noqa """Return the model name of the instance.""" return 'quotes.quote' def get_bite(self, instance: 'Quote') -> str: """Return the user-facing bite HTML.""" # "bite" is set to truncated text if it does not exist # TODO: Add "truncated" field to model to distinguish true bites from auto bites return (instance.bite.html if instance.bite else truncatechars_html( instance.text, 100)) def get_truncated_html(self, instance: 'Quote') -> str: """Return truncated HTML content""" if instance.bite is not None: return truncatechars_html(instance.bite, 100) else: return truncatechars_html(instance.text, 100)
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 SearchableModelSerializer(ModelSerializer): """Base serializer for searchable models.""" slug = serpy.StrField() tags_html = serpy.StrField() absolute_url = serpy.StrField() admin_url = serpy.StrField() verified = serpy.BoolField()
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 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 UserSerializer(BaseSerializer): organization_id = serpy.StrField( required=False ) #when given , we assume we are adding another organization member. email = serpy.StrField(required=False) phone_number = serpy.StrField(required=False) first_name = serpy.StrField(required=False) last_name = serpy.StrField(required=False) email_is_confirmed = serpy.BoolField(required=False) phone_number_is_confirmed = serpy.BoolField(required=False) is_active = serpy.BoolField(required=False) is_staff = serpy.BoolField(required=False) is_super_user = serpy.BoolField(required=False) class Meta: read_protected_fields = ('password', ) write_protected_fields = ()
class CourseSerializer(serpy.Serializer): registrar_id = serpy.StrField() title = serpy.StrField() deptnum = serpy.StrField() rating = serpy.FloatField() # evals = serpy.Field() # removed to avoid serializing description = serpy.StrField() assgts = serpy.StrField() grading = serpy.StrField() prereqs = serpy.StrField() otherinfo = serpy.StrField() otherreq = serpy.StrField() professors = serpy.StrField() area = serpy.StrField() pages = serpy.IntField() pdfable = serpy.BoolField() pdfonly = serpy.BoolField() auditable = serpy.BoolField() pdfaudit = serpy.StrField() meetings = MeetingSerializer(many=True, attr="meetings.all", call=True)
class ApplicationSerializer(BaseSerializer): name = serpy.StrField() is_multitenant = serpy.BoolField() signing_secret = serpy.MethodField() class Meta: read_protected_fields = ('signing_secret', ) write_protected_fields = ( 'id', 'created_at', 'updated_at', ) def get_signing_secret(self, obj): key = jwk.JWK.generate(kty='oct', size=256) return json.loads(key.export()).get("k")
class COGUK_BiosourceSamplingProcessSupplementSerializer(serpy.Serializer): is_surveillance = serpy.BoolField(required=False) is_hcw = serpy.BoolField(required=False) employing_hospital_name = serpy.StrField(required=False) employing_hospital_trust_or_board = serpy.StrField(required=False) is_hospital_patient = serpy.BoolField(required=False) is_icu_patient = serpy.BoolField(required=False) admission_date = serpy.MethodField('serialize_admission_date') admitted_hospital_name = serpy.StrField(required=False) admitted_hospital_trust_or_board = serpy.StrField(required=False) is_care_home_worker = serpy.BoolField(required=False) is_care_home_resident = serpy.BoolField(required=False) anonymised_care_home_code = serpy.StrField(required=False) admitted_with_covid_diagnosis = serpy.BoolField(required=False) def serialize_admission_date(self, supp): if supp.admission_date: return supp.admission_date.isoformat()
class UserSerializer(serpy.Serializer): """Serializer for users.""" id = serpy.Field() username = serpy.Field() avatar = serpy.MethodField('get_avatar') name = serpy.Field() email = serpy.Field() is_superuser = serpy.BoolField() # 'is_active', # 'date_joined', # 'last_login', def get_avatar(self, instance: 'User'): """Return the entity's death date, serialized.""" try: return instance.avatar.url if instance.avatar else None except Exception as err: logging.error(f'{err}') return None
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 MeetingSerializer(serpy.Serializer): start_time = MeetingTimeField() end_time = MeetingTimeField() days = serpy.StrField() section = serpy.StrField() is_primary = serpy.BoolField()
class PhotoSuperSimpleSerializer(serpy.Serializer): image_hash = serpy.StrField() favorited = serpy.BoolField() hidden = serpy.BoolField() exif_timestamp = DateTimeField()
class NodeSerializer(serpy.Serializer): network = StringField() cpu = StringField() memory = StringField() is_dedicated = serpy.BoolField() is_backup = serpy.BoolField()
class DelegateInfo(serpy.DictSerializer): id = IntegerField() name = StringField() slug = StringField() address = StringField() public_key = StringField() created = DateTimeField() updated = DateTimeField() website = StringField() proposal = StringField() is_private = serpy.BoolField() payout_covering_fee = serpy.BoolField() payout_percent = FloatField() payout_interval = IntegerField() payout_minimum = StringField() payout_maximum = StringField() payout_minimum_vote_amount = StringField() payout_maximum_vote_amount = StringField() user_id = IntegerField() approval = FloatField() rank = IntegerField() rank_changed = IntegerField() forged = IntegerField() voters = IntegerField() voting_power = StringField() total_nodes_count = IntegerField() backup_nodes_count = IntegerField() contributions_count = IntegerField() voters_zero_balance = IntegerField() voters_not_zero_balance = IntegerField() @classmethod def from_slug(cls, slug, *args, **kwargs): total_node_count_query = Count("nodes", filter=Q(nodes__is_active=True), distinct=True) backup_node_count_query = Count( "nodes", filter=Q(nodes__is_active=True, nodes__is_backup=True), distinct=True ) contributions_count_query = Count("contributions", distinct=True) delegate = ( Delegate.objects.annotate(total_nodes_count=total_node_count_query) .annotate(backup_nodes_count=backup_node_count_query) .annotate(contributions_count=contributions_count_query) .get(slug=slug) ) data = { "id": delegate.id, "name": delegate.name, "slug": delegate.slug, "address": delegate.address, "public_key": delegate.public_key, "created": delegate.created, "updated": delegate.updated, "website": delegate.website, "proposal": delegate.proposal, "is_private": delegate.is_private, "payout_covering_fee": delegate.payout_covering_fee, "payout_percent": delegate.payout_percent, "payout_interval": delegate.payout_interval, "payout_minimum": delegate.payout_minimum, "payout_maximum": delegate.payout_maximum, "payout_minimum_vote_amount": delegate.payout_minimum_vote_amount, "payout_maximum_vote_amount": delegate.payout_maximum_vote_amount, "user_id": delegate.user_id, "total_nodes_count": delegate.total_nodes_count, "backup_nodes_count": delegate.backup_nodes_count, "contributions_count": delegate.contributions_count, "approval": None, "rank": None, "rank_changed": None, "forged": None, "voters": None, "voting_power": None, "voters_zero_balance": None, "voters_not_zero_balance": None, } history = delegate.histories.order_by("-created").first() if history: data["approval"] = history.approval data["rank"] = history.rank data["rank_changed"] = history.rank_changed data["forged"] = history.forged data["voters"] = history.voters data["voting_power"] = history.voting_power data["voters_zero_balance"] = history.payload.get("voters_zero_balance") data["voters_not_zero_balance"] = history.payload.get("voters_not_zero_balance") return DelegateInfo(data)
class TaskSerializer(serpy.Serializer): id = serpy.IntField() description = serpy.Field() created_at = serpy.Field() finished_at = serpy.Field() is_finished = serpy.BoolField()
class EmailProviderSerializer(BaseSerializer): name = serpy.StrField() activated = serpy.BoolField() default_from_address = serpy.StrField() credentials = DictField()
class EmailTemplateSerializer(BaseSerializer): name = serpy.StrField() activated = serpy.BoolField() body = serpy.StrField(required=False) subject = serpy.StrField(required=False)
class ProductSerializer(serpy.Serializer): id = serpy.IntField() product_name = serpy.Field() product_created_by = UserSerializer() product_created_date = serpy.Field() is_active = serpy.BoolField()
class PAGSerializer(serpy.Serializer): id = serpy.StrField() published_name = serpy.StrField() published_version = serpy.IntField() published_date = serpy.MethodField('serialize_published_date') artifacts = serpy.MethodField('serialize_tagged_artifacts') #accessions = PAGAccessionSerializer(attr='accessions.all', many=True, call=True) accessions = serpy.MethodField('serialize_accessions') qc_reports = QCGroupSerializer(attr='quality_groups.all', many=True, call=True) owner = serpy.StrField(attr='owner.username') owner_org_code = serpy.StrField(attr='owner.profile.institute.code') owner_org_name = serpy.StrField(attr='owner.profile.institute.name') owner_org_gisaid_opted = serpy.BoolField( attr='owner.profile.institute.gisaid_opted') owner_org_gisaid_user = serpy.StrField( attr='owner.profile.institute.gisaid_user') owner_org_gisaid_mail = serpy.StrField( attr='owner.profile.institute.gisaid_mail') owner_org_gisaid_lab_name = serpy.MethodField( 'serialize_owner_org_gisaid_lab_name') owner_org_gisaid_lab_addr = serpy.MethodField( 'serialize_owner_org_gisaid_lab_addr') owner_org_gisaid_lab_list = serpy.MethodField( 'serialize_owner_org_gisaid_lab_list') owner_org_ena_opted = serpy.BoolField( attr='owner.profile.institute.ena_opted') owner_org_lab_or_name = serpy.MethodField( 'serialize_owner_org_lab_or_name') def serialize_owner_org_gisaid_lab_name(self, pag): a = pag.tagged_artifacts.values_list('id', flat=True) try: credit_code = models.MajoraMetaRecord.objects.get( artifact__id__in=a, meta_tag='majora', meta_name='credit').value name = models.InstituteCredit.objects.get( institute=pag.owner.profile.institute, credit_code=credit_code.upper()).lab_name except: name = pag.owner.profile.institute.gisaid_lab_name return name def serialize_owner_org_gisaid_lab_addr(self, pag): a = pag.tagged_artifacts.values_list('id', flat=True) try: credit_code = models.MajoraMetaRecord.objects.get( artifact__id__in=a, meta_tag='majora', meta_name='credit').value addr = models.InstituteCredit.objects.get( institute=pag.owner.profile.institute, credit_code=credit_code.upper()).lab_addr except: addr = pag.owner.profile.institute.gisaid_lab_addr return addr def serialize_owner_org_gisaid_lab_list(self, pag): a = pag.tagged_artifacts.values_list('id', flat=True) l = None try: credit_code = models.MajoraMetaRecord.objects.get( artifact__id__in=a, meta_tag='majora', meta_name='credit').value l = models.InstituteCredit.objects.get( institute=pag.owner.profile.institute, credit_code=credit_code.upper()).lab_list except: l = pag.owner.profile.institute.gisaid_list if l: return l.replace('\t', ' ').replace('\r', '').replace('\n', ',').replace( ",,", ',').replace(' ,', ',') # sigh return "" def serialize_owner_org_lab_or_name(self, pag): if pag.owner.profile.institute.gisaid_lab_name: return pag.owner.profile.institute.gisaid_lab_name else: return pag.owner.profile.institute.name def serialize_tagged_artifacts(self, pag): a = {} for artifact in pag.tagged_artifacts.all(): if artifact.artifact_kind not in a: a[artifact.artifact_kind] = [] s = artifact.get_serializer() a[artifact.artifact_kind].append(s(artifact).data) return a def serialize_accessions(self, pag): a = {} for accession in pag.accessions.all(): a[accession.service] = PAGAccessionSerializer(accession).data return a def serialize_published_date(self, pag): return pag.published_date.isoformat()